[네트워크] HTTP 메서드 활용 - 데이터 전송방법

2022. 10. 19. 17:23·개발지식/네트워크

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

데이터 전달 방식은 크게 2가지로 나뉜다.

  • 쿼리 파라미터를 통한 데이터 전송 - GET, 주로 정렬 필터(검색어)
  • 메시지 바디를 통한 데이터 전송 - POST, PUT, PATCH, 회원가입, 상품 주문, 등록, 변경

4가지 상황에 따른 데이터 전송 방법을 알아보자.

1. 정적 데이터 조회

  • 이미지, 정적 텍스트 문서 등을 조회
  • GET을 사용하며, 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순 조회가 가능하다.

2. 동적 데이터 조회

  • 검색, 게시판 목록에서 정렬필터를 사용하면 쿼리파라미터를 사용하게 된다.
https://www.google.com/search?q=hello&hl=ko  // 해당 주소로 요청

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

3. HTML Form 데이터 전송

HTML은 GET과 POST 메서드만 지원

GET 전송 - 조회

  • GET메서드는 조회에만 사용하며, 리소스 변경이 발생하는 곳에 사용할수 없다.
<form action="/members" method="get">
<input type="text" name="username" />
<input type="text" name="age" />
<button type="submit">전송</button>
</form>
GET /members?username=lightSourceCoder&age=26 HTTP/1.1
Host: localhost:8080

POST 전송 - 저장

<form action="/save" method="post">
<input type="text" name="username" />
<input type="text" name="age" />
<button type="submit">전송</button>
</form>

위의 html문서를 이용하면 브라우저가 요청 메시지를 생성한다.

POST /save HTTP/1.1
Host: localhost:8282
Content-Type: application/x-www-form-urlencoded

username=lightSourceCoder&age=26
  • Content-Type: application/x-www-form-urlencoded 사용
    → 전송데이터를 url encoding처리하고, form의 내용을 메시지 바디를 통해서 전송하는 방식이다.

POST 전송 - multipart/form-data

<form action="/save" method="post" enctype="multipart/form-data">
<input type="text" name="username" />
<input type="text" name="age" />
<input type="file" name="file1" />
<button type="submit">전송</button>
</form>

위의 코드에서는 <form>에 enctype 속성에 추가해서 값으로 multipart/form-data 로 데이터를 보낼것으로 나타내었다.

POST /save HTTP/1.1
Host: localhost:8282
Content-Type: multipart/form-data; boundary=-----XXX
Content-Length: 10457
------XXX
Content-Disposition: form-data; name="username"
lightSourceCoder
------XXX
Content-Disposition: form-data; name="age"
26
------XXX
Content-Disposition: form-data; name="file1"; filename="intro.png"
Content-Type: image/png
109238a9o0p3eqwokjasd09ou3oirjwoe9u34ouief...
------XXX--
  • mutipart 전송 방식은 주로 파일업로드 같은 바이너리 데이터 전송시 사용한다.

4. API 데이터 전송

  • 서버에서 서버간의 통신, 앱 클라이언트에서 사용
  • 웹 클라이언트 - Form전송 대신 AJAX와 같은 자바 스크립트를 통한 통신에 사용
  • GET : 쿼리 파라미터를 활용한 데이터 전송
  • POST, PUT, PATCH : 메시지 바디를 통해서 데이터 전송
  • Content-Type: appliation/json을 주로 사용

HTTP API 설계 예시

회원 관리 시스템 설계 - POST 기반 등록

  • 회원 목록: /members -> GET
  • 회원 등록: /members -> POST
  • 회원 조회: /members/{id} -> GET
  • 회원 수정: /members/{id} -> PATCH, PUT, POST
  • 회원 삭제: /members/{id} -> DELETE

POST 기반의 등록의 특징

  • 클라이언트는 등록될 리소스의 URI를 알 수 없다.
  • 서버가 새로 등록된 리소스 URI를 생성해 준다.
HTTP/1.1 201 Created
Location: /members/100
  • 컬렉션(Collection)의 특성을 가진다.
    • 서버가 관리하는 리소스 디렉토리
    • 서버가 리소스의 URI를 생성하고 관리
    • 위의 예제에서 컬렉션은 /members

