1. JSP Model1, Model2, Spring MVC pattern 차이
- Model1
- Servlet(Controller)파일인 jsp 파일안에서 view와 logic을 처리한다.
- 구성 요소
- JSP(View + Controller): Java 코드의 출력을 위한 코드 있음
- Java Bean(Model)
- 장점
- 단점
- 복잡한 코드
- 어려운 분업
- 어려운 유지보수
- 보안이 좋지 않음
- 개발자가 사용하기엔 좋지만, 디자이너가 작업하기 어렵다.
- Model2
- Servlet(Controller)는 Java Bean(Model)로 부터 객체를 자겨오고 JSP(View)에 요청을 보낸 후, JSP(View)와 Java Bean(Model)은 서로 함수를 호출하고 통신한다.
- 구성 요소
- Servlet(Controller): 흐름 제어
- JSP(View): 요청결과를 user에게 보여줌
- Java Bean(Model): logic처리
- 장점
- 단점
- Model1과 Model2는 완전히 반대되는 장점과 단점을 가지고 있으므로 상황에 따라 적절한 선택을 하는 것이 좋다.
- Spring MVC pattern
- MVC(Model-View-Controller)
- Model2와 MVC 패턴의 형태는 완전히 같은 형태
- MVC 패턴(Model2)
- Model(Java Bean)
- View(JSP)
- Controller(Servlet)
2. Spring framework
- Spring 이라고도 불린다.
- java 엔터프라이즈 개발을 위한 경량급 오픈소스 애플리케이션 프레임워크
- 크기와 부하의 측면에서 경량
- 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
- 우리나라 공공기관에서 웹 서비스 개발시 사용을 권장하는 전자정부 표준프레임워크의 기반 기술
- 특징
- POJO(Plain Old Java Object)
- 상속, 인터페이스가 필요없는 객체
- 순수하게 getter, setter로 이루어진 bean
- DI(Dependency Injection)
- 의존형 주입
- 객체의 의존성을 외부에서 주입하는 개념 -> 각각 의존성이 존재할 경우 Spring이 서로 연결시켜줌
- 애플리케이션 구성
- ex) 다양한 DB 사용 가능
- AOP(Aspect Orientated Programming)
- 관점지향프로그래밍
- 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 관리
- 횡단 관심사 분리
- PSA(Portable Service Abstraction)
- 일관된 서비스 추상화
- 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조
3. Spring boot
- 독립실행형 애플리케이션을 생성
- tomcat, jettry, undertow를 내장
- 스프링, 외부 라이브러리 자동 설정
- starter 컴포넌트 쉽게 추가
4. IoC(Inversion of Control)
- 역제어 -> 제어의 주체가 바뀜
- 보통 자바 기반으로 애플리케이션을 개발할 때 자바 객체를 생성하고 서로간의 의존 관계를 연결시키는 작업에 대한 제어권은 개발되는 애플리케이션에 있지만 Servlet, EJB 등 사용하는 경우 각각의 Container에게 제어권이 넘어간다.
- 객체의 생성~생명주기 관리, 모든 객체에 대한 제어권이 바뀐 것을 의미
5. DI
- Constructor Injection
- 생성자를 이용한 의존성 주입
- 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입
- 생성자에 파라미터를 만들어두고 DI 컨테이너가 의존할 object 레퍼런스를 넘겨주는 방식
- Setter Injection
- setter() method를 이용한 의존성 주입
- 의존성을 입력받는 setter method를 만들고 이를 통해 의존성을 주입
- setter() method는 외부에서 object 내부의 attribute값을 변경하려는 용도로 사용 -> 파라미터로 전달받은 값을 내부의 인스턴스 변수에 저장하는 것
- Interface Injection
- 초기화 인터페이스를 이용한 의존성 주입
- 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 실행할 때에 이를 통하여 의존성을 주입
- public interface를 정의한 후, 구현하면 DI가 이루어지도록 한다.
6. DTO(Data Transfer Object)
- VO(Value Object)로 바꿔 말할 수 있음 (단, VO는 read만 가능)
- 계층간 데이터 교환을 위한 객체? Java Beans?
- 계층간의 컨트롤러, View, 비지니스 계층, 퍼시스턴스 계층
7. DAO(Data Access Object)
- 실질적으로 DB에 접근하는 객체
- Dasabase의 data에 access하는 트랜잭션 객체
- 효율적인 커넥션 관리와 보안성
- DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 object