Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[인프런] Web 개론 본문

인프런/[인프런] Kotlin으로 개발하는 Spring Boot Web MVC

[인프런] Web 개론

Seung__ 2022. 4. 24. 08:01

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