데이터를 다루는 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..
🤷♂️ 문제상황리스트 조회시에 API 응답시간이 4초가량 소요되는것이 확인되었다. 페이지를 넘길때마다 4초가 걸린다는 점이 꽤 타격이 컸다.개발시에 테스트 데이터 몇백개정도로 확인했을때는 알아차리기 힘들었는데, 운영데이터는 20만건 이상이 사용되다보니 이러한 현상이 발생했다. 나의 경우에 파악되는 문제상황은 다음과 같다. 1. 데이터가 너무 많음 => 이건 사실상 해결할 수 없는 문제다.2. Join하는 테이블이 너무 많음3. 페이지네이션 구현을 위해 total갯수를 확인하는 로직이 따로 분리되어있음 (동일쿼리를 2번 조회하게된다.) SELECT count(*) FROM 테이블1 SELECT * FROM 테이블1 Join 테이블2 ON 테이블2.두번째Idx =..
프로젝트 구조 설계 프로젝트 구성에 관해서는 개인적인 분석으로, 크게 두가지로 분류된다. 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는 ..