Spring/ SpringBoot 개념 정리
Rest Service Methds
Representational State Transfer
Method로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것
HTTP GET
- Resource를 가져올 때 사용
- 서버에 어떠한 수정도 없을 때 사용
- Safe Methods
- 어디에서 요청을 해도 동일한 결과 (멱등법칙)
- HTTP 응답 코드
서버에서 Resource 발견 시 200(OK) + 응답 본문
Resource 발견 실패 시 404(Not Found)
적합한 형식이 아닐 시 400(Bad Request)
HTTP POST
- 새로운 Resource 생성 시 사용
- HTTP 응답 코드
서버에 Resource가 정상적으로 생성 201(Create) + header(요청에 대한 상태를 기술한 msg와 새로운 자원에 대한 location)
HTTP PUT
- 현재 존재하는 Resource 업데이트
- Resource가 존재하지 않다면 POST의 생성로직을 새로 만들어도 되고 그렇지 않아도 됨
- HTTP 응답 코드
정상적으로 update 시 200(OK) 또는 204(No content)
HTTP DELETE
- Resource를 삭제
- HTTP 응답 코드
200(OK)
202(Accepted) or 204(No Content)
404(Not Found)
Spring
Annotaion
REST
@RestController : Controller가 REST 방식으로 처리하기 위한 것을 명시
@ResponseBody : JSP 같은 View로 전달되는 것이 아니라 데이터 자체를 전달
@PathVariable : URL 경로에 있는 값을 파라미터로 추출
@CrossOrigin : Ajax의 크로스 도메인 문제 해결
@RequestBody : JSON 데이터를 원하는 타입으로 바인딩
Bean
@Repository : DAO 또는 Repository Class에 사용
@Service : Service Layer의 Class에 사용
@Controller : MVC Controller에 사용
@Component : Layer 구분을 적용하기 어려운 일반적인 경우 설정
DI
@Autowired : 객체에 대한 의존성 주입,
Controller Class에서 DAO나 Service에 관한 객체들을 주입시킬 때 많이 사용
Controller
@RestController : Controller 중 View로 응답하지 않고 HttpResponse로 응답하는 Controller
@ResponseBody역할을 자동적으로 수행
@RequestMapping : Spring Controller 또는 그 메서드의 URI 정의 시 사용
요청을 받는 형식이 Get, Post, Patch, Put, Delete 를 정의하기도 함(default Get)
@PathVariable : URI에서 / 다음으로 넘어오는 값들을 파싱
"/something/{id}"
@RequestBody : Post, Put, Patch로 요청을 받을 때, 요청에서 넘어온 Body값들을 자바 타입으로 파싱
@RequestParam : key value 형식의 파라미터를 파싱
?name=cristoval
@ResponseBody : HttpMessageConverter를 이용하여 JSON 혹은 xml로 요청에 응답
RestController annotation이 적용된 Controller라면 적용할 필요가 없음
Spring Framework 구조
POJO(Plain Old Java Object)
- 특정 환경이나 기술에 종속적이지 않음
- 테스트에 용이하고 객체지향 설계를 자유롭게 적용
PSA(Portable Service Abstraction)
- 환경, 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있음
- 추상화를 통해 Low Level의 기술 구현 부분과 기술을 사용하는 interface로 분리
- ex) DB에 관계없이 동일하게 적용할 수 있는 트랜잭션 처리방식
IoC/DI(Dependency Injection)
- 유연하게 확장 가능한 객체를 만들어 두고 객체 간의 의존관계는 외부에서 설정
AOP(Aspect Oriented Programming)
- 관심사의 분리를 통해 SW의 모듈성 향상
- 공통 모듈을 여러 코드에 쉽게 적용
Spring Framework 특징
경량컨테이너
- spring은 자바객체를 담고 있는 컨테이너
- spring container는 자바 객체의 생성과 소멸과 같은 라이프사이클을 관리
- 언제든지 spring container로부터 필요한 객체를 가져와 사용할 수 있음
DI(Dependency Injection) Pattern 지원
- spring은 설정 파일이나, annotation을 통해 객체 간의 의존 관계 설정 가능
- 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요 X
AOP(Aspect Oriented Programming) 지원
- 관점 지향 프로그래밍 (문제를 바라보는 관점을 기준으로 프로그래밍)
- 공통 모듈을 여러 코드에 쉽게 적용
POJO(Plain Old Java Object) 지원
- 특정 인터페이스를 구현하거나 또는 클래스를 상송하지 않는 일반 자바 객체 지원
- spring container에 저장되는 자바 객체는 특정한 인터페이스를 구현 하거나, 클래스 상속 없이도 사용 가능
IoC(Inversion of Control)
- 객체에 대한 생성과 생명주기를 관리
IoC/Di
IoC(Inversion of Control)
Di(Dependency Injection)
ㅇ 객체 생성을 Container에게 위임하여 처리
ㅇ 객체 간의 강한 결합을 다형성을 통해 낮춤
- Interface 호출 방식
- 구현 클래스 교체가 용이하여 다양한 형태로 변화 가능
- But, Interface 교체 시 호출 클래스도 수정 필요
ㅇ 객체 간의 강한 결합을 Factory를 통해 결합도를 낮춤
- Factory 호출 방식
- Factory가 구현 클래스를 생성하므로 클래스는 Factory를 호출
- Interface 변경 시 Factory만 수정
DI(Dependency Injection) 설정
1. XML
ㅇ XML 문서 형태로 Bean의 설정 메타 정보를 기술
ㅇ <bean> 태그를 통해 세밀한 제어
2. Annotation
ㅇ 빈으로 사용될 클래스에 annotation을 부여해 주면 자동으로 Bean 등록
ㅇ Object Bean Scanner로 Bean Scanning을 통해 자동 등록
ㅇ Annotation으로 Bean 설정 시 component-scan 설정 필요
Interceptor
ㅇ Controller에 들어오는 요청 HttpRequest와 Controller가 응답하는 HttpResponse를 가로채는 역할
- 관리자만 접근할 수 있는 관리자 페이지에 접근하기 전 관리자 인증을 위한 용도
Aop
ㅇ Aspect Oriented Programming
ㅇ 관점 지향 프로그래밍
- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화
- 핵심적인 비즈니스 로직에서 분리하여 재사용할 수 있도록
MVC
Model
- 어플리케이션 상태의 캡슐화
- 상태 쿼리에 대한 응답
- 어플리케이션의 기능 표현
- 변경을 View에 통지
View
- 모델을 화면에 시각적으로 표현
- 모델에게 업데이트 요청
- 사용자의 입력을 컨트롤러에 전달
- 컨트롤러가 View를 선택하도록 허용
Controller
- 어플리케이션의 행위 정의
- 사용자 액션을 모델 업테이트와 mapping
- 응답에 대한 View 선택
MVC 실행 순서
1. Client -> DispatcherServlet 요청 수신
- 단일 Front Controller Servlet
- 요청을 수신하여 처리를 다른 Component에 위임
- 어느 Controller에 요청을 전송할지 결정
2. DispatcherServlet -> HandlerMapping
- HandlerMapping에 어느 Controller를 사용할 것인지 문의
- URL과 Mapping
3. DispatcherServlet -> Controller
- 요청을 Controller에게 전송하고 Controller는 요청을 처리한 후 결과를 return
- Business Logic 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 View에 사용
4. Controller -> ModelAndView
- ModelAndView Object에 수행 결과가 포함되어 DispatcherServlet에 return
5. DispatcherServlet -> ViewResolver
- ModelAndView는 실제 JSP 정보를 가지고 있지 않고, ViewResolver가 논리적 이름을 실제 JSP 이름으로 변환
6. DispatcherServlet -> View
- View는 결과정보를 사용하여 화면을 표현
xml File
servlet-context.xml
- Web 관련 Config
- DispatcherServlet 설정
- URL과 관련된 Controller, annotation, ViewResolver, Interceptor 등의 설정
root-context.xml
- BackEnd 관련 Config
- Service, Repository, DB 등 business Logic 관련 설정
Web.xml
ㅇ 설정파일
ㅇ WAS가 최초로 구동 시 각종 설정을 정의
ㅇ Spring Container는 설정파일의 내용을 읽고 ApplicationContext 객체 생성
SpringBoot
ㅇ Project에 따라 자주 사용되는 Library들이 미리 조합
ㅇ 복잡한 설정을 자동으로 처리
ㅇ 내장 서버를 포함하여 WAS를 추가로 설치하지 않아도 개발 가능
Main File
ㅇ src/main/java : Java Source Directory
ㅇ Application.java : Application을 시작할 수 있는 main method가 존재하는 스프링 구성 Main Class
ㅇ static : css, js, img 등 정적 Resource Directory
ㅇ templates : SpringBoot에서 사용 가능한 여러가지 View Template(Thymeleaf, Velocity, FreeMaker 등) 위치
ㅇ application.properties : Application 및 Spring의 설정 등에서 사용할 여러가지 property를 정의
ㅇ src/main : jsp 등의 Resource Directory
MyBatis
ㅇ Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM Framework
ㅇ 쉬운 접근성과 코드의 간결함
ㅇ SQL문과 프로그래밍 코드의 분리
ㅇ 다양한 프로그래밍 언어로 구현 가능
ㅇ Main Component
- sqlMapConfig.xml : DB의 접속 주소 정보나 객체의 alias, Mapping File 경로 등의 고정된 환경 정보를 설정
- SqlSessionFactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory 생성
- SqlSessionFactory : SqlSession 생성
- SqlSession : 핵심적인 역할을 하는 Class, SQL 실행이나 Transaction 관리
- mapping File : SQL문과 ORMapping 설정(query.xml)
ㅇ MyBatis Main Class
- SqlSessionFactoryBean : MyBatis 설정 파일을 바탕으로 SqlSessionFactory 생성, Spring Bean 등록 필요
- SqlSessionTemplate : 핵심적인 역할을 하는 Class, SQL 실행이나 Transaction 관리
- DataSource
'Java, IntelliJ > Spring' 카테고리의 다른 글
MySQL Datatype 데이터 타입 (0) | 2021.07.20 |
---|---|
Spring annotation 모음 (0) | 2021.07.19 |
JWT토큰이란, 장단점, 구현 (1) | 2021.07.14 |
[Spring]Thymeleaf Js내부에서 사용하기, 로그인 여부에 따라 보이기 (0) | 2021.07.06 |
Spring_CRUD할 수 있는 API 연습 (0) | 2021.06.27 |
댓글