국비 Spring 첫 수업 내용.
SpringBusinessLayer(Layered Architecture)
효율적인 개발과 유지보수를 위해 어플리케이션을 계층화하여 개발할 수 있다. 명확한 역할을 가지도록 계층화 함으로써 유지보수성, 재사용성, 확장성이 증대되고 복잡해지지 않는다. 이러한 패턴을 공부하기위해서 패키지와 클래스를 분리한 것! !
여기서 Presentation Layer의 Controller, 그리고 Service Layer, Repository Layer(=Interface / DB와 연결됨), DTO(Data Transfer Object)에 주목해보겠다.
Controller
Spring MVC 구성요소.
클라이언트로부터의 HTTP 요청을 받아 Service Layer 호출(이용) -> 응답 반환하는 역할.
데이터를 들고오는 요청도 있다. 이 때 들고오는 데이터를 매개변수로 바인딩해 서비스로 넘겨준다.
DTO(Data Transfer Object, 데이터 전송 객체)
클래스는 Custom된 자료형이라고 했다. 필요한 자료형(데이터)을 정의하기 위해 클래스를 만들었고, 클래스를 통해 만들어진 객체가 데이터를 담고있다. 쉽게말하면 택배 박스다.(이거 맞아..?) 하여튼,, 이름 그대로 데이터 전송할 때 쓰는 객체!
DTO클래스 안에는 캡슐화를 위해 여러 메서드를 만들기도 한다.(생성자, getter, setter, fromEntity(Entity를 DTO로 변환), toEntity(Dto를 Entity로 변환) 등)
DTO는 모든 레이어에서 쓰인다. Presentation에서 쓰이면 응답을 반환할 때 쓰이고,
Service에서는 Presentation과 Repository사이에서, 1. 비즈니스 로직을 처리할 때 2.Presentation으로 반환할 때 3.Entity와 매핑할 때 쓰인다.
Repository에서는 데이터베이스에서 가져온 엔티티 객체를 Presentation 레이어로 전달할 때 쓰인다.
Service Layer
1.Controller에서 호출되어 비즈니스 로직을 처리한다. 데이터 처리, 유효성 검사, 권한부여, 계산, 규칙 적용 등과 같은 작업들을 캡슐화 함. 대개 Repository Layer를 이용한다.
로직이 변경될 경우 서비스 레이어에서만 수정하면 되니 유지보수에 용이하다.
2.트랜잭션을 관리. 여러 Repo에 드나드는 작업을 하나로 묶는다. 왜? 여러 작업의 중간에 모종의 이유로 실패했을 경우 중간에 멈추는게 아니라 통째로 롤백함으로써 데이터의 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)을 보장한다. (ACID특징)
3.DTO와 Entity 객체사이의 매핑. Entity는 DB와 연결되어있어 DB의 모든 정보를 갖고있다. 따라서 비즈니스에 필요하지 게 포함되어 있을 수 있다. DTO와 매핑함으로써 필요한 정보만 전달할 수 있고, 보안과 트래픽을 최적화할 수 있다. 또 Entity가 Presentation 레벨에 의존하지 않음으로써 결합도를 낮출 수 있다.
Repository
데이터베이스와의 상호 작용을 담당한다. 주로 CRUD작업. SQL을 직접 입력하는 Mybatis. SQL 작성 없이 '쿼리메서드'를 정의하는 JPA등을 사용한다. 우리 수업에서는 SQL을 숙달하기 위해서 mybatis를 사용한다.
특정 테이블과 매핑되어있는 Entity 객체를 통해 해당 테이블에 접근한다!
4줄요약
1.SpringBusinessLayer(Layered Architecture)는 계층화 해놓은것. 비유하면 건물의 층인데 보안이 삼엄한 회사다.
2.Presentation Layer는 건물 1층. 외부에서 드나듬. 필요한 게 있으면 Controller라는 직원에게 요청함
3.Service Layer는 건물 2층 ~ 꼭대기. 비즈니스는 여기서 처리. 손님들 못들어옴. 손님이 뭐 요청하면 확인(Validation, 검증)하고 처리해서 Controller한테 넘김.
4.Repository는 건물 지하층, 각종 철해놓은 문서가 있음. 일처리할 때 필요한 정보가 있으면 여기를 들림
5. DTO는 불투명한 상자. 데이터가 각 층을 왔다갔다 할 때 여기에 담고다님.
'Back-End > Spring' 카테고리의 다른 글
myBatis+Spring DB 연결(FE-BE-DB // React, Spring, MySQL) (0) | 2023.09.07 |
---|