쌍용 강북 교육센터 국비학원 Day 87일차
MVC 패턴을 이용한 JSP 프로젝트 약 3주간의 세미프로젝트가 끝나고 마지막 파이널 프로젝트를 위한 Spring을 배워 적용시키는 시간이다.
(길다면 길고 짧다면 짧은시간이었지만 처음으로 JSP를 구현해봤지만 조금 아쉬움이 남는 프로젝트였다. 다음 프로젝트에는 이제 어떻게 설계를 해야하고 어떻게 생각을 하고 구현해야하는지 감각을 느낀 것 같다.)
Spring Framework
스프링 프레임워크를 이용한 기본적인 세팅과 구현순서이다.
web.xml의 세팅



root-context.xml 세팅

url - DB와 연결할 IP주소
username - 해당 DB의 접속할 유저이름
password - 해당 DB의 접속할 비밀번호



#18. Controller 에서 만들어진 데이터 정보를 view단 페이지인 jsp 페이지로 넘길시 view단 페이지의 지정은 return "view단페이지"; 와 같이 String 타입으로 넘겨주면 InternalResourceViewResolver 클래스의 객체가 이 문자열을 받아와서 prefix에 적어둔 경로를 view단페이지 앞에 붙이고, view단페이지 뒤에는 .jsp 를 붙여서 view단 페이지로 설정해준다.
예) Controller 에서 return "product/prodview"; 로 하면 자동적으로
view단 페이지는 "/WEB-INF/views/product/prodview.jsp"; 가 되어진다.
- web.xml 에 기술된 DispatcherServlet 에게 뷰 정보를 전달하는 방법
Controller 단 에서 String 타입으로 뷰 이름을 주는 경우, 뷰 이름으로부터 실제로 사용할 뷰 객체를 매핑하여 결정(해결) 해주는 뷰 리졸버가 필요하다. InternalResourceViewResolver 는 Default (기본) 뷰 리졸버 로서 JSP를 뷰로 사용할 때 쓰인다.

Controller 선언


사용자 웹브라우저 요청 (View - http://... *.action) => DispatcherServlet => @Controller 클래스 <=> Service단(핵심업무로직단, business logic단) <=> Model단 [Repository] (DAO, DTO) <=> myBatis <=> DB (오라클)
@Controller 클래스 - View Resolver => View단 (.jsp 또는 Bean명) => 사용자 웹브라우저 요청 (View 페이지)
사용자(클라이언트) 가 웹브라우저에서 http://localhost:9090/board/test/test_insert.action 을 실행하면 배치서술자인 web.xml 에 기술된 대로 org.springframework.web.servlet.DispatcherServlet 이 작동된다.
DispatcherServlet 은 bean 으로 등록된 객체중 controller 빈을 찾아서 URL값이 "/test_insert.action" 으로 매핑된 메소드를 실행시키게 된다. Service단 객체를 업무 로직단 (비지니스 로직단) 이라고 부른다. Service단 객체가 하는 일은 Model단에서 작성된 데이터베이스 관련 여러 메소드들 중 관련있는것들만을 모아 모아서 하나의 트랜잭션 처리 작업이 이루어지도록 만들어주는 객체이다.
여기서 업무라는 것은 데이터베이스와 관련된 처리 업무를 말하는 것으로 Model 단에서 작성된 메소드를 말하는 것이다. 이 서비스 객체는 @Controller 단에서 넘겨받은 어떤 값을 가지고 Model 단에서 작성된 여러 메소드를 호출하여 실행되어지도록 해주는 것이다. 실행되어진 결과값을 @Controller 단으로 넘겨준다.
Service 선언

DAO 선언


#35. 의존객체 주입하기 (DI: Dependency Injection)
=> 스프링 프레임워크는 객체를 관리해주는 컨테이너를 제공해주고 있다. 스프링 컨테이너는 bean으로 등록되어진 BoardController 클래스 객체가 사용되어질때, BoardController 클래스의 인스턴스 객체변수 (의존객체) 인 BoardService service 에 자동적으로 bean 으로 등록되어 생성되어진 BoardService, service 객체를 Controller 클래스의 인스턴스 변수 객체로 사용되어지게끔 넣어주는 것을 의존객체주입이라고 부른다. 이것이 바로 IoC (Inversion of Control = 제어의 역전) 인 것이다.
즉, 개발자가 인스턴스 변수 객체를 필요에 의해 생성해주던 것에서 탈피하여 스프링은 컨테이너에 객체를 담아 두고, 필요할 때에 컨테이너로부터 객체를 가져와 사용할 수 있도록 하고 있다. 스프링은 객체의 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있으므로, 더이상 개발자에 의해 객체를 생성 및 소멸하도록 하지 않고 객체 생성 및 관리를 스프링 프레임워크가 가지고 있는 객체 관리기능을 사용하므로 제어의 역전이라고 부른다. 그래서 스프링 컨테이너를 IoC 컨테이너라고도 부른다.
IOC (Inversion of Control) 란 ?
=> 스프링 프레임워크는 사용하고자 하는 객체를 빈 형태로 이미 만들어 두고서 컨테이너에 넣어둔 후 필요한 객체 사용시 컨테이너에서 꺼내어 사용하도록 되어있다. 이와 같이 객체 생성 및 소멸에 대한 제어권을 개발자가 하는것이 아니라 스프링 Container 가 하게됨으로써 객체에 대한 제어역할이 개발자에게서 스프링 Container로 넘어가게 됨을 뜻하는 의미가 제어의 역전 즉, IOC라고 부른다.
- 느슨한 결합 (Loose Coupling , 인터페이스 활용)
스프링 컨테이너가 Controller 클래스 객체에서 Service 클래스 객체를 사용할 수 있도록 만들어주는 것을 '느슨한 결합' 이라고 부른다. 느슨한 결합은 Controller 객체가 메모리에서 삭제되더라도 Service객체는 메모리에서 동시에 삭제되는 것이 아니라 남아 있다.
- 단단한 결합 (Tight Coupling , 개발자가 인스턴스 변수 객체를 필요에 의해서 생성해주던 것)
private InterBoardService service = new BoardService(); 처럼 new 를 이용해 생성해주던것을 말한다.
=> Controller 객체가 메모리에서 삭제 되어지면 Service객체는 멤버변수 (필드)이므로 메모리에서 자동적으로 삭제되어진다.
스프링 관련 참고글
스프링과 스프링부트(Spring Boot)ㅣ정의, 특징, 사용 이유, 생성 방법
스프링은 Java 백엔드 개발에 있어 떼어놓을 수 없는 프레임워크입니다. Java 백엔드의 핵심 기술이 되는 스프링 프레임워크와 스프링 부트가 무엇인지, 나아가 스프링 부트를 활용하여 프로젝트
www.codestates.com
'Spring' 카테고리의 다른 글
| Spring Filter, Interceptor, AOP 구조에 대해 (4) | 2025.08.18 |
|---|---|
| 쌍용강북교육센터 국비 학원 Day 89일차 Spring (AOP) (0) | 2023.05.22 |
| 쌍용강북교육센터 국비 학원 Day 88일차 Spring (Controller, tiles 적용) (0) | 2023.05.10 |