분류 전체보기
-
추석을 맞아 인프런의 향로님께서 추석 완강 챌린지를 열어주셨습니다. 그래서 이참에 관심있었던 강의 하나를 완주해보기로 했습니다. 바로 메시지큐 라이브러리인 RabbitMQ입니다. 사실 예전에 AI 기반 일기 서비스인 '토닥' 에서 실시간 알림을 개발할 때 레빗엠큐 도입을 좀 고민했었는데요, 결국엔 안했습니다. 이유는1. 레디스 Pub/Sub으로 어느정도 알림 기능 구현이 커버 될 것 같았고2. 괜히 도입했다가는 견고하게 구현하지 못하고 오버엔지니어링이 될 것같았기 때문입니다. 어쨌든 이번에 산 강의는 코드빌런 님의RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기입니다.개요RabbitMQ는 메시지 전송 브로커 오픈소스로 시스템간에 비동기 메시징으로 서비스간 통신을 안정적으로 그리고 효율적으로 처리..
RabbitMQ 시작하기추석을 맞아 인프런의 향로님께서 추석 완강 챌린지를 열어주셨습니다. 그래서 이참에 관심있었던 강의 하나를 완주해보기로 했습니다. 바로 메시지큐 라이브러리인 RabbitMQ입니다. 사실 예전에 AI 기반 일기 서비스인 '토닥' 에서 실시간 알림을 개발할 때 레빗엠큐 도입을 좀 고민했었는데요, 결국엔 안했습니다. 이유는1. 레디스 Pub/Sub으로 어느정도 알림 기능 구현이 커버 될 것 같았고2. 괜히 도입했다가는 견고하게 구현하지 못하고 오버엔지니어링이 될 것같았기 때문입니다. 어쨌든 이번에 산 강의는 코드빌런 님의RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기입니다.개요RabbitMQ는 메시지 전송 브로커 오픈소스로 시스템간에 비동기 메시징으로 서비스간 통신을 안정적으로 그리고 효율적으로 처리..
2025.10.06 -
첫 사진부터 놀래켜드려서 죄송하구요 JPA에서 ID를 할당하는 방법이 여러가지가 있죠, 뭐 수동 할당, 자동 할당, IDENTITY, SEQUENCE, TABLE, AUTO 등이 있는데요 이거 잘 보지 않으면 진짜 헷갈립니다같이 한번 정리해보죠 스따뜨수동 할당수동 할당은 직접 ID를 채워 넣어주는 방식인데요, 한번 해보겠습니다@Entity@Getter@NoArgsConstructor@AllArgsConstructorpublic class Study { @Id private String id; private String name;} 이 엔티티를@Transactional@SpringBootTestpublic class StudyTest { @Autowired StudyReposit..
잘 보지 않으면 헷갈리는 ID 에 대한 고찰첫 사진부터 놀래켜드려서 죄송하구요 JPA에서 ID를 할당하는 방법이 여러가지가 있죠, 뭐 수동 할당, 자동 할당, IDENTITY, SEQUENCE, TABLE, AUTO 등이 있는데요 이거 잘 보지 않으면 진짜 헷갈립니다같이 한번 정리해보죠 스따뜨수동 할당수동 할당은 직접 ID를 채워 넣어주는 방식인데요, 한번 해보겠습니다@Entity@Getter@NoArgsConstructor@AllArgsConstructorpublic class Study { @Id private String id; private String name;} 이 엔티티를@Transactional@SpringBootTestpublic class StudyTest { @Autowired StudyReposit..
2025.08.15 -
안녕하세요 마구잡이로 다 처먹고 있는 요즘입니다 요즘 성능 개선에 꽂혀서 눈에 불을 켜고 그런 거만 찾고 있는데요 쿼리 튜닝만 주구장창하다가 이게 과연 효과가 있나 싶더라고요 그래서 반정규화를 적용해 봤습니다 스따뜨 저희 챗봇 서비스에는 마이페이지에 유저가 한 질문수를 보여줘야 하는 요구사항이 있습니다 원래는 쿼리를 최적화해서 마이페이지 요청이 들어올 때마다 질문수를 계산하곤 했는데요 이게 질문수가 많아지면 노답이 될것 같은 생각이 들었습니다GET http://localhost:8080/api/v1/members/meHTTP/1.1 200 Content-Type: application/jsonTransfer-Encoding: chunkedDate: Sat, 05 Jul 2025 04:29:49 GMT{ ..
계속 쿼리튜닝만 하다가 그냥 반정규화 적용해버리기안녕하세요 마구잡이로 다 처먹고 있는 요즘입니다 요즘 성능 개선에 꽂혀서 눈에 불을 켜고 그런 거만 찾고 있는데요 쿼리 튜닝만 주구장창하다가 이게 과연 효과가 있나 싶더라고요 그래서 반정규화를 적용해 봤습니다 스따뜨 저희 챗봇 서비스에는 마이페이지에 유저가 한 질문수를 보여줘야 하는 요구사항이 있습니다 원래는 쿼리를 최적화해서 마이페이지 요청이 들어올 때마다 질문수를 계산하곤 했는데요 이게 질문수가 많아지면 노답이 될것 같은 생각이 들었습니다GET http://localhost:8080/api/v1/members/meHTTP/1.1 200 Content-Type: application/jsonTransfer-Encoding: chunkedDate: Sat, 05 Jul 2025 04:29:49 GMT{ ..
2025.08.13 -
환장 듀오 N+1 문제와 동기 처리 콜라보 해결기 시작합니다스따뜨 저희 챗봇 서비스에는 마이페이지에 유저가 한 질문수를 보여줘야 하는 요구사항이 있습니다 근데 그때그때 쿼리를 날려주기보다는 그냥 반정규화로 질문 수를 보여주는 칼럼을 디비에 만들고 매일 배치 처리로 해당 칼럼을 갱신해 주기로 했습니다 근데 지난 시간에 반년 만에 다시 이해한 N+1 문제N+1 문제 해결 후기두 엔티티 간에 영속성 전이가 제대로 이루어지려면?현재 진행하고 있는 개인 프로젝트에서 다음과 같이 엔티티들의 연관관계가 설정되어 있다. Member -- (OneToMany) -- History -- (Ondockerel.tistory.com N+1 문제들을 발견 한 이후로 성능상 심각하다는 걸 깨닫고 성능 측정을 해봤습니다 결과는 ..
N+1 문제와 동기 처리의 환장 콜라보환장 듀오 N+1 문제와 동기 처리 콜라보 해결기 시작합니다스따뜨 저희 챗봇 서비스에는 마이페이지에 유저가 한 질문수를 보여줘야 하는 요구사항이 있습니다 근데 그때그때 쿼리를 날려주기보다는 그냥 반정규화로 질문 수를 보여주는 칼럼을 디비에 만들고 매일 배치 처리로 해당 칼럼을 갱신해 주기로 했습니다 근데 지난 시간에 반년 만에 다시 이해한 N+1 문제N+1 문제 해결 후기두 엔티티 간에 영속성 전이가 제대로 이루어지려면?현재 진행하고 있는 개인 프로젝트에서 다음과 같이 엔티티들의 연관관계가 설정되어 있다. Member -- (OneToMany) -- History -- (Ondockerel.tistory.com N+1 문제들을 발견 한 이후로 성능상 심각하다는 걸 깨닫고 성능 측정을 해봤습니다 결과는 ..
2025.08.09 -
N+1 문제 해결 후기두 엔티티 간에 영속성 전이가 제대로 이루어지려면?현재 진행하고 있는 개인 프로젝트에서 다음과 같이 엔티티들의 연관관계가 설정되어 있다. Member -- (OneToMany) -- History -- (OneToMany) -- Question dockerel.tistory.com 정확하게 반년 전에 N+1 문제를 맞닥뜨렸습니다이때 당황한 기억이 아니 그 당황했다기보다는 그 유명한 N+1 문제를 직접 겪었단 사실에 가슴이 두근두근 했던 기억이 나네요 반년이 지난 지금 저는 N+1 문제에 대해 얼마나 더 자세히 알게 됐을지 알아보겠습니다스따뜨 우선 N+1 문제의 정의는 그거죠JPA에서 연관 관계가 설정된 엔티티를 조회할 경우, 조회된 데이터 개수 N만큼 연관관계의 조회 쿼리가 추가로 ..
반년 만에 다시 이해한 N+1 문제N+1 문제 해결 후기두 엔티티 간에 영속성 전이가 제대로 이루어지려면?현재 진행하고 있는 개인 프로젝트에서 다음과 같이 엔티티들의 연관관계가 설정되어 있다. Member -- (OneToMany) -- History -- (OneToMany) -- Question dockerel.tistory.com 정확하게 반년 전에 N+1 문제를 맞닥뜨렸습니다이때 당황한 기억이 아니 그 당황했다기보다는 그 유명한 N+1 문제를 직접 겪었단 사실에 가슴이 두근두근 했던 기억이 나네요 반년이 지난 지금 저는 N+1 문제에 대해 얼마나 더 자세히 알게 됐을지 알아보겠습니다스따뜨 우선 N+1 문제의 정의는 그거죠JPA에서 연관 관계가 설정된 엔티티를 조회할 경우, 조회된 데이터 개수 N만큼 연관관계의 조회 쿼리가 추가로 ..
2025.08.06 -
안녕하세요 문제는 그렇게 시작된 건 아니고 그냥 엔티티의 상태에 한번 정리해보려고 합니다 렛츠고 일단 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해줍니다 그리고 엔티티 매니저는 이 영속성 컨텍스트를 관리하는 작업을 도와주는 역할로, 영속성 컨텍스트와 상호작용함으로서 영속 로직을 수행하는 역할을 가지고 있습니다 엔티티 매니저에 의해 관리되는 엔티티는 영속성 컨테이너에 대해 세 가지 상태를 갖습니다 비영속엔티티 객체가 새로 생성되었지만 아직 영속성 컨텍스트와 연관되지 않은 상태입니다 public void create(String id, String name) { Study study = new Study(id, nam..
엔티티가 비영속이었다가 영속됐다가 준영속됐다가 다시 영속됐다가 ...더보기안녕하세요 문제는 그렇게 시작된 건 아니고 그냥 엔티티의 상태에 한번 정리해보려고 합니다 렛츠고 일단 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 1차 캐싱, 쓰기 지연, 변경 감지를 통해 영속 로직을 효율적으로 할 수 있게 해줍니다 그리고 엔티티 매니저는 이 영속성 컨텍스트를 관리하는 작업을 도와주는 역할로, 영속성 컨텍스트와 상호작용함으로서 영속 로직을 수행하는 역할을 가지고 있습니다 엔티티 매니저에 의해 관리되는 엔티티는 영속성 컨테이너에 대해 세 가지 상태를 갖습니다 비영속엔티티 객체가 새로 생성되었지만 아직 영속성 컨텍스트와 연관되지 않은 상태입니다 public void create(String id, String name) { Study study = new Study(id, nam..
2025.08.05