01. JavaEE vs Spring legacy vs Spring boot
![](https://blog.kakaocdn.net/dn/b6NaoK/btslvww2qUS/unjzij72msuasa6a44h1x0/img.png)
JavaEE
💡➡️ Dynamic Web Project(ANT)➡️ Java Servlet 기반의 웹 어플리케이션이다.
- Servlet은 웹 브라우저에서 요청이 들어오면 웹 컨테이너에서 웹 페이지를 동적으로 생성하고 웹 브라우저에 응답하는 Server-Side 자바 프로그램이다.
➡️ 필요한 라이브러리를 사용할 때, jar로 다운받아서 WEB-INF/lib 폴더에 복사하여 사용한다.
➡️ 동적 웹 프로젝트. PHP, JSP, ASP, Servlet 등과 같은 파일들을 만드는 프로젝트이다.
Spring Legacy Project(MAVEN)
💡➡️ xml 파일로 설정을 다 해야한다. (web, servlet-context, root-context)➡️ Maven
- 자바 프로젝트의 빌드를 자동화해주는 도구. 빌드 및 프로젝트 관리 도구
- Maven은 의존성 라이브러리로 관리하여 직접 다운받지 않고도 라이브러리를 사용할 수 있다. (pom.xml)
Spring boot
💡➡️ Spring Framework를 사용하여 더 빠르고 쉽게 웹 어플리케이션과 서비스를 개발하도록 돕는 툴이다.➡️ xml 파일로 설정 안해도 자동으로 설정된다.
➡️ properties에 모든 설정이 다들어간다. (application.properties)
02. 스프링 프레임워크
➡️ 애플리케이션 프레임워크
- 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포관하는 범용적인 프레임워크
➡️ 경량급 프레임워크
- 단순 웹 컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용한다.
➡️ 엔터프라이즈 개발 용이
- 개발자가 복잡하고 실수하기 쉬운 Low Level(보안, 인증, 트랜잭션 etc)에 신경 쓰지 않고, business Logic 개발에 전념할 수 있게 제공
3대 핵심 기술
👉🏻관점지향 프로그래밍(Aspect Oriented Programming)서비스 추상화(Portable Service Abstraction)
제어의 역전(Inversion of Control) / 의존성 주입(DI)
➡️ POJO(Plain Old Java Object)
- 오래된 방식의 간단한 자바 오브젝트(getter, setter, 멤버변수)
➡️ IOC(Inversion of Control)
- 객체의 생성, 생명주기의 관리까지 모든 객체를 프레임워크가 관리
➡️ DI(Dependency Injection)
- 각 클래스 간의 의존관계를 빈 설정
- 개발자 설정(xml, annotation) 설정정보를 바탕으로 컨테이너가 자동으로 연결
➡️ AOP(Aspect Oriented Programming)
- 모듈성을 높일 목적으로 서로 다른 관심사를 분리하는 프로그래밍 패러다
컨테이너
👉🏻Spring Container - IOC- Bean을 담는 그릇
- 빈 팩토리, 애플리케이션 컨텍스트 여기서 객체가 생성, 소멸, 주입된다.
➡️ BeanFactory
- BeanFactory 인터페이스는 IoC컨테이너의 기능을 정의하고 있는 인터페이스이며, Bean의 생성 및 의존성 주입, 생명주기 관리 등의 기능을 제공한다.
- Bean : IoC컨네이너에 의해 생성되고 관리되는 객체
➡️ ApplicationContext
- BeanFactory 인터페이스를 상속받는 ApplicationContext는 BeanFactory가 제공하는 기능 외에 AOP, 메세지처리, 이벤트 처리 등의 기능을 제공한다.
- 생성 예제
ApplicationContext context = new ClassPathXmlApplicationContext(”config/bean.xml”);
MyBean bean = context.getBean(”myBean”);
DI(Dependency Injection) - 의존성 주입
👉🏻➡️ Setter Injection- 의존성을 입력 받는 setter메서드를 만들고 이를 통해 의존성을 주입
➡️ Constructor Injection
- 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성을 주입
➡️ Method Injection
- 의존성을 입력 받는 일반 메서드를 만들고 이를 통해 의존성을 주입
03. 스프링 부트
2) 단독실행 가능한 스프링 애플리케이션 생성
3) 프로젝트 환경을 구출 할 때 필요한 톰캣, 제티, 언더토우 내장
4) XML 기반설정이나 코드 없이 환경 설정을 자동화 가능
5) 스프링 프레임워크 개발 접근성 용이
스프링 프레임워크 개발 단계
- 사용할 스프링 MVC, JPA, 하이버네이트의 버전을 결정
- 모든 다른 레이어 연결 해주는 스프링 콘텍스트 설정
- 스프링 MVC로 웹 레이어 설정
- 데이터 레이어에서 하이버네이트를 설정
- 단위테스트, 트랜잭션 전략, 로깅, 모니터링 방법 결정 구현
- 웹 애플리케이션 서버에 배포하는 방법 결정 구현
👉🏻Maven 선택 ➡️ Web.xml 설정 ➡️ Dispatch servlet 설정 ➡️ Controller class ➡️ Tomcat ➡️ Web page
구성요소
👉🏻빌드 도구(Maven), 스프링 프레임워크, 스프링 부트, 스프링 부트 스타터
SpringMVC 동작
👉🏻1) 브라우저 특정 URL에 요청을 DispatcherServlet이 받는다.2) DispatcherServlet이 URL을 보고 controller를 식별하기 위해 핸들러 매핑과 통신
3) 핸들러 매핑은 요청을 처리하는 특정 핸들러 메서드 반환
4) DispatcherServlet은 특정 핸들러 메서드 호출 (public String 메서드(Model model) 호출)
5) 핸들러 메서드는 모델과 뷰를 반환 (return “view“;)
6) DispatcherServlet 논리적 뷰 “view” 결정하는 뷰 리졸버 찾아 호출 → 논리적 뷰 이름 입력
7) 뷰 리졸버는 논리적 뷰 이름을 물리적 뷰 이름에 매핑하는 로직 실행 (/template/view.html으로 변환)
8) DispatcherServlet은 뷰 실행 → 뷰에서 model객체 사용할 수 있게 한다.
9) 뷰는 DispatcherServlet으로 보내질 내용을 반환
10) DispatcherServlet은 응답을 다시 브라우저로 보낸다.
- 요청 ➡️ DispatcherServlet ➡️ 핸들러 ➡️ 컨트롤러(비즈니스 로직) ➡️ 뷰 리졸버 ➡️ 뷰(model) ➡️ 응답
04. Maven
기타 참고
➡️ maven test 오류 시
- properties에 <maven.test.skip>true</maven.test.skip> 추가
➡️ maven 배포하고 해당되는 jar파일 실행해보기
- 1) run as에서 maven build → package 실행
- 2) target 폴더에 jar파일 생성 확인
- 3) cmd에서 jar 파일 실행 (java -jar jar파일)
- 4) Tomcat 없이 서버 실행 가능
➡️ Maven 업데이트 하기
➡️ 프로젝트 생성 시 생성할 라이브러리 목록을 체크 못했다면 pom.xml 에 해당 라이브러리를 추가해주고 다시 빌드를 해준다.
tag : #Spring #프레임워크 #Spring boot #Maven
Uploaded by N2T