API의 개념

2026. 6. 16. 07:00·Programming/API

API가 무엇인가

두 소프트웨어가 서로 대화하는 방법을 정해놓은 약속입니다.

지도를 앱에 넣고 싶을 때 지도를 직접 만들 필요 없이 Google Maps API를 씁니다.

날씨가 필요하면 OpenWeatherMap API를 씁니다.

결제가 필요하면 토스 API를 씁니다.

이미 잘 만들어진 걸 가져다 쓰는 겁니다.


API 종류

REST API — 현재 가장 많이 씁니다. URL로 자원을 요청하는 방식입니다.

GraphQL — 필요한 데이터만 정확히 골라서 한 번에 가져올 수 있습니다. REST는 정해진 대로 다 받아야 하는데 GraphQL은 내가 원하는 필드만 지정합니다.

WebSocket — 연결을 계속 유지하면서 실시간으로 주고받습니다. 채팅, 주식 시세, 게임에 씁니다.

gRPC — 마이크로서비스끼리 통신할 때 씁니다. 일반 API 만들 때는 잘 안 씁니다.

보통 REST API가 기본입니다. 나머지는 특수한 상황에서 선택합니다.


HTTP 메서드

API를 호출할 때 어떤 행동을 할 건지 메서드로 표현합니다.

메서드 역할
GET 데이터 조회
POST 데이터 생성
PUT 데이터 전체 수정
PATCH 데이터 부분 수정
DELETE 데이터 삭제

HTTP 상태 코드

응답이 오면 항상 상태 코드가 같이 옵니다. 요청이 어떻게 처리됐는지 알려줍니다.

2xx — 성공

  • 200 OK — 정상
  • 201 Created — 생성 성공 (POST 후)
  • 204 No Content — 성공인데 반환할 내용 없음 (DELETE 후)

4xx — 내 잘못

  • 400 Bad Request — 요청 파라미터가 잘못됨
  • 401 Unauthorized — 인증 안 됨 (API 키 없거나 틀림)
  • 403 Forbidden — 인증은 됐는데 권한 없음
  • 404 Not Found — 해당 리소스 없음
  • 429 Too Many Requests — 요청 너무 많이 보냄 (Rate limit)

5xx — 서버 잘못

  • 500 Internal Server Error — 서버 내부 오류
  • 503 Service Unavailable — 서버 점검 중

4xx는 내 코드나 요청 문제, 5xx는 서버 문제입니다. 구분해두면 디버깅이 편합니다.


인증 방식

API는 아무나 못 쓰게 인증을 요구합니다. 방식이 몇 가지 있습니다.

API Key

가장 단순합니다. 발급받은 키를 헤더나 파라미터에 넣습니다.

# 헤더에 넣는 방식
headers = {"Authorization": "Bearer MY_API_KEY"}

# URL 파라미터에 넣는 방식
params = {"api_key": "MY_API_KEY"}

Basic Auth

아이디/비밀번호를 Base64로 인코딩해서 보내는 방식입니다. 요즘은 잘 안 씁니다.

from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth("username", "password")

OAuth 2.0

소셜 로그인이나 서드파티 권한 위임에 씁니다. 구글, 카카오 로그인이 이 방식입니다. 흐름이 복잡한 대신 가장 안전합니다.

1. 내 앱이 인증 서버에 토큰 요청
2. 인증 서버가 액세스 토큰 발급
3. 그 토큰으로 API 호출
# 토큰 발급
token_res = requests.post("https://auth.example.com/token", data={
    "grant_type": "client_credentials",
    "client_id": "MY_ID",
    "client_secret": "MY_SECRET"
})
token = token_res.json()["access_token"]

# 토큰으로 API 호출
headers = {"Authorization": f"Bearer {token}"}

JWT (JSON Web Token)

서버가 발급한 토큰을 헤더에 담아 보내는 방식입니다. 로그인 후 인증 유지에 많이 씁니다.

headers = {"Authorization": f"Bearer {jwt_token}"}

정리

  API Key Basic Auth OAuth 2.0 JWT
복잡도 낮음 낮음 높음 중간
보안 중간 낮음 높음 높음
주로 쓰는 곳 공개 API 내부 서비스 소셜 로그인 로그인 유지

'Programming > API' 카테고리의 다른 글

API를 활용한 데이터 자동 수집 파이프라인  (0) 2026.06.16
실전에서 API 안정적으로 쓰기  (0) 2026.06.16
파이썬으로 API 호출하기  (0) 2026.06.16
'Programming/API' 카테고리의 다른 글
  • API를 활용한 데이터 자동 수집 파이프라인
  • 실전에서 API 안정적으로 쓰기
  • 파이썬으로 API 호출하기
데이터로 읽는 생명
데이터로 읽는 생명
is-note 님의 블로그 입니다.
  • 데이터로 읽는 생명
    In Silico Note
    데이터로 읽는 생명
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • Bio-Knowledge (16)
        • 분자생물학 & 유전학 기초 (0)
        • 전사체학 & 유전자 발현 (0)
        • 구조생물학 & 단백질 (0)
        • 싱글셀 & 다중오믹스 (0)
        • 임상유전학 & 질환 데이터 (0)
      • Programming (4)
        • API (4)
      • BI&Programming-Tools (111)
        • File Formats (14)
        • Linux & Bash Script (38)
        • Python (35)
        • R (11)
        • 통계 (8)
        • Pipeline Manager (0)
        • Etc (5)
      • Bio Data Analysis (28)
        • 서열분석개론 (6)
        • WGS(Whole Genome Seq) (11)
        • WES(Whole Exome Seq) (2)
        • RNA-Seq (4)
        • Metagenome (2)
        • Non-human Resequencing (1)
        • 임상유전체 분석 (1)
        • Multi-Omics (1)
      • Bio-Trends & Tech (1)
      • 코딩테스트 연습 (30)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    코딩테스트
    분자생물학
    파일포맷
    파이썬연습
    bioinformatics
    R기초
    GATK
    리눅스
    파이썬기초
    wgs
    유전체분석
    통계
    생물정보학
    ngs
    FASTQ
    R
    fasta
    데이터분석
    리눅스기초
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
API의 개념
상단으로

티스토리툴바