728x90
▶ HTTP Method
- HTTP 규약 중 하나로 , 특정 자원에 대해 수행하는 행동의 종류를 명시
- 자원의 생성, 조회, 수정, 삭제, 일부 수정 등
- HTTP Method를 사용하면 단일 URI로 다양한 행동을 정의 가능
- 주로 사용되는 HTTP Method
- GET(자원의 조회)
- POST(자원의 생성)
- PUT(자원의 수정)
- DELETE(자원의 삭제)
▷HTTP Method와 데이터베이스 CURD
DB의 4가지 기본 동작
HTTP Method를 사용하면 단일 URI로 다양한 행동을 정의 가능
- HTTP Method는 규약이지 규칙이 아님
- GET Method로 자원을 삭제해도 에러가 발생하지는 않음
- 그러나 Best Practice에 맞게 설계하는것이 권장 됨.
▷ HTTP Method의 구현
- @RequestMapping의 요소로 Method를 명시
- 디폴트는 GET Method
- 요청된 HTTP Method에 따라 해당 Contrller의 Java메소드를 호출
- 각 Java메소드에서는 HTTP Method에 해당하는 처리를 수행하도록 설계하는것이 권장됨.
▷ HTTP Method를 위한 간소화 된 Annotation
Annotation으로 간소화 해줄 수 있다.
▷ 정리
- HTTP Method는 HTTP규약 중 하나로, 특정 자원(데이터)에 대해 수행하는 행동의 종류를 명시
- POST, GET, PUT, DELETE 4개의 HTTp Method가 주요 사용 됨
- 각각 DB의 Create, Read, Update, Delete의 행동과 대응 됨
- HTTP Method를 활용하면 단일한 URI에 대해 다양한 행동을 하는 REST API를 설계 가능
- GET /post는 글 조회, POST /post는 글 저장
- Spring에서는 RequsetMapping의 요소나 GetMapping등의 Annoatation으로 HTTP Method에 따른 호출되는 Java메소드를 결정
▶ RequestBody의 이해
▷ Request Data
- Client가 서버에 요청 시 전달하는 추가적인 Data
- 우리가 알고 있는 2가지의 방식의 데이터 전달 방식
- Query String
- Path parameter
- 크기가 큰 데이터를 보내기 위해서는 다른 방식이 필요
- 게시판 글, 작성 된 Form 데이터 등
▷ Request Body
- 일반적으로 데이터를 저장 및 수정하는 POST, PUT Method에서 사용됨
- GET, DELETE는 Query String, path Param이 주로 사용
- Request Body에 다양한 포맷의 데이터 전송 가능
- JSON데이터 형식이 주로 사용됨
- Client에서는 JSON데이터를 전송하고, Spring에서는 JSON데이터를 JAVA 객체 파라미터로 저장
▷ Request Body의 활용
Postman에서 JSON데이터를 Request Body로 전송
▶ REST API 문서의 활용
▷API문서화
- API는 정보를 주고 받기 위한 방법/약속
- API를 사용하기 위해서는 사용 방법을 알아야함
- API문서는 API를 사용하는 방법을 명세한 문서
▷ REST API 문서화
- 프론트엔드에서 호출하기 위한 REST API의 정보가 명세 된 문서
- 백엔드 개발자 주도로 프론트엔드 개발자가 함께 설계
- 프론트엔드 개발자는 약속 된 REST API문서에 의존하여 프론트엔드를 개발
- 프론트엔드 등 Client에서 호출하고 활용하는데 어려움이 없도록 상세하게 작성 되어야 함
▷ REST API 문서가 담고 있어야 하는 정보
- REST API 설명
- URI
- HTTP Method
- Request 파라미터(필수 파라미터와 선택 파라미터)
- Response 데이터 (필수 응답 데이터와 선택 응답 데이터)
- 가능한 에러 코드 및 대응 방법
- 호출 예시
▷ REST API 문서 예시 - 카카오톡 API
▷ REST API 문서의 활용
- 프론트엔드 개발자와 백엔드 개발자 모두 REST API문서를 읽고 이해할 수 있어야 함
- 백엔드 개발자는 프론트엔드 등의 Client를 위해 REST API문서를 작성 할 수 있어야 함
- REST API 문서가 잘 작성 될 수도 Communication 비용이 줄어 듦
▶ Spring Service의 이해
- 시스템의 핵심 비지니스 로직을 구현하는 계층
- SNS 시스템의 경우
- 이미지,글 등의 컨텐츠 정보를 저장
- 사용자가 선호할만한 컨텐츠를 추천
- 회원가입, 로그인, 회원 탈퇴 등의 회원 관련 처리
- view의 종류와 database 종류에 영향을 받지 않는 독립적인 계증
- 영향을 받지 않도록 설계해야함
▷ Service의 구현
- 클래스에 @Service Annotation 사용
- 파라미터로 전달 된 데이터들의 검증 작업 수행
- Repository 계층을 활용하여 database에 접근
- Service 계층의 단일 메소드가 transaction의 단위가 됨
- 애플리케이션의 세부 영역(User, Post, …) 별로 클래스를 생성하여 구현
- 인터페이스의 사용이 권장되나, 다형성을 활용한 기능 확장의 요구사항이 없는 경우 사용하지 않기도 함
▷정리
- Service는 시스템의 핵심 비지니스 로직을 구현하는 계층이다.
- view종류와 database 종류에 영향을 받지 않는 독립적인 계층이다.
- 클래스에 @Service Annotation을 사용한다.
- 애플리케이션의 세부 영역별로 클래스를 생성하여 구현한다.
▶ 스프링 빈과 의존성 주입
▷ 객체의 활용과 의존성
- 의존성(Dependency)
- 하나의 모듈(클래스, 패키지 등)이 다른 모듈을 사용하는 것
- 일반적으로 다른 객체의 기능을 사용하기 위해서는 멤버 변수에 new로 객체를 생성하여 참조
- 생성한 객체의 메소드를 호출
- 어떤 객체를 생성하여 사용할 것인지 코드 상에 명시
- compile-time 의존성이 생성 됨
▷ 의존성 주입(DI, Dependency Injection)
- 객체 생성을 Spring에서 대신 수행
- 활용할 객체에 대한 의존성(참조)설정을 외부에서 대신 해줌
- 활용할 클래스(인터페이스)타입의 멤버 변수만 선언 후 생성자 구현
- new 키워드로 객체 생성 직접 하지 않음
▷ 객체는 누가 생성하는 것일까?
Spring Framework가 객체의 생성과 관리 역할 수행한다.
- 스프링프레임워크는 애플리케이션이 실행되는 시점에 주요한 어노테이션들을 검색
- 특정 어노테이션이 붙어져 있으면 거기에 대한 객체를 스프링 프레임워크가 생성하고 관리해줌
- 의존성(참조)에 대한 관리도 스프링프레임워크가 결정해줌
▷Spring IoC 컨테이너와 Spring Bean
- Spring IoC(Inversion of Control) 컨테이너
- 제어가 역전 되었다(IoC)
- Spring Framework에서 객체의 생성과 관리의 역할을 하는 컴포넌트
- Spring Bean
- Spring IoC 컨테이너에 의해서 생성되어 관리되는 Java 객체
new 키워드를 직접사용하지 않아도 객체를 사용할 수 있다.
▷ @Configuration과 @Bean Annotation
- Java클래스에 @Configuration Annotation을 사용 가능
- 해당 클래스는 Spring Framework에 의해 설정 정보를 위한 클래스로 활용 됨
- @Configuration 클래스 내에 @Bean 을 사용한 메소드로 Bean 생성 가능
- Bean으로 등록할 객체를 생성 후 Return
▷정리
- 의존성은 하나의 모듈(클래스, 패키지 등)이 다른 모듈을 사용할 때 만들어지며, new키워드로 객체를 직접 생성한다.
- BUT, Spring Framework는 객체를 생성하고 객체 간의 의존성을 연결하는 역할을 대신 수행해줌
- = 의존성주입(DI)
- Spring IoC 컨테이너는 객체를 생성 관리하는 역할을 하는 컴포넌트이다.
- Spring Bean은 Spring에 의해서 생성되고 관리되는 객체이다.
728x90
'BackEnd > Spring Boot🍃' 카테고리의 다른 글
[Spring]Spring MVC 요청에서 응답까지의 흐름, @Controller와 @RequestMapping 원리 (0) | 2024.03.24 |
---|---|
[Spring] Servlet과 Spring Web MVC(2) (0) | 2024.03.23 |
[Spring] Servlet과 Spring Web MVC(1) (0) | 2024.03.23 |
[Spring Boot] 스프링부트 개념정리 (1) | 2024.02.24 |
[Spring Boot] 코드프레소님 Spring Boot 강의 정리(유데미){1} (0) | 2024.02.24 |