새로운 프로젝트를 할 때마다 알아야할 것들, 해결해야할 문제가 계속 생긴다.
계속해서 공부하고 배워야한다.
캠프 끝나고 혼자서 만들어봐야함.
Model 1
뷰와 로직을 모두 JSP가 처리.
구성: JSP/자바 빈 혹은 서비스 클래스구조가 단순하여 익히기가 쉽다. 분업이 쉽지 않고 유지, 보수가 어렵다. 보안 문제 발생.
Model 2
MVC(Model-View-Controller)
구조가 복잡함. 유지 보수 용이. 분업에 좋다.
구성
Controller(Servlet): 요청을 받아서 처리함. 모든 흐름 제어. 요청이 들어오면 분석하여 관련된 모델을 사용함. 처리 결과를 받아서 뷰를 선택하여 정보를 보냄.
Model(java beans): 데이터 access. Controller로부터 온 요청을 처리함. 수행 결과를 Controller에 보냄.
View(JSP): 데이터 보여줌. 요청에 대하 처리 결과를 출력한다.
- 스프링이란?
① 흔히 스프링이라 부르지만 "스프링 프레임워크(Spring Framework)"라고 하는 것이 정확한 표현이다.
② 자바(JAVA) 엔터프라이즈 개발을 위한 "오픈소스(Open Source)" 애플리케이션 프레임워크(Framework)
※다음 개념(③, ④)은 DI, AOP 등 스프링을 좀더 이해 한 후 생각해 보자.
③ 종속 객체를 생성해주고, 조립할 수 있는 프레임 워크
④ 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해준다.
POJO(Plain Old Java Object)란 단순히 평범한 자바빈즈(Javabeans) 객체를 의미한다.
⑤ 우리나라의 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 "전자정부 표준프레임워크"의 기반 기술로서 쓰이고 있다.
- 스프링 특징
① "경량 컨테이너"(크기와 부하의 측면)로서 자바 객체를 직접 관리
② 제어 역행(IoC : Inversion of Control)
애플리케이션의 느슨한 결합을 도모.
컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어 필요에 따라 스프링에서 사용자의 코드를 호출한다.
어떠한 일을 하도록 만들어진 프레임워크에 제어의 권한을 넘김으로써 클라이언트 코드가 신경 써야 할 것을 줄이는 전략입니다. 이것을 제어가 역전 되었다 라고 합니다. 일반적으로 라이브러리는 프로그래머가 작성하는 클라이언트 코드가 라이브러리의 메소드를 호출해서 사용하는 것을 의미 합니다. 프레임워크를 규정하는 특성은 프레임워크의 메소드가 사용자의 코드를 호출 한다는데 있습니다.
[출처]https://vandbt.tistory.com/43
③ 의존성 주입(DI : Dependency Injection)
③ 관점지향 프로그래밍(AOP : Aspect-Oriented Programming)
AOP를 공부하려면 Filter, Interceptor, AOP를 비교하면서 공부하면 이해가 더 빠를 것이다.
④ 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 "컨테이너"(Container)라고 할 수 있다.
⑤ 트랜잭션 관리 프레임워크
⑥ 모델-뷰-컨트롤러 패턴
웹 프로그램밍 개발 시 거의 표준적인 방식인 "Spring MVC"라 불리는 모델-뷰-컨트롤러(MVC) 패턴을 사용한다.
DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.
⑦ 배치 프레임워크
⑧ 즉 공통 부분의 소스 코딩이 용이하며 확장성도 매우 높다.
출처: 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 MVC Project 선택
프로젝트명을 입력하고
'Spring MVC Project'를 선택한다.
- 패키지명 설정
Spring Project구조 참고
https://m.blog.naver.com/scw0531/220986622908
https://m.blog.naver.com/scw0531/220986622908?view=img_8
빌드를 자동화 해주는 빌드 툴
Maven Repository에서 원하는 라이브러리 찾은 후
Maven 관련 pom.xml 코드를 복사 -> 내 프로젝트의 pom.xml에 붙여넣기
https://velog.io/@jinuku/Velog-%EA%B0%84%EB%8B%A8-%EC%82%AC%EC%9A%A9%EB%B2%95