Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dfs
- sql
- JPA
- python
- Stack
- 크루스칼
- BFS
- JDBC
- cloud computing
- Java
- generic class
- 알고리즘
- DB
- 가상컴퓨팅
- Algorithm
- 공개키 암호화
- jsp
- 코테
- 암호학
- 자바의정석
- MVC
- spring
- 자료구조
- dbms
- 생성자
- 클라우드 컴퓨팅
- Queue
- data structure
- javascript
- 코딩테스트
Archives
- Today
- Total
PLOD
[Spring] 3 Layer Architecture 본문
기존에 Controller 클래스에만 의존하여 모든 기능을 처리하도록 한다면 문제가 발생할 수 있다.
- 한 개의 클래스에 너무 많은 양의 코드가 존재하기 때문에 코드를 이해하기 어려움 → 가독성 떨어짐
- 현업에서는 코드의 추가 혹은 변경 요청이 계속 생길 수 있다.
- 문제가 발생했는데 해당 Controller 클래스를 구현한 개발자가 퇴사한다면? → 유지보수성 떨어짐
이러한 문제점들을 해결하기 위해 서버 개발자들은 서버에서의 처리과정이 대부분 비슷하다는 걸 깨닫고, 처리 과정을 크게 Controller, Service, Repository 3개로 분리하였다.
Web Layer
- 흔히 사용하는 Controller와 JSP / freemaker 와 같은 view 템플릿 영역이다
- Filter,Intercepter,ControllerAdvice등 외부 요청과 응답에 전반적인 영역을 말한다.
Service Layer
- 일반적으로 Controller와 DAO의 중간영역에서 사용된다
- @Transactional이 사용되어야 하는 영역이다
- 보통 여기서 비즈니스 로직을 처리하나 관점에 따라 Domain Model에서 비즈니스 로직을 처리하기도 한다
Repository Layer
- 데이터베이스(DB)에 접근하여 역할(CRUD)을 하는 객체
- 대표적으로 Repository , DAO가 있다
DTO
- 계층간 데이터 교환을 위한 객체이다
- 주로 Client에서 데이터를 반환하거나 받아줄 때 사용한다.
- 데이터 전송 및 이동을 위해 생성되는 객체를 의미한다
- Client에서 보내오는 데이터를 객체로 처리할 때 사용되고 서버의 계층간의 이동에도 사용됩니다.
- 그리고 DB와의 소통을 담당하는 Java 클래스를 그대로 Client에 반환하는 것이 아니라 DTO로 한번 변환한 후 반환할 때도 사용된다.
- 데이터 전달 용도로만 사용하는 클래스라서 @getter & @setter 만 가진 클래스
ResponseDto : Client에서 데이터를 반환할 때 사용
package com.sparta.memo.dto;
import lombok.Getter;
@Getter
public class MemoResponseDto {
private Long id;
private String username;
private String contents;
}
RequestDto : Client에서 요청 데이터를 받아줄 때 사용
package com.sparta.memo.dto;
import lombok.Getter;
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}
Domain
- 도메인이라 불리는 개발 대상을 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화 시킨 것을 도메인 모델이라고 한다
- 대표적으로 테이블을 선언하기 위한 Entity, VO 가 있다.
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
@Id
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(name = "username", nullable = false, unique = true)
private String username;
// length: 컬럼 길이 지정
@Column(name = "contents", nullable = false, length = 500)
private String contents;
}
'개발 공부 > Spring framework' 카테고리의 다른 글
[Spring] MSA(MicroService Architecture) (0) | 2024.08.20 |
---|---|
[Spring] @Request Param , @PathVariable과 Mapping 정리 (0) | 2024.08.17 |
[Spring] Spring Security (0) | 2024.07.25 |
[Spring] JPA(Java Persistence API) (0) | 2024.07.03 |
[spring] spring 과 MyBatis 연동 (0) | 2023.08.19 |
Comments