상세 컨텐츠

본문 제목

[주제 12, 13] 웹 서비스 개발 기초 / HTTP의 기초

본문

주제 12 : HTTP의 메소드와 CRUD(create/read/update/delete)를 적절하게 짝짓고, POST와 PUT의 차이점을 설명하세요.

HTTP Method CRUD Action 설명
POST Create 서버에 생성할 엔터티 제출
GET Read 서버에서 자원 표현 검색
PUT Update 서버의 기존 리소스 업데이트
DELETE Delete 서버에서 리소스 삭제

결과적으로 POST와 PUT의 차이점은.

 

1. POST는 일반적으로 서버에 새로운 리소스를 생성하는데 사용되며, PUT은 업데이트하는데 사용된다.

2. POST를 사용할 때 서버는 고유 식별자로 새 리소스를 생성하지만, PUT을 사용할 때에는 리소스 식별자를 클라이언트가 지정하고 해당하는 식별자에 맞는 리소스를 업데이트하거나, 없으면 생성한다.

3. 멱등성 PUT은 멱등적이여서 동일한 요청을 여러번 보내면 항상 같은 응답을 받지만, POST는 동일한 요청을 여러번 보내면, 식별자가 다른 여러 리소스로 생성될 수 있기에 멱등성을 가지고 있을 필요가 없습니다.

 

아래는 HTTP 메소드에 따른 작동 방식입니다.


POST: 생성 작업에 사용됩니다. 클라이언트가 서버에 POST 요청을 보내면 서버에 새 리소스가 생성됩니다. 예를 들어 사용자가 웹 양식을 제출하면 일반적으로 서버의 데이터베이스에 새 레코드를 생성하기 위해 POST 요청을 사용하여 데이터가 전송됩니다.

GET: 읽기 작업에 사용됩니다. 클라이언트가 서버에 GET 요청을 보내면 서버에서 데이터를 검색합니다. 예를 들어 사용자가 브라우저의 주소 표시줄에 URL을 입력하고 Enter 키를 누르면 웹 페이지를 검색하기 위해 GET 요청이 서버로 전송됩니다.

PUT: 업데이트 작업에 사용됩니다. 클라이언트가 서버에 PUT 요청을 보낼 때 서버의 기존 리소스를 업데이트합니다. 예를 들어 사용자가 블로그 게시물을 편집하고 변경 사항을 저장하려는 경우 클라이언트는 기존 게시물을 업데이트하기 위해 PUT 요청을 보냅니다.

DELETE: 삭제 작업에 사용됩니다. 클라이언트가 서버에 DELETE 요청을 보내면 서버에서 리소스를 삭제합니다. 예를 들어 사용자가 블로그 게시물을 삭제하려는 경우 클라이언트는 DELETE 요청을 보내 서버에서 게시물을 제거합니다.


주제 13 : HTTP 응답 코드의 200, 300, 400, 500번대의 특징과 차이점을 설명하세요. 

HTTP 응답 코드는 클라이언트가 보내는 요청의 대한 결과값을 세자리숫자로 나타내는 방법입니다.

 

주요응답코드는 아래와 같습니다.

 

200: Success(성공). 200 응답코드는 요청이 성공했고, 서버가 요청한 데이터를 반환한다는 것을 나타냅니다.

300: Redirection(다중 선택). 300 응답코드는 요청은 서버에 도착했으나, 클라이언트가 이 요청을 하려면 추가 작업이 필요하다는 것을 의미합니다.

400: Client Error(클라이언트 오류). 400 응답코드는 클라이언트 측의 오류로 서버가 요청을 처리할 수 없음을 나타냅니다.

500: Server Error(서버 오류). 500 응답코드는 서버 측의 오류로 인해 서버가 요청을 처리할 수 없음을 나타냅니다. 이는 서버에 대한 문제만 나타내는것은 아니고, 서버 혹은 데이터베이스 오류가 포함 될 수 있습니다. 다만, 클라이언트 측 오류가 아님을 확인 할 수 있습니다.

 

