일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 9020
- 실버
- 개발환경
- 가상환경
- 백준
- 파이썬
- Python
- 경사하강법
- 15649
- N-Queen
- 4948
- 1101
- 기계학습
- 티스토리챌린지
- 신경망 학습
- REST
- BOJ
- pyenv
- n과 m
- end to end
- 재귀
- 오블완
- streamlit
- 그리디 알고리즘
- REST API
- 밑바닥부터 시작하는 딥러닝
- 1002
- 파이싼
- 백트래킹
- 손실함수
- Today
- Total
파이톨치
[Web] HTTP와 REST API 본문
1. HTTP란 무엇인가?
정의
HTTP는 인터넷 세상의 언어라고 생각하면 돼요. 클라이언트(요청하는 사람, 예: 배달 앱)와 서버(응답하는 사람, 예: 가게)가 서로 대화할 수 있게 도와주는 규칙입니다.
예시로 이해하기
- 클라이언트: "저는 피자를 주문하고 싶어요!" (HTTP 요청)
- 서버: "알겠습니다! 피자 준비 중입니다." (HTTP 응답)
- 피자가 준비되면 서버가 응답을 보내요: "피자 배달 완료! 🍕"
특징
- 비연결성: 배달이 끝나면 연결을 끊습니다. 배달 앱과 가게가 계속 연결되어 있진 않아요.
- 무상태성: 가게는 “누가 예전에 피자를 시켰는지” 기억하지 않아요. 매번 새로 주문해야 합니다.
2. REST API란 무엇인가?
정의
REST(Representational State Transfer) API는 HTTP를 사용해 데이터를 주고받는 방식 중 하나입니다. 쉽게 말해, 인터넷에서 정보를 얻거나 보내기 위한 규칙이에요.
예시로 이해하기
REST API는 마치 배달 앱의 메뉴판처럼 작동합니다.
- "피자를 주문하려면 메뉴판의 /order/pizza에 요청을 보내세요."
- "피자 정보를 보고 싶으면 /menu/pizza를 확인하세요."
REST API는 HTTP의 GET, POST, PUT, DELETE를 사용합니다:
- GET: 피자가 뭐 있는지 보고 싶어! (정보 조회)
- POST: 마르게리타 피자 한 판 주세요! (정보 생성)
- PUT: 피자 주문을 페퍼로니로 바꿔주세요! (정보 수정)
- DELETE: 피자 주문 취소할게요! (정보 삭제)
3. HTTP와 REST API의 등장 배경
왜 필요했을까?
과거에는 클라이언트와 서버가 한 덩어리로 만들어지는 모놀리스 아키텍처를 많이 사용했어요. 모든 기능이 하나의 큰 시스템 안에서 동작했죠. (모놀리스 아키텍처는 모든 기능(예: 회원 관리, 주문 관리, 결제 시스템)이 하나의 큰 프로그램으로 동작하는 구조이고, 마이크로서비스 아키텍처는 각 기능을 작은 독립된 서비스로 분리하는 방식입니다.)
하지만 인터넷이 발전하고, 여러 기기(PC, 스마트폰, 태블릿)가 데이터를 요청하면서 더 유연한 통신 방법이 필요해졌습니다. 그래서 HTTP가 등장했고, 그 위에서 더 체계적인 방식으로 데이터를 주고받기 위해 REST API가 개발된 거예요.
마지막으로 한 줄 정리
HTTP는 인터넷의 언어, REST API는 HTTP를 사용하는 데이터의 룰이에요.
모놀리스는 "혼자서 다 하는 가게", 마이크로서비스는 "팀워크로 운영하는 가게"라고 기억하면 쉽겠죠! 😊
4. API란 뭐야?
정의
API(Application Programming Interface)는 다른 소프트웨어끼리 대화할 수 있게 만들어주는 인터페이스예요.
쉽게 말해, 한 프로그램이 다른 프로그램에게 “이거 좀 해줘!”라고 요청할 수 있는 통로죠.
예시: 배달 앱과 피자 가게
- 배달 앱이 피자 가게에:
“안녕, 피자 메뉴 보여줄 수 있어? 🍕”라고 요청(API 호출) - 피자 가게가 배달 앱에게:
“메뉴는 마르게리타, 페퍼로니, 하와이안이 있어!”라고 응답(API 응답)
이때 배달 앱과 피자 가게는 직접 대화하지 않고, API라는 통역사를 통해 대화합니다.
5. 인터페이스란?
정의
인터페이스는 어떤 시스템이 다른 시스템과 소통하는 방식이에요.
사람으로 치면, 인터페이스는 말하거나 듣는 방법 같은 거죠.
예시: 메뉴판 인터페이스
피자 가게에 들어갔을 때 메뉴판이 인터페이스라고 생각하면 돼요.
- 메뉴판에는 메뉴를 보는 법, 주문하는 법, 가격 확인 방법이 정리돼 있어요.
- 고객(배달 앱)은 메뉴판(인터페이스)을 통해 피자를 주문하고 정보를 얻습니다.
이처럼 소프트웨어도 다른 소프트웨어와 대화할 때, API라는 메뉴판 같은 인터페이스를 사용하는 거예요!
예시: 피자 가게 REST API
- GET /menu/pizza:
- 요청: "피자 메뉴 좀 보여줘!"
- 응답: "마르게리타, 페퍼로니, 하와이안"
- POST /order:
- 요청: "마르게리타 1개 주문합니다!"
- 응답: "주문 완료! 주문번호 1234"
- PUT /order/1234:
- 요청: "마르게리타를 페퍼로니로 변경해주세요!"
- 응답: "수정 완료!"
- DELETE /order/1234:
- 요청: "주문 취소할게요!"
- 응답: "취소 완료!"
7. 명령어: GET http://localhost:8080/users?name=hyeonwoo
이 명령어가 말하고자 하는 것을 한 단계씩 살펴보자면:
1-1. GET은 무엇을 뜻할까?
- GET은 HTTP 메서드로, 데이터를 조회할 때 사용하는 약속이에요.
- 여기서는 서버에게 “사용자 목록에서 이름이 hyeonwoo인 사람을 보여줘!” 라고 요청하는 거죠.
1-2. http://localhost:8080이 뭘까?
- http: HTTP 프로토콜을 사용하겠다는 뜻이에요. 만약 FTP나 HTTPS를 사용한다면 여기 바뀌겠죠.
- localhost: 내 컴퓨터를 가리키는 주소예요. (개발 중인 서버)
- 8080: 이건 서버의 포트 번호입니다. (서버가 데이터를 주고받는 통로)
1-3. /users는 무엇을 의미할까?
- /users: 서버에 있는 리소스(Resource)를 가리키는 경로예요.
여기서는 사용자 목록이라는 자원입니다.
8. QueryParameter란 무엇일까?
정의
QueryParameter는 리소스를 필터링하거나 추가 정보를 전달할 때 사용하는 방식이에요.
- URL 끝에 ?를 쓰고, 키=값 형태로 데이터를 붙여요.
- 여러 개를 사용할 땐 &로 연결해요.
예시
- ?name=hyeonwoo: 이름이 hyeonwoo인 사용자만 보고 싶어요.
- 여러 조건을 추가하면: ?name=hyeonwoo&age=30
→ 이름이 hyeonwoo이고 나이가 30인 사용자만 보고 싶어요.
비유
QueryParameter를 사용해 요청하는 건 마치:
- "피자 주문할 건데, 페퍼로니 피자만 보여줘! 🍕"
→ 여기서 페퍼로니가 필터 조건입니다.
9. 언제 QueryParameter를 사용할까?
PathParameter vs QueryParameter
- PathParameter: 필수적인 정보일 때 사용
- 경로에 포함되는 정보예요.
- 예: GET /users/123 → ID가 123인 사용자 조회
→ ID는 사용자 고유 정보니까 경로에 넣는 게 적합합니다.
- QueryParameter: 선택적인 정보일 때 사용
- 필터링, 정렬, 추가 조건이 필요할 때 쓰입니다.
- 예: GET /users?name=hyeonwoo → 이름으로 필터링
→ 이름은 여러 사람이 겹칠 수 있는 조건이라 QueryParameter가 적합합니다.
10. HTTP Header와 Payload란?
Header란?
HTTP Header는 요청이나 응답에 대한 부가 정보를 담고 있어요.
쉽게 말해, 메시지에 대한 소개서입니다.
예시: 피자 배달 주문
- 배달원에게 피자를 전해주며 말해요:
- "고객 이름: 정현우"
- "주소: 서울, 강남구"
- "연락처: 010-1234-5678"
→ 이 정보가 Header에 해당합니다.
주요 HTTP Header
- Content-Type: 데이터 형식 (예: JSON, HTML 등)
- Authorization: 인증 정보 (예: API 키)
- User-Agent: 클라이언트 정보 (예: 브라우저 이름)
Payload란?
Payload는 HTTP 메시지의 실제 데이터예요.
쉽게 말해, 요청이나 응답의 내용물입니다.
11. HTTP 상태 코드란?
정의
HTTP 상태 코드는 요청에 대한 서버의 응답 상태를 알려주는 숫자예요.
우리가 흔히 보는 404는 대표적인 상태 코드입니다.
주요 상태 코드
- 2xx: 성공
- 200 OK: 요청 성공
→ "피자 주문 접수 완료! 🍕" - 201 Created: 새로운 데이터 생성 성공
→ "새로운 피자 레시피가 추가되었습니다!"
- 200 OK: 요청 성공
- 4xx: 클라이언트 오류
- 400 Bad Request: 잘못된 요청
→ "주문 양식을 잘못 작성하셨습니다." - 404 Not Found: 리소스를 찾을 수 없음
→ "해당 피자 메뉴가 없습니다!"
- 400 Bad Request: 잘못된 요청
- 5xx: 서버 오류
- 500 Internal Server Error: 서버 내부 문제
→ "주방 기계 고장으로 주문을 처리할 수 없습니다. 😢"
- 500 Internal Server Error: 서버 내부 문제
'AI&ML > BoostCamp AI Tech' 카테고리의 다른 글
[BoostCamp AI Tech] Segmentation 오답노트 (0) | 2024.11.21 |
---|---|
[BoostCamp AI Tech] 학습 시 고려 사항 (0) | 2024.11.20 |
[BoostCamp AI Tech] U-Net (1) | 2024.11.18 |
[BoostCamp AI Tech] Semantic Segmentation (0) | 2024.11.17 |
[BoostCamp AI Tech] DilatedNet (0) | 2024.11.15 |