April 20, 2024
들어가며 프로젝트를 진행하면서 동적 쿼리를 작성할 일이 많아 QueryDSL을 도입하면서 발생했던 NullPointerException 오류를 해결하면서 배웠던 내용을 정리하고자 작성하게 되었다. 도메인 구조 하나의 피드 본문(FeedContent) 정보에 대해서 하나의 프로젝트(Project)가 생성될 수 있고, 하나의 프로젝트에 대해서 여러 개의 …
April 15, 2024
들어가며 이번 프로젝트에서 E2E 테스트 환경을 구축하기 위해서 @SpringBootTest를 통해 테스트 코드를 작성하고 있는데, 아래와 같은 오류를 만나게 되었다. failed to lazily initialize a collection of role: sidepair.domain.feed.FeedContent.nodes.values: could n…
April 10, 2024
들어가며 톰캣 성능테스트를 하기 위해 특정 API에 대하여 한 번에 많은 요청을 보냈고, 평소에 잘 동작하던 API가 OutOfMemoryError를 던지면서 모든 요청에 대해 실패하였다. 이 문제를 해결하기 위해 어떤 과정을 거쳤는지 자세히 살펴보자 문제 상황 톰캣 성능테스트를 하기 위해 Jmeter를 사용하였고, 1초에 500번의 피드 목록 조회 요청…
March 21, 2024
들어가며 이번 프로젝트 CI 플로우 과정 중에서 Jacoco를 활용하여 테스트 리포트를 발행하고, 커버리지를 체크하고 있다. CI에 대한 글은 다음에 완전하게 구축된 이후에 작성하는 게 좋을 것 같아서, 오늘은 Jacoco에 대해서만 가볍게 짚고 넘어가고자 한다. Jacoco 설정하기 Jacoco는, 테스트 코드 커버리지를 분석해주는 자바의 무료 라이브러…
March 20, 2024
들어가며 지금은 솔로 프로젝트이지만 다른 프로젝트를 잔행할 때 프론트 팀원과 협업하게 될 경우 필요할것 같았고, 과거 Swagger를 구축해본 경험이 있기도 해서 개인으로 욕심으로 한 번 직접 구축해보고 싶다는 생각이 들어 프로젝트 하는김에 함께 진행하게 되었다. Rest-docs는? Spring Rest Docs는 Restful 서비스에 대해 정확하고 …
March 16, 2024
Spring에서 Redis Cache 도입 캐시 전략을 선택했으니 이제 프로젝트에 진행할 차례이다. Redis는 다양한 언어를 지원하고 여러 프레임워크에서 Redis를 위한 추상화가 잘 되어있어서 도입하기 굉장히 편하다. 이번 프로젝트는 Spring boot 3.1 버젼 Java 17 버젼이로 이루어져 있으니 이 기준인 점 참고 바란다. Redis 설정 …
March 15, 2024
들어가며 프로젝트에 캐싱을 통해서 성능 개선을 하면서 Redis를 사용한 경험을 기록하고자 이 글을 쓰게 되었다. 캐싱에 레디스를 선택한 이유 높은 성능 : Redis는 기본적으로 전체 데이터를 메모리에서 관리한다. 데이터 백업 같은 작업은 디스크에 저장하긴 하지만 이는 비동기로 작동하기 때문에 응답 성능에는 거의 영향을 미치지 않는다. 그에 반해 RDB…
March 08, 2024
들어가며 이번 프로젝트를 진행하며 Event를 활용하여 요구사항을 해결한 적이 있다. 그 과정을 기록하고자 이 글을 쓰게 되었다. 요구사항 피드를 생성하는 로직이 있다. 이 피드는 각 단계가 있고, 각 단계에 사진 파일이 여러개 저장될 수 있다. 이 로직은 간단해보이지만 다음과 같은 문제점이 있다. I/O가 실패하여 사진이 없어도 피드 생성 자체는 되어…
March 07, 2024
들어가며 프로젝트를 진행하며 쉽지 않은 요구사항을 기술적으로 해결한 사례에 대해서 기록하고자 이 글을 쓰게 되었다. 요구사항 피드를 생성하는 API를 만들어야하는데 다음과 같은 특이한 요구사항이 있다. 요구사항을 정리하면 다음과 같다. 피드는 여러개의 단계를 가질 수 있다. 단계의 수는 가변적이다. 각 단계는 0~2개의 사진 파일을 가질 수 있다. 즉,…
December 06, 2023
들어가며 이번 프로젝트를 진행하면서 토큰을 이용한 인증/인가에서 jwt를 사용하게 되었다. 그 과정에서 알게된 jwt의 특성과 경험을 기록하기 위해 이 글을 쓰게 되었다. JWT란? JWT는 JSON Web Token의 줄임말로, 두 개체(ex -> 서버와 서버) 사이에 정보를 안전하게 전송하기 위한 토큰 인증 방법이다. 이는 RFC 7519에 정의 되어…