리서치 10

[SpringBoot] Springdoc Swagger 적용

서론현재 진행 중인 프로젝트에 Spring Rest Docs를 적용하려 했으나, 팀원들이 각 API마다 테스트 코드를 작성하는 데 부담을 느끼는 것 같아 우선 Swagger를 적용하기로 했습니다.프로젝트에는 Spring Security가 적용되어 있고, 멀티 테넌시를 위해 커스텀 헤더를 전달해야 했기 때문에 Swagger 적용이 쉽지 않았습니다.비슷한 환경에 계신 분들께 도움이 되길 바라며, 부족하지만 Springdoc Swagger 적용기를 공유합니다. 개발 환경SpringBoot 2.6.3java 1.8springdoc-openapi-ui 1.6.11 빨리 SpringBoot 3.2.X 버전 + JDK 21로 넘어가서 Virtual Thread 다루어 보고 싶다.... Springfox vs Spri..

리서치 2024.05.28

[SpringBoot] JPA 쿼리 성능 감시 가이드

개요팀 내 JPA 쿼리 성능 감시 가이드를 작성하는 업무를 맡은 김에 간단하게 다음 항목을 정리해 보겠습니다.JPA slow 쿼리 검출JPA N + 1 문제가 의심되는 api 검출 JPA N + 1 문제가 의심되는 api의 경우 범고래님 블로그를 많이 참고했습니다! 감사합니다. 프로젝트 환경SpringBoot 2.6.3Java 1.8 Jpa slow 쿼리 검출application.yml에 다음과 같이 설정을 하면 Hibernate에서 slow query를 로깅해 줍니다.  테스트 삼아 100ms를 기준으로 잡았고 그 결과 실행시간이 205ms인 SELECT 쿼리가 아래와 같이 로깅되었습니다.  오래 걸린 쿼리를 로깅하는 것 자체는 좋았지만 구현한 JpaRepository가 워낙 많다 보니 검출된 쿼리들이..

리서치 2024.03.12

[SpringBoot] yml 파일로 메세지 다국어 처리

개요진행 중인 프로젝트에 다국어 처리를 추가해야 하는데, 공식 문서에서 제시한 properties 파일 대신 yml 파일을 사용하고 싶었고, 조사 결과 이를 가능하게 하는 라이브러리가 존재했습니다.https://github.com/akkinoc/yaml-resource-bundle?tab=readme-ov-file GitHub - akkinoc/yaml-resource-bundle: Java ResourceBundle for YAML format.Java ResourceBundle for YAML format. Contribute to akkinoc/yaml-resource-bundle development by creating an account on GitHub.github.com 이 게시글에서는 스..

리서치 2024.02.14

[Springboot] Jpa 프로젝트에 jOOQ 도입

jOOQ를 도입하게 된 배경 현재 진행하고 있는 프로젝트의 기술스택 중 이번 게시글과 연관된 기술들과 버전은 아래와 같습니다. Springboot 2.6.3 Java 1.8 spring-boot-starter-data-jpa (기본 키 생성 전략: IDENTITY) MariaDB 10.9.2 버전 QueryDSL 5.0.0 버전 Maven 프로젝트 내 기능 중 대용량 엑셀 업로드 기능과 json import 기능이 있는데 데이터가 커질수록 병목현상이 심해지는 것을 발견할 수 있었습니다. (json import의 경우 멀티 쓰레드 방식으로 과장님이 어느 정도 해결하시긴 하셨습니다.) 대용량으로 업로드할 때 entity를 하나하나 저장할 경우 불필요한 DB 커넥션이 많이 생기므로 1000개씩 묶어서 bulk..

리서치 2023.10.03

[Springboot] 멀티 데이터소스 (MyBatis, JPA)

