2025/11 4

[JPA] DTO 없이 엔티티로 응답하면 안될까?

JPA로 개발을 하다 보면 repository.findById()로 엔티티를 조회하고 서비스 계층에서 DTO로 변환하는 코드를 습관처럼 작성한다.@GetMapping("/users/{id}")public UserResponseDto getUserById(@PathVariable Long id) { return userService.findUser(id); // 서비스가 DTO를 반환} 그런데 예전으로 돌아가서 생각해보면 이런 생각이 들었던것 같다. "그냥 엔티티를 반환하면 편한데 굳이 DTO를 만들어야 하나?" 물론 지금은 "당연히 안 되지"라고 생각하겠지만 "내가 생각하지 못했던 다른 이유가 더 있지는 않을까" 라는 생각이 들어 찾아보게 되었다. 엔티티를 직접 반환하면 정확히 어떤 문제가 발생하는..

[JPA] N+1 문제의 원인과 3가지 해결 방안

JPA는 SQL을 직접 작성하지 않고도 데이터베이스 작업을 처리할 수 있게 해주는 기술이다. repository.findById(1L) 같은 간단한 메서드 호출만으로도 복잡한 SQL이 실행되어 객체를 가져다준다. 하지만 이 편리함 뒤에는 'N+1 문제'라는 함정이 숨겨져 있다. 당연하게 사용하던 JPA가 어떻게 데이터베이스에 과부하를 주는지, 이 문제를 어떻게 해결할 수 있는지 비유를 통해 알아보자. 1. N+1 문제란 무엇인가?N+1 문제는 JPA를 통해 연관 관계가 설정된 엔티티를 조회할 때 발생하는 대표적인 성능 문제다. 이름 그대로 처음 1번의 쿼리로 원하는 엔티티 목록을 가져왔지만, 이 엔티티들이 각자 연관된 하위 엔티티에 접근할 때마다 추가적인 쿼리가 N번 발생하는 현상을 말한다. 1.1. 예..

[Spring] 제어의 역전(Inversion of Control, IoC) 이란 무엇일까?

1. DI와 IoChttps://ngwdeveloper.tistory.com/205 [Spring] 의존성 주입(Dependency injection, DI) 이란 무엇일까?spring을 사용해 개발을 하다보면 @Autowired나 생성자로 객체를 주입받아 쓴다. 너무나 당연하게 써왔었다. 그런데 문득 궁금해졌다. "그냥 내가 만들어 쓰면 안되나?" 라는 생각이 들었다. 이 의존ngwdeveloper.tistory.com 이전 글에서 DI가 객체 간의 결합도를 낮추는 기술임을 알게됐다. 이전 글 3.3 섹션에서 "객체의 생성과 관계 설정의 제어권이 개발자로부터 프레임워크로 넘어간 것을 제어의 역전(IoC)이라 부르며, DI는 이 IoC를 구현하는 핵심 방식이다."라고 말했었다.DI에 대해서는 이해했지만,..

[Spring] 의존성 주입(Dependency injection, DI) 이란 무엇일까?

spring을 사용해 개발을 하다보면 @Autowired나 생성자로 객체를 주입받아 쓴다. 너무나 당연하게 써왔었다. 그런데 문득 궁금해졌다. "그냥 내가 만들어 쓰면 안되나?" 라는 생각이 들었다. 이 의존성 주입이 왜 스프링의 핵심 개념인지 비유를 통해 이해해보자. 1. 스프링의 핵심중 하나인 DI스프링 프레임워크를 사용한다는 것은 의존성 주입(Dependency Injection, DI)의 개념 위에서 개발한다는 것과 같다. DI는 스프링의 3대 핵심 프로그래밍 모델 중 하나이며, 현대적인 객체지향 설계를 가능하게 하는 기반 기술이다.많은 개발자가 DI를 단순히 어노테이션(@Autowired)을 통해 객체를 받아오는 기술 정도로 이해하지만, DI의 본질은 객체 간의 결합도를 낮추고 유연성을 극대화하..

프로필사진

남건욱's 공부기록

반응형