상태 코드 : 클라이언트가 보낸 요청의 처리 상태의 결과 전달을 위한 응답 코드

 

1xx (Informational)

  • 요청이 수신되었으며 처리 진행
  • HTTP/1.0 이래로 어떤 1xx 상태 코드도 정의 되지 않음
  • 사용 미권장

 

2xx (Successful)

  • 클라이언트의 요청 동작을 수신하여 성공적으로 처리
  • 200 (OK) : 서버가 요청을 제대로 처리
  • 201 (Created) : 성공적으로 요청되어 서버가 새로운 리소스 생성
  • 202 (Accepted)  : 요청을 접수하였으나 처리 완료가 되지 않은 상태
  • 204 (No Content) : 요청을 성공적으로 처리하였으나, 응답 페이로드 본문에 보낼 콘텐츠 부재

 

3xx (Redireciton)

  • 요청을 마치기 위한 유저 에이전트의 추가 조치 필요
  • 300 (Multiple Choice) : 서버가 요청에 따른 여러 조치 선택
  • 301 (Moved Permanently) : 영구 리다이렉션, 리다이렉트 시 요청 메서드가 GET으로 변하고 본문의 제거 가능성
  • 302 (Found) : 일시적 리다이렉션, 리다이렉트 시 요청 메서드가 GET으로 변하고 본문의 제거 가능성
  • 303 (See Other) : 일시적 리다이렉션, 리다이렉트 시 요청 메서드와 본문을 유지
  • 304 (Not Modified) : 마지막 요청 이후 리소스가 수정되지 않았음
  • 307 (Temporary Redirect) : 일시적 리다이렉션, 리다이렉트 시 요청 메서드와 본문을 유지
  • 308 (Permanent Redirect) : 영구 리다이렉션, 리다이렉트 시 요청 메서드와 본문을 유지 

 

4xx (Client Error)

  • 클라이언트의 잘못된 요청으로 인해 서버가 이를 승인할 수 없는 상태
  • 400 (Bad Request) : 서버가 요청의 구문, 메시지 등을 인식할 수 없음 (API 스펙 상이, 잘못된 요청 파라미터)
  • 401 (Unauthorized) : 요구되는 인증의 부재 (인증 실패)
  • 403 (Forbidden) : 요청을 인식하였지만 승인을 서버 측에서 거부, 접근 권한의 불충분 (인가 실패)
  • 404 (Not Found) : 서버가 요청한 리소스를 찾을 수 없음

 

5xx (Server Error)

  • 서버가 유효한 요청을 오류로 인해 수행할 수 없음
  • 500 (Internal Server Error) : 서버 내부 문제로 인한 요청 수행 불가
  • 503 (Service Unavailable) : 서버 측 오버로드, 유지관리 등의 이유로 인해 현재 서버를 사용할 수 없는 상태

'HTTP' 카테고리의 다른 글

[HTTP] 메서드 활용  (0) 2022.08.31
[HTTP] 메서드  (0) 2022.08.27
[HTTP] HTTP의 특징  (1) 2022.08.26
[HTTP] URI  (0) 2022.08.21
[HTTP] 인터넷 네트워크  (0) 2022.08.18

클라이언트 -> 서버 데이터 전송 방식

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

 

분 류

정적 데이터 조회

  • 이미지, 정적 텍스트 문서
  • 조회 시 GET을 주로 사용
  • 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능

동적 데이터 조회

  • 검색, 게시판 목록의 정렬 필터 (검색어)
  • 조회 조건의 필터, 조회 결과 정렬을 위한 정렬 조건에 주로 사용
  • 조회 시 GET을 주로 사용
  • GET 쿼리 파라미터를 사용하여 데이터 전달

HTML Form을 통한 데이터 전송 

  • 회원 가입, 상품 주문, 데이터 변경
  • HTML Form 전송은 GET, POST만을 지원 
  • HTML Form에서 submit 시 POST 전송
    • Content-Type : application/x-www-form-urlencoded
    • form의 내용을 메시지 바디를 통해 전송 (key=value type, 쿼리 파라미터 형식)
    • 전송 데이터를 url encoding 처리  
  • HTML Form GET 전송
    • Content-Type : multipart/form-data
    • 파일 업로드 같은 바이너리 데이터 사용 시 사용
    • 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능

