[Spring] Web

thingzoo·2023년 6월 23일
0

Spring

목록 보기
2/54
post-thumbnail
post-custom-banner

Web?

WWW(World Wride Web, W3)은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보공간

웹의 용도

  • Web site
    • google, naver, daum 등
  • API(Application Programming Interface)
    • Kakao Open API, Google Open API, Naver Open API 등
  • User Interface
    • chrome, safari 등

웹의 기본 3요소

  • URI(Uniform Resource Identifier): 리소스 식별자
  • HTTP(Hyper Text Transfer Protocol): 어플리케이션 컨트롤
  • HTML(Hyper Text Markup Language): 하이퍼미디어 포멧

API(Application Programming Interface)

컴퓨터나 컴퓨터 프로그램 사이의 연결

  • API는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한다
    • 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다
    • 클라이언트가 API를 통해 정보를 요청하면 서버에서 정보를 내려줌
    • API는 식당의 점원이라고 생각하면 쉽다!
  • interface는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면을 의미한다
    • 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템

REST API

REST 아키텍처 스타일을 따르는 API

REST(Representational State Transfer)

자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것

  • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  • HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
  • 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.

구성 요소

  • 자원(Resource) : HTTP URI
  • 자원에 대한 행위(Verb) : HTTP Method
  • 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load

특징

  • Client-Server
    • 클라이언트와 서버가 서로 독립적으로 분리되어야 한다.
  • Stateless(무상태)
    • 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다.
  • Cachable
    • 클라이언트는 서버의 응답을 Cache(임시저장)할 수 있어야한다.
    • 클라이언트가 Cache를 통해 응답을 재사용할 수 있어야 하며, 이를 통해 서버의 부하를 낮춘다.
  • Layered System(계층화)
    • 서버와 클라이언트 사이에 방화벽, 게이트웨이, 프록시 등 다양한 계층형태로 구성이 가능해야하며, 이를 확장할 수 있어야 한다.
  • Uniform Interface(인터페이스 일관성)
    • 인터페이스의 일관성을 지키고, 아키텍처를 단순화시켜 작은 단위로 분리하여, 클라이언트, 서버가 독립적으로 개선될 수 있어야 한다.
  • Code on Demand(선택적)
    • 자바 애플릿, 자바스크립트, 플래시 등 특정한 기능을 서버로 부터 클라이언트가 전달받아 코드를 실행할 수 있어야한다.

RESTful API 판단 기준

자원의 식별

웹기반의 REST에서는 리소스 접근할때 URI 사용

  • https://www.test.co.kr/user/100
  • 리소스: user
  • 식별자(URI): 100

메세지를 통한 리소스 조작

  • 데이터 포멧 타입: HTML, XML, JSON, TEXT
  • HTTP Header부분에 content-type을 통해 데이터 타입 지정 가능
  • 리소스 조작을 위해 데이터 전체가 아닌 메세지로 전달

자기서술적 메세지

  • 요청 데이터가 어덯게 처리되어져야 하는지 충분한 데이터를 포함할 수 있어야한다.
  • HTTP Method 정보, Header 정보, URI 포함 정보
    → 그외 정보는 URI의 메세지를 통해 표현

어플리케이션 상태에 대한 엔진으로써 하이퍼미디어

  • REST API를 개발할 때 단순히 Client 요청에 대한 데이터만 응답해주는 것이 아닌 관련된 리소스에 대한 링크 정보까지 같이 포함되어져야한다.

예를들어 API의 리소스 식별자를 중복 없이 고유하게 잘 만들고, 해당 API에 적절하게 HTTP 메서드를 사용했다면, RESTful하게 설계했다고 볼 수 있다!

URI

  • URI(Uniform Resource Identifier)
    • 인터넷에서 특정 자원을 나타내는 주소값, 해당값은 유일(응답은 달라질수있음)
    • 요청: htts://www.test.co.kr/resource/1
    • 응답: yummy.pdf
  • URL(Uniform Resource Locator)
    • 인터넷 상에서의 자원, 특정 파일이 어디에 위치하는지 식별하는 주소
    • URI의 하위 개념
    • 요청: htts://www.test.co.kr/yummy.pdf

URI 설계원칙(RFC-3986)

  • 슬래시 구분자 / 는 계층관계를 나타내는데 사용한다.
    https://www.test.co.kr/classes/java/curriculums/web-master

  • URI 마지막문자로 / 는 포함하지 않는다
    https://www.test.co.kr/classes/java/curriculums/web-master/

  • 하이픈 - 은 URI 가독성을 높이는 데 사용한다.
    https://www.test.co.kr/classes/java/curriculums/web-master

  • 밑줄 _ 은 사용하지 않는다.
    https://www.foo.co.kr/classes/java/curriculums/web_master

  • URI 경로에는 소문자가 적합하다.
    https://www.test.co.kr/classes/JAVA/curriculums/web-master

  • 파일 확장자는 URI에 포함하지 않는다.
    https://www.test.co.kr/classes/java/curriculums/web-master.jsp

  • 프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.
    https://www.test.co.kr/classes/java/curriculums/web-master.do

  • 구현에 의존적인 경로를 사용하지 않는다.
    https://www.test.co.kr/servlet/classes/java/curriculums/web-master

  • 세션 ID를 포함하지 않는다.
    https://www.test.co.kr/classes/java/curriculums/web-master?session-id=abcdef

  • 프로그래밍 언어의 Method명을 이용하지 않는다.
    https://www.test.co.kr/classes/java/curriculums/web-master?action=intro

  • 명사에 단수형보다는 복수형을 사용해야 한다.(컬렉션에 대한 표현은 복수)
    https://www.test.co.kr/classes/java/curriculums/web-master

  • 컨트롤러 이름동사나 동사구를 사용한다.
    https://www.test.co.kr/classes/java/curriculums/web-master/re-order

  • 경로 부분 중 변하는 부분은 유일한 값으로 대체한다.
    /curriculums/web-master/lessons/{lesson-id}/users/{user-id}
    /curriculums/web-master/lessons/2/users/100

  • CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.

    • GET : /curriculums/web-master/lessons/2/users/100/read
    • DELETE: /curriculums/web-master/lessons/2/users/100
  • URI Query Parameter 디자인
    /curriculums/web-master?chapter=2

  • URI 쿼리는 컬렉션의 결과를 페이지로 구분하여 나타내는 데 사용한다.
    /curriculums/web-master?chapter=2&page=0&size=10&sort=ac

  • API에 있어서 서브도메인은 일관성 있게 사용해야 한다.
    https://www.test.co.kr
    https://api.www.test.co.kr
    https://api-www.test.co.kr

  • 클라이언트 개발자 포탈 서브 도메인은 일관성있게 만든다.
    https://dev-www.test.co.kr
    https://developer-www.test.co.kr

profile
공부한 내용은 바로바로 기록하자!
post-custom-banner

0개의 댓글