본문 바로가기

Infrastructure/Network

(22)
[HTTP] 상태 코드 (3xx) 3xx (Redirection) 상태 코드에 대해서 알아본다. 요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요하다. 300 (여러 선택 항목, Multiple Choices): 서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다. 301 (영구 이동, Moved Permanently): 요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다. 302 (임시 이동, Found): 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다. 303 (기타 위치 ..
[HTTP] 상태 코드 (5xx) **5xx (Server Error) 상태 코드에 대해서 알아본다. 서버 문제로 오류가 발생 하였을 때 사용되는 상태 코드. 오류의 원인이 서버이기 때문에 4xx 상태 코드와는 다르게 재시도시 성공 할 수도 있다. 500 (Internal Server Error) 서버 내부 문제로 오류가 발생했을 때 서버 내부의 오류를 정의하기 애매하면 500 상태 코드를 사용한다. 필자가 이 글을 쓰기전까지 실수하였던 부분이 있다. 예를들어 GET /car/100 을 조회 하였고 결과는 null이었다고 가정해보자. id = 100인 차량을 조회하였을 때 결과가 없는 것은 클라이언트 입장에서는 정상적인 결과이다. 쉽게 말해서 조회한 리소스가 없다는 결과를 얻었기 때문에 에러가 아니다. 하지만 null 인 결과를 수정하려..
[HTTP] 상태 코드 (4xx) 4xx (Client Error) 상태 코드에 대해서 알아본다. 클라이언트의 요청이 잘못되어 서버가 요청을 수행할 수 없다. 중요한 점은 오류의 원인이 클라이언트에게 있기 때문에 같은 형식으로 재요청시 재실패한다는 점이다. 백엔드 개발자들은 4xx 상태 코드를 잘 터트려주어 프론트 개발자들의 디버깅 시간을 줄여주어야한다. 400 (잘못된 요청): 서버가 요청의 구문을 인식하지 못했다. 401 (권한 없음): 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음(Unauthorized)로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다. 403 (금지됨): 서버가 요청을 거부하고 있다. (401은 인증 실패,..
[HTTP] 상태 코드 (2xx) 2xx (Successful) 상태 코드에 대해서 알아본다. 클라이언트의 요청을 성공적으로 처리했다는 뜻으로 아래와 같이 대표적으로 사용되는 코드들이 있다. 200 OK 201 Created 202 Accepted 204 No Content 200 OK (요청 성공) 요청 GET /cars/100 HTTP/1.1 Host: localhost:8080 응답 HTTP/1.1 200 OK Content-Type: application/json Content-Length: 34 { "manufacturer": "hyundai", "modelName": "sonata" } 201 Created (요청 성공해서 새로운 리소스가 생성됨) 요청 POST /cars HTTP/1.1 Content-Type: applica..
[HTTP] 상태 코드 (종류) 전반적인 HTTP 상태 코드의 종류를 간략하게 알아본다. 상태 코드: 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주기 위한 코드 1xx (Informational): 요청을 받았으며 프로세스를 계속한다. 2xx (Successful): 요청을 성공적으로 받았으며 인식했고 수용하였다. 3xx (Redirection): 요청 완료를 위해 추가 작업 조치가 필요하다. 4xx (Client Error): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다. 5xx (Server Error): 서버가 명백히 유효한 요청에 대해 충족을 실패했다. 만약 클라이언트에서 모르는 상태 코드가 나타나면 어떻게 해야할까? 현실적으로 클라이언트가 모든 상태 코드를 처리하기는 힘들다. 글을 쓰는 시점의 4xx 상태 코드의 ..
[HTTP] API 설계 예시 좋은 HTTP API 설계에 대해서 알아본다. HTTP API - 컬렉션 POST 기반 등록(회원 관리 API 등) HTTP API - 스토어 PUT 기반 등록(정적 컨텐츠 관리, 원격 파일 관리) HTML FORM 사용 웹 페이지 회원 관리(GET, POST만 지원) 차량 관리 시스템 아래는 차량 관리 시스템의 API 설계다. (POST 기반 등록) 차량 목록 /cars -> GET 차량 등록 /cars -> POST 차량 조회 /cars/{id} -> GET 차량 수정 /cars/{id} -> PATCH, PUT, POST 차량 삭제 /cars/{id} -> DELETE POST 기반의 신규 자원(resource)은 다음과 같은 특징을 가진다. 클라이언트는 등록될 리소스의 URI를 모른다. 서버가 새..
[HTTP] 메서드 - 4 (활용) HTTP 메서드의 활용 방법에 대해서 알아본다. 클라이언트에서 서버로 데이터를 전송하는 방식은 크게 두 가지가 있다. 쿼리 파라미터를 통한 데이터 전송 GET 주로 검색 필터(검색어) 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 클라이언트에서 서버로 데이터를 전송하는 상황은 크게 네 가지가 있다. 정적 데이터 조회 이미지, 정적 텍스트 문서 GET을 사용 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 동적 데이터 조회 검색, 게시판 목록에서 검색 필터(검색어) 쿼리 파라미터 사용 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정룔 조건에 주로 사용 HTML Form을 통한 데이터 전송 회원 가입, 상품 주문, 데이터 변..
[HTTP] 메서드 - 3 (속성) HTTP 메서드의 속성에 대해서 자세하게 알아본다.* 안전 (Safe Methods) 호출해도 리소스의 상태 변경하지 않는다. 리소스의 상태를 제외한 부분에 대한 안전은 고려하지 않는다. 멱등 (idempotent) f(f(fx)) = f(x) 몇 번이 호출되더라도 항상 같은 결과를 반환한다. 멱등 속성을 가지는 메서드 GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다. PUT: 수정되는 결과는 요청 데이터에 따라 결정된다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다. DELETE: 결과를 삭제한다. 같은 요청을 여러번 하더라도 삭제된 결과는 똑같다. 멱등 활용 자동 복구 메커니즘 서버에서 TIMEOUT 등으로 정상 응답을 주지 못했을 때, 클라이언트가 같은 요청을 다시 해도 되는가..