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

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

MyBatis

MyBatis는 자바 퍼시스턴스 프레임워크의 하나로 XML이나 Annotation을 사용한다.

그리고 SQL Mapper를 이용하여 자바의 객체를 SQL문과 연결하여 빠르고 편리하게 DB에 접근할 수 있게 해줍니다.

MyBatis는 소스 코드와 SQL문을 분리하여 간결성과 유지보수성이 향상되고 복잡한 쿼리나 다이나믹한 쿼리에 강합니다.

MyBatis 아키텍처

서비스에서 DAO를 호출하고 MyBatis를 사용합니다.

 

MyBatis를 사용하는 데이터 액세스 계층

MyBatis는 Data Access Layer에서 사용하는 프레임워크입니다..

그림과 같이 Controller에서 Service를 호출하고 Service가 DAO 계층에 있는 메소드를 호출하면 DAO에서 MyBatis를 호출합니다.

 

MyBatis의 주요 컴포넌트의 역할

  • MyBatis 설정파일 (SqlMapConfig.xml) : 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경정보를 설정
  • SqlSession FactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성한다.
  • SqlSessionFactory : SqlSession을 생성한다.
  • SqlSession : 핵심적인 역할을 하는 클래스로서 SQL실행이나 트랜잭션 관리를 실행한다.
  • mapping 파일 (user.xml) : SQL문과 OR Mapping을 설정한다.

 

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

[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] DI (Dependency Injection, 의존성 주입)  (0) 2020.12.17
[Spring] Maven 과 Gradle  (0) 2020.12.13
[Spring] Spring Framework 와 Spring Boot  (0) 2020.12.13

+ Recent posts