HTTP API를 통한 데이터 전송

  • 회원 가입, 상품 주문, 데이터 변경
  • 서버 to 서버 (백엔드 시스템 통신)
  • 앱 클라이언트 (아이폰, 안드로이드)
  • 웹 클라이언트
    • HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용 (Ajax)
      ex) React, Vue.js 등의 웹 클라이언트 API 통신
  • POST, PUT, PATCH : 메시지 바디를 통한 데이터 전송
  • GET : 조히, 쿼리 파라미터로 데이터 전달
  • Content-Type : application/json을 주로 사용 

 

 

 

참고할 URI 설계 개념

  • 문서(Document)
    • 단일 개념 (파일 하나, 객체 인스턴스, 데이터베이스 row)
  • 컬렉션 (Collection)
    • 서버가 관리하는 리소스 디렉터리
    • 서버가 리소스의 URI를 생성하고 관리
  • 스토어 (Store)
    • 클라이언트가 관리하는 자원 저장소
    • 클라이언가 리소스의 URI를 알고 관리
  • 컨트롤러 (Controller), 컨트롤 URI
    • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
    • 동사를 직접 사용 ex) /members/{userId}/create

'HTTP' 카테고리의 다른 글

[HTTP] 상태 코드  (0) 2022.09.02
[HTTP] 메서드  (0) 2022.08.27
[HTTP] HTTP의 특징  (1) 2022.08.26
[HTTP] URI  (0) 2022.08.21
[HTTP] 인터넷 네트워크  (0) 2022.08.18

HTTP 메서드 종류

주요 메서드

  • GET : 리소스 조회
  • POST : 요청 데이터 처리, 주로 등록에 사용
  • PUT : 리소스를 대체, 해당 리소스가 없을 시 생성
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제

기타 메서드

  • HEAD : GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 변경
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트 수행

 

GET

GET /search?q=spring&hl=ko HTTP/1.1
Host: www.google.com
  • 리소스 조회
  • 서버에 전달하고 싶은 데이터는 쿼리 파라미터를 통해 전달
  • 메시지 바디를 사용해서 데이터 전달이 가능하지만, 미 지원이 많아 권장 X

 

POST

POST /members HTTP/1.1
Content-Type: application/json
{
  "userId":"be",
  "name":"Lee"
}
  • 요청 데이터 처리
  • 메시지 바디를 통해 서버로 요청 데이터 전달
  • 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
  • 표준 스펙 : POST 메서드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청
  • POST 사용 기능 ex)
    • HTML 양식에 입력된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공
    • 서버가 아직 식별하지 않은 새 리소스 생성
    • 기존 자원에 데이터 추가

 

PUT

PUT /members/100 HTTP/1.1
Content-Type: application/json
{
  "userId":"be",
  "name":"Lee"
}
  • 리소스를 대체
    • 리소스 이미 존재 시 대체
    • 리소스 없을 시 생성
  • 클라이언트가 리소스를 식별
    • 클라이언트가 리소스 위치를 미리 알고 URI를 지정 (POST와의 차이점)

 

HTTP 메서드의 속성

  • 안전 (Safe Methods)
  • 멱등 (Idempotent Methods)
  • 캐시 가능 (Cacheable Methods)

'HTTP' 카테고리의 다른 글

[HTTP] 상태 코드  (0) 2022.09.02
[HTTP] 메서드 활용  (0) 2022.08.31
[HTTP] HTTP의 특징  (1) 2022.08.26
[HTTP] URI  (0) 2022.08.21
[HTTP] 인터넷 네트워크  (0) 2022.08.18

HTTP

