spring 10

Spring 내부 이벤트와 Kafka 이벤트 처리, 무엇이 다를까?

상황결제 확정 이벤트가 발생했을 때 인기 메뉴 랭킹 업데이트와 데이터 수집 플랫폼 전송을 처리해야 했다. 이벤트 처리 방식으로 Spring 내부 이벤트와 Kafka 두 가지를 고려했다. 프로젝트 요구사항에는 다중 서버 환경에서 다수의 인스턴스로 동작하더라도 기능에 문제가 없어야 한다는 조건이 있었다.Spring 내부 이벤트란Spring이 제공하는 ApplicationEvent 기반의 이벤트 시스템이다. 같은 JVM 안에서 이벤트를 발행하고 리스너가 처리하는 구조로, 별도 인프라 없이 사용할 수 있다.장점은 구현이 단순하고 트랜잭션 참여가 가능하다는 것이다. 단점은 같은 JVM 안에서만 동작한다는 것이다.다중 서버 환경에서 Spring 내부 이벤트의 한계Spring 내부 이벤트는 이벤트를 발행한 인스턴스에..

[Spring Plus] JPA Cascade 옵션 지정하기

상황할 일을 새로 저장할 시, 할 일을 생성한 유저는 담당자로 자동 등록되어야 합니다.JPA의 cascade 기능을 활용해 할 일을 생성한 유저가 담당자로 등록될 수 있게 해주세요.해결 방법하나의 할일은 여러 담당자를 가진다(리스트 형태). 따라서 할일이 생성될 때 할일을 생성한 사용자는 managers라는 list에 add 되어야 한다. 할 일이 생성될 때만 유저를 담당자 리스트에 넣어주면 되므로, @OneToMany의 Cascade 옵션을 Cascade = Cascade.PERSIST로 지정해주자. 속성 값설명Cascade.ALL모든 변경(저장, 병합, 삭제, 재로딩)이 관련 엔티티에 적용됩니다. Cascade.DETACH엔티티가 detach 상태로 변경될 때, 관련 엔티티도 함께 변경됩니다. Ca..

[Spring Plus] AOP의 동작 흐름 제어하기

상황AOP가 잘못 동작하고 있어요!UserAdminController 클래스의 changeUserRole() 메소드가 실행 전 동작해야해요.AdminAccessLoggingAspect 클래스에 있는 AOP가 개발 의도에 맞도록 코드를 수정해주세요. 원인 분석1. AOP 기능을 구현하기 위한 의존성이 있는지 확인한다.없으면 추가해 준다. 2. AOP 어노테이션이 After로 설정되어 있어 changeUserRole 메서드가 UserController.getUser()이라는 JoinPoint의 실행 전이 아니라 실행 후 동작한다.해결 방법해당 Aspect의 @After 어노테이션을 @Before 어노테이션으로 바꿔준다. 잘 적용되었는지 확인해 보자.UserController.getUser() 메서드를 호출하..

[Spring Plus] 컨트롤러 테스트 성공시키기

상황테스트 패키지 org.example.expert.domain.todo.controller의 todo_단건_조회_시_todo가_존재하지_않아_예외가_발생한다() 테스트가 실패하고 있다. 원인 분석then 절에 Breaking Point를 다 찍어보자.MockMvc란 스프링 프레임워크에서 제공하는 웹 애플리케이션 테스트용 라이브러리를 의미한다. 웹 애플리케이션의 다양한 컴포넌트를 테스트하기 위해 사용한다.(출처: https://adjh54.tistory.com/347).andExpect(status().isOk()) 부분에서 에러가 터졌다. 테스트 코드에서는 200을 예상했지만 실제로는 400이 확인됐다. 존재하지 않는 데이터를 잘못 호출한 사용자발 에러이므로 400대 에러가 발생하는 게 정상인데, 이 ..

[Spring Plus] JPQL로 쿼리 옵션 추가하기

문제 요약 기획자의 긴급 요청이 왔어요! 아래의 요구사항에 맞춰 기획 요건에 대응할 수 있는 코드를 작성해주세요. 할 일 검색 시 weather 조건으로도 검색할 수 있어야해요.weather 조건은 있을 수도 있고, 없을 수도 있어요!할 일 검색 시 수정일 기준으로 기간 검색이 가능해야해요.기간의 시작과 끝 조건은 있을 수도 있고, 없을 수도 있어요!JPQL을 사용하고, 쿼리 메소드명은 자유롭게 지정하되 너무 길지 않게 해주세요. 문제 접근weather, 수정일 모두 선택 사항이므로 @RequestParam(required = false) 옵션으로 Service에 전달해야겠다. HTTP 요청의 쿼리 파라미터는 전부 문자열이므로, String 타입으로 전달한 뒤 LocalDateTime 형식으로 변환해줘야..

[Spring] 동적 쿼리 - BooleanBuilder와 BooleanExpression의 차이

About this article: Today I learned - 오늘 배운 것들을 간단히 기록합니다. Article Body:두 방식 비교 요약구분BooleanBuilderBooleanExpression개념조건을 모아두는 컨테이너단일 조건의 표현식객체 성격가변(Mutable)불변(Immutable)null 처리직접 제어자동 무시where 작성 방식.where(builder).where(조건1, 조건2, 조건3..)재사용성낮음높음코드 가독성복잡함깔끔함 모두 데이터베이스 쿼리를 동적으로 생성하기 위해 사용 Trade-Off 관계:재사용성 + 가독성 -> BooleanExpression조건의 유연성 -> BooleanBuilder 예) 필터 조건이 많거나, 조건이 동적으로 추가되거나 제거되는 경우가 빈번한..

