
1. 현재 상황 분석최근 프로젝트를 테스트하던 중 동화 생성 기능에서 문제가 발견되었습니다. 동화 생성 도중 문제가 발생해 데이터베이스에서는 롤백에 되었지만, S3에 업로드된 이미지(표지 및 페이지 이미지)는 그대로 남아 불필요한 데이터가 쌓이는 불일치 문제가 발생했습니다. 이번 글에서는 S3와 DB의 데이터 불일치에 관한 문제에 대해 해결해보도록 하겠습니다. 2. 코드 분석 처음 기능을 구현할 때 이미지 생성 - S3 업로드 - 트랜잭션 커밋 순으로 롤백될 확률을 줄이도록 개발을 했으나, 동화 생성에 관련된 다른 코드들이 추가되면서 트랜잭션의 크기가 점차 커졌고, S3에 업로드되는 파일도 늘어나게 되었습니다. 이렇게 트랜잭션의 크기가 커질수록 롤백될 경우의 수도 많아지고, 관리되지 못한 S3 ..

1. 현재 상황 분석회원가입 시 본인 인증 메일을 위해 인증코드를 이메일로 발송하는 기능을 구현을 해놓은 상태입니다. 현재 이메일 발송 기능은 동기 방식으로 이메일 서비스 제공자(구글 Mail)의 SMTP 서버를 사용해 이메일을 발송하고 있습니다. 프로젝트 공통 기능으로 설계하여, 여러 서비스에서 재사용할 수 있도록 MailService를 만들어 제공합니다. MailService.sendEmail() 호출 시, Gmail의 SMTP 서버를 통해 이메일이 발송되는 구조입니다. 예를 들어, 사용자가 인증 코드를 요청하면, 아래와 같이 MailService를 통해 메일을 발송하는 방식으로 구현됩니다. 2. 재시도 로직 추가Gmail SMTP 서버와 같은 외부 서비스를 사용할 경우, 다양한 이유로 예외가 발..

문제 상황동화들 중 즐겨찾기한 동화를 조회했을 때 발생한 문제입니다. 쿼리를 확인해보면2024-09-06T17:22:14.628+09:00 DEBUG 7032 --- [storyteller] [nio-8080-exec-1] org.hibernate.SQL : select pe1_0.id, pe1_0.birthDate, pe1_0.imageUrl, pe1_0.name, pe1_0.pinNumber, pe1_0.user_id from ProfileEntity pe1_0 where pe1_0.id=? 2024-09-06T17:22:14...
문제 상황유저 정보를 업데이트하는 API를 확인해 보자.이 API는 @PatchMapping을 활용해 특정 칼럼(birth, intro, nickname, profileImage)만 업데이트하는 경우이지만실제 UPDATE 쿼리를 확인하면 모든 컬럼에 대해 set이 들어가 있다..?2024-08-23T22:04:40.768+09:00 DEBUG 14232 --- [moongge] [nio-8080-exec-5] org.hibernate.SQL : /* */ select ue1_0.userId, ue1_0.badgeList, ue1_0.birth, ue1_0.fcmToken, ue1_0.group..

문제 상황사용자 회원가입하는 API 의 쿼리를 찍어보면 아래와 같이 Select 문장이 두 개 + Insert 문 하나가 찍히는 것을 확인할 수 있다. 2024-08-23T11:22:30.710+09:00 DEBUG 148 --- [moongge] [nio-8080-exec-2] org.hibernate.SQL : /* */ select ue1_0.userId from UserEntity ue1_0 where ue1_0.userId=? limit ?2024-08-23T11:22:41.611+09:00 DEBUG 148 --- [moongge] [nio-8080-exec-2] org.h..

최근 면접을 통해 Docker와 GitHub Actions를 활용한 자동 배포 경험이 있으면 좋다는 이야기를 듣게 되었다. 실제로 적용해보기 전에 도커가 무엇인지 그리고 왜 사용하는지에 대해 먼저 이해하고 나서 사용하는 것이 좋을 것 같아 적어보는 글이고, 실습보다는 이론적인 내용들로 정리해 볼 생각이다. 가상화 나오게 된 배경을 알아보자내가 만든 웹서비스를 실행하기 위해 서버로 쓸 컴퓨터를 하나 구했다고 가정해 보자. 웹서비스를 위해 필요한 Java, MySQL 등의 소프트웨어를 설치하고, 많은 사용자가 사용할 수 있도록 서버를 설정했습니다. 시간이 지나, 또 다른 웹서비스를 개발하게 되었고, 이 새로운 서비스도 같은 컴퓨터에 설치하고자 합니다. 그러나 여기서 문제가 발생합니다. 새 웹서비스는 최신 ..
- @Cacheable
- 영속성 컨텍스트
- @TransactionalEventListener
- @GeneratedValue
- Redis
- 조인 전략
- 엔티티 매니저
- 준영속
- 최적화
- onetoone
- 스키마 자동 생성
- mappedBy
- 메일
- @Entity
- 인메모리 db
- 즉시 로딩
- 단일 테이블 전략
- @Table
- 연관관계
- @ManyToOne
- @OneToMany
- 비동기
- 비영속
- @joincolumn
- 변경감지
- 1차 캐시
- N + 1
- JPA
- @MappedSuperclass
- @Id