HTTP : 웹 서버와 사용자 인터넷 브라우저 사이 데이터를 전송을 위해 사용되는 통신 규약

  • HTML, TEXT
  • IMAGE, 음성, 영상, 파일
  • JSON, XML (API)
  • 거의 모든 형태의 데이터 전송 가능
  • 서버 간의 데이터 전송에도 대부분 HTTP를 사용

HTTP 역사

  • HTTP/0.9 1991년 : GET 메서드만 지원, HTTP 헤더 지원 X
  • HTTP/1.0 1996년 : 메서드, 헤더 추가
  • HTTP/1.1 1997년 : 가장 보편적으로 사용
      ◇ RFC2068 (1997)  -> RFC2616 (1999)  -> RFC7230~7235 (2014)
  • HTTP/2 2015년 : 성능 개선
  • HTTP/3 진행중 : TCP 대신 UDP 사용, 성능 개선

기반 프로토콜

  • TCP : HTTP/1.1, HTTP/2
  • UDP : HTTP/3
  • 현재는 HTTP/1.1을 주로 사용
  • HTTP/2, HTTP/3 도 점점 사용 증가 추세

HTTP 특징

  • 클라이언트 - 서버 구조
  • 무상태 프로토콜(Stateless), 비연결성
  • HTTP 메시지
  • 단순함, 확장 가능

무상태 프로토콜 (Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않음
  • 장점 : 높은 서버 확장성 (스케이 아웃)
  • 단점 : 클라이언트의 추가적인 데이터 전송

Stateless의 한계

  • 모든 것을 무상태로 설계할 수 있는 경우도 있고 그렇지 않은 경우도 존재
  • 무상태 ex) 로그인이 필요 없는 단순한 서비스 소개 화면
  • 상태 유지 ex) 로그인
  • 로그인 사용자의 경우 로그인 상태를 서버에서 유지
  • 일반적으로 브라우저 쿠키와 서버 세션 등을 활용
  • 상태 유지는 최소한만 사용을 권장

비 연결성

  • HTTP는 기본적으로 연결을 유지하지 않는 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답
  • 일정 시간 많은 사용자가 서비스를 이용 중에 있더라도 실제 서버에서 동시에 처리하는 요청은 적음
  • 서버 자원의 효율적인 사용 가능

비 연결성의 한게

  • TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
  • 웹 브라우저로 사이트 요청 시, HTML 뿐 아니라 자바스크립트, css, 이미지 등 여러 자원이 함께 다운로드
  • 지금은 HTTP 지속 연결 (Persistent Connections)로 문제 해결
  • HTTP/2, HTTP/3에서 더 많은 최적화

'HTTP' 카테고리의 다른 글

[HTTP] 상태 코드  (0) 2022.09.02
[HTTP] 메서드 활용  (0) 2022.08.31
[HTTP] 메서드  (0) 2022.08.27
[HTTP] URI  (0) 2022.08.21
[HTTP] 인터넷 네트워크  (0) 2022.08.18

URI

단어 뜻

  • Uniform : 리소스 식별을 위한 통일된 방식
  • Resource : 자원 (URI로 식별 가능한 모든 것)
  • Identifier : 다른 항목과 구분을 위해 요구되는 정보

 

URI는 Locator, Name 또는 둘 다 추가로 분류될 수 있다.

URL , URN

단어 뜻

  • URL - Locator : 리소스가 있는 위치를 지정
  • URN - Name : 리소스에 이름을 부여
  • 위치는 변화 가능성이 있지만, 이름은 변하지 않음
  • URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음
  • 주로 URN이 아닌 URL을 사용

전체 문법 (URL)

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=test&hl=ko
  • 프로토콜 : https
  • 호스트명 : www.google.com  
  • 포트 번호 : 443
  • 패스 : /search
  • 쿼리 파라미터 : q=test&hl=ko

scheme

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=test&hl=ko
  • 주로 프로토콜 사용 (자원 접근 방식에 대한 규칙)
    · ex) http, https, ftp 등
  • http : 80, https : 443 포트 주로 사용
  • https는 http에 보안 추가 (HTTP Secure)

