뚝딱햄 탈출기

[기술면접대비] HTTP, GET-POST 메서드의 차이?, REST API란? 본문

web

[기술면접대비] HTTP, GET-POST 메서드의 차이?, REST API란?

hyrmzz1 2024. 5. 2. 01:52

HTTP

  • HTTP(HyperText Transfer Protocol)는 클라이언트와 서버 간의 통신을 위한 프로토콜이다.
  • 다양한 메소드를 제공하여 요청과 응답을 처리한다.
  • HTTP 메소드를 사용해 클라이언트는 웹 서버에 대해 원하는 동작을 지시(요청)하고, 서버는 해당 동작에 따른 응답을 제공한다.
  • 모든 HTTP 요청 메시지는 한개의 메서드를 갖는다.

GET vs. POST

목적

  • GET
    • 클라이언트가 서버로 특정 리소스(문서, 이미지 등)를 요청하고, 요청한 리소스를 응답으로 받음.
    • 리소스를 조회할 때 사용된다.
  • POST
    • 서버에 새로운 데이터를 전송하고 저장하는데 사용한다.
    • 데이터를 생성, 수정, 삭제할 때 사용된다.

데이터 전송 방식, URL, 보안

  • GET
    • HTTP body는 일반적으로 비어있다.
    • URL에 요청 데이터가 포함되어 있어 민감한 정보를 전송해서는 안된다. (보안 취약)
      • 데이터를 URL의 쿼리 스트링에 포함하여 전송한다.
      • 비밀번호 전송 불가
    • URL에 포함된 데이터 길이 제한이 있어 데이터 전송에 제한이 있다.
      • URL이 길어지면 서버에 부하가 발생할 수 있다.
  • POST
    • HTTP 요청 body(본문)에 데이터를 담아서 보낸다.
      • 데이터 전송에 제한이 없다. (서버에 따라 다르다)
    • 요청 데이터는 URL에 포함되지 않고, URL은 요청하는 리소스만을 나타낸다.
      • URL에 데이터가 포함되지 않아 민감한 정보를 안전하게 전송할 수 있음. (보안 ⬆️)
        • 비밀번호 전송 가능

캐싱

  • GET
    • 브라우저가 기본적으로 GET 요청을 캐싱한다.
      • 브라우저 캐시에 데이터가 저장(기록)될 수 있다.
    • 캐싱을 통해 응답 속도를 향상시킬 수 있다.
  • POST
    • 브라우저는 기본적으로 POST 요청을 캐싱하지 않는다.
      • 브라우저 캐시에 데이터가 저장(기록)되지 않는다.

멱등성

  • GET
    • 멱등성을 가지므로 동일한 요청을 반복해도 서버 상태에 영향을 미치지 않는다.
    • 오류 발생시 요청을 다시 시도해도 문제가 발생하지 않는다.
    • 결과를 예측할 수 있다.
    • 응답 결과를 캐싱해 성능을 향상시킬 수 있다.
  • POST
    • 비멱등성
    • 동일한 요청을 반복하면 서버 상태가 변경될 수 있다.
    • 데이터 수정이 필요한 경우 멱등성을 가지지 않아야 한다!
      • 로그인: 사용자의 로그인 상태 변경
      • 회원가입: 새로운 사용자 생성
      • 데이터 수정: 데이터를 변경

사용 예시

  • GET → 요청할 데이터가 적고 보안이 중요하지 않을 때
    • 데이터 조회
      • 검색
    • 페이지 로딩
  • POST → 요청할 데이터가 많거나 보안이 중요할 때
    • 로그인, 회원가입
    • 데이터 생성

HTTP의 응답 상태 코드

서버가 클라이언트에게 요청을 받으면 응답 상태에 따라 다른 상태 코드를 클라이언트에게 반환한다.

  • 1xx (요청에 대한 정보) : 요청을 받았으면 작업을 계속한다.
  • 2xx (성공) : 요청을 성공적으로 수행했다.
    • 200(성공), 201(새 리소스 작성), 202(요청 접수, 아직 처리는 안함)
  • 3xx (리다이렉션) : 클라이언트가 요청을 마지기 위해 추가적인 동작을 취해야 한다.
    • 300(여러개의 응답, 선택해야 함), 301(영구이동, 요청한 페이지가 영구적으로 이동됨), 302(임시이동, 현재 응답잉 다른 페이지이긴 하지만 임시적임)
  • 4xx (클라이언트 오류) : 클라이언트에 오류가 있다.
    • 401(권한 없음), 403(금지됨, 리소스에 대한 권한 없음), 404(찾을 수 없음, 서버에 없는 페이지)
  • 5xx (서버 오류) : 서버에 오류가 있다.
    • 500(내부 서버오류), 501(요청수행 기능없음, 메서드 인식불가), 503(서비스 사용불가)

 

