Spring 공부

hkkm·2020년 1월 16일
1
새로운 프로젝트를 할 때마다 알아야할 것들, 해결해야할 문제가 계속 생긴다. 
계속해서 공부하고 배워야한다.
캠프 끝나고 혼자서 만들어봐야함.

JSP Web Application Architecture

Model 1


뷰와 로직을 모두 JSP가 처리.
구성: JSP/자바 빈 혹은 서비스 클래스

구조가 단순하여 익히기가 쉽다. 분업이 쉽지 않고 유지, 보수가 어렵다. 보안 문제 발생.

Model 2

MVC(Model-View-Controller)

구조가 복잡함. 유지 보수 용이. 분업에 좋다.

구성

Controller(Servlet): 요청을 받아서 처리함. 모든 흐름 제어. 요청이 들어오면 분석하여 관련된 모델을 사용함. 처리 결과를 받아서 뷰를 선택하여 정보를 보냄.
Model(java beans): 데이터 access. Controller로부터 온 요청을 처리함. 수행 결과를 Controller에 보냄.
View(JSP): 데이터 보여줌. 요청에 대하 처리 결과를 출력한다.


Spring framework

  1. 스프링이란?

① 흔히 스프링이라 부르지만 "스프링 프레임워크(Spring Framework)"라고 하는 것이 정확한 표현이다.

② 자바(JAVA) 엔터프라이즈 개발을 위한 "오픈소스(Open Source)" 애플리케이션 프레임워크(Framework)

  • Open Source : 소프트웨어(S/w) 혹은 하드웨어의(H/W) 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어, 오픈 소스 라이선스에 준하는 모든 통칭을 일컫는다. (소스가 공개되어 여러 개발자가 플랫폼을 함께 개발, 구축, 보완해 나가는 시스템. )
  • Framework : 개발할 때 설계 기본이 되는 뼈대나 구조 / 환경 (문제 영역을 해결한 재사용, 확장 가능한 라이브러리.)

※다음 개념(③, ④)은 DI, AOP 등 스프링을 좀더 이해 한 후 생각해 보자.

③ 종속 객체를 생성해주고, 조립할 수 있는 프레임 워크

④ 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해준다.

⑤ 우리나라의 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 "전자정부 표준프레임워크"의 기반 기술로서 쓰이고 있다.

  1. 스프링 특징

① "경량 컨테이너"(크기와 부하의 측면)로서 자바 객체를 직접 관리

  • 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

② 제어 역행(IoC : Inversion of Control)

  • 애플리케이션의 느슨한 결합을 도모.

  • 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자의 코드를 호출한다.

  • 어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경 써야 할 것을 줄이는 전략입니다. 이것을 제어가 역전 되었다 라고 합니다. 일반적으로 라이브러리는 프로그래머가 작성하는 클라이언트 코드가 라이브러리의 메소드를 호출해서 사용하는 것을 의미 합니다. 프레임워크를 규정하는 특성은 프레임워크의 메소드가 사용자의 코드를 호출 한다는데 있습니다.
    [출처]https://vandbt.tistory.com/43

③ 의존성 주입(DI : Dependency Injection)

  • 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
    - Constructor 이용
    Setter 이용
    Interface 이용

③ 관점지향 프로그래밍(AOP : Aspect-Oriented Programming)

  • 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

④ 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 "컨테이너"(Container)라고 할 수 있다.

  • iBatis, myBatis나 Hibernate 등 완성도가 높은 데이터베이스처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

⑤ 트랜잭션 관리 프레임워크

  • 추상화된 트랜잭션 관리를 지원하며 설정파일(xml, java, property 등)을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.

⑥ 모델-뷰-컨트롤러 패턴

  • 웹 프로그램밍 개발 시 거의 표준적인 방식인 "Spring MVC"라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다.

  • DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.

⑦ 배치 프레임워크

  • 스프링은 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는 일괄 처리(Batch Processing)을 지원하는 배치 프레임워크를 제공한다. 기본적으로 스프링 배치는 Quartz 기반으로 동작한다.

⑧ 즉 공통 부분의 소스 코딩이 용이하며 확장성도 매우 높다.

출처: https://goddaehee.tistory.com/156 [갓대희의 작은공간]


DAO(Data Access Object)

실제로 DB에 접근하는 객체.
SQL로 DB에 접근한다.
Service와 DB를 연결한다.
CRUD API를 제공한다.

DTO(Data Trasnfer Object)

  • 계층간 데이터 교환을 위한 객체(Java Beans)이다.
    DB에서 데이터를 얻어 Service나 Controller 등으터 보낼 때 사용하는 객체를 말한다.
    즉, DB의 데이터가 Presentation Logic Tier로 넘어오게 될 때는 DTO의 모습으로 바껴서 오고가는 것이다.
    로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.
    하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 때문에 DTO클래스에는 setter가 없다. (대신 생성자에서 값을 할당한다.)
  • Request와 Response용 DTO는 View를 위한 클래스
    - 자주 변경이 필요한 클래스
    - Presentation Model
    - toEntity() 메서드를 통해서 DTO에서 필요한 부분을 이용하여 Entity로 만든다.
    - 또한 Controller Layer에서 Response DTO 형태로 Client에 전달한다.
  • 참고: VO(Value Object) vs DTO
    VO는 DTO와 동일한 개념이지만 read only 속성을 갖는다.
    VO는 특정한 비즈니스 값을 담는 객체이고, DTO는 Layer간의 통신 용도로 오고가는 객체를 말한다.
    [출처]https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

Spring 기반 프로젝트 만들기

  1. 프로젝트 생성

  1. Spring MVC Project 선택

프로젝트명을 입력하고
'Spring MVC Project'를 선택한다.

  1. 패키지명 설정

Spring Project구조 참고
https://m.blog.naver.com/scw0531/220986622908
https://m.blog.naver.com/scw0531/220986622908?view=img_8

Maven

빌드를 자동화 해주는 빌드 툴
Maven Repository에서 원하는 라이브러리 찾은 후
Maven 관련 pom.xml 코드를 복사 -> 내 프로젝트의 pom.xml에 붙여넣기

Velog 간단 사용법

https://velog.io/@jinuku/Velog-%EA%B0%84%EB%8B%A8-%EC%82%AC%EC%9A%A9%EB%B2%95

0개의 댓글