일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- union-find
- DFS
- kruskal
- 알고리즘
- 구현
- BindingAdapter
- concurreny
- 누적 합
- 이분 탐색
- kapt
- 위상 정렬
- spring boot
- 백트래킹
- MST
- MySQL
- 분리 집합
- 위상정렬
- Meet in the middle
- springdoc
- DP
- SCC
- miller-rabin
- disjoint set
- 페르마 소정리
- BFS
- 그래프
- tarjan
- 투 포인터
- Java
- Linux
- Today
- Total
목록Spring (5)
기맹기 개발 블로그
이 글은 인프런 강의 재고시스템으로 알아보는 동시성이슈 해결방법 을 수강하고 정리한 내용입니다. 동시성 이슈 하나의 공유 자원에 동시에 여러 스레드가 쓰기 작업을 하는 상황에서는 Race condition이 발생할 수 있다. 간단한 재고 관리 시스템을 예시로 웹 애플리케이션에서의 동시성 이슈와 해결 방법들을 알아보자. @Service public class StockService { ... @Transactional public void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(sto..

기존 코드에서의 문제점 저는 springdoc을 이용해 Swagger로 API 문서를 제공하고 있었습니다. springdoc에서 컨트롤러의 API 메소드에 붙여서 자동으로 문서화를 지원하는 어노테이션은 @ApiResponse입니다. 이는 다음과 같이 구성된 인터페이스입니다. @Target({METHOD, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Repeatable(ApiResponses.class) public @interface ApiResponse { String description() default ""; String responseCode() default "default"; Header[] headers()..

캡스톤 프로젝트를 진행하면서 다음과 같은 다대다 관계를 나타내었다. 사용자와 스터디 그룹은 다대다 관계이므로, ERD에서 중간 테이블로 표현하였다. 그런데 JPA에서 구현하다보니 다음과 같은 기존 코드에서는 1+N 문제가 발생하였다. (N+1 문제라고 보통 불리는데, 나는 1+N이 더 직관적으로 표현한다고 생각해서 앞으로 1+N이라고 표시하고자 한다.) 사용자, 그룹 엔티티 역시 다대다 관계를 표현하기 위해서 User StudyGroup으로 일대다-다대일로 연결하였다. 정상적으로 조회 결과는 반환하지만, join으로 한 번의 쿼리를 받는 의도와는 다르게 1+N 번의 쿼리가 발생한다. 1+N 문제를 해결하기 위해서 fetch 조인을 해야하는데, 이를 위해 꼭 필요하지 않은 쿼리를 작성하는게 조금 꺼려졌다...

위와 같은 형식으로 AdviceDetailEntity의 필드로 List를 가지는 쿼리를 MyBatis에서 작성하였다. 그런데 이러한 오류가 발생하였다. Cause: java.lang.IndexOutOfBoundsException 처음에는 MyBatis가 잘못된줄 알고 열심히 찾아봤는데 문제는 AdviceDetailEntity에 있었다. 기존에는 위와 같이 롬복의 Getter, Setter, AllArgsConstructor만 존재했다. 하지만 MyBatis에서 resultMap으로 매핑하는 과정에서 comments 매개변수가 없는 상태로 객체를 생성하려고 하면서 생기는 오류였다. 이렇게 @NoArgsConstructor 어노테이션을 추가하여 오류를 해결할 수 있었다.

로컬의 인텔리제이에서 실행할 때는 문제가 없었는데, jar로 배포한 이후에 다음과 같은 오류가 발생하였다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'topicController': Unsatisfied dependency expressed through field 'topicService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'topicServiceImpl': Lookup method resolution failed; ..