요약하면, HTTP 응답코드는 서버와 클라이언트간의 통신을 할 때, 정상 및 오류코드를 출력하여, 통신이 어느쪽에서 문제가 발생했는지, 어떤문제가 발생했는지 확인을 해주는 방식이라고 이해할 수 있습니다.

 

세부코드는 아래와 같습니다.

100: Continue(요청대기) 이 코드는 클라이언트가 요청을 계속 보낼 수 있고, 서버가 준비되면 응답할 것을 알려줍니다.

101 Switching Protocols(스위칭 프로토콜) 이 코드는 일반적으로 서버가 HTTP/1.1에서 HTTP/2로 업그레이드하는 것과 같은 프로토콜 전환 요청을 받았을때 사용됩니다. 서버는 이코드로 응답하여 프로토콜 전환 중임을 클라이언트에게 알려줍니다.

102 Processing(작업 중) 사용자가 수신요청을 하여 처리하고는 있지만 아직은 제대로 된 응답을 할 수 없는 상태임을 응답하는 코드이다. WebDAV 전용.

103 Early Hints. Link 헤더와 함께 사용되며 주로 서버가 응답을 준비하는 동안 사용자가 사전로딩(PreLoading)을 할 수 있도록 하는 응답코드.

 

201: Created(생성). 이 코드는 서버가 요청에 대한 응답으로 새 리소스를 성공적으로 생성 했음을 알려줍니다.

202 Accepted. 요청이 받아들여졌지만 처리되지 않았음을 의미한다.
203 Non-Authoritative Information(신뢰할 수 없는 정보). 응답받은 메타정보가 서버에 저장된 원본하고는 동일하지는 않지만 로컬이나 다른 복사본에서 수집되었음을 알리는 응답코드. 이 경우에도 보통은 200 OK 응답코드가 203 Non-Authoritative Information 응답코드보다 우선적으로 응답한다.

204: No Content(콘텐츠 없음). 이 코드는 서버가 요청을 성공적으로 처리 했지만, 반환할 응답이 없음을 나타냅니다.

205 Reset Content(콘텐츠 재설정) 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 204 응답과 달리 이 응답은 요청자가 문서 보기를 재설정할 것을 요구한다 (예: 새 입력을 위한 양식 비우기).
206 Partial Content(부분 콘텐츠) 컨텐츠의 일부 부분만 제공한다. 보통 클라이언트에서 시작 범위나 다운로드할 범위를 지정한 경우 자동으로 해당 부분만 제공할 때 사용하는 코드이다.
207 Multi-Status(다중 상태) 여러 소스에서 여러 응답인 상태에서 적절한 정보를 사용자한테 제공할수 있도록 하는 응답코드. WebDAV 전용.
208 Already Reported(이미 보고됨) DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거되어 있으며 다시 포함되지 않는다는 의미로 응답하는 응답코드. WebDAV 전용.
226 IM Used(IM 사용됨) 서버가 사용자의 GET 요청에 대한 리소소의 의무는 다했고, 현재 인스턴스에서 적용된 하나 이상의 인스턴스 조작 결과를 보낼 때 사용되는 코드이다. HTTP Delta Encoding 전용.

 

301: Moved Permanently(영구적 이동). 이 코드는 요청된 리소스가 새 URL로 영구적으로 이동 했으며, 클라이언트가 이에 따라 북마크 혹은 링크를 업데이트해야함을 나타냅니다.

302 Found: 일시적으로 컨텐츠가 이동했을때 사용된다.

303 See Other: 서버가 사용자의 GET 요청을 처리하여 다른 URL에서 요청된 정보를 가져올 수 있도록 응답하는 코드.

304: Not Modified(수정되지 않음). 이코드는 클라이언트가 요청한 리소스가 수정되지 않았으며, 서버가 리소스의 캐시된 버전을 반환하고 있음을 나타냅니다.

