DTO를 조회 하되, 그 안에도 엔티티가 있을 경우 DTO로 변환해서 사용해야한다. 아래 그림은 Order와 OrderItem 엔티티의 일부 코드로 "1 : 다" 양방향 관계를 갖고 있는 것을 볼 수 있다. 이 전 포스팅에서 엔티티를 직접 반환하면 안되는이유에 대해 알아봤었다. [Spirng/JPA] Dto와 Entity를 분리해서 사용하는 이유 프로젝트를 진행하거나 강의, 책을 보면 항상 엔티티를 직접 반환하지말고 DTO로 변환하여 반환하라는 말을 접하거나 보았을 것이다. 하지만 단순히 "아 ~ 그렇게 하라니까 그렇게 해야지" 보다 hstory0208.tistory.com 컬렉션도 마찬가지다. 컬렉션도 엔티티를 DTO로 변환해서 반환해야한다. Order와 OrderItem이 연관관계를 갖고 있는 것 처..
public interface MemberRepository extends JpaRepository { } Spring Data JPA를 사용하면 위 처럼 JpaRepository 인터페이스를 상속받은 인터페이스만 있어도 CRUD 기능을 다 지원한다. 그렇다면 어떻게 인터페이스의 구현체가 없는데도 MemberRepository가 작동하는 걸까? How ? JpaRepository 인터페이스를 상속 받은 MemberRepository 클래스 타입을 찍어보면 다음과 같이 나온다. memberRepository.getClass() => class com.sun.proxy.$ProxyXXX Spring Data JPA가 JpaRepository 인터페이스를 상속받은 인터페이스를 보고 구현체를 만들어서 의존성 주..
OSIV (Open Session In View)OSIV란 스프링 프레임워크에서 사용하는 세션 관리 전략 중 하나로 스프링 부트에서는 기본 값이 True로 설정되어 있다.여기서 세션 (Session)은 하이버네이트의 세션. 즉, 영속성 컨텍스트를 뜻한다.용어를 그대로 해석하면, "View까지 영속성 컨텍스트를 열어 둔다"로 해석할 수 있고이는 영속성 컨텍스트가 View까지 살아 있도록 하는 것이다. spring.jpa.open-in-view: true영속성 컨텍스트는 트랜잭션의 생명 주기와 동일하다.하지만 이 옵션이 true로 설정된다면, 영속성 컨텍스트의 생명주기를 View에 응답이 갈 때 까지 유지시킨다.기본이 true이기 때문에 따로 설정을 하지 않았다면 Lazy 로딩을 사용했을 때트랜잭션 범위를 ..
문제 설명 입출력 예제 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 풀이 코드 처음에는 문제 설명을 이해하는게 어려울 것이다. (문제 설명이 좀 많이 아쉽;) 왜 110을 입력했을 때 결과가 99가 나오는지 이해할 수가 없었다. 하지만 왜 그러한 결과가 나오는지 이해만 한다면 문제는 실버난이도 답게 쉽게 풀 수 있을 것이다. 일단 "한수"라는 것은 각 자리수의 차이가 일정한 수이다. 111 이라는 수가 주어진다면 이 수는 각 자리수 차이가 0이므로 ㅠ이다. 그렇다면 5는 어떨까? 자리수를 비교할 대상이 없지만..
프로젝트를 진행하거나 강의, 책을 보면 항상 엔티티를 직접 반환하지말고 DTO로 변환하여 반환하라는 말을 접하거나 보았을 것이다.하지만 단순히 "아 ~ 그렇게 하라니까 그렇게 해야지" 보다는 "왜? 엔티티를 직접 사용하지 말고 DTO를 사용해야하는가"에 대해 정리해보려고 한다.DTO와 Entity 구분DTO(Data Transfer Object) : 클라이언트와 서버 간 데이터 전송을 위해 설계된 객체Entity : 데이터베이스에 저장되는 데이터 객체로, 데이터베이스와 직접적으로 연결Enttity를 직접 반환할 경우 생기는 문제점엔티티 구조 변경 시 발생하는 문제예를 들어 요구사항이 변경되어 엔티티의 필드 이름이 변경 될 경우, API 스펙이 변경되어 추가 작업이 요구된다.이는 효과..
이번 포스팅에서는 웹 애플리케이션을 API 방식으로 개발하는데, @Controller는 어디까지 구현하는데 사용하고 @RestController는 어디까지 구현하는데 사용해야 할지에 대해 확실히 정리하고자 한다. @Controller @Controller 어노테이션은 주로 웹 애플리케이션에서 View를 처리하는데 사용된다. Spring MVC에서 요청을 처리하고 뷰 템플릿과 연계하여 결과를 반환한다. 해당 뷰로 데이터를 전달하고 싶은 경우 Model 객체를 사용하여 데이터를 첨부해 반환할 수 있다. @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @Get..