관리 메뉴

공부한것들을 정리하는 블로그 입니다.

2-1. IoC컨테이너 학습 : Servlet 클래스 만들어보기(not POJO) 본문

(2019) 사이드 프로젝트/BoardWeb(게시판-MVC1,MVC2,스프링MVC)

2-1. IoC컨테이너 학습 : Servlet 클래스 만들어보기(not POJO)

호 두 2019. 6. 13. 10:23
반응형

IoC : 제어의역행

우리가 비즈니스 컴포넌트를 개발할 때 항상 신경 쓰는 것이 바로 낮은 결합도와 높은 응집도이다. 스프링은 제어의 역행(IoC )을 통해 애플리케이션을 구성하는 객체간의 느슨한 결합, 즉 낮은 결합도를 유지한다. 

IoC가 적용되면 객체 생성을 개발자가 자바 코드로 직접 처리하는 것이 아니라 컨테이너가 대신 처리한다. 그리고 객체와 객체 사이의 의존관계 역시 컨테이너가 처리하기 때문에, 결과적으로 소스에 의존관계가 명시되지 않으므로 결합도가 떨어져서 유지보수가 편리해진다.

 

 

POJO : Plain Old Java Object. 말 그대로 평범한 옛날 자바 객체를 의미한다.

Servlet 클래스는 대표적인 not POJO클래스이다.

 

 

Servlet클래스는 작성 규칙이 존재한다.

- javax.servlet, javax.servlet.http 패키지를 import해야한다

- public클래스로 선언되어야 한다

- Servlet, GenericServlet, HttpServlet 중 하나를 상속해야 한다

- 기본 생성자가 있어야 한다

- 생명주기에 해당하는 메소드를 재정의(오버라이딩)한다.

 

 

 

이번글에서는

상기 규칙에 맞춰 Servlet을 작성해보고,

이클립스에서 실행되게 환경을 구축해본 후,

해당 환경에 대해 분석하며 이야기해보겠다.

 

 

 

먼저 HelloServlet을 작성한다.

 

HelloServlet을 servlet으로서 인식하기위해 spring 설정파일에서 등록해준다.

 

 

 

서버를 구동해보면 정상 출력되는 것을 확인 가능하다.

 

 

 

 

 

 

스프링 프레임워크를 이해하는 데 가장 중요한 개념이 바로 컨테이너이다. 컨테이너의 개념은 스프링에서 처음 사용된 것은 아니며, 기존의 서블릿이나 EJB기술에서 이미 사용해왔다. 그리고 대부분 컨테이너는 비슷한 구조와 동작 방식을 가지고 있으므로 서블릿 컨테이너를 통해 스프링 컨테이너의 동작 방식을 유추해볼 수 있다.

 

위에서 실습해본 서블릿 클래스를 해석해보자면

1. 브라우저에서 /hello.do라는 URL요청을 전송시

2. hello라는 이름으로 등록된 hello.HelloServlet 클래스를 찾아

3. 객체를 생성하고 실행한다는 설정이다

 

 

서블릿은 자바로 만들어진 클래스이다. 따라서 반드시 객체 생성을 해야 객체가 가지고 있는 메소드도 호출할 수 있다. 그런데 실습에 사용된 소스에는 객체 생성 코드가 없다. 바로 서블릿 컨테이너가 서블릿 객체를 생상했으며 doGet(0메서드를 호출해준 것이다.

 

 

좀 더 구체적으로 다시 해석해보자면

1. 서블릿 컨테이너가 WEB-INF/web.xml 설정 파일을 로딩하여 구동

2. 브라우저에서 /hello.do 요청을 수신

3. 서블릿 컨테이너가 hello.HelloServlet 클래스를 찾아 

4. 서블릿 객체를 생성하고 doGet()메서드를 호출

5. doGet()메서드 실행 결과를 클라이언트 브라우저로 전송

 

 

컨테이너는 자신이 관리할 클래스들이 등록된 xml 설정 파일을 로딩하여 구동한다.

그리고 클라이언트의 요청이 들어오는 순간 xml 설정 파일을 참조하여 객체를 생성하고, 객체의 생명주기를 관리한다.

 

 

이야기가 나온김에, 결합도와 관련된 내용을 조금 더 다루어보도록 하겠다.

 

 

결합도란 하나의 클래스가 다른 클래스와 얼마나 많이 연결되어 있는지를 나타내는 표현이며, 결합도가 높은 프로그램은 유지보수가 어렵다.

 

객체지향에서 자주 거론되는 표현중에 결합도를 낮추고 응집도를 높인다는 이야기가 있다. 이것은 또한 개방폐쇄원칙(OCP)과도 상관관계가 있다.

 

개방폐쇄원칙은 "클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다" 라는 프로그래밍 원칙이다. 이는 높은 응집도와 낮은 결합도를 가져야 한다는 의미이고 그 과정에서 추상화와 다형성 등의 학습이 동반된다면 더욱 이해하기 쉬울것이다.

 

반응형
Comments