왜 이벤트가 안 먹히지? @TransactionalEventListener가 무시되는 이유와 해결법
@TransactionalEventListener는 트랜잭션이 존재해야만 작동한다. @TransactionalEventListener(phase = AFTER_COMMIT)와 같이 설정하면, 현재 트랜잭션이 정상적으로 커밋될 때만 이벤트 리스너가 실행된다. 트랜잭션이 없으면 실행되지 않는다. 그래서, 이런 케이스는 고려해야 할까요? 1...
@TransactionalEventListener는 트랜잭션이 존재해야만 작동한다. @TransactionalEventListener(phase = AFTER_COMMIT)와 같이 설정하면, 현재 트랜잭션이 정상적으로 커밋될 때만 이벤트 리스너가 실행된다. 트랜잭션이 없으면 실행되지 않는다. 그래서, 이런 케이스는 고려해야 할까요? 1...
Today I Learned 오늘은 국립중앙도서관에 방문해보았다. 동네의 도서관에 비해서는 확실히 규모가 컸다. 간만에 대학도서관의 느낌이 살짝 떠올랐다. 대학도서관의 매캐하고 습한 오래된 책 냄새, 낡은 책상, 책에 남겨진 선배들의 공부흔적 같은것들이 그립기도 하다. Today I Interview HTTP/1.1과 HTTP/2.0에 대해서 설...
이력서 기반 면접 예상 질문/답변 이력서 내용 중 일부 📜 주요 프로젝트 경험 콘텐츠 플랫폼 전면 개편 및 운영 효율화 대규모 레거시 시스템의 API 구조를 DTO 중심 정적 타입 기반으로 재설계하고, 유효성 검증 계층을 도입하여 시스템 안정성과 감사 추적 가능성을 확보함. 시퀀스 기반 키 생성 병목 문제를 해결하기...
💡 Spring Boot 3.2 + Java 21 연계 활용 예시 1. ✅ Virtual Threads + Spring Boot 3.2 Java 21의 가상 스레드(Virtual Thread) 와 Spring Boot 3.2는 기본적으로 호환됩니다. 📌 주요 효과 기존 @RestController 기반 서블릿 API (Tomcat) 도...
Java 21 주요 기능 정리 1. Virtual Threads (가상 스레드) JEP 444: Virtual Threads (Finalized) 수천, 수만 개의 경량 스레드를 생성할 수 있는 기능 기존 Thread API 그대로 사용 가능 (Thread.ofVirtual().start(() -> ...)) I...
Today I Learned 오늘은 원하는 회사에 최종적으로 이력서 제출을 완료하였다. 거기에서 근무하는 전직장 동료가 이력서를 아주 상세히 피드백 해주었는데, 우선은 이전에 피드백해준 내용이 잘 반영된 것 같다고 했다. 문제는 이 이력서를 바탕으로 하는 면접 질문을 잘 답변할 수 있어야 한다는 것이다. 그래서 나의 이력서에 적힌 내용을 바탕으로 C...
Today I Learned 토스 채용공고(Server Developer, Product) 토스 소속 | 정규직 📢 경력직 채용공고입니다. 경력이 없다면 올 여름 NEXT Developer 전형으로 지원해주세요. 토스의 조직 구조를 알려드려요 토스의 Server Developer는 Product, Platform, Prod...
Java String 클래스의 변천사 (Java 1 ~ Java 21) Java에서 String 클래스는 자바 언어의 핵심 중 하나로, 수많은 개선이 이루어졌다. 특히 Java 9 이후부터는 성능과 메모리 최적화를 위해 내부 구조가 크게 바뀌었고, Java 21까지 계속해서 진화해왔다. 이 글에서는 Java 1부터 21까지의 String 클래스의 ...
Integer.toString(3) vs String.valueOf(3) vs “” + 3 자바에서 int를 문자열로 변환하는 방법은 여러가지가 있는데, 각 방식에 따라 차이점이 존재한다. Integer.toString(3), String.valueOf(3), 그리고 "" + 3는 모두 int를 문자열로 바꾸는 방법이지만, 미묘한 성능 차이와 내부 ...
Today I Learned MySQL Streaming 서버 쪽에서 처리할 데이터가 얼마인지에 관계 없이 조건에 일치 하는 레코드가 검색될 때마다 바로 바로 클라이언트로 전송해주는 방식을 의미한다. 이 방식으로 쿼리를 처리할 경우 클라이언트는 쿼리를 요청하고 곧바로 원했던 첫 번째 레코드를 전달받는다. 물론 가장 마지막 레코드는 언제 받을지...