2022.10.11

Jimin·2022년 10월 11일
0

비트캠프

목록 보기
54/60
post-thumbnail
  • 스프링 프레임워크
    • Spring IoC 컨테이너 사용법
    • Spring WebMVC 프레임워크 사용법
  • board-app 프로젝트 수행
      1. Spring IoC 컨테이너 도입하기: 페이지 컨트롤러 생성 자동화
      1. Spring WebMVC 프론트 컨트롤러 도입하기

079. Spring IOC 컨테이너 도입하기:
페이지 컨트롤러 자동화

Spring IoC 컨테이너를 사용하여 객체를 자동으로 생성하는 방법

Bean

= Object
= instance

IoC (Inversion of Controll, 역제어)

  1. 일반적인 경우: 객체가 필요하면 생성해서 쓴다.
    → 역제어: 필요한 객체를 외부에서 만들어 주입해 준다.
    ⇒ 객체를 교체하기 쉽다. (Dependency Injection(DI), 의존객체주입)
  2. 일반적인 경우: 어떤 작업을 수행하기 위해 메서드를 호출
    → 역제어: 특정 상태에 놓일 때 등록된 메서드가 자동 호출된다.
    = 리스너, 필터, 서블릿, ... (요청 들어오면 호출됨)

IoC ← (DI, Listener)


1단계 - Spring Ioc 컨테이너 프레임워크

  • search.maven.org 에서 spring-context 라이브러리 검색한다.
  • 빌드 스크립트 파일(build.gradle)에 의존 라이브러리 정보를 추가한다.
  • gradle eclipse 실행한다.
  • 이클립스 IDE에서 프로젝트르 갱신한다.
implementation 'org.springframework:spring-context:5.3.23'

DataSource의 역할1

DataSource는 한 스레드에 대해 같은 Conncection 객체를 리턴한다.
→ 왜? → 트랜잭션을 다루기 위해!
⇒ 같은 Connection이어야 그 커넥션을 통해 수행한 작업이 같은 작업이 묶일 수 있다.

DataSource의 역할2: 커넥션 재사용

Connection Pool

커넥션을 생성 → 사용 → 반납 → 재사용 ⇒ 커넥션 생성 과정에서 사용자 인증, 권한 검사 시간을 줄일 수 있다.

DataSource의 Connection Pool 구동 과정

커넥션 요청 (DVD 대여와 유사하다.)

  1. 없으면, 새로 만들어 준다.
  2. 있으면, 기존 객체를 빌려 준다.
    → 생성에 소요되는 시간(사용자 인증, 권한 검사)을 줄일 수 있다.
    → 가비지 생성을 줄일 수 있다. (메모리를 효율적으로 운영할 수 있다.)

2단계 - ContextLoaderListener에서 스프링 IoC 컨테이너를 준비한다.

  • com.bitcamp.board.config.AppConfig 클래스 생성
    • 스프링 IoC 컨테이너의 설정을 수행하는 클래스
  • com.bitcamp.board.listener.ContextLoaderListener 클래스 변경

3단계 - Spring IoC 컨테이너에서 DataSource 객체를 생성한다.

  • Spring JDBC 라이브러리 추가한다.
    • search.maven.org 에서 spring-jdbc 라이브러리 검색한다.
    • 빌드 스크립트 파일(build.gradle)에 의존 라이브러리 정보를 추가한다.
    • gradle eclipse 실행한다.
    • 이클립스IDE에서 프로젝트를 갱신한다.
  • com.bitcamp.board.config.AppConfig 클래스 변경
    • createDataSource(): DataSource 구현체를 준비한다.

4단계 - Spring IoC 컨테이너에서 트랜잭션 관리자를 생성한다.

  • com.bitcamp.board.config.AppConfig 클래스 변경
    • createTransactionManager(): PlatformTransactionManager 구현체를 준비한다.

