1. 레이어구조
Client → Controller → Service → Repository → Database
- Controller - 클라이언트로부터 요청을 받고 응답을 전달하는 역할. Service에 의존
- Service - 비즈니스 로직을 처리하는 역할 (트랜젝션-하나로 관리가 중요). Repository에 의존
- Repository - 데이터베이스와 상호작용하는 역할(DAO- Data Access Object). EntityManager에 의존.
2. Controller
클라이언트와 직접 통신하는 유일한 레이어로 요청,응답을
Service
레이어
에 위임해 비즈니스 로직을 처리한다.
예시) 사용자가 게시글을 조회하거나 작성할 때, BoardController
가 이 요청을 받아들인다.3. Service
- 비즈니스 로직처리 클라이언트의 요청을 기반으로데이터베이스 모델과 DTO 간의 매핑을 하여 비즈니스 로직을 처리한다. 이러한 로직은 대개 트랜젝션 내에서 수행된다.
- DTO (Data Transfer Object) 변환 처리 서비스 레이어에서는 데이터를 전달할 때 DTO를 사용하여 데이터의 구조를 정의한다.
- text/plain: 일반적인 텍스트
- text/html: HTML 형식
- application/x-www-form-urlencoded 예시) from=1&balance=2000&to=2(key=value&key=value&…)
- application/json: JSON 예시)
DTO
DTO는 데이터 전송을 위한 객체로, 클라이언트와 서버 간의 데이터 전송을 용이하게 한다.요청과 응답 시, MIME 타입을 통해 데이터의 형식을 정의한다.
MIME (Content-Type)
MIME 타입은 클라이언트와 서버 간에 주고받는 데이터의 형식을 정의!
클라이언트(*여기서는 브라우저나 어플리케이션)와 서버 간 데이터 전송 시
Content-Type
헤더를 통해 미리 정의된 MIME 타입으로 데이터를 주고받는다.
*꼭 알아둬야할 MIME// JSON형식의 데이터 예시
{
"from": 1,
"balance": 2000,
"to": 2
}
// DTO 클래스 예시
class DTO {
private int from;
private int balance;
private int to;
}
4. Repository
Repository는 데이터베이스와의 상호작용을 담당하는 DAO(Data Access Object)이다. 엔티티 모델을 사용하여 데이터베이스와 연결되고 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
스프링의 *IoC(제어의 역전) 컨테이너에 의해 관리된다.
5. IoC와 Dependency Injection
- IoC (Inversion of Control) - 제어의 역전
: 스프링에서는 객체의 생성과 관리 제어를 개발자가 아닌 스프링 컨테이너가 담당한다. 개발자는
new
키워드를 사용하여 객체를 생성하지 않고, 스프링 컨테이너에서 필요한 객체를 자동으로 가져와 사용할 수 있다. 이를 통해 코드의 유연성과 테스트 편의성이 증가한다.
- DI (Dependency Injection) - 의존성 주입
: 각각의 레이어는 IoC 컨테이너에서 필요한 객체를 자동으로 주입받는다.
Controller ← Service ← Repository ( DI 흐름)
Controller에서 Service를 주입받고, Service에서 Repository를 주입받아 의존성을 자동으로 해결한다. 이를 통해 코드의 결합도를 낮추고 코드의 재사용성과 테스트 편의성을 높여 유지보수가 쉬워지게 도와준다.
🙋기본 생성자와 매개변수가 있는 생성자를 둘 다 생성하면 어떤 생성자가 실행이 될까?
→ 기본 생성자가 실행이 된다.

boardService = null → dependency injection이 안됐음
* final이 붙은 전역변수는 객체가 new될 때 반드시 초기화 되어야 한다.!!!!
→ 꼭 값을 넣어야 하기 때문에 실수하지 않기 위해 final을 붙인다.
final 붙으면 값 변경 불가능 (= read only)
Share article