userinfo

scheme://[userinfo@]host[:port][/path][?query][#fragment] 
https://www.google.com:443/search?q=hello&hl=ko
  • URL에 사용자 정보를 포함하여 인증
  • 거의 미사용

host

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
  • 호스트명
  • 도메인명 또는 IP 주소를 직접 사용 가능

port

scheme://[userinfo@]host[:port][/path][?query][#fragment] 
https://www.google.com:443/search?q=hello&hl=ko
  • 접속 포트
  • 일반적으로 생략 (생략 시 http : 80, https : 443)

path

scheme://[userinfo@]host[:port][/path][?query][#fragment] 
https://www.google.com:443/search?q=hello&hl=ko
  • 리소스 경로
  • 계층적 구조
  • ex)
    · /home/file1.jpg
    · /members
    · /members/100, /items/ip

query

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
  • key = value 형태
  • ? : 시작, & : 추가  (?keyA=valueA&keyB=valueB)
  • query parameter, query string 등으로 불림
  • 웹서버에 제공하는 파라미터 (문자 형태)

fragment

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://docs.spring.io/spring-boot/docs/current/reference/html/getting-
started.html#getting-started-spring-boot
  • html 내부 북마크 등에 사용
  • 서버에 전송하는 정보는 아님

'HTTP' 카테고리의 다른 글

[HTTP] 상태 코드  (0) 2022.09.02
[HTTP] 메서드 활용  (0) 2022.08.31
[HTTP] 메서드  (0) 2022.08.27
[HTTP] HTTP의 특징  (1) 2022.08.26
[HTTP] 인터넷 네트워크  (0) 2022.08.18

IP(Internet Protocol)

IP

  • 지정한 IP 주소에 데이터 전달
  • 패킷이라는 통신 단위 사용
  • 클라이언트와 서버 간 데이터 전송에 출발지 IP, 목적지 IP 등을 추가하여 전달

IP 프로토콜의 한계

  • 비연결성
    · 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송
      (패킷을 받을 수 있는 상태를 확인할 수 없음)
  • 비신뢰성
    · 데이터 전송 과정에서 패킷의 소실
    · 패킷의 전송 순서를 보장할 수 없음
  •  프로그램 구분
    · 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 시 이를 구분할 수 없음

 

TCP vs UDP

TCP 특징

  • 연결지향 : TCP 3 way handshake 기법 사용 (가상 연결)
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜
  • 현재 대부분 TCP 사용

UDP 특징

  • TCP가 제공하는 대부분의 추가 기능이 존재하지 않음
  • 연결지향, 데이터 전달 보증, 순서 보장 모두 미보장
  • 대신 단순하고 빠른 데이터 전송
  • IP와 거의 유사 (PORT, 체크섬 등의 일부 추가)
  • 응용프로그램에서 추가적인 작업이 요구

 

PORT

  • TCP/IP 패킷에 추가 됨 (정확히는 TCP 세그먼트에 출발지, 목적지 PORT가 전송 제어, 순서 등과 함께 추가)
  • 같은 IP 내에서 세부 프로세스를 구분 (웹 브라우저, 통화, 게임 등 구분)
  • 0 ~ 65535 할당 가능
    · FTP - 20,  21
    · TELNET - 23
    · HTTP - 80
    · HTTPS - 443

 

DNS

  • 기억하기 어렵고 변경 가능성이 있는 IP 주소를 일일이 찾기에 무리가 있음
  • DNS 서버를 통해 도메인 명을 통해 서버에 요청

 

 

 

 

 

 

참고 모든개발자를 위한 HTTP 웹 기본 지식 (인프런 김영한)

 

 

'HTTP' 카테고리의 다른 글

[HTTP] 상태 코드  (0) 2022.09.02
[HTTP] 메서드 활용  (0) 2022.08.31
[HTTP] 메서드  (0) 2022.08.27
[HTTP] HTTP의 특징  (1) 2022.08.26
[HTTP] URI  (0) 2022.08.21

+ Recent posts