Spring 2026.02.24

[결제 시스템 프로젝트] 로그인 시 StackOverFlowError 해결하기

상황회원가입 후로그인 시 StackOverFlowError 발생 에러 로그 상세2026-02-06T20:20:55.500+09:00 ERROR 28732 --- [payment-team-project] [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.StackOverflowError] with root causejava.lang.StackOverflowError at java.base/java.lang.String.equa..

[나의 개발일지] 4. Spring에 대해서 좀 더 자세히 알아봅시다

당신은 면접장에 와 있다. Spring을 이용하여 웹 기반 애플리케이션을 개발하셨다고 하는데, Spring이 어떤 역할을 하죠? 식은땀이 흐른다. 내가 개발한 애플리케이션에 대한 설명만 밤새도록 준비했는데, 정작 이걸 개발하는 데 활용한 Spring 프레임워크에 대한 정의는 사전캠프 때 잠깐 보고 말았던 것이다. '아! Spring에 대한 이해를 확실히 다졌더라면!' 아래와 같이 답변하면 된다. Spring은 Java 백엔드 개발의 필수 프레임워크워크입니다. 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스, 경량급 애플리케이션 프레임워크입니다.면접관의 표정이 밝아진다.'먹혔다. 조금 더 치고 들어가 보자.'"Spring은 오픈소스라는 점에서 무료이지만, 소스 코드 수정이나..

ETC/etc3 2025.11.20

[나의 개발일지] 2. Java와 Spring을 배워봅시다

Java란 무엇일까?커피 프랜차이즈? 아쉽게도 그건 아니다. Java는 ( 1 )의 한 종류이다.사람의 언어(한국어, 영어)를 컴퓨터가 이해할 수 있는 형태로 바꿔주는 역할을 한다.어떤 환경에서도 실행 가능하다.Windows, Mac, Linux 등 ( 2 ) 실행된다. 안정적이고 보안이 강하다. 전 세계에서 금융, 웹서비스, 앱 개발 등 안정성이 중요한 곳에 많이 쓰인다.→ 여러분이 사용하는 ‘은행 앱’, ‘카카오톡 서버’, ‘웹사이트 로그인 기능’ 중 상당수가 Java로 만들어져 있다. Spring이란 무엇일까?또 드립치는거냐고? 이번엔 아니다.신발에 스프링을 달면 어떻게 되는가? 그렇다. 더 높이 뛸 수 있다.여기서 신발은 자바와 같다. 자바가 스프링을 만나면..

ETC/etc3 2025.11.15

[나의 개발일지] 1. Spring 부트캠프를 시작하며

1.내가 Spring 트랙에 참여한 계기는 무엇인가요?: 비전공자로서 데이터 엔지니어로 직무 전환을 하고 싶었는데, 현직자의 유튜브 영상들을 보고 백엔드 개발자로 업계에 진출하는 것이 가장 현실적이고도 효과적이라는 판단이 섰다. 마침 내일배움캠프 데이터분석 트랙에 합격한 상황이었고, 백엔드 트랙인 Spring도 신청 가능해서 기존 트랙 취소 후 Spring 캠프에 합류하게 됐다. 2.내가 이해한 개발자(혹은 생각했던 직무)는 어떤 역할을 하는 사람인가요? : 내가 현재 알고 있는 지식으로는, 백엔드 개발자는 데이터가 처리될 서버를 구축하고 데이터의 처리, 저장, 인출 방식을 관리하는 직무이다. 3.프로그래밍을 경험해보셨나요? 해보셨다면 어떤 경험을 하셨는지를 작성해주시고, 아니라면 프로그래밍/백엔드 ..

ETC/etc3 2025.11.13