파일 관리 시스템 설계 - PUT 기반 등록

  • 파일 목록: /files -> GET
  • 파일 조회: /files/{filename} -> GET
  • 파일 등록: /files/{filename} -> PUT
  • 파일 삭제: /files/{filename} -> DELETE
  • 파일 대량 등록: /files -> POST

PUT 기반 신규 자원 등록 특징

  • 클라이언트가 리소스의 URI를 알고 있어야 한다.
    → PUT /files/star.jpg
  • 클라이언트가 직접 리소스의 URI를 지정한다.
  • 스토어(Store)의 특성을 가진다.
    • 클라이언트가 관리하는 리소스 저장소
    • 클라이언트가 리소스의 URI를 알고 관리
    • 위의 예제에서 스토어는 /files

회원 관리 시스템 설계 - HTML FORM 기반 등록

HTML FORM은 GET과 POST만 지원한다.

  • 회원 목록 /members -> GET
  • 회원 등록 폼 /members/new -> GET
  • 회원 등록 /members/new, /members -> POST
  • 회원 조회 /members/{id} -> GET
  • 회원 수정 폼 /members/{id}/edit -> GET
  • 회원 수정 /members/{id}/edit, /members/{id} -> POST
  • 회원 삭제 /members/{id}/delete -> POST

HTML FORM 기반 등록의 특징

  • GET, POST만 지원하므로 제약이 존재한다.
  • 제약을 해결하기 위해 동사로 된 리소스의 경로를 사용한다.
  • POST의 /new, /edit, /delete가 컨트롤 URI(동사 형태).
  • HTTP 메서드로 해결하기 애매한 경우 사용(HTTP API 포함)

정리

HTTP API - 컬렉션

  • POST 기반 등록
  • 서버가 리소스 URI 결정

HTTP API - 스토어

  • PUT 기반 등록
  • 클라이언트가 리소스 URI 결정

HTML FORM 사용

  • 순수 HTML + HTML form 사용
  • GET, POST만 지원

참고하기 좋은 URI 설계 개념

  • 문서 - 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
  • 컬렉션(collection) - 서버가 관리하는 리소스 디렉터리(/members)
  • 스토어(store) - 클라이언트가 관리하는 자원 저장소(/files)
  • 컨트롤러(controller), 컨트롤 URI - 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행(/members/{id}/delete)

 

 

 

Reference

https://www.inflearn.com/course/http-웹-네트워크

 

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

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

반응형
저작자표시 (새창열림)
'개발지식/네트워크' 카테고리의 다른 글
  • [네트워크] HTTP 헤더(1) - 헤더와 헤더의 종류, 전송방식, 쿠키
  • [네트워크] HTTP 상태코드란?
  • [네트워크] HTTP 메서드란?
  • [네트워크] - HTTP 메시지의 구조
LightSource
LightSource
어제보단 발전한 오늘의 나를 위한 블로그
    반응형
  • LightSource
    LightSourceCoder
    LightSource
  • 전체
    오늘
    어제
    • 분류 전체보기 (152)
      • Git (4)
      • Language (6)
        • Java (6)
      • Back-End (63)
        • Spring Boot (4)
        • MyBatis (1)
        • Oracle (1)
        • PL SQL (3)
        • JPA (26)
        • Spring Data JPA (5)
        • Spring MVC (8)
        • Spring (12)
        • Spring Security (2)
        • Redis (1)
      • Front-End (38)
        • 아이오닉 (2)
        • JSP (7)
        • JavaScript (4)
        • React (16)
        • TypeScript (3)
        • Angular (6)
      • AWS (1)
      • CI & CD (1)
      • 개발지식 (13)
        • 네트워크 (9)
        • CS 지식 (4)
      • 데이터모델링 (2)
      • Tool (1)
      • 프로젝트 (5)
      • 독후감 (2)
      • 잡생각 (0)
      • 면접 준비 (1)
      • 알고리즘 (14)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    배요소열추가
    배열요소삭제
    react
    배열요소수정
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
LightSource
[네트워크] HTTP 메서드 활용 - 데이터 전송방법
상단으로

티스토리툴바