본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 69일차 (2023-08-30) 자바 프로그래밍_68. Spring IoC 컨테이너를 이용하여 페이지 컨트롤러를 관리하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 8. 31.
## 68. Spring IoC 컨테이너를 이용하여 페이지 컨트롤러를 관리하기

- Spring IoC 컨테이너를 이용하여 객체를 자동 생성하는 방법
- 의존 객체를 자동으로 주입하는 방법
- Spring IoC 컨테이너에 들어 있는 객체를 꺼내 사용하는 방법

 

https://central.sonatype.com/

 

Maven Central

Official search by the maintainers of Maven Central Repository.

central.sonatype.com

 

ㄴ spring-context 라이브러리 검색

=>

ㄴ spring-context 라이브러리 추가하는 Gradle 용 코드를 [Copy to clipboard] 선택하여 복사

=>

build.gradle (:app-server)

=>

ㄴ 코끼리 선택하여 빌드해주기

=>

ㄴ Project 선택

=>

ㄴ springframework 관련 라이브러리가 추가됨을 확인

 

 

=>

ㄴ Spring Framework 선택

=>

ㄴ 6.0.11 버전 > Reference Doc. 선택

=>

=>

ㄴ Core Technologies 선택

=>

ㄴ Introduction to the Spring IoC Container and Beans 선택

=>

ㄴ Container Overview 선택

=>

ㄴ org.springframework.context 선택

=>

ㄴ ApplicationContext 선택

=>

ㄴ AnnotationConfigApplicationContext 선택

=>

ㄴ 해당 클래스 확인 후 사용해보기

=>

DispatcherServlet.java

ㄴ AnnotationConfigApplicationContext 선언

=>
DispatcherServlet.java

ㄴ AnnotationConfigApplicationContext 객체 생성하기

 

 

 

ㄴ bitcamp.report 위치에 config 라는 이름의 새로운 패키지 생성

=>

ㄴ app-54-server 에 있는 AppConfig.java 복사해서 생성한 config 패키지에 붙여넣기

=>

config/AppConfig.java

ㄴ 해당 import 제거

=>

config/AppConfig.java

ㄴ springframework 라이브러리에 있는 Bean, ComponentScan 을 새로 import 해주기

=>

config/AppConfig.java

ㄴ handler -> controller 로 변경

=>

listener/ContextLoaderListener.java

ㄴ @WebListener 주석 처리 해주기

 

 

DispatcherServlet.java

ㄴ 해당 코드 제거

=>
DispatcherServlet.java

ㄴ 해당 코드 제거

=>

config/AppConfig.java

ㄴ AppConfig 의 sqlSessionFactory() 가 호출될 때 해당 출력문을 출력해보도록 함

=>

config/AppConfig.java

=>

config/AppConfig.java

ㄴ AppConfig 가 실행되면 해당 출력문을 출력해보도록 함

 

 

DispatcherServlet.java

ㄴ AppConfig.class 추가

=>

ㄴ loadOnStartup 을 1로 설정해주기

=>

DispatcherServlet.java

ㄴ DispatcherServlet 의 init()이 호출되면 해당 문구 출력되도록 함

=>

ㄴ App 실행 시 출력되는 해당 문구들 확인하여 어떤 메서드가 언제 호출되는지 확인

 

 

dao/MySQLBoardDao.java

ㄴ @Component 애노테이션 추가

=>

dao/MySQLBoardDao.java

ㄴ MySQLBoardDao() 가 호출될 경우 해당 문구 출력되도록 함

 

 

listener/ContextLoaderListener.java

ㄴ 해당 코드 제거

=>

listener/ContextLoaderListener.java

ㄴ 해당 코드 제거

=>

ㄴ 추가한 "MySQLBoardDao() 호출됨!" 문구가 출력됨을 확인

 

 

config/AppConfig.java

ㄴ @Bean 애노테이션 주석 처리 해주기

=>

ㄴ  스프링 IoC 컨테이너에서 해당하는 빈을 찾을 수 없어 발생하는 오류

=>

config/AppConfig.java

ㄴ 주석 다시 풀어주기

=>

dao/MySQLMemberDao.java

ㄴ @Component 애노테이션 추가하여 Spring 프레임워크에서 컴포넌트 스캔을 통해 해당 클래스를 스프링 빈으로 등록함

=>

dao/MySQLMemberDao.java

ㄴ MySQLMemberDao() 가 호출될 경우 해당 문구가 출력되도록 함

=>

ㄴ MySQLMemberDao() 가 호출되어 해당 문구가 출력됨을 확인

 

 

util/NcpConfig.java

ㄴ util 패키지에 위치한 NcpConfig.java 파일을 config 패키지로 이동 시킴

=>

config/NcpConfig.java