나올 법한 연관 질문

Q. 웹페이지에 발생한 오류를 어떻게 해결할 것인가?

A.

HTTP 응답 상태 코드를 확인해서 해결 방법을 판단한다.


응답 상태 코드가 400번대라면 클라이언트가 잘못된 요청을 보낸 경우입니다. 예를 들어, 잘못된 URL, 유효하지 않은 요청 데이터, 인증 실패 등이 원인일 수 있습니다.

  • 요청하는 URL, 파라미터, 헤더 등을 확인하여 올바르게 전송하고 있는지 점검합니다.
  • 브라우저 콘솔에서 발생하는 오류 메시지를 확인합니다.
  • 네트워크 탭에서 요청과 응답을 확인하여 문제가 되는 부분을 파악합니다.


500번대 오류일 경우 서버에 오류가 있는 것이므로 서버 소스코드, 서버 설정, 데이터베이스 연결 등을 점검해야 합니다.

  • 서버 로그 파일을 확인하여 오류 메시지나 스택 트레이스를 분석합니다.
  • 최근에 서버 코드나 설정을 변경한 부분이 있는지 점검합니다.
  • 서버 자원 (CPU, 메모리, 디스크 사용량 등)을 모니터링하여 과부하 상태인지 확인합니다.
  • 데이터베이스 연결 상태와 쿼리 성능을 점검합니다.

REST API

  • REST는 어떤 리소스를 이름으로 구분해서 자원의 상태를 주고받는 방식을 의미합니다.
  • 즉, REST는 HTTP URI를 통해 리소스을 명시하고, HTTP 요청 메소드를 통해 해당 리소스의 상태를 주고받는 방식을 의미합니다.
  • REST API는 이런 REST를 기반으로 작성된 API 서비스를 의미한다.
    • HTTP의 장점을 최대한 활용할 수 있는 아키텍쳐이다.
  • REST 원칙을 잘 지킨 디자인을 RESTful이라고 표현한다.

REST API의 구성요소

  • 자원
    • 리소스는 해당 리소스 그 자체를 가지고 있고, URI를 통해 표현한다.
  • 행위
    • 리소스에 대해 어떤 행위를 할 지를 의미하며, HTTP 메소드를 통해 전달한다.
  • 표현
    • 리소스에 대한 구체적인 행위의 내용. Payload를 통해 전달한다.

REST API 에서의 HTTP 요청 메소드

GET

  • 리소스를 가져오기 위해 사용한다. (조회)

POST

  • 새로운 리소스를 생성하기 위해 사용한다.

PUT, PATCH

  • 기존 리소스를 수정하기 위해 사용한다.
  • PUT은 리소스 전체를 변경하고, PATCH는 일부만 수정한다.

DELETE

  • 리소스를 삭제하기 위해 사용한다.

RESTful API의 주요 특징

1. 클라이언트-서버 아키텍쳐

  • 클라이언트는 서버에 요청을 보내고 응답을 대기.
  • 서버는 요청받은 리소스를 제공.
  • 반드시 클라이언트로부터 통신이 시작된다. 서버는 요청을 받아야만 응답을 한다.

2. Stateless (무상태성)



  • HTTP는 상태를 계속 유지하지 않는 무상태 프로토콜이다.
  • 이전에 보냈던 요청이나 응답을 기억하지 않는다.
    • 많은 데이터를 매우 빠르고 확실하게 처리하는 범위성을 확보하기 위함
  • 항상 같은 서버가 유지 되어야 하는 stateful과 달리 stateless는 아무 서버나 호출해도 된다. 
    • 응답 서버를 쉽게 바꿀 수 있어 서버 확장성이 좋다.
  • 하지만 로그인을 한 사용자의 경우 상태를 유지해야 한다.
    • 일반적으로 브라우저 쿠키와 서버 세션 등을 사용해 상태 유지

3. 표준적인 인터페이스

  • HTTP 메서드 (GET, POST, PUT, DELETE)와 표준 데이터 형식(JSON, XML)을 사용

4. 리소스 중심 설계

  • 웹 서비스를 개별 리소스 컬렉션 (예: 사용자, 게시물, 상품)으로 취급
  • URL을 통해 리소스를 식별하고 CRUD (Create, Read, Update, Delete) 작업을 수행

5. 하이퍼미디어 기반

  • 서버는 클라이언트에게 다음 단계에 대한 정보 (예: 관련 리소스 링크)를 제공한다.

RESTful API 예시

  • GET /products: 모든 상품 목록 조회
  • GET /products/123: 특정 상품 정보 조회 (ID: 123)
  • POST /products: 새로운 상품 생성
Comments