Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Greedy
- jpa
- JDBC
- 인프런
- Thymeleaf
- SpringBoot
- db
- kotlin
- Spring Boot
- springdatajpa
- AOP
- 백준
- Proxy
- 그리디
- 스프링 핵심 원리
- java
- Exception
- 스프링
- 자바
- http
- Servlet
- JPQL
- pointcut
- 알고리즘
- 스프링 핵심 기능
- transaction
- 김영한
- Android
- QueryDSL
- spring
Archives
- Today
- Total
개발자되기 프로젝트
[인프런] Web 개론 본문
1. REST
- Representational State Transfer: 자원의 상태 전달
- Client, Server: 클라이언트와 서버가 서로 독립적으로 분리되어 있어야 한다.
- Stateless: 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다.
- Cache: 클라이언트는 서버의 응답을 캐시할 수 있어야 한다.
클라이언트가 캐시를 통해서 응답을 재사용 할 수 있어야 하며, 이를 통해서 서버의 부하를 낮춘다. - Layered System(계층화): 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy 등 다계층 형태를 구성할 수 있어야 하며, 확장할 수 있어야 한다.
- 인터페이스의 일관성: 아키텍처를 단순화 시키고 작은 단위로 분리하여서, 클라이언트 , 서버가 독립적으로 개선될 수 있어야 한다.
- Code On Demand(optional) : 자바 애플릿, 자바스크립트 플래시 등 특정 기능을 서버가 클라이언트에 코드를 전달하여 실행할 수 있어야 한다.
1.1 인터페이스의 일관성
- 인터페이스의 일관성이 잘 지켜졌는지에 따라 REST를 잘 사용했는지 판단이 가능
- 자원 식별 : 웹 기반의 REST에서는 리로스 접근에 URI 를 사용
- https://ddd.co.kr/user/100
- Resource: user
- 식별자: 100 - 메시지를 통한 리소스 조작
- Web에서는 다양한 방식으로 데이터 전송 가능
- 예를들어 HTML, XML, JSON, TEXT 등
- 이 중에서 리소스의 타입을 알려주기 위해 header 부분에 content-type 지정 가능 - 자기 서술적 메시지
- 요청하는 데이터가 어떻게 처리 되어야 하는지 충분한 데이터를 포함할 수 있어야 한다.
- HTTP 기반의 REST에서는 HTTP Method와 Header의 정보로 이를 표현 가능. - 애플리케이션 상태에 대한 엔진으로서의 하이퍼미디어
- REST API를 개발할 때에도 단순히 Client 요청에 대한 데이터만 내리는 것이 아닌
- 관련된 리소스에 대한 Link 정보까지 같이 포함되어야 한다.
이러한 조건들을 잘 갖춘 경우 REST Ful 하다! 이를 REST API로 부름.
2. URI 설계
- URI: Uniform Resource Identifier
인터넷에서 특정 자원을 나타내는 주소 값, 해당 값을 유일함.
ex: https://ddd.co.kr/resource/sample/1
response: sampld.pdf 등등 - URL: Uniform Resource Locator
인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소
특정 자원을 지칭하는 주소
ex: https://ddd.co.kr/sample1.pdf - URL을 URI의 하위 개념
- URI 설계원칙(RFC-3986)
- 슬래시 구분자( / )는 계층 관계를 나타내는 데 사용함.
- URI 마지막 문자로 "/" 포함하지 않는다.
- 하이픈( - )은 URI의 가독성을 높이는데 사용함.
- 밑줄( _ )은 사용하지 않는다.
- URI 경로에는 소문자가 적합
- 파일 확장자는 URI에 포함되지 않는다.
- 프로그래밍 언어에 의존적인 확장자는 사용하지 않는다.
- 구현에 의존적인 경로를 사용하지 않는다.
- 세션 ID를 포함하지 않는다.
- 프로그래밍 언어의 Method 명을 이용하지 않는다.
- 명사에 단수형 보다는 복수형을 사용. 컬렉션에 대한 표현은 복수로 사용
- 컨트롤러 이름으로는 동사나 동사구를 사용한다.
- https://ddd.co.kr/resources/suv/q6/re-order - 경로 부분 중 변하는 부분은 유일한 값으로 대체한다.
- pathVariable - CRUD 기능을 나타내는 것을 URI에 적용하지 않는다.
- URI Query Parameter 디자인
- URI 쿼리 부분으로 컬렉션 결과에 대해서 필터링 할 수 있다.
https://ddd.co.kr/resources/suv?model=q7
- URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는데 사용한다.
sorting, page parameter를 query parameter에 작성
https://ddd.co.kr/resources/suv?page=0&size=10&sort=acs - API에 있어서 서브 도메인을 일관성 있게 사용해야 함.
- https://ddd.co.kr
- https://api.ddd.co.kr - 클라이언트 개발자 포탈 서브 도메인을 일관성 있게 만든다.
- https://dev-api.ddd.co.kr/~~
- httpsL//developer-api.ddd.co.kr/~
3. HTTP
- HTTP(Hyper Text Transfer Protocol)로 RFC 2616에서 규정된 Web에서 데이터를 주고받는 프로토콜
- 이름에는 하이퍼텍스트 전송 용 프로토콜로 정의되어 있지만
실제로는 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송 가능함. - HTTP는 TCP를 기반으로한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜
- HTTP는 메시지를 주고(Request) 받는(Response)의 형태를 통신 방식임.
- 자주 사용하는 상태 코드
- 200: 성공
- 201: 성공, 리소스 생성 성공
- 301: 리다이렉트, 리소스가 다른 장소로 변경됨을 알림
- 303: 리다이렉터, client에서 자동으로 새로운 리소스로 요청 처리
- 400: 요청 오류, 파라미터 에러
- 401: 권한 없음(인증 실패)
- 404: 리소스 없음(페이지 찾을 수 없음)
- 500: 서부 내부 에러(서버 동작 처리 에러)
- 503: 서비스 정지(점검 등)
'인프런 > [인프런] Kotlin으로 개발하는 Spring Boot Web MVC' 카테고리의 다른 글
ResponseEntity, @ResponseBody (0) | 2022.04.24 |
---|---|
DELETE (0) | 2022.04.24 |
PUT, Request Body, ResponseBody (0) | 2022.04.24 |
POST (0) | 2022.04.24 |
GET (0) | 2022.04.24 |
Comments