반응형
Notice
Recent Posts
Recent Comments
Link
Today
Total
04-15 13:59
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
관리 메뉴

iOS 개발 기록 블로그

HTTP의 정의, 기본 작동 원리, 요청/응답 구조, HTTP/HTTPS 본문

Back-end

HTTP의 정의, 기본 작동 원리, 요청/응답 구조, HTTP/HTTPS

crazydeer 2024. 11. 17. 17:14
반응형

 

첫날 공부했던 것과 관련하여 쉽게 개요에 대해 다시 한번 정리해보겠습니다.

HTTP의 정의

HTTP(HyperText Transfer Protocol)는 웹에서 데이터를 주고받는 프로토콜입니다.
우리가 브라우저에서 웹사이트를 열 때, 앱에서 데이터를 가져올 때 이 HTTP가 동작합니다.

 

HTTP의 기본 작동 원리

HTTP는 클라이언트의 요청과 서버의 응답 사이의 대화 방식입니다.

  1. 클라이언트: Request(요청) 보내는 주체
  2. 서버: 요청을 받아서 Response(응답)을 보내는 주체

클라이언트의 예시로는 웹 브라우저, 모바일 앱,

서버의 예시로는 웹사이트의 데이터를 저장하고 있는 서버입니다.

 

Request와 Response의 구조

Request (요청)

- 구조

HTTP 메서드 + URL + 헤더 + 바디

 

- 예제

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
  • GET: HTTP 메서드 (요청의 종류)
  • /index.html: URL (요청 대상)
  • Host: 서버 주소
  • User-Agent: 클라이언트 정보 (예: 브라우저 종류) 
  • HTTP/1.1: 현재 널리 사용되는 HTTP 프로토콜 버전

 

Response (응답)

- 구조

상태 코드 + 헤더 + 바디

 

- 예제

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<html>..</html>
  • 200 OK: 상태 코드 (요청 성공)
  • Content-Type: 응답의 내용 타입 (예: text/html)
  • <html>..</html>: 응답 데이터 (HTML 페이지)

 

HTTP 메서드

  • GET: 데이터를 가져올 때
    • 예: 웹 페이지 불러오기
  • POST: 데이터를 서버로 보낼 때
    • 예: 로그인 정보 전송
  • PUT: 데이터를 새로 저장하거나 업데이트할 때
    • 예: 프로필 정보 수정
  • DELETE: 데이터를 삭제할 때
    • 예: 게시글 삭제

 

HTTP 상태 코드 (Status Code)

  • 200번대: 성공
    • 예: 200 OK: 요청 성공
    • 201 Created: 자원 생성 성공
    • 204 No Content: 성공했지만 응답 본문 없음
  • 300번대: 리다이렉션
    • 301 Moved Permanently: URL이 바뀌었어요
    • 302 Found: 임시로 다른 URL로 이동합니다
  • 400번대: 클라이언트 오류
    • 400 Bad Request: 요청 문법이 틀렸어요
    • 401 Unauthorized: 인증 필요
    • 403 Forbidden: 접근 권한이 없어요
    • 404 Not Found: 요청한 URL이 없어요
  • 500번대: 서버 오류
    • 500 Internal Server Error: 서버에 문제가 있어요

제가 iOS 개발하면서 400 Bad Request 에러를 종종 본 적이 있습니다.

이는 아래와 같은 문제로부터 야기했을 수 있습니다.

  • 잘못된 요청 데이터
    • 요청 본문(JSON 등)이 형식에 맞지 않거나 Required 데이터 누락인 경우
  • 쿼리 파라미터
    • URL에 필요한 쿼리 파라미터가 잘못되었거나 빠져 있을 때
    • 예: /search?query= (query 값이 비어 있음)
  • 헤더 문제
    • HTTP 요청에 필요한 헤더 누락인 경우 (예: 인증 헤더 Authorization이 없거나 잘못된 경우)
  •  URL 경로(Path) 오류
    • 예: 서버는 /users/123을 기대했지만 클라이언트가 /users/abc를 요청

 

HTTP 상태 코드는 RFC 문서(웹 표준 규약 문서)에서 정의되어 있습니다.
서버 개발자가 커스터마이징하는 것은 가능하지만 웹 표준이므로 혼란과 호환성 문제를 줄 수 있기 때문에 신중히 해야 합니다.

 

HTTP와 HTTPS

  • HTTP
    • 데이터를 암호화하지 않고 주고 받음 (보안 약함)
  • HTTPS
    • 데이터를 암호화해서 주고 받음 (보안 강함)
    • SSL/TLS 라는 기술을 사용해 데이터를 암호화합니다.

 

REST API와 HTTP

iOS 개발할 때 실제로 우리가 API 연결해왔었습니다.

저 같은 경우에는 생각 없이 Moya를 사용해서 API를 정의하고 요청/응답으로 값을 주고만 받았지, 그것이 어떤 방식으로 동작하는지, 그게 무엇인지 모르고 생각 없이 코딩만 해왔습니다.

익숙한 단어들이지만 뭔지 잘 몰랐던 부분에 대해서 이번 기회에 정리해보려고 합니다.

 

REST API는 HTTP를 이용해서 데이터를 주고받는 방식입니다.

  • 예시
    • 클라이언트: "유저 정보 주세요" → GET /users/123
    • 서버: "여기 유저 정보 있어요" → 응답 (JSON 데이터)

 

다음 글에서 REST API에 대해서 조금 더 자세히 알아보려고 합니다.

반응형