Java, IntelliJ/Spring

Spring/ SpringBoot 개념 정리

고로케 2021. 7. 19.
반응형

 

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

 

 

반응형

댓글