개요 최근 회사 업무를 하며 멀티 테넌시 아키텍처를 적용한 서비스를 개발했습니다. 요구사항은 아래와 같았습니다. 사용자 로그인 정보를 토대로 해당 tenant에 매핑된 데이터베이스와 연동 런타임에 테넌트 추가 가능 즉, 재기동 없이 동적으로 사용자와 사용자가 매핑된 데이터소스를 추가 가능 테넌트를 추가할 때 데이터베이스 및 테이블 자동 생성 클라우드 시장이 성장함에 따라 멀티 테넌시를 지원하는 XaaS가 늘어날 것으로 판단되기 때문에 해당 내용을 다루고 싶었고 생각보다 코드 레벨까지 설명해 주는 글이 별로 없었기 때문에 개인적으로 정리해 보겠습니다. 멀티 테넌시 아키텍처 중 멀티 데이터소스를 집중적으로 다룰 예정이고 기타 예외처리 및 인증/인가 설정은 주제에 벗어나기 때문에 생략하도록 하겠습니다. (구현..

리서치 2023.03.25

[MSA] CQRS 패턴과 실제 적용 사례

개요 이전 게시글 https://jaimemin.tistory.com/2200에 이어서 이번 게시글에서도 인상 깊게 본 MSA 관련 유튜브 영상을 요약/정리해보겠습니다. [MSA] 우아콘 2020 배달의민족 마이크로서비스 여행기 정리 개요 MSA 관련 리서치를 맡게 돼서 공부하는 도중 김영한 강사님이 발표해주신 우아콘 2020 영상을 인상 깊게 봐서 간단하게 요약/정리했습니다. 인프런 강의를 시청할 때도 느꼈지만 김영한 강사 jaimemin.tistory.com 이번에 내용 정리할 영상은 이벤트 소싱 아키텍처 중 CQRS 패턴에 관련된 영상이고 기존 게시글과 마찬가지로 배달의민족 우아콘 영상을 요약 및 정리했습니다. (우형에는 훌륭한 개발자들이 진짜 많네요.. 넷카라쿠배당토 인정합니다.) 아래의 내용이 ..

리서치 2022.10.31

[MSA] 11번가 Spring Cloud 기반 MSA로의 전환 정리

개요 이전 게시글 https://jaimemin.tistory.com/2200에 이어서 이번 게시글에서도 인상 깊게 본 MSA 관련 유튜브 영상을 요약/정리해보겠습니다. [MSA] 우아콘 2020 배달의민족 마이크로서비스 여행기 정리 개요 MSA 관련 리서치를 맡게 돼서 공부하는 도중 김영한 강사님이 발표해주신 우아콘 2020 영상을 인상 깊게 봐서 간단하게 요약/정리했습니다. 인프런 강의를 시청할 때도 느꼈지만 김영한 강사 jaimemin.tistory.com 이번 영상은 Naver D2에서 올려준 [11번가 Spring Cloud 기반 MSA로의 전환]이고 기존의 거대 Monolithic 한 프로젝트를 2017년부터 MSA 기반으로 마이그레이셔하면서 알게 된 기술적 내용과 현재 어떻게 시스템을 어떻게..

리서치 2022.10.29

[MSA] 우아콘 2020 배달의민족 마이크로서비스 여행기 정리

개요 MSA 관련 리서치를 맡게 돼서 공부하는 도중 김영한 강사님이 발표해주신 우아콘 2020 영상을 인상 깊게 봐서 간단하게 요약/정리했습니다. 인프런 강의를 시청할 때도 느꼈지만 김영한 강사님은 어려운 개념을 친절하면서 이해하기 쉽게 설명하시는 능력을 소유하신 것 같습니다. MSA에 관심 있으신 분들은 풀 영상 시청 추천드립니다. https://www.youtube.com/watch?v=BnS6343GTkY&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech [우아콘 2020] 배달의민족 마이크로서비스 여행기 1. 마이크로 서비스 전환 전 2015년 하루 주문 수 5만 이하 MS SQL + PHP, ASP 대부분 루비 DB(MSSQL) stored procedure 방식 사용..

리서치 2022.10.27

[tus protocol] 재개 가능한 파일 업로드를 위한 오픈 프로토콜

개요 개발 진행 중인 프로젝트에서 대용량 파일 업로드 기능을 구현해야 하는데 요구사항은 아래와 같았습니다. 대용량 파일을 브라우저에서 서버로 한 번에 업로드할 경우 OOM(Out of Memory Exception)이 발생할 수 있으므로 파일을 청크 단위로 끊어서 업로드할 수 있어야 함 업로드하는 도중 네트워크 오류 혹은 휴먼 에러로 인해 업로드 요청이 끊기더라도 재요청 시 이어서 업로드할 수 있어야 함 (Resumable) 찾아본 결과 위에서 언급한 두 가지 요구사항을 충족하는 라이브러리가 있었고(tus-js-client, tus-java-client) 이 둘은 모두 tus protocol을 기반으로 구현이 되어 있었습니다. 따라서, 저는 이번 프로젝트에서 해당 라이브러리들을 적용하기로 했고 이번 게시..

리서치 2022.10.06

[SpringBoot + Fastexcel] 대용량 엑셀 생성 및 다운로드

개요 여태까지 엑셀 생성 및 다운로드 기능을 구현할 때 Apache Poi 라이브러리를 사용했었고 이와 관련하여 게시글을 여러 번 남겼습니다. https://jaimemin.tistory.com/2069 [SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기 개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운.. jaimemin.tistory.com Apache Poi 라이브러리가 보편적으로 사용됨에 따라 레퍼런스도 많고 주기적인 버전업이 이루어졌기 때문에 지금까지 해당 라이브러리를 사용해왔..

리서치 2022.09.14