Please enable JavaScript to use this site.
JavaScript를 활성화 시켜주세요.
Seongwon.dev
Seongwon.dev
Written by
@Seongwon
기술공유를 통해 새로운 가치 창조을 추구하는 백엔드 개발자 오성원입니다.
#Spring-MVC
Categories List ▼
Book
DevOps
Database
ETC
Git
Java
Kotlin
MSA
Spring-MVC
Spring-WebFlux
Woowacourse
Categories
Book
DevOps
Database
ETC
Git
Java
Kotlin
MSA
Spring-MVC
Spring-WebFlux
Woowacourse
ALL
SpringFramework
JPA
synchronized
비관적락
Pessimistic Lock
낙관적락
Optimistic Lock
Redis
분산락
Reddisson
AOP
성능 개선기
Event
TransactionalEventListener
Async
성능 테스트
JMeter
모니터링
Prometheus
Grafana
CUD 쿼리 개선
orphanRemoval의 문제
OneToMany 단방향 관계의 문제
조회 쿼리 개선
fetch join
DTO반환
의존관계 개선
EventListener
Spring Data JPA
Warning Message
FetchJoin
Limit
Query Method
JPQL
페치조인
영속성 전이
CADCADE
orphanRemoval
Proxy
Lazy Loading
Eager Loading
Entity
Profile
Specification
동적 쿼리
Criteria
영속성 컨텍스트
ArgumentResolver
Spring Boot
Interceptor
Filter
Framework
Test
MockMvc
SpringBootTest
Java
Validation API
JSR 380
Valid
Spring MVC
Controller
RestController
Lombok
Servlet
Dispatcher Servlet
Front Controller
Web
Autowired
Constructor Injection
Setter Injection
Field Injection
Bean
@RequestParam
@RequestBody
@ModelAndAttribute
DI
IoC
warning
PostMapping
GetMapping
모두모여라 팀의 동시성 문제 해결 과정 (feat. Redis, 분산락, AOP)
2023년 05월 28일
SpringFramework
JPA
synchronized
비관적락
Pessimistic Lock
낙관적락
Optimistic Lock
Redis
분산락
Reddisson
AOP
이번 게시글은 모임 플랫폼인 모두모여라 프로젝트를 진행하며 동시성 문제를 해결한 과정에 대해 정리한 게시글입니다. 단일 서버에서 간단하게 해결한 방법으로부터 최종적으로 분산락을 적용한 과정까지 전 과정을 정리하였습니다. (앞의 과정은 간단히 설명하고 최종 적용한 분산락에 대해 자세히 설명하려 합니다.) 모두모여라 서비스의 모임 참여 기능은 모임 별로 주최…
비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)
2023년 04월 30일
SpringFramework
JPA
비관적락
Pessimistic Lock
낙관적락
Optimistic Lock
서비스를 개발하고 운영하다보면 동시성 문제는 피할 수 없는 문제이다. 많은 사용자들이 동시에 서비스를 사용해서 발생하는 문제를 생각하면 트랜잭션의 격리 수준을 생각할 수 있다. 하지만 격리수준은 각 사용자가 트랜잭션을 사용하는 동안 일관된 데이터 읽게 해주도록 지원하며 동시성으로 인해 발생하는 데이터 손실에 대해서는 관여하지 않는다. 실제로 격리수준에 대…
모모팀 서비스 성능 개선기4 (비동기 처리를 통한 장애 전파 제거)
2022년 12월 18일
SpringFramework
성능 개선기
Event
TransactionalEventListener
Async
기존의 동기 처리 이벤트 기존 모모팀의 불필요한 찜하기 데이터의 삭제 로직은 모임이 삭제되었을 때, 또는 회원이 탈퇴하였을 때 연관된 찜하기 데이터가 삭제되도록 이벤트 기반으로 구현되어있었다. 바로 코드를 살펴보겠다. 기존 코드는 일반적인 @EventListener와 함께 비동기 처리를 하지 않아 동기로 작동하고 있었다. 그리하여 Participant와 …
모모팀 서비스 성능 개선 결과 (성능 테스트)
2022년 10월 20일
SpringFramework
성능 개선기
성능 테스트
JMeter
모니터링
Prometheus
Grafana
1. 들어가며 모모팀 서비스의 기능 개발을 1차적으로 마무리한 후, 의존관계와 성능 개선을 진행하게 되었다. 이번 포스트에서는 3차례에 걸친 서비스 성능 개선 작업 전/후로 성능이 얼마나 향상되었는지 비교해보려한다. 앞서 진행한 의존관계 개선과 쿼리 개선 과정을 자세히 확인하고 싶다면 아래의 포스트를 확인하길 바란다. 모모팀 서비스 성능 개선기1 (의존관…
모모팀 서비스 성능 개선기3 (CUD 쿼리 개선)
2022년 10월 17일
SpringFramework
성능 개선기
CUD 쿼리 개선
orphanRemoval의 문제
OneToMany 단방향 관계의 문제
들어가며 모모팀 서비스 개선을 하며 지금까지 의존관계와 조회 쿼리 개선을 진행하였다. 이번 포스트에서는 지난 조회쿼리 개선에 이어서 남은 CUD관련 기능의 쿼리를 분석 및 개선하며 경험한 내용에 대해 정리를 해보려고 한다. 앞서 진행한 의존관계 개선과 조회 쿼리 개선 관련 내용을 확인하고 싶다면 아래의 포스트를 확인하길 바란다. 모모팀 서비스 성능 개선기…
모모팀 서비스 성능 개선기2 (조회 쿼리 개선)
2022년 10월 14일
SpringFramework
성능 개선기
조회 쿼리 개선
fetch join
DTO반환
들어가며 지금까지는 서비스 개발을 진행하며 API를 호출하였을 때 실행되는 쿼리의 수, 성능상의 문제점 등을 생각하지 않고 일단 돌아가는 코드를 만들자! 하면서 기능 개발에만 몰두하였었다. 하지만 성능상의 문제를 생각하지 않고 개발을 진행하고 우리 서비스의 목표 인원(우테코 크루 + 코치, 약 150명)이 동시 접속을 하여 서비스를 이용한다는 상황으로 부…
모모팀 서비스 성능 개선기1 (의존관계 개선)
2022년 10월 09일
SpringFramework
성능 개선기
의존관계 개선
Event
기존 객체 의존관계의 문제점 모모팀 프로젝트는 모임 관련 서비스인만큼 모임 찜하기, 모임 참여하기 등의 기능이 추가될 때마다 Group(모임)객체를 중심으로 개발이 진행되게 되었다. 처음에는 성능 생각 없이 주먹구구식으로 개발을 진행하다보니 Group객체에 기능이 하나씩 붙게 되며 Group이라는 객체가 점점 커지게 되었다. Group과 관계를 맺고 있는…
[Spring] Spring의 Event란 무엇일까?
2022년 10월 08일
SpringFramework
Event
EventListener
학습 계기 프로젝트를 진행하며 도메인간의 연관관계를 분리하는 작업을 진행하다보니 Spring의 Event방식에 대해 알게 되었다. 이번 포스트에서는 프로젝트에 Event를 사용하기 위해 학습한 내용에 대해 포스팅해보려 한다. 진행하였던 프로젝트의 연관관계 분리 작업에 대해 자세히 알고 싶다면 아래의 포스트를 보길 바란다. 모모팀 서비스 성능 개선기1 (의…
Fetch Join과 limit을 같이 사용하며 발생한 문제 - [WARN] firstResult/maxResults specified with collection fetch; applying in memory!
2022년 09월 30일
SpringFramework
JPA
Spring Data JPA
Warning Message
FetchJoin
Limit
학습 계기 모모팀 프로젝트를 진행하던중 애플리케이션 로그가 [WARN] firstResult/maxResults specified with collection fetch; applying in memory! 라는 한 가지 경고 로그가 도배된 것을 확인하였다. WARN레벨의 로그라 현재는 애플리케이션의 기능을 실행하는데에는 문제가 없으나 언제든지 성능상의 …
[JPA] Spring Data JPA의 Query Method
2022년 09월 13일
SpringFramework
JPA
Spring Data JPA
Query Method
1. Spring Data JPA에서 쿼리를 만드는 방법 이전 게시글에서 Spring Data JPA에 대해 알아보며 해당 모듈은 Data Access Layer의 구현을 최대한 개선하는 것을 목표로 만들어졌다고 하였다. 또한 Data JPA에서 제공하는 JpaRepository 에서는 CURD기능들과 페이징, 정렬 기능등의 DB와의 소통을 쉽게 할 수 …
다크 모드로 보기