스프링 초보 개발할때 entity, repository, service, controller만 알고 개발하고 있었는데,
다른 사람들이 개발한것을 참고해보니 DTO라는 이름을 많이 사용하는것을 보고 알아보기로했다.
스프링을 사용한 웹앱의 경우 DAO, DTO, Repository, Entity를 사용하여 데이터를 다루며 스프링부트의 경우 내장 톰캣을 통해 서블릿을 관리하고 이를 컨트롤러에서 각 어노테이션을 통해 매핑한다.
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManage em;
public void save(Member member) {
em.persist(member);
}
}
해당 코드는 JPA 구현체가 Entity Model 객체를 사용해서 DB에 접근한다.
@Entity
@Getter
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
@NotEmpty
@NotNull
private String name;
@Embedded
private Address address;
@JsonIgnore
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
다음은 예시 코드
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
}
다음 코드는 서비스 계층의 Repository를 사용한 코드이다.
@Data
@AllArgsConstructor
static class MemberDto {
private String name;
private Address address;
}
이러한 경우 다음과 같이 DTO를 사용한다.
특징은 다음과 같다.
정리하자면 스프링 프로젝트는 다음과 같은 구조를 가진다.
구성은 다음 4개이다.
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
}
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em;
}
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
}
@RestController // Response + Request
@RequiredArgsConstructor
public class MemberApiController {
private final MemberService memberService;
@GetMapping("api/v1/members")
public Result<List<MemberDto>> memberV2() {
}
}