305 Use Proxy(프록시 사용): 프록시를 사용하지 않으면 접근할 수 없는 컨텐츠에 사용할 목적으로 만들어졌다. 이 응답 코드에는 요청자가 사용해야 하는 프록시 서버의 정보를 포함할 수 있다. 다만 보안상 이유로 이 응답코드를 인식하는 브라우저는 없고 현재 사용 중지(Deprecated)된 비권장 응답코드이다

306 (Unused): 초기 HTTP/1.1까지만 해도 Switch Proxy 요청으로 다음 요청시 지정한 프록시 서버를 사용하라는 응답 코드로 초안이 각성되었으나 정작 사용이 되지 않았고 지금은 305 Use Proxy 응답이 사용 중지(Deprecated)되어 문서에서 삭제, 예약코드로 있다.

307: Temporary Redirect(임시 리디렉션). 이코드는 요청된 리소스가 일시적으로 새 URL로 이동되었고, 클라이언트가 향후 요청에 대해 원래 URL을 계속 사용함을 의미합니다( 301은 영구적, 307은 임시적으로, 301은 업데이트를 통한 URL 수정이 필요하지만, 307은 임시적 이동이므로 수정이 필요없다)

308 Permanent Redirect: 301와 동일하게 영구적인 컨텐츠 이동을 나타낼때 사용되나, HTTP 메소드의 변경을 허용하지 않는다.

 

401: Unauthorized(권한 없음). 이 코드는 클라이언트가 요청한 리소스에 엑세스하기위한 권한이 없음을 나타냅니다.( 예를 들어 로그인을 하지 않고, 권한이 없는 리소스에 접근한 경우)

402 Payment Required(결제 필요): 결제가 필요한 리소스에 결제없이 접근했을 경우 발생. HTTP/1.1에서 정의되었으나 구현하지는 않고, 향후에 사용하기 위해 예약해둔 코드이다. 현재 딱히 표준조차도 존재하지 않는다. 이런 상황에서는 보통 403을 사용한다.

403: Forbidden(금지). 이 코드는 클라이언트가 접근이 허락되지않은 리소스에 접근을 했다는 것을 나타냅니다.

404 Not Found(찾을 수 없음): 찾는 리소스가 없다는 뜻으로, 가장 흔하게 볼 수 있는 오류 코드이다

405: Method Not Allowed(메소드가 허용되지 않음). 이 코드는 요청된 리소스가 요청에 사용된 HTTP 메스드를 지원하지 않음을 나타냅니다.(예를 들어 읽기전용 리소스에 수정을 요청한 경우)

