HTTP 메서드 활용

2021. 12. 10. 13:36·교육 및 인강/모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한

김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 HTTP 내용을 정리한다.

자세한 정보가 궁금하면 수강을 추천드립니다.

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com


클라이언트에서 서버로 데이터 전송

데이터 전달 방식은 2가지로 구분

1. 쿼리 파라미터(쿼리 스트링)를 통한 데이터 전송

- GET 사용 

- 주로 검색 & 정렬 필터에 자주 사용

2. 메시지 바디를 통한 데이터 전송

- POST, PUT, PATCH 사용

- 회원 가입, 상품 주문, 리소스 등록 & 변경에 사용

 

데이터 전달은 4가지로 구분

- 정적 데이터 조회 : 이미지, 정적 테스트 문서

- 동적 데이터 조회 : 주로 검색, 게시판 목록에서 정렬 필터 (검색어)

- HTML Form을 통한 데이터 전송 : 회원 가입, 상품 주문, 데이터 변경

- HTTP API를 통한 데이터 전송 : 서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax), 회원 가입, 상품 주문, 데이터 변경 

 

정적 데이터 조회

- 조회는 GET 사용

- 쿼리 파라미터는 사용하지 않는다. 리소스 경로로 단순하게 조회한다.

 

 

동적 데이터 조회

 

- 조회는 GET 사용, 쿼리 파라미터를 사용해서 데이터 전달

- 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용

 

 

HTML Form 데이터 전송

- HTML Form 전송은 GET, POST만 지원 

 

HTML Form submit시 POST 전송 

- 회원 가입, 상품 주문, 데이터 변경

- Content-Type : application/x-www-form-urlencoded 사용

    - form의 내용을 메시지 바디를 통해서 전송 (key=value, 쿼리 파라미터 형식)

    - 전송 데이터를 url encoding 처리 : abc김 -> abc%EA%B9%80  

HTML Form은 GET 전송도 가능

- submit시 Form 내부의 데이터 정보를 수집하여 쿼리 파라미터로 전달한다.  

주의사항 : 리소스 변경하는 케이스에 대해서는 사용하면 안됨! 

HTML Form은 파일 전송도 가능

- Content-Type : multipart/form-data

    - 파일 업로드 같은 바이너리 데이터 전송시 사용

    - 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능 (이름이 multipart)

HTTP API 데이터

- 서버 to 서버 : 백엔드 시스템 통신

- 앱 클라이언트 : 아이폰, 안드로이드

- 웹 클라이언트 : HTML Form 전송 대신에 자바스크립트에 의한 통신 (Ajax)

- POST, PUT, PATCH : 메시지 바디를 통한 데이터 전송

- GET : 조회, 쿼리 파라미터로 데이터 전달

- Content-Type : application/json을 주로 사용 (사실상 표준)

    - JSON, TEXT, XML 등등


HTTP API 설계

- HTTP API - 컬렉션

    - POST 기반 등록 : 회원 관리 API 제공

- HTTP API - 스토어

    - PUT 기반 등록 : 정적 컨텐츠 관리, 원격 파일 관리

- HTTP Form 사용

    - 웹 페이지 회원 관리

    - GET, POST만 지원

 

API 설계 예제 - 회원 관리 시스템 

- 회원 목록 조회 /members -> GET

ex) 대부분 단순 조회에 사용

- 회원 조회 /members/{id} -> GET

ex) 특정 조건으로 조회에 사용 

- 회원 등록 /members/{id} -> POST

ex) 주문 결제, 상품 등록, 회원 등록에 사용됨 

- 회원 수정 /members/{id} -> PATCH, PUT, POST

ex) PUT : 완전히 덮어쓰울 때 사용 - 게시판 수정

ex) PATCH : 부분 수정을 할 경우에 이용 - 회원 정보 수정 

- 회원 삭제 /members/{id} -> DELETE

 

POST 등록 특징 

- 클라이언트는 등록된 리소스의 URI를 모른다.

    - 회원 등록 /members -> POST

    ex) 전달할 데이터를 기반으로 리소스를 생성해야하기 때문

