프로젝트 생성 및 종속성
레이어 책임
IoC
Dependency 의존성
프로젝트 생성 및 종속성 추가

레이어 책임
- Controller 컨트롤러 : 사용자 요청 받고 응답 받은 요청을 서비스에 넘기고, 게시글 목록을 서비스에서 받아옴. Content-Type 설정, 관리
- Content-Type : HTTP 요청과 응답에 약속한 데이터 형식을 명시하는 헤더
- MIME : 메세지 내부에 다른 파일 전송이 가능한 전자메일 프로토콜 인코딩한 파일은 Content-Type 헤더에 담음
- text/plain : 평문 - 문자 그대로의 텍스트
- text/html : HTML - 웹 페이지를 위한 HTML 콘텐츠
- application/x-www-form-urlencoded :
key=value
형식 데이터 전송 - application/json : JSON 데이터 전송
form=1&balance=200&to=2
{
"form": 1,
"balance": 2000,
"to": 2
}
- Service 서비스 : 비즈니스 로직 처리 컨트롤러가 받은 요청을 기반으로, DB 데이터 조회 및 서비스 호출. 데이터 처리
- 트랜잭션 처리: 여러 DB 작업을 하나의 트랜잭션에 묶어 처리, 오류 발생시 롤백 (트랜잭션 : DB 상태 변화를 수행하는 작업 단위)
- DTO 사용
- 여러 번의 업데이트: 서비스에서 여러 개의 레포지토리 메서드를 호출하여 하나의 트랜잭션 내에서 여러 번의 DB 업데이트 작업 처리
- 레포지토리 의존성: 서비스는 레포지토리를 의존
class DTO {
// DTO : 계층간 데이터 교환을 위해 사용하는 객체
// DTO로 받은 데이터를 BC가 JSON으로 변환
private int from;
private int balance;
private int to;
}
- Repository 레포지토리 : DB 상호작용 데이터 저장, 조회 등 DB와 직접 연결되어 작업 처리 CRUD(Create, Read, Update, Delete) 작업 처리
IoC
- IoC (제어의 역전) : 객체가 필요로 하는 다른 객체를 외부에서 주입하는 방식.
- IoC컨테이너 : 객체를 관리, 생성, 의존성 주입 역할 수행
BoardController
는BoardService
객체를 직접 생성하지 않고, 스프링 IoC 컨테이너가 관리하고 생성
- DI (디펜던시 Dependency, 의존성 주입) : IoC를 실현하는 방법 중 하나로 IoC를 구현한 기술
즉, IoC가 개념이라면, DI는 그 개념을 실제 코드로 구현한 것
레이어책임(실습) - Dependency 의존성
- 전통방식 :
new
키워드를 사용해 객체를 직접 생성
class A {
private B b = new B(); // B 객체를 직접 생성
}
- 스프링 : 의존성 주입을 통해,
A
객체는B
객체를 스프링 컨테이너가 주입
package com.example.blog.Board;
import org.springframework.stereotype.Controller;
@Controller
public class BoardController {
// final : 객체가 생성될 때 반드시 초기화. 이후 변경 불가능
// boardService 필드를 final로 선언
private final BoardService boardService; // 생성자
public BoardController(BoardService boardService) {
this.boardService = boardService;
}
}
package com.example.blog.Board;
import org.springframework.stereotype.Service;
@Service
public class BoardService {
private final BoardRepository boardRepository;
public BoardService(BoardRepository boardRepository) {
this.boardRepository = boardRepository;
}
}
Share article