티스토리 뷰
0. 3계층 아키텍처 패턴
:: 애플리케이션을 세 개의 주요 계층으로 분리하여, 각 계층이 특정 역할을 수행 - 관심사의 분리
:: 단일 책임 원칙(Single Responsibility Principle) 적용에 효과적
- 구성
1. Presentation Layer
2. Business Logic Layer
3. Data Access Layer
0.1 Presentation Layer (프레젠테이션 계층)
:: 사용자 인터페이스와 상호작용하는 계층
:: 사용자 요청을 처리하고, 결과를 사용자에게 반환
- Spring에서 흐름
:: 클라이언트 요청 → DispatcherServlet → Controller → View → 응답
구성 | - Controller, View, Model / DTO (Data Transfer Object) 등 |
목적 | - 클라이언트 요청에 따른 실행, 화면 생성 및 반환(Spring MVC) |
기능 | - 클라이언트의 요청을 수신하고, 이를 비즈니스 로직 계층에 전달. - 비즈니스 로직의 처리 결과를 사용자에게 출력할 수 있는 형식으로 변환. |
예시 | - @Controller :: 클라이언트의 요청을 처리하고, 비즈니스 로직 계층과의 상호작용을 관리 - @RestController :: RESTful API 서비스에서 주로 사용되며, JSON 데이터를 클라이언트에 반환 |
더보기
// Ex
@Controller
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/performAction")
public String performAction() {
myService.performBusinessLogic();
return "actionResult";
}
}
0.2 Business Logic Layer (비즈니스 로직 계층)
:: 애플리케이션의 핵심 비즈니스 로직을 처리하는 계층
:: Presentation Layer에서 받은 요청을 처리 및 결과 반환
구성 | - Service 클래스 |
목적 | - 비즈니스 로직 수행 - Controller가 반환하는 Model에 채울 데이터 생성 |
기능 | - Presentation Layer에서 전달받은 데이터를 바탕으로 비즈니스 로직을 수행 - Data Access Layer와 상호작용하여 필요한 데이터를 가져오고, 이를 가공하여 반환 |
예시 | @Service: 비즈니스 로직을 처리하는 서비스 클래스를 정의, 비즈니스 로직 계층에 주로 사용 |
더보기
@Service
public class MyService {
@Autowired
private MyRepository myRepository;
public void performBusinessLogic() {
// 비즈니스 로직 처리
myRepository.saveData();
}
}
0.3 Data Access Layer (데이터 접근 계층)
:: 데이터베이스와의 상호작용을 담당하는 계층
:: 데이터를 저장하거나 조회하는 작업 수행
구성 | - Repository 클래스 - CRUD 제공, DAO(Data Access Object) |
목적 | - 애플리케이션의 영속성 유지 및 CRUD |
기능 | - 데이터베이스와 직접 상호작용하여 데이터를 처리합니다. - 비즈니스 로직 계층에서 요청한 데이터를 조회하거나 저장하는 역할을 합니다. |
예시 | @Repository: 데이터 접근 계층에서 사용, 데이터베이스와의 연동 관리, 보통 JpaRepository나 CrudRepository와 함께 사용 |
더보기
@Repository
public class MyRepository {
@Autowired
private EntityManager entityManager;
public void saveData() {
// 데이터베이스에 데이터 저장
entityManager.persist(new MyEntity());
}
}
* 깨알 단어 사
- DAO
:: DB 에 직결된 CRUD 함수 (구현체는 EntityManager 통해 수행)
public interface UserDao {
void create(User user);
User read(Long id);
void update(User user);
void delete(String userName);
}
- @Repository
:: Encapsulating DAO (DAO 의 조합) = 필요한 함수만 쓰기
:: CRUD 중 R 만 쓸수있도록 Encapsulating
public interface UserRepository {
User get(Long id); // 원하는거만 구현해도된다. 내부에선 Dao 를 조합
// void add(User user);
// void update(User user);
// void remove(User user);
}
- DTO (Data Transfer Object)
:: 그냥 데이터 담은 객체 (가변성)
:: Getter // Setter 메서드만
DTO (Data Transfer Object) | :: 그냥 데이터 담은 객체 (가변성) :: Getter // Setter 메서드만 |
VO (Value Object) | :: 불변 객체 (MyBatis 쿼리를 통해 가져와진 객체 = VO) Ex ) MyBatis 로 DB 로부터 읽어온 SELECT 결과 객체 |
참고
ASAC 수업자료
'정리용 > SpringBoot' 카테고리의 다른 글
[Spring] 5. Spring - 예외처리 (0) | 2025.02.19 |
---|---|
[Spring] 5. Spring - @Controller (0) | 2025.02.19 |
[Spring] 3. SpringContext - Bean 주입 (0) | 2025.02.19 |
[Spring] 3. SpringContext - Bean 등록 (1) | 2025.02.19 |
[Spring] 3. Spring Context (0) | 2025.02.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- useState
- ASAC
- acac
- acas#acas7기
- git
- useLayoutEffect
- useRef
- useMemo
- useCallback
- asac7
- Nginx
- asac#asac7기
- asac7기
- react
- asac7#asac
- useContext
- memo
- useEffect
- useReducer
- ssh
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함