[기술 면접] 1. HTTP에 대해서 설명해주세요.

HTTP에 대해서 설명해주세요

HTTP(Hypertext Transfer Protocol)는 웹 서버와 클라이언트 간의 데이터 전송을 담당하는 인터넷의 기본 프로토콜입니다. HTTP가 World Wide Web에서 정보를 교환하는 방식의 중추를 형성하므로 HTTP에 대한 이해가 중요하기 때문에 자주 등장합니다.

http



Q: HTTP에 대해서 설명해주세요.

HTTP는 HyperText Transfer Protocol의 약자로 서버-클라이언트 모델을 따르며 request/response 구조로 웹 상에서 정보를 주고받을 수 있는프로토콜입니다. TCP/IP 기반으로 작동하며, HTTP의 가장 큰 특징은 Connectionless와 Stateless입니다.

Connectionless는 서버 연결 후 요청에 응답을 받으면 연결을 끊어버리는 것을 의미합니다. 이로 인해 많은 사람이 웹을 이용하더라도 실제 동시 접속을 최소화하여 더 많은 유저의 요청을 처리할 수 있습니다. 하지만 연결을 끊었기 때문에, 클라이언트의 이전 상태(로그인 유무 등)를 알 수가 없다는 Steteless 특성이 생기게 됩니다. 정보를 유지할 수 없는 HTTP의 단점을 보완하기 위해, cookie, session, jwt 등이 도입되었습니다.

또한 HTTP는 정보를 text 형식으로 주고 받기 때문에 중간에 인터셉트할 경우 데이터 유출이 발생할 수 있는 문제가 있어서 이를 해결하고자 HTTP 암호화를 추가한 HTTPS 프로토콜이 추가되었습니다.



Q: Connectionless의 장, 단점을 말해보세요.

  • 장점 : Client의 요청들을 전부 유지하면 리소스가 소모됩니다. 하지만 Connectionless로 연결을 모두 끊고 효율적 리소스 사용을 기대할 수 있습니다.
  • 단점 : 매 요청마다 연결과 해제로 오버헤드가 발생합니다.
    • HTTP Persistent Connection을 사용합니다.
    • HTTP2, 3으로 더욱 최적화된 환경을 사용합니다.



Q: Stateless의 장, 단점을 말해보세요.

  • 장점 : Server가 Client의 상태를 보존하지 않기 때문에 Server의 확장성이 높으며 장애 발생 시, 서로 다른 Server가 대신하여 처리할 수 있습니다. 이 것을 Scale out이라고 합니다.
    • Scale up : 서버 자체 하드웨어 성능을 업그레이드 합니다.
  • 단점 : Server가 Client 상태를 보존하지 않기 때문에, Client가 서버로 추가 데이터를 전송해야 합니다.
  • 한계 : 모든 것을 무상태로 설계할 순 없습니다. 예로, 로그인의 경우 사용자가 로그인 했다는 상태를 서버에서 유지해야 하기 때문에 세션을 사용하여 최소한의 상태를 유지합니다.



Q: Post 요청 후에 새로고침 버튼을 클릭하면 다시 요청을 보내게 되는데 이 것은 멱등성이 없습니다. 어떻게 대비해야 하나요?

PRG(Post-Redirect-Get) 패턴을 사용하여 POST 방식으로 온 요청에 대해서 GET 방식의 웹 페이지로 redirect(3xx) 시킵니다.

  • 멱등성 : 연산을 여러 번 적용해도 결과가 일정한 성질
  • PRG : 업로드 예정



Q: HTTP status code에 대해서 설명해주세요.

클라이언트가 보낸 HTTP요청에 대한 서버의 응답 코드로, 상태 코드를 통해 요청의 성공/실패 여부를 판단할 수 있습니다. 100번대부터 500번대까지 총 5가지 종류가 존재합니다.

  • 1xx 정보 : 요청을 받았으며 작업을 계속합니다.
  • 2xx 성공 : 클라이언트가 요청한 동작을 성공적으로 수신하여 처리했습니다.
  • 3xx 리다이렉션 : 요청을 완료하기 위해 추가 작업 조치를 필요로 합니다.
  • 4xx 클라이언트 오류 : 클라이언트의 요청에 문제가 있습니다.
  • 5xx 서버 오류 : 서버가 유효한 요청 수행을 실패했습니다.
Status codeMessage
200OK요청 성공 잔액조회 성공
201Created리소스 생성 성공 게시글 작성 성공, 회원가입 성공
400Bad Request데이터의 형식이 올바르지 않는 등 서버가 요청을 이해할 수 없음
401Unauthorized인증되지 않은 상태에서 인증이 필요한 리소스에 접근
로그인 전에 사용자 정보 요청 등 - 인증
403Forbidden인증된 상태에서 권한이 없는 리소스에 접근
일반 유저가 관리자 메뉴 접근 등 - 인가
404Not Found요청한 route가 없음. 찾는 리소스가 없음
존재하지 않는 url 입력
500Bad Gateway서버에서 에상히지 못한 에러 발생
예외처리를 하지 않은 오류 발생



Q: HTTP request method 중 GET과 POST를 비교하여 설명해주세요.

GET 메소드는 클라이언트가 서버에게 리소스를 요청할 때 사용하는 메소드이고, POST 메소드는 서버에게 데이터 처리(주로 생성)를 요청할 때 사용하는 메소드입니다.

GET의 경우 필요한 정보를 특정하기 위해 URL 뒤에 Query String을 추가하여 정보를 조회하고, POST의 경우 전달할 데이터를 Body에 포함하여 통신합니다.

GET은 URL 뒤의 Query String까지 포함해서 브라우저 히스토리에 남게 되고 캐시가 가능하지만, POST는 브라우저 히스토리에 남지 않고 캐시도 불가능합니다.



Q: HTTP request method 중 Put과 Patch를 비교하여 설명해주세요.

PUT 메소드와 PATCH 메소드는 모두 서버의 리소스를 업데이트하는 메소드라는 공통점이 있습니다. 하지만, PUT 요청의 경우 모든 리소스를 수정, 대체하고 없으면 생성까지 하지만, PATCH 요청의 경우 일부 리소스만 수정하게 됩니다.



마치며

HTTP는 면접뿐만 아니라 개발 시 기본으로 사용되는 개념입니다. 기본이지만 방대하여 공부할 내용이 많다고 생각합니다. 네트워크 구조를 생각하며, HTTP에 익숙해지는 시간이 되었길 바랍니다.

다음 시간에는 OSI 7 Layer에 대해 알아보겠습니다.

http

Leave a Comment