에러(Error): 에러는 애플리케이션 코드에서 복구할 수 없는 심각한 문제를 나타냅니다. 예를 들어, JVM이 실행을 계속할 수 없을 정도의 메모리 부족 오류(OutOfMemoryError) 같은 시스템 수준의 문제입니다. 에러는 프로그램이 복구할 수 없는 상황을 나
EntityManager를 사용해 데이터베이스 작업을 할 때, 모든 변경 사항은 반드시 트랜잭션 내에서 이루어져야 합니다. 그 이유는 트랜잭션이 데이터의 일관성, 무결성, 원자성을 보장하기 때문입니다. 트랜잭션을 통해 데이터가 중간 상태에 머무르거나 불완전하게 반영되는
Role을 enum으로 만드는 방식은 매우 적절한 선택입니다. 특히, 권한(역할)과 같은 고정된 값은 enum을 사용하여 표현하는 것이 더 자연스럽고, 유지보수 측면에서도 장점이 있습니다. @Embeddable 타입은 다른 목적을 가진 것이며, Role과 같은 경우에는
JPA에서 연관관계 설정과 @JoinColumn 어노테이션에 대해 다뤄보겠습니다.우리는 테이블 간의 연관관계를 설정할 때 주로 일대다(1:N) 또는 다대일(N:1) 관계를 많이 사용하게 됩니다. 이때 연관관계를 설정하는 과정에서 @JoinColumn 어노테이션을 사용하
Spring Boot를 사용해 기본적인 API를 개발하는 과정을 설명합니다. 회원 등록, 수정, 조회 같은 자주 사용되는 API를 중심으로 DTO(Data Transfer Object)를 사용하는 이유와 방법을 다룹니다.회원 등록 API는 새로운 회원 정보를 받아서 저
JPA를 사용해 지연 로딩(Lazy Loading)으로 인해 발생하는 성능 문제를 해결하는 다양한 방법을 설명합니다. 주문 + 배송 정보 + 회원 정보를 조회하는 API를 예시로, 성능 최적화를 단계별로 어떻게 접근할 수 있는지 살펴보겠습니다.가장 먼저, 엔티티를 직접
em.createQuery()와 @Query의 차이.사용 위치: em.createQuery()는 직접 EntityManager를 사용해서 JPQL(Java Persistence Query Language)을 실행하는 방식입니다. 보통 커스텀 리포지토리에서 사용됩니다.
팀프로젝트를 진행하면서 팀원들과 기획부터 ERD작성, API 명세서를 작성하면서 공부한 내용을 정리해봄.API 명세서는 일반적으로 기획서와 ERD에 기반하여 작성하는 것이 좋은것 같다.순수 도메인 중심 설계: API는 데이터 모델과 비즈니스 로직에 기반하여 설계되므로,
predicates: \- Path=/api/v1/users/\*\* \- Path=/login \- Path=/logout처음에 이런식으로 path를 설정해주니 설정정보가 씹히는건지404 Not Found가
팀프로젝트를 진행하다가 user 모듈쪽 기능을 완성해서user쪽 JWT 인증을 API Gateway를 사용하는 gateway 모듈쪽으로 옮겨서 인증을 한 곳에서 수행하면 좋지 않을까 생각하게 되어 작업을 시작하면서 발생한 문제에 대해 기록해 보려고 한다.먼저 gatew
팀 프로젝트를 진행하다가 User 모듈 쪽 기능을 완성하여, JWT 인증을 API Gateway를 사용하는 Gateway 모듈로 옮겨 인증을 한 곳에서 수행하면 좋겠다고 생각했습니다. 이 과정에서 발생한 문제들을 기록해 보려고 합니다.먼저 Gateway에 Spring
기존 access 토큰에 userId를 그냥 포함시켜서 보내주면 굳이gateway에서 email을 보내줄 필요없이 userId를 보내주면 다른 서비스 모듈에서 FeignClient를 사용할 필요가 없다라는 생각이 들었다.기존 JWTUtil부분에서 createJwt부분에
JavaScript 접근 차단: Access 토큰을 응답 헤더에 포함시킴으로써, 클라이언트 측 JavaScript가 토큰에 직접 접근하지 못하게 하여 XSS 공격으로부터 보호.보안 강화: Access 토큰을 응답 헤더에 포함시키면, 클라이언트 측에서 토큰을 노출시키지

상황: 사용자가 자신의 MBTI를 수정하면, 이미 작성된 게시물의 MBTI 정보는 변경되지 않아 사용자 프로필과 게시물의 MBTI 정보가 일치하지 않는 문제가 발생합니다.목표: 사용자가 MBTI를 변경할 때, 해당 사용자가 작성한 모든 게시물의 MBTI 정보도 자동으로
팀 프로젝트를 진행하며 작성된 여행 게시물의 마감기한이 지나면자동으로 여행 게시물 상태를 모집중에서 모집완료로 바꾸어야하는 상황이 발생.자동으로 모집시간이 지날때 상태를 어떻게 변환해주지?스케쥴러를 사용해 보자!@EnableScheduling // 스케줄링 활성화여행게

여러 모듈에서 빈번히 호출되는 사용자 정보 접근에 대해 효율성을 높이기 위해 Redis를 도입하여 성능 최적화를 시도한 경험을 공유합니다. 특히 travel와 pay 모듈에서는 FeignClient를 통해 사용자 정보를 자주 요청하게 되어, 매번 DB 접근을 피할 수

📚 Facade Pattern (퍼사드 패턴) Facade Pattern이란? 퍼사드 패턴(Facade Pattern)은 구조 패턴(Structural Pattern)의 한 종류로, 복잡한 서브 시스템의 기능들을 간단한 상위 수준의 인터페이스로 제공하여 클라이언트
지우려는 의도는 없었습니다. 가독성을 높이면서 원래 글의 흐름을 유지하려 했지만, 의도치 않게 세부 내용이 누락된 것 같습니다. 원본 글의 모든 내용을 유지하고 가독성만 높인 수정본을 다시 제공합니다. 팀 프로젝트에서 로그인 인증이 필요한 API와 로그인이 필요 없는

문제 정의:"대량 데이터를 JPA로 업데이트할 때 발생 가능한 문제""기존 로직에서 발생 가능한 성능 저하 및 메모리 과부하 문제를 어떻게 해결할까"핵심 목표:"벌크 업데이트와 배치 처리를 통해 문제를 해결하고 성능을 개선해보자"AS-IS 코드변경사항:벌크 업데이트 사
Spring Boot에서 ResponseEntity는 HTTP 응답을 세밀하게 제어하기 위해 제공되는 클래스입니다.다음과 같은 세 가지 주요 요소를 설정할 수 있습니다:HTTP 상태 코드: 응답 상태를 나타냅니다 (예: 200 OK, 404 Not Found).응답 본