리서치 12

[MSA] CQRS 패턴

개요이전 게시글에서 MSA의 단점 중 하나로 거론한 `데이터 일관성 및 트랜잭션 처리 어려움`을 해결하기 위해 도입된 SAGA 패턴에 대해 간단히 정리했습니다.https://jaimemin.tistory.com/2619 [MSA] SAGA 패턴개요MSA (Microservices Architecture)는 하나의 커다란 애플리케이션 (Monolithic Architecture)를 독립적으로 배포되고 운영될 수 있는 작은 서비스들로 분리해 개발 운영하는 소프트웨어 아키텍처 스타일입jaimemin.tistory.com CQRS (Command Query Responsibility Segregation) 패턴은 읽기 (조회)와 쓰기 (명령)의 책임을 명확하게 분리하는 아키텍처 패턴으로 단일 모델이 모든 역할을..

리서치 2025.02.08

[MSA] SAGA 패턴

개요MSA (Microservices Architecture)는 하나의 커다란 애플리케이션 (Monolithic Architecture)를 독립적으로 배포되고 운영될 수 있는 작은 서비스들로 분리해 개발 운영하는 소프트웨어 아키텍처 스타일입니다.MSA의 장점을 정리하면 다음과 같습니다.독립적 배포: 각 마이크로서비스는 자체적인 코드, 데이터베이스 등을 갖추고 있어서, 다른 서비스와 격리된 상태에서 수정 및 재배포 가능확장성: 트래픽이나 부하가 특정 서비스에서만 집중될 경우, 해당 서비스만 확장할 수 있어 자원을 효율적으로 사용 가능유연성: 서비스별로 독립적인 기술 스택(프로그래밍 언어, DB 등)을 선택해 적용할 수 있어, 새로운 기술을 쉽게 도입 가능장애 격리: 어느 한 서비스에 문제가 생겨도 전체 시..

리서치 2025.02.01

[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