Java (22) 썸네일형 리스트형 Spring STOMP + Kafka 구조에서 Kafka만 사용하는 설정 변경 후 404 에러 개인 프로젝트에서 기존 STOMP 기반 WebSocket 채팅을 제거하고, Kafka 기반 실시간 채팅 시스템으로 마이그레이션을 진행했습니다. 이 과정에서 WebSocket 연결 시도 시 404 오류가 발생하는 문제가 있어서 저와 같이 30분 시간 낭비 안하시길 바라면서 포스팅 합니다. 변경 배경: 왜 STOMP에서 Kafka로?기존 STOMP 방식은 Spring에서 빠르게 WebSocket 채팅을 구현할 수 있었지만, 다음과 같은 한계가 있었습니다.단일 WAS 한정 메시지 브로커(SimpleBroker) 사용서버 인스턴스가 여러 대일 때 세션 동기화 어려움대량 트래픽 처리 시 확장성 부족메시지 전달 경로가 김 (WebSocket -> SimpleBroker -> Conusumer -> 다시 WebSoc.. Spring Boot에서 application.yml 설정 분리하기 Spring Boot로 프로젝트를 진행하다 보면 개발(dev) 환경과 운영(prod) 환경의 설정을 분리해야 할 때가 많습니다.예를 들어, 로컬 DB는 MySQL, 운영은 PostgreSQL 또는 로컬에서만 테스트 데이터 초기화 등을 하고 싶을 때죠. Spring Boot는 기본적으로 application.yml 외에 application-{profile}.yml 형태로 환경별 설정을 지원합니다.이번 글에서는 application-dev.yml 설정과 profile 관리 방법을 정리합니다. application.yml: 공통 설정application-dev.yml: 개발 환경 설정application-prod.yml: 운영 환경 설정application.yml (공통)spring.profiles.acti.. 테스트에서 환경변수를 주입하는 가장 가벼운 방법 Spring Boot 단위 테스트에서 MockEnvironment와 TestPropertyValues 활용하기 Spring Boot로 개발하다 보면 이런 고민이 생깁니다. “이 설정값이 제대로 들어오는지 테스트해보고 싶은데,굳이 무거운 @SpringBootTest까지 써야 할까?” 이럴 때 정말 유용한 방법이 있습니다.바로 MockEnvironment와 TestPropertyValues 조합입니다. 이 글에서는 언제 쓰면 좋은지, 언제 쓰면 안 되는지, 그리고 코드 예제까지 빠르게 정리합니다. 언제 필요한가? 간단한 단위 테스트에서 설정 값이나 환경 변수만 살짝 주입해보고 싶을 때 아주 유용합니다. 예를 들어 이런 경우입니다. 특정 설정 값이 잘 들어오는지 확인하고 싶을 때@ConditionalOnPr.. QueryDSL에서 서브쿼리에 limit이 안 먹는 이유 Spring + JPA + QueryDSL 조합으로 작업 중, 서브쿼리에 .limit(1)을 분명히 썼는데도 아래와 같은 에러가 발생했다.Subquery returns more than 1 row"어? limit 걸었는데 왜 여러 row가 나와?"처음엔 단순한 실수인 줄 알았지만, 파고들어 보니 구조적인 이슈였다. 1. 원인QueryDSL은 내부적으로 다음과 같은 과정을 거쳐 쿼리를 실행한다.QueryDSL → JPQL → SQL (DB 방언 적용) → 실행이때 .limit() 같은 조건은 DB 방언(Dialect) 에 의해서 SQL에 적용되는데, 문제는 서브쿼리, 특히 아래 두 곳에서는 limit이 무시될 수 있다.스칼라 서브쿼리: select 절 안에 들어간 서브쿼리where 서브쿼리: where 절.. MySQL 조건부 유니크 제약 조건 설정하기 서비스 개발 중 “ 중복된 인증코드 번호는 존재할수 없다 ” 문제에대해 어떻게 해결했는지 포스팅해보겠습니다.개요회원 가입 시, 학생(ROLE_STUDENT) 계정에는 대문자 3개 + 숫자 4개로 이루어진 인증코드번호를 부여해야 합니다. 이때 학생 계정끼리만 인증코드번호가 중복되지 않도록 제약을 설정하고 싶다면 어떻게 해야 할까요?PostgreSQL에서는 조건부 유니크 인덱스를 사용할 수 있지만, MySQL은 조건부 유니크 제약을 직접 지원하지 않습니다. 이 글에서는 이 문제를 어떻게 해결했는지, 실제 사례를 통해 쉽게 설명해보겠습니다.문제 상황처음에는 인증코드번호 컬럼 자체에 유니크 제약을 설정하려고 했습니다.ALTER TABLE USER ADD CONSTRAINT UNIQUE_인증코드번호 UNIQUE .. 실전! 스프링 부트와 JPA 활용 (김영한) - 요구사항 분석 - 요구사항 분석 - 회원은 상품을 주문할수있다. 주문 시 여러 종류의 상품을 선택 할 수있다. - 기능 목록 - 회원 기능(회원 등록, 회원 조회) 상품 기능(상품 등록, 상품 수정, 상품 조회) 주문 기능(상품 주문, 주문내역 조회, 주문 취소) - 도메인 모델 분석 - 회원과 주문의 관계: 회원은 여러번 주문 할 수있다(일대다) 상품과 주문의 관계: 주문할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러번 주문할 수 있다. 주문 상품이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어냄 - 데이터 중심 설계의 문제점 - 위에 방식은 객체 설계를 테이블 설계의 맞춘 방식 테이블의 외래키를 객체에 그대로 가져옴 객체 그래프 탐색이 불가능 참조가 없으므로 UML도 잘못됨 코드로 알.. 이전 1 2 3 다음