- 서버가 새로 등록된 리소스 URI를 생성해준다.  

    - 클라이언트가 보내준 데이터를 기반으로 리소스를 생성해서 돌려준다.

    ex) HTTP/1.1 201 Create

          Location: /members/100

- 컬렉션 (Collection)

     - 서버가 관리하는 리소스 디렉토리

     - 서버가 리소스의 URI를 생성하고 관리

     ex) 회원에서 컬렉션은 /members

 

파일 관리 시스템

PUT 기반 등록으로 API를 설계한다.

- 파일 목록 /files -> GET

- 파일 조회 /files/{filename} -> GET

- 파일 등록 /files/{filename} -> PUT

- 파일 삭제 /files/{filename} -> DELETE

- 파일 대량 등록 /files -> POST

 

PUT 등록 특징

- 클라이언트가 리소스 URI를 알고 있어야 한다.

    -  /files/{filename}  

    ex) /files/star.jpg 

- 클라이언트가 직접 리소스의 URI를 지정한다.

- 클라이언트가 리소스의 URI를 알고 관리하는 것을 스토어(store)라고 함.

    ex) 파일 관리에서 스토어는 /files 

 

HTML FORM 사용

GET, POST만으로 API 설계 (그 외에는 자바스크립트 AJAX 같은 기술을 사용해서 해결 가능)

- 회원 목록 /members -> GET

- 회원 등록 폼 /members/new -> GET

- 회원 등록 /members/new, /mebers -> POST

- 회원 조회 /members/{id} -> GET

- 회원 수정 폼  /members/{id}/edit -> GET

- 회원 수정 /members/{id}/edit, /members/{id} -> POST

- 회원 삭제 /members/{id}/delete -> POST

 

컨트롤 URI

- GET, POST만으로 설계하면 제약 사항이 많아 동사로 된 리소스 사용

- /new, /edit, /delete가 컨트롤 URI에 해당

- HTTP 메서드로 해결하기 애매한 경우에 주로 사용(HTTP API도 포함)

    - 많은 사이트에서 컨트롤 URI 방식으로 이뤄진 걸 볼 수 있다.

 

정리

HTTP API - 컬렉션

- POST 기반 등록

- 서버가 리소스 URI 결정

 

HTTP API - 스토어

- PUT 기반 등록

- 클라이언트가 변경할 리소스 URI 결정

 

HTML FORM 사용

- 순수 HTML + HTML form 사용

- GET, POST만 지원하여 제약 사항 존재 (동사로 리소스 사용) 

 

Tip : 좋은 URI 설계 개념

문서 (document) : 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)

ex) /members/100, /files/star.jpg

 

컬렉션(collection) : 서버가 생성하고 관리하는 리소스 디렉터리

ex) /members

 

스토어(store) : 클라이언트가 리소스의 URI를 알고 관리하는 자원 저장소

ex) /files

 

컨트롤러(controller), 컨트롤 URI : 위의 상황으로 해결하기 어려운 추가 프로세스 실행, 동사를 사용

ex) /members/{id}/delete 

 

'교육 및 인강 > 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한' 카테고리의 다른 글

HTTP 헤더1 - 일반 헤더  (0) 2021.12.13
HTTP 상태코드  (0) 2021.12.10
HTTP 메서드  (0) 2021.12.09
HTTP 기본  (0) 2021.12.09
URI와 웹 브라우저 요청 흐름  (0) 2021.12.08
'교육 및 인강/모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한' 카테고리의 다른 글
  • HTTP 헤더1 - 일반 헤더
  • HTTP 상태코드
  • HTTP 메서드
  • HTTP 기본
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    이규원
    장인정신
    객체지향
    스프링
    모든 개발자를 위한 HTTP 웹 기본 지식
    ATDD
    추상화
    넥스트스탭
    java
    백기선
    TDD
    현실세상의 TDD
    마틴 파울러
    인프라공방
    fastcampus
    Patterns of Enterprise Application Architecture
    DDD 세레나데
    오브젝트
    소프트웨어 장인
    테스트 주도 개발
    JUnit
    study
    스터디
    김영한
    조영호
    nextstep
    자바
    인프런
    Test Driven Development
    엔터프라이즈 애플리케이션 아키텍처 패턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
HTTP 메서드 활용
상단으로

티스토리툴바