ㄴ @Component 애노테이션 추가하여 Spring 프레임워크에서 컴포넌트 스캔을 통해 해당 클래스를 스프링 빈으로 등록함

=>

config/NcpConfig.java

=>

=>

config/NcpConfig.java

ㄴ NcpConfig() 가 호출되면 해당 문구를 출력하도록 함

=>

config/NcpConfig.java

ㄴ @Component 애노테이션 제거

 

 

DispatcherServlet.java

ㄴ AnnotationConfigApplicationContext 에 NcpConfig.class 를 넘겨주도록 함

ㄴ 스프링 애플리케이션 컨텍스트를 설정하기 위해 Java 기반의 설정 클래스를 사용하는 데 사용

=>

ㄴ 설정한 해당 문구 출력됨

 

 

 

=>

ㄴ bitcamp.report 패키지 위치에 service 라는 이름의 새로운 패키지 생성

=>

ㄴ util 패키지에 있는 NcpObjectStorageService.java 파일을 생성한 service 패키지로 이동 시키기

=>

service/NcpObjectStorageService.java

ㄴ @Component 애노테이션은 스프링 프레임워크에서 컴포넌트 스캔(Component Scanning)을 통해 빈(Bean)으로 등록할 클래스를 표시하기 위해 사용함

=>

service/NcpObjectStorageService.java

ㄴ NcpObjectStorageService() 가 호출됨을 표시하도록 해당 출력문 추가

=>

config/AppConfig.java

ㄴ @ComponentScan 애노테이션의 basePackages 에 "bitcamp.report.service" 설정 추가해주기

ㄴ 컴포넌트 스캔은 스프링이 자동으로 클래스를 찾아서 빈으로 등록하는 방법 중 하나임

=>

ㄴ App 실행 시 NcpObjectStoraggeService() 호출됨을 확인

 

 

BoardAddController.java

ㄴ 스프링 빈으로 등록하고 "/board/add"라는 이름으로 식별되도록 함

 

 

BoardDeleteController.java

ㄴ 스프링 빈으로 등록하고 "/board/delete"라는 이름으로 식별되도록 함

 

 

BoardDetailController.java

ㄴ 스프링 빈으로 등록하고 "/board/detail"라는 이름으로 식별되도록 함

 

 

BoardFileDeleteController.java

ㄴ 스프링 빈으로 등록하고 "/board/fileDelete"라는 이름으로 식별되도록 함

 

 

BoardListController.java

ㄴ 스프링 빈으로 등록하고 "/board/list"라는 이름으로 식별되도록 함

 

 

BoardUpdateController.java

ㄴ 스프링 빈으로 등록하고 "/board/update"라는 이름으로 식별되도록 함

 

 

HomeController.java

ㄴ 스프링 빈으로 등록하고 "/"라는 이름으로 식별되도록 함

 

 

LoginController.java

ㄴ 스프링 빈으로 등록하고 "/auth/login"라는 이름으로 식별되도록 함

 

 

LogoutController.java

ㄴ 스프링 빈으로 등록하고 "/auth/logout"라는 이름으로 식별되도록 함

 

 

MemberAddController.java

ㄴ 스프링 빈으로 등록하고 "/member/add"라는 이름으로 식별되도록 함

 

 

MemberDeleteController.java

ㄴ 스프링 빈으로 등록하고 "/member/delete"라는 이름으로 식별되도록 함

 

 

MemberDetailController.java

ㄴ 스프링 빈으로 등록하고 "/member/detail"라는 이름으로 식별되도록 함

 

 

MemberListController.java

ㄴ 스프링 빈으로 등록하고 "/member/list"라는 이름으로 식별되도록 함

 

 

MemberUpdateController.java

ㄴ 스프링 빈으로 등록하고 "/member/update"라는 이름으로 식별되도록 함

=>
App 재실행

=>

 

 

DispatcherServlet.java

ㄴ Map 객체 생성 코드 제거

=>

DispatcherServlet.java

=>

DispatcherServlet.java

=>

DispatcherServlet.java

ㄴ 스프링 컨테이너에서 pageControllerPath에 해당하는 빈을 검색하여 pageController 라는 변수에 저장

=>

DispatcherServlet.java

ㄴ 해당 코드 제거

=>

App 실행

=>

=>

DispatcherServlet.java

ㄴ 데이터베이스와 관련된 객체를 웹 애플리케이션 전체에서 공유하기 위해 SqlSessionFactory를 서블릿 컨텍스트에 저장하도록 함

ㄴ 해당 설정을 통해 여러 페이지 컨트롤러나 서비스 클래스에서 동일한 SqlSessionFactory를 사용할 수 있으며, 설정을 중복으로 할 필요가 없어짐

=>

ㄴ 정상적으로 실행됨을 확인