407 Proxy Authentication Required(프록시 인증 필요) : 프록시 인증이 필요할 경우 사용하는 코드이다.
408 Request Timeout(요청 시간 초과) : 요청 중 시간이 초과되었을때 사용하는 코드이다.
409 Conflict(충돌) : 사용자의 요청이 서버의 상태와 충돌하여 응답하는 코드이다.
410 Gone(사라짐) : 404와는 달리 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다. 쉽게 말해, 404는 "찾는 게 일단 여긴 없는데 다른 곳에는 있을 수도 있어요" 라는 뜻이고, 410은 "니가 찾는게 있었는데요, 없었습니다"라는 뜻이다.
411 Length Required(길이 필요) : 서버에 요청시 Content-Length 값을 지정하지 않아 서버에서 응답을 거부할 때 쓰는 코드이다.
412 Precondition Failed(전제조건 실패): 사용자가 서버로 조건부 요청(Conditional Requests)을 보낼 때 서버의 전제조건와 사용자의 전제조건이 맞지 않아 서버에서 응답 거부를 할때 쓰는 코드이다.
413 Payload Too Large(요청이 너무 긺) : 요청 본문이 너무 긴 경우 발생한다. 서버 소프트웨어로 엔진엑스를 사용하는 경우 기본 설정 그대로 사용하면 큰 첨부파일을 올릴 때 이 오류 코드가 발생하게 된다.
414 URI Too Long(URI가 너무 긺): URI가 너무 길 때 발생한다. 흔히 볼 수 있는 사례는 URL이 너무 긴 경우이다. 구현 페이지
415 Unsupported Media Type(지원하지 않는 미디어 타입): 사용자가 요청한 미디어타입이 서버에서 지원하지 않는 타입이라서 응답을 거부할 때 쓰는 코드이다.
416 Requested Range Not Satisfiable(요청범위 부적합): 요청 헤더의 Range로 지정한 범위가 잘못되었을 때 발생한다.
417 Expectation Failed(예측 실패): 요청 헤더의 Expect값이 서버에서는 적절하지 못하다는 것을 응답할때 쓰는 코드이다.
418 I'm a teapot(찻주전자로 커피를 만들 수 없음.): 하이퍼텍스트 커피 포트 제어 프로토콜(HTCPCP)(RFC 2324)에서 사용되는 코드이다. 실제 구현 페이지
421 Misdirected Request(잘못된 요청): 서버로 유도된 요청된 응답을 서버에서 생성할 수 없을때 응답하는 코드로 주로 TLS 인증서가 여러개 설치된 상태에서 꼬였을 경우 뜨는 오류다. 참고
422 Unprocessable Entity(처리할 수 없는 개체): 요청을 잘 받았으나 문법 오류로 인하여 무언가를 응답할 수 없을때 사용되는 코드이다. WebDAV 전용.
423 Locked(잠김): 요청한 리소스가 잠겨있을때 뜨는 코드이다. WebDAV 전용.
424 Failed Dependency(실패한 종속성): 이전의 요청이 실패한 상태에서 지금의 요청도 실패한 경우 뜨는 코드이다. 간단히 말해 요청 연속실패. WebDAV 전용.
425 Too Early(너무 일찍요청) : 서버가 재생될 수 있는 요청을 처리하는 데 위험을 감수하지 않는다는걸 알릴때 사용되는 코드이다.[RFC8470] 클라이언트가 파이어폭스 58 이후 버전이 아닌이상 재대로 해석하지는 않는다.
426 Upgrade Required(업그레이드 필요): 클라이언트에서 보낸 요청의 프로토콜이 맞지 않아 현재 서버에서 처리할 수 없으나, 클라이언트가 프로토콜을 서버에서 지원하는 다른 프로토콜로 업그레이드 한다면 처리해 줄 수도 있는 상황에서 쓰는 응답 코드이다. 주로 서버의 응답에는 Upgrade 헤더와 필요한 프로토콜을 같이 응답한다. 보통 HTTP/1.1인 클라이언트가 HTTP/2만 지원하는 서버에서 요청할 때 뜬다.
428 Precondition Required(전제 조건 필요): 서버로 요청을 할려면 요청이 조건부이어야만 할 때 뜨는 코드이다. 사용자가 PUT 요청을 하여 서버의 값이 수정되는 동안 다른 사용자가 서버의 상태를 수정하여 발생하는 충돌인 업데이트 상실를 막기 위해서 존재하는 코드.

429: Too Many Requests(요청이 너무 많습니다). 이 코드는 클라이언트가 너무 많은 요청을 보내, 서버가 클라이언트의 요청 속도를 제한하고 있음을 나타냅니다.

431 Request Header Fields Too Large(요청 헤더 필드가 너무 큼): 요청한 헤더 값이 너무 커서 서버에서 처리를 하지 않는다는 걸 응답할 때 쓰는 코드이다. 보통 크기가 큰 쿠키와 캐시가 너무 쌓여져 있는 상태에서 서버에 요청할 때 뜨는 오류이다. 그리고 사용자 에이전트 변경프로그램으로 UA를 너무 길게 설정했을 때도 나온다. 캐시 및 쿠키를 정리하면 대부분 정상적으로 서버에서 응답한다.
451 Unavailable For Legal Reasons(법적인 이유로 차단됨): 국가 검열 등, 법적인 이유로 차단되었을 경우 사용할 수 있도록 정의된 코드이다. 서버는 Link 헤더로 차단된 근거가 되는 주소를 보낼 수 있다. 오류 코드는 검열에 대해 다루는 소설인 화씨 451에서 따온 것으로 검열을 위한 코드지만 실제로 이 코드를 사용하는 국가는 없다.

 

