본문 바로가기

백엔드 공부19

[Spring] JPA에서 OneToOne 관계 N+1 문제 (Feat : Lazy Loading) 회사에서 프로젝트를 하면서 발견한 JPA OneToOne 관계의 N+1 문제이다! OneToOne 관계에 놓인 Entity A와 B가 있다고 가정하자. Entity A를 조회했을 때, DB 조회를 위한 한 번의 쿼리가 아닌 B에 대한 조회까지 총 두 번의 쿼리가 나가는 문제점을 발견하였다. 코드는 공개할 수 없어서, Entity인 User와 UserProfile를 예시로 들어보겠다. User: 회원 기본 정보 (아이디, 이메일, 비밀번호 등)UserProfile: 회원의 상세 프로필 정보 (주소, 생년월일, 취미 등)→ 모든 유저는 하나의 프로필을 반드시 가지고 있고, 반대로 프로필은 반드시 특정 유저에 속해야 함.→ 따라서 1:1 관계, 그리고 현실적으로 양방향으로 참조할 필요가 있음.@Entityp.. 2025. 5. 16.
[Spring] 연관관계 편의 메서드 📌 연관관계 편의 메서드는 왜 써야하는가?양방향 연관관계의 일관성 유지 JPA에서는 @OneToOne, @OneToMany, @ManyToOne 등 양방향 연관관계는 객체 기준으로 서로 다른 두 필드를 가지는 구조임.이때 양쪽 객체의 연관관계를 동시에 갱신해주지 않으면, 두 객체의 상태가 서로 불일치할 수 있음.예를 들어, OneToMany 관계를 가지는 Post와 Image가 있다고 가정하자. -------------Post class----------------@Entitypublic class Post { @Id @GeneratedValue private Long id; private String title; @OneToMany(mappedBy = "post", cascade.. 2025. 5. 9.
[Java Spring] Exception 발생 시 로그 및 HTTP 응답 에러 메시지 안뜨는 문제 해결 [오류 1]Exception 클래스에서 RuntimeException의 생성자에 적절한 에러 메시지를 전달하지 않아, 발생한 예외의 메시지가 null로 출력되었다. 로그에서 모두 에러 메시지가 제대로 나타나지 않았다.2025-01-22T16:16:16.664+09:00 ERROR 84514 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: com.------.source.domain.dispatch.exception.Dispatch.. 2025. 1. 22.
[Java Spring] Mockito & Junit + 코드 예시 단위 테스트는 하나의 가장 작은 기능을 테스트하는 것을 목표로 함.Mockito 란?Mockito는 Java의 강력한 테스트 라이브러리로, 의존성을 가진 클래스의 동작을 시뮬레이션할 수 있는 Mock 객체를 제공합니다. 이를 통해 실제 구현이 아닌 가짜(Mock) 객체로 테스트를 수행하여 의존성을 줄이고, 단위 테스트를 쉽게 작성할 수 있습니다.Junit 과 같이 사용하는 이유?여기서 Junit4를 함께 사용하는 이유는, Mockito를 사용하는 것은 가짜로 데이터를 만들어 넣어 테스트에 필요한 Mock 객체를 만들어 줄 뿐이기 때문에 Mockito에서 제공하는 함수들로는 많은 종류의 Unit Test를 할 수 없기 때문이다. Mockito로 Mock 객체를 만들고, 더불어서 Junit4를 사용하여 Un.. 2025. 1. 20.
[Java Spring 설계] MSA + Spring Cloud Eureka 개념 1. MSA + Spring Cloud Eureka동작 과정서비스 등록- 마이크로 서비스는 실행시, Eureka Server에 등록- 등록시 서비스의 이름/IP 주소/포트 번호 정보 제공, Eureka Server의 레지스트리에 저장앱/웹 에서의 요청Spring Cloud API Gateway 애플리케이션 수신마이크로 서비스 간 요청 (Feign Client를 이용한 통신)- 한 마이크로서비스가 다른 마이크로서비스에 요청시 Eureka Server에서 대상 서비스의 네트워크 정보 조회 - Feign Client는 호출할 서비스의 이름(예: 을 기반으로 Eureka에서 해당 서비스의 정보를 조회합니다.2. 참고 개념 정리MSA(Micro Service Architecture): 독립적으로 배포가능한 각각의.. 2025. 1. 17.
[스프링 MVC 1편] MVC 패턴 - 개요 인프런 김영한 님의 스프링 MVC 1편 강의를 보고 리뷰한 포스팅입니다.  MVC 패턴 - 개요1.너무 많은 역할    하나의 서블릿이나 JSP 만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 되면, 너무 많은 역할을 하게 되고 결과적으로 유지보수가 어려워짐.2. 변경의 라이프 사이클 UI를 일부 수정하는 일과 비즈니스 로직을 수정하는 일은 각각 다르게 발생할 가능성이 매우 높고 대부분 서로에게 영향을 주지 않음. ->라이프 사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수하기 좋지 않음. 3. 기능 특화특히 JSP 같은 뷰  템플릿은 화면을 렌더링 하는데 최적화 되어 있기 때문에 이 부분의 업무만 담당하는 것이 효과적.4. Model View ControllerMVC 패턴은 지금까지 학습한.. 2024. 6. 29.