본문 바로가기

Back-End12

[MYSQL] 리스트 조회 쿼리개선 - 요청속도를 4분의 1로 줄인 건에 대하여.. 🤷‍♂️ 문제상황리스트 조회시에 API 응답시간이 4초가량 소요되는것이 확인되었다. 페이지를 넘길때마다 4초가 걸린다는 점이 꽤 타격이 컸다.개발시에 테스트 데이터 몇백개정도로 확인했을때는 알아차리기 힘들었는데, 운영데이터는 20만건 이상이 사용되다보니 이러한 현상이 발생했다. 나의 경우에 파악되는 문제상황은 다음과 같다. 1. 데이터가 너무 많음 => 이건 사실상 해결할 수 없는 문제다.2. Join하는 테이블이 너무 많음3. 페이지네이션 구현을 위해 total갯수를 확인하는 로직이 따로 분리되어있음 (동일쿼리를 2번 조회하게된다.)💁‍♀️1트) JOIN 순서 변경프로젝트 특성상 Join 테이블이 7,8개 정도로 굉장히 많았는데, 모두 조회에 필요한 데이터다보니 직접적으로 Join을 건드리기는 어려.. 2024. 10. 17.
Spring 프로젝트 시작하기 - 구조설계 및 테스트편 프로젝트 구성에 관해서는 개인적인 분석으로, 크게 두가지로 분류된다. 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는 한 폴더에서 관리하고.. 2024. 9. 25.
Spring 프로젝트 시작하기 - 생성편 회사에서 새로운 프로젝트를 맡아서 진행하게 되었다.하지만 프로젝트 구축은 언제나 새롭다.. 구글검색을 전전하다가 Spring에서 자주쓰게될 옵션이나 범용 프로젝트에서 쓰일만한 구성을 다루어보려고 한다. 참고로 JDK 설치 및 환경변수 설정, intellj 설치는 되어있는 상태이다.차후 비극적으로 PC가 포맷되는 일이 생긴다면 다시 다루어보겠다. IDE : IntellijJDK : 17관리tool : mavenSpring Boot 프로젝트 생성   Group은 통상적으로 사용할 도메인을 역순으로 입력한다.대분류->중분류->소분류로 구분짓기 위함이다.구글 메일을 예로 들면, https://mail.google.com 에서 사용할 API의 Group을 com.google로, Name을 mail로 입력한다.둘을.. 2024. 9. 24.
DTO 내부 Validation @ApiOperation({ summary: '테스트 코드' }) @ApiBody({ type: ParentDTO }) @UsePipes(new ValidationPipe({ transform: true })) TestController( @Body() payload: ParentDTO, ) { // 이런저런 코드 } Controller에서 Request Body를 Body 데코레이터로 받으면 받은 값이 해당 타입에 적합한지 자동으로 유효성 검사를 해준다. 🤷‍♂️ 문제상황 class ChildDTO { @Expose() @IsOptional() @IsNumber() @ApiProperty() child_id: number @Expose() @IsString() @ApiProperty() child_na.. 2023. 8. 15.