Elasticsearch 성능 개선 비교와 사용방법 In SpringBoot
·
SpringBoot
저번에 작성했던 글에서 Elasticsearch에 대해서 학습하였으며 이번엔 현재 진행중인 팀프로젝트에 적용하여 어떠한 방식으로 사용했고 실제 성능개선은 어떤 식으로 되었는지 작성을 해보려 합니다. 도입하게 된 배경- INDEX만을 사용해 데이터 조회 성능 개선을 할 수 없는 부분에 대한 개선 (Like 문법을 포함한 조회)- 유사 실서비스의 기능을 생각했을 때, 가장 많이 이루어지는 기능은 조회이며, 그에 따른 처리속도 개선을 Elasticsearch 사용을 통해 더욱 개선할 수 있습니다.우선 사용방법에 대해서 작성하기 전, 그래서 실제로 성능이 좋아졌는지에 대해서 먼저 말씀드리려 합니다. 우선 네트워크 속도 및 제 개인 맥북으로 테스트를 하는 것이기 때문에 성능개선에 대해서 오차는 좀 있으며 데이터 ..
@Enumerated VS @Converter VS 테이블 분리
·
카테고리 없음
이번 팀 프로젝트에서 DB설계, ERD 작성, GIT 초기 전략 등등.. 초기에 필요한 부분들을 담당해서 만들었습니다. 그러한 설계 과정에서 했던 고민과 어떻게 해결해나갔는지, 선택이유와 차이점 등에 관해서 글을 작성해보겠습니다. 우선 필수적으로 존재할 테이블은 아래와 같습니다 - User- Task- Log- Comment Task 테이블에는 priority("LOW", "MEDIUM", "HIGH"), status("TODO", "IN_PROGRESS", "DONE")이 존재합니다. 저 값들만이 존재하는 요구사항이 있습니다. 이런 경우에는 몇가지 방법이 있을 것 같습니다. 분리를 하는 것이 좋은 방법일까요? 정규화를 하기 위해 분리를 하다보면 Task, PRIORITY, STATUS와 같은 테이블을 ..
N+1 문제 파헤치기
·
카테고리 없음
N+1 문제 해결방법1. N+1 문제란 무엇인가?SpringBoot / Jpa를 이용해서 개발을 하다보면 N+1 문제 라는 것은 널리 알려져있습니다.저 또한 들어봤고 개념을 알고 있지만 명확한 해결방법과 개인 토이 프로젝트에서 테스트 및 해결을 해보기 위해 글을 작성합니다.N+1 문제란 연관관계가 있는 엔티티를 조회할 때 조회하는 개수 N개만큼 추가로 쿼리가 의도치 않게 발생하는 것을 의미합니다. 현재 저의 DB의 테이블 일부 구조입니다. board 테이블이 존재하고 board_like, board_view 테이블에서 식별자를 참조하고 있습니다.물론 단방향으로 연관관계를 이루어도 되지만 저는 board를 조회할 때 조회수, 좋아요수를 한번에 응답 객체로 반환하고 싶기에 양방향으로 JPA 는 구성이 되어있..
SpringBoot 과제회고 (Scheduler)
·
카테고리 없음
이번 부트캠프 과제를 진행하며 느꼈던 부분과, 어떤식으로 패키지를 만들었고, 어떤 부분을 집중해서 신경써서 개발했는지, 개발하며 들었던 피드백을 바탕으로 어떤점을 고쳤는지 회고해보려합니다. 1. 기술 스택## 🖥 사용 기술 - 🛠 **java 17** - 🛠 **springboot 3.4** - 🛠 **lombok 1.18** - 🛠 **mysql connector 8** - 🛠 **jdbc** 예전에 회사에서 잠깐 JDBC 유지보수 한다고 만졌던 기억이 나는데 요구사항이 JDBC를 사용하는 것이기 때문에 찾아보면서 사용했습니다. 나머지는 개발할 때 주로 쓰는 스택들입니다. 2. ERD (굉장히 심플한..) 3. API 명세서바탕은 이런 식이고 내부에서 신경써서 개발했던 부분은 최대한 기능..
Spring 예외처리 (@ExceptionHandler, @ControllerAdvice)
·
SpringBoot
Springboot를 공부해나가고 부트캠프에서 예외처리 관련 과제를 받아 진행을 하다보니 throw를 통한 예외처리가 아닌 직접 커스텀하여 중복되는 코드를 줄여나갈 수 있는 방법을 기록하려 합니다.이 글을 Spring 공식 페이지를 기반으로 작성하였습니다.(하단에 나와있는 코드는 Spring 공식 홈페이지의 코드입니다.) 가장 처음 작성해볼 방법은 예외 클래스나 컨트롤러 메서드에 HTTP 상태 코드를 명시적으로 지정할 수 있도록 해주는 어노테이션 @ResponseStatus를 통해서 예외처리를 하는 방법입니다. 1. @ResponseStatus@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order") // 404 public class Or..