DAO (Data Access Object)

  • 실제로 DB에 접근하는 객체
  • Persistence Layer(DB에 data를 CRUD하는 계층) 이다.
  • Service와 DB를 연결하는 역할

 

DTO (Data Transfer Object)

  • 계층간 데이터 교환을 위한 객체(Java Beans)
  • DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.
  • 로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.

 

'Web > Spring' 카테고리의 다른 글

[Spring] POJO 와 Java Beans  (0) 2020.12.28
[Spring] @Controller 와 @RestController  (0) 2020.12.28
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] DI (Dependency Injection, 의존성 주입)  (0) 2020.12.17
[Spring] MyBatis 란?  (0) 2020.12.15

Model

  • Java Beans
  • 애플리케이션 상태(data)를 나타낸다.
  • 일반적으로 POJO로 구성

 

View

  • JSP
  • Model data의 렌더링을 담당, HTML output을 생성

 

Controller

  • Servlet
  • View와 Model 사이의 인터페이스 역할
  • Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달
  • 즉, Model 객체와 이 Model을 화면에 출력한 View Name을 반환
  • Controller --> Service --> DAO --> DB

 

Spring Framework가 제공하는 Class

DispatcherServlet

  • Spring Framework가 제공하는 Servlet 클래스
  • 사용자의 요청을 받는다.
  • DispatcherServlet이 받은 요청은 HandlerMapping으로 넘어간다.

 

HandlerMapping

  • 사용자의 요청을 처리할 Controller를 찾는다. (Controller URL Mapping)
  • @RequestMapping("/url") annotation을 명시하면 해당 URL에 대한 요청이 들어 왔을 때 해당 클래스 또는 메서드에 Mapping한다.

 

ViewResolver

  • Controller가 반환한 View Name에 prefix, suffix를 적용하여 View Object를 반환
  • View에 Controller에게 받은 Model을 전달

'Web > Spring' 카테고리의 다른 글

[Spring] @Controller 와 @RestController  (0) 2020.12.28
[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] DI (Dependency Injection, 의존성 주입)  (0) 2020.12.17
[Spring] MyBatis 란?  (0) 2020.12.15
[Spring] Maven 과 Gradle  (0) 2020.12.13

Web Server

  • Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .css 등)를 제공하는 프로그램
  • 즉, HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스 하는 기능
  • 동적인 컨텐츠 제공을 위한 요청을 전달한다.
  • 클라이언트의 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다.
  • 예) Apache Server, Nginx

 

WAS (Web Application Server)

  • DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
  • WAS = Web Server + Web Container
  • Web Server의 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 제시
  • 업무를 처리하는 비즈니스 로직 수행
  • 예) Tomcat, Jeus

 

Web Server 와 WAS를 분리하는 이유?

  • 자원 이용의 효율성 및 장애극복
  • 배포 및 유지보수의 편의성
  • 효율적인 분산처리 가능

DI (Dependency Injection, 의존성 주입)

  • 빈(Bean) 설정파일에서 의존 관계의 정보만 추가해주면 조립은 Spring Framework가 해준다.

  • @Autowired 어노테이션으로 Bean을 자동 주입 가능

  • 인터페이스를 사용하여 객체 간의 결합력을 낮춘다.

  • 높은 재사용성, 변경에 민감하지 않고 독립적인 테스트가 가능하다.

 

의존성을 주입하는 방법

등록된 빈을 사용하기 위한 Spring Framework의 DI 방법은 생성자 주입, 수정자 주입, 필드 주입 3가지가 있다.

여기서 생성자 주입과 필드 주입을 볼 것이다.

 

생성자 주입 (Constructor Injection)

단일 생성자인 경우에는 @Autowired 어노테이션 조차 붙이지 않아도 되지만 2개 이상의 생성자인 경우에는 어노테이션을 붙여주어야 한다.

@Controller
public class HelloController {

	private HelloService helloService;

	@Autowired
	public HelloController(HelloService helloService) {
		this.helloService = helloService;
	}

}

 

필드 주입 (Field Injection)

필드 주입은 간단하다. 필드에 @Autowired 어노테이션을 붙여주면 자동으로 의존성 주입이 된다.

편리하기 때문에 많이 접할 수 있다.

@Controller
public class HelloController {

	@Autowired
	private HelloService helloService;

}

 

왜 생성자 주입을 권장할까?

  • A가 B를 다시 B가 A를 순환 참조하는 것을 방지할 수 있다.

  • 필드를 final로 선언할 수 있기 때문에 실행 중에 객체가 변하는 것을 막을 수 있고, 오류를 사전에 방지할 수 있다.

  • 의존관계가 실행중에 동적으로 변경하는 경우는 거의 없음므로 생성자 주입을 권장한다.

'Web > Spring' 카테고리의 다른 글

[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] MyBatis 란?  (0) 2020.12.15
[Spring] Maven 과 Gradle  (0) 2020.12.13
[Spring] Spring Framework 와 Spring Boot  (0) 2020.12.13

+ Recent posts