501: Not Implemented(구현되지 않음). 이 코드는 서버가 클라이언트의 요청을 수행하는데, 필요한 기능을 가지고 있지 않다는 것을 나타냅니다.

502 : Bad Gateway(잘못 된 게이트웨이). 이 코드는 게이트웨이 또는 프록시 서버가 업스트림 서버로부터 잘못된 응답을 받았음을 나타냅니다.

503: Service Unavailable(서비스 사용 불가). 이코드는 서버가 유지 관리, 과부화 등의 이유로 일시적으로 처리가 불가능하다는것을 나타냅니다.

504: Gateway Timeout(게이트 웨이 시간 초과). 이 코드는 게이트웨이 또는 프록시 서버가 업스트림 서버로부터 적시에 응답을 받지 못했음을 알려줍니다.

505: HTTP Version Not Supported(지원 불가능한 HTTP 버전). 이 코드는 서버가 요청에 사용된 HTTP 버전을 지원하지 않는것을 나타냅니다.

506 Variant Also Negotiates: 서버 내부 구성(값)에 오류가 있어 반환되는 값에 컨텐츠 협상이 순환 참조로 이루어져 있다는걸 알려주는 코드.
507 Insufficient Storage: 서버 내부 구성(값)에 오류가 있어 선택된 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 과정에서 적절한 끝점이 아님을 알려주는 코드. WebDAV 전용.
508 Loop Detected (무한 루프 발견): 서버가 요청을 처리하는 동안 무한 루프를 발견하였을 때 뜨는 응답코드. WebDAV 전용.
510 Not Extended(확장되지 않았음): 서버가 요청을 처리할때 요청에 대한 추가 확장이 필요한경우 뜨는 응답코드.
511 Network Authentication Required(네트워크 인증 필요): 사용자가 네트워크 엑세스 권한이 필요한 경우 뜨는 응답코드. 보통 네트워크에 엑세스할 때 로그인이 필요한 경우 주로 뜬다.

 

아래는 비표준 응답 코드이다.420 Enhance Your Calm: 트위터의 초기 API에서 사용하던 비표준 응답코드. 클라이언트가 API 리밋에 도달할 경우에 사용되었으나, 표준 코드인 429 Too Many Requests가 나오자 이쪽으로 대체되었다.
509 Bandwidth Limit Exceeded: 설정한 대역폭 제한을 초과시 사용된다. 원래 아파치 HTTP 서버와 CPanel에 쓰는 비표준 응답코드이나 웹호스팅를 사용하는 경우가 많아진 지금은 사실상 표준응답코드로 사용된다.
520 Unknown Error: 알 수 없는 오류. Cloudflare에서 주로 쓰는 비표준 응답코드. / ModSecurity Denial of Service (DoS) attack identified from 로 인하여 차단이 있음. 웹서버 로그를 확인할것.
521 Web server is down: 웹 서버가 가동 중이지 않을 때 나타난다. Cloudflare에서 주로 쓰는 비표준 응답코드.
522 Connection timed out(연결 시간 초과): 접속 시간 초과. Cloudflare에서 주로 쓰는 비표준 응답코드.
525 SSL Handshake Failed: 서버와 사용자간에 SSL/TLS Handshake을 할 수 없을 때 뜨는 코드로 주로 TLS를 설정을 안하고 HTTPS 접속이 안되는 서버 상태에서 Cloudflare SSL 구성값에 오류가 생긴 경우에 주로 뜬다. Cloudflare에서 주로 쓰는 비표준 응답코드.
526 Invalid SSL certificates: 서버의 SSL 인증서의 유효성을 검증 할수없고 인증서가 잘못되었을때 뜬다. Cloudflare에서 주로 쓰는 비표준 응답코드.

 

관련글 더보기