5단계 - 스프링에서 생성한 DataSource를 사용하도록 DAO를 변경한다.

  • com.bitcamp.sql.DataSource 클래스 삭제
  • com.bitcamp.board.dao.MariaDBBoardDao 클래스 변경
  • com.bitcamp.board.dao.MariaDBMemberDao 클래스 변경

6단계 - 스프링에서 DAO 객체를 생성한다.

  • com.bitcamp.board.listener.ContextLoaderListener 클래스 변경
    • DataSource 생성 코드 삭제
    • TransactionManager 생성 코드 삭제
    • DAO 생성 코드 삭제
  • com.bitcamp.board.dao.MariaDBBoardDao 클래스 변경
    • Spring IoC 컨테이너가 관리하는 객체임을 표시한다.
  • com.bitcamp.board.dao.MariaDBMemberDao 클래스 변경
    • Spring IoC 컨테이너가 관리하는 객체임을 표시한다.
  • com.bitcamp.board.config.AppConfig 클래스 변경
    • @Component가 붙은 클래스를 찾아 객체를 생성하도록 그 클래스가 소속된 패키지를 지정한다.

7단계 - 스프링에서 서비스 객체를 생성한다.

  • com.bitcamp.board.listener.ContextLoaderListener 클래스 변경
    • 서비스 객체 생성 코드 삭제
  • com.bitcamp.board.service.DefaultBoardService 클래스 변경
    • Spring IoC 컨테이너가 관리하는 객체임을 표시한다.
    • 트랜잭션 매지저를 Spring 에서 제공하는 객체로 교체한다.
  • com.bitcamp.board.service.DefaultMemberService 클래스 변경
    • Spring IoC 컨테이너가 관리하는 객체임을 표시한다.

8단계 - 스프링에서 페이지 컨트롤러를 생성한다.

  • com.bitcamp.board.controller.XxxController 클래스 변경
    • Spring IoC 컨테이너가 관리하는 객체임을 표시한다.
  • com.bitcamp.board.listener.ContextLoaderListener 클래스 변경
    • 페이지 컨트롤러 생성 코드를 삭제한다.

9단계 - Spring IoC 컨테이너를 프론트 컨트롤러에 주입한다.

  • com.bitcamp.servlet.DispatcherServlet 클래스 변경
    • Spring IoC 컨테이너를 주입받는 생성자로 변경한다.
  • com.bitcamp.board.listener.ContextLoaderListener 클래스 변경
    • DispatcherServlet 객체를 생성할 때 생성자 파라미터로 Spring IoC 컨테이너를 주입한다.

10단계 - Spring IoC 컨테이너에서 페이지 컨트롤러를 꺼내 실행한다.

  • com.bitcamp.servlet.DispatcherServlet 클래스 변경

080. Spring WebMVC 프론트 컨트롤러 도입하기

Spring WebMVC 프레임워크에서 제공하는 DispatcherServlet 사용법

1단계 - Spring WebMVC 프레임워크를 프로젝트에 추가한다.

  • search.maven.org 에서 spring-webmvc 라이브러리 검색한다.
  • 빌드 스크립트 파일(build.gradle)에 의존 라이브러리 정보를 추가한다.
    • 기존의 spring-context 라이브러리를 제거한다.
    • webmvc 라이브러리가 context 라이브러리를 의존하기 때문에 자동으로 포함된다.
  • gradle eclipse 실행한다.
  • 이클립스IDE에서 프로젝트를 갱신한다.

2단계 - 스프링에서 제공하는 프론트 컨트롤러를 사용한다.

  • com.bitcamp.servlet.DispatcherServlet 클래스 삭제
  • com.bitcamp.board.listener.ContextLoaderListener 클래스 변경

3단계 - 페이지 컨트롤러를 스프링 규격에 맞춰서 정의한다.

  • com.bitcamp.board.controller.XxxController 클래스 변경

4단계 - 서비스, DAO 객체의 역할을 설명하는 애노테이션으로 변경한다.

  • com.bitcamp.board.dao.*Dao 클래스 변경
  • com.bitcamp.board.service.*Service 클래스 변경
profile
https://github.com/Dingadung

0개의 댓글