지난시간엔 Jwt Token을 발급해보았다. 그렇다면 실제 API를 던졌을때 Token을 확인하고 실제 유저인지 판별해보는 로직을 만들어보겠다. CookieParser@Slf4jpublic class CookieParser { /** * 쿠키에서 특정 key값을 가진 value를 가져온다. * @param cookies 쿠키에 담긴 key,value 목록 * @param key key * @return value or exception */ public static String getCookieValue(Cookie[] cookies, String key) { try (Stream stream = Arrays.stream(cookies)) { return stream.filter(cooki..
데이터를 다루는 API를 누구나 어디에서나 자유롭게 호출해서 쓸수 있다면 보안적으로 큰 문제가 되시겠다. 이를 막을수 있는방법은 여러가지가 있는데 클라이언트의 서버를 제한하거나( CORS 정책 ), 진입 사용자를 판별( 세션, 쿠키 ) 하는 방법등이 있다. 이글에서 다루어볼 방법은 Jwt Token으로 암호화된 유저정보를 쿠키에 저장해서 API 진입시마다 확인하는 방법이다. 준비과정1. 유저 정보로 판별하려면 이미 유저데이터를 가지고있어야 한다. 고로 DB연결 및 유저정보는 테이블에 이미 들어있어야한다.참고 : https://debugggggger.tistory.com/30 Spring 프로젝트 시작하기 - DB 연결(JPA)프로젝트에 JPA로 Mysql DB를 연결해볼것이다.1. build.gradle..
API는 동작중 여러 오류사항을 마주할 수 있다.오류가 발생했을때 클라이언트쪽에서 에러를 판별하고 적절한 처리를 할 수 있도록 예외를 리턴해주어야한다. 우선 boot-starter-web가 없다면 의존성을 추가해준다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-web'} 1. Response 규정@JsonFormat(shape = JsonFormat.Shape.OBJECT)public enum ServerResponse { SUCCESS(HttpStatus.OK, "OK", HttpStatus.OK.getReasonPhrase()) , INVALID_TOKEN(HttpStatus.UNAUTHORIZED,..
개발을 하다보면 배포환경을 나누어야할 때가 있다.local - develop - qa - stage - prod등으로 나뉜다. local : 단일 개발서버, 본인의 PC에서 개발 및 테스트를 위한 단계이다. develop : 개발 단계서버, front, back-end, module등의 분업 프로젝트가 1차적으로 모이는 곳으로, 조율중 배포 싱크에 따라서 오류가 존재할 수도 있다. 물론 각자 오류를 방치하지 않고 인지 및 조치가 이루어져야 한다.qa :품질 보증 테스트서버, dev 서버에서 정상동작이 끝난 코드만 배포되어야한다. stage :실제 환경과 유사한 테스트서버. pord와 거의 동일한 환경에서 동일하게 동작될 수 있어야 한다.prod :실제 서비스 환경, 고객에게 실제로 제공되는 서버 나는 우..
프로젝트에 JPA로 Mysql DB를 연결해볼것이다. 1. build.gradle 파일에서 의존성을 추가한다.dependencies { ... // JPA implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // mysql implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.33' ...}의존성을 추가한 후에는 잊지않고 Gradle을 새로고침해주도록 하자. 2. yml 파일에서 DB 연결정보를 입력한다.spring: application: name: stock datasource: driver-class-name: com.mys..
프로젝트 구조 설계 프로젝트 구성에 관해서는 개인적인 분석으로, 크게 두가지로 분류된다. 1. 서비스를 대분류로 나누는 경우 ex) Member > Controller / Service ...개발하는 웹페이지가 대메뉴-소메뉴 이상의 규모일때 사용하기에 좋았다.예를들어서A- A.a- A.b- A.cB- B.a- B.b이런 메뉴구성을 가지는 경우는 A와 B의 파일이 섞이지 않도록 대분류로 나누는것이 좋다. 2. 클래스의 기능을 나누는 경우 ex) Controller / Service > Member ...개발하는 프로젝트의 규모가 작을때는 Controller / Service가 많지 않기때문에 한번에 관리하는 경우가 더 간편했다. 나같은 경우에는 극소규모의 프로젝트라서 Controller와 Service는 ..