
목차 ▽열기
REST API란?
REST API는 웹 서비스에서 데이터를 주고받기 위한 표준적인 방식입니다. REST(Representational State Transfer)는 클라이언트(사용자)와 서버(웹 애플리케이션) 간의 통신을 효율적으로 처리하는 아키텍처입니다.
REST API의 특징
- 리소스 기반 설계: 모든 데이터(사용자, 상품, 게시글 등)는 각각의 URL을 통해 접근할 수 있습니다.
- HTTP 메서드 활용: 데이터를 조작할 때, 다음과 같은 HTTP 메서드를 사용합니다.
- GET : 데이터를 조회
- POST : 데이터를 생성
- PUT : 데이터를 수정
- DELETE : 데이터를 삭제
- 상태 유지 X(Stateless): 서버는 클라이언트의 상태를 기억하지 않으며, 요청마다 필요한 정보를 포함해야 합니다.
- JSON 또는 XML 형식 사용: 응답 데이터는 보통 JSON 형식으로 제공되며, 가독성이 좋고 가볍습니다.
REST API 예제
클라이언트가 서버에 GET 요청을 보낼 때:
GET <https://api.example.com/users/1>
서버 응답 (JSON 형식):
{
"id": 1,
"name": "John Doe",
"email": "johndoe@example.com"
}
이처럼 REST API는 웹 애플리케이션의 데이터를 효율적으로 제공하는 역할을 합니다.
API JWT 발급의 흐름
API를 안전하게 사용하려면 **인증(Authentication)**이 필요합니다. 가장 널리 사용되는 방법 중 하나가 JWT(JSON Web Token) 인증입니다.
JWT란?
JWT는 JSON을 기반으로 한 인증 토큰입니다. 사용자의 로그인 정보를 암호화하여 클라이언트와 서버 간의 보안을 유지합니다.
JWT 인증 과정
1️⃣ 사용자 등록 (Sign Up)
- 사용자가 회원가입을 진행합니다.
- 서버는 사용자의 정보를 데이터베이스에 저장합니다.
2️⃣ 로그인 요청 (Sign In)
- 사용자가 이메일과 비밀번호를 입력하여 로그인합니다.
- 서버는 해당 정보를 확인하고, 로그인 성공 시 JWT 토큰을 생성하여 반환합니다.
3️⃣ JWT 토큰 발급
- 로그인 성공 시 서버는 JWT 토큰을 생성하여 클라이언트에 전달합니다.
- 이 토큰은 사용자 정보(이메일, 역할 등)를 포함하며, 서명(Signature)으로 보호됩니다.
4️⃣ 클라이언트가 API 요청 시 JWT 포함
- 사용자는 API를 호출할 때, 요청 헤더에 JWT 토큰을 포함합니다.
GET <https://api.example.com/profile>
Authorization: Bearer
5️⃣ 서버에서 JWT 검증
- 서버는 클라이언트가 보낸 JWT가 유효한지 확인합니다.
- 유효하면 요청을 처리하고 응답을 반환합니다.
JWT 예제
JWT는 3개의 부분으로 구성됩니다:
Header(헤더), Payload(내용), Signature(서명)
{
"alg": "HS256",
"typ": "JWT"
}
.
{
"userId": 123,
"email": "john@example.com",
"exp": 1672531199
}
.
[서명 값]
서명(Signature)은 JWT가 위조되지 않았음을 증명하며, 이 값이 올바르지 않으면 API 요청이 거부됩니다.
배포 과정 (AWS EC2 + Docker + GitHub Actions)
REST API가 완성되면, 실제 사용자가 접근할 수 있도록 배포(Deploy) 해야 합니다.
배포는 AWS EC2 + Docker + GitHub Actions를 활용하여 자동화할 수 있습니다.
배포 과정 개요
- 소스 코드 관리: GitHub에서 프로젝트 코드 관리
- CI/CD 트리거: GitHub Actions가 코드 변경을 감지하여 자동 배포 시작
- Docker 컨테이너 빌드: 소스 코드를 Docker 이미지로 변환
- 이미지 업로드: Docker Hub 또는 AWS ECR에 이미지 저장
- EC2 서버에 배포: EC2 인스턴스에서 최신 컨테이너 실행
- 헬스 체크 및 운영: API 상태 점검 후 정상적으로 서비스 실행
1. AWS EC2 인스턴스 설정
1️⃣ AWS 콘솔에서 EC2 인스턴스 생성
- Ubuntu 기반 인스턴스 선택
- SSH 키 설정 후 접속 (ssh -i my-key.pem ubuntu@ec2-ip-address)
2️⃣ 필요한 패키지 설치
sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
2. Docker를 이용한 컨테이너
1️⃣ Dockerfile 작성
# Node.js 기반 Express 서버
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
2️⃣ Docker 이미지 빌드
docker build -t my-rest-api .
3️⃣ 로컬에서 컨테이너 실행
docker run -d -p 3000:3000 my-rest-api
3. GitHub Actions을 활용한 CI/CD
GitHub Actions을 이용하면, 코드가 변경될 때 자동으로 빌드 → 테스트 → 배포를 수행할 수 있습니다.
GitHub Actions 워크플로우 파일 (.github/workflows/deploy.yml)
name: Deploy to AWS EC2
on:
push:
branches:
- main # main 브랜치에 push될 때 실행
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v2
- name: Docker 빌드 및 푸시
run: |
docker build -t my-rest-api .
docker tag my-rest-api <AWS_ECR_URL>/my-rest-api
docker push <AWS_ECR_URL>/my-rest-api
- name: EC2 배포 스크립트 실행
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ubuntu
key: ${{ secrets.EC2_SSH_KEY }}
script: |
docker pull <AWS_ECR_URL>/my-rest-api
docker stop my-rest-api || true
docker rm my-rest-api || true
docker run -d -p 3000:3000 <AWS_ECR_URL>/my-rest-api
4. EC2에서 최신 이미지 실행
배포가 완료되면 EC2 서버에서 실행 중인 컨테이너를 확인할 수 있습니다.
docker ps # 실행 중인 컨테이너 확인
마무리
지금까지 REST API 개발, JWT 인증 과정, AWS EC2 + Docker + GitHub Actions 배포에 대해 알아보았습니다.
핵심 정리
✔ REST API: 클라이언트와 서버 간 데이터를 주고받는 표준 방식
✔ JWT 인증: API 요청 시 사용자 인증을 위한 토큰 방식
✔ AWS 배포: GitHub Actions + Docker + EC2로 자동화된 배포 수행
이제 이 가이드를 활용하여 안정적이고 확장 가능한 API를 직접 구축해 보세요!
'Basic' 카테고리의 다른 글
[Backend][Basic] 자바 메모리 구조와 가비지 컬렉션 완벽 정리 (0) | 2025.03.24 |
---|---|
[Backend][Basic] 대규모 언어 모델(LLM) 완벽 가이드 (0) | 2025.03.21 |
149. [Backend] [Jupyter Notebook]: 구글 Colab 사용법 및 활용 예시 (0) | 2025.02.06 |
83. [ Backend ] 개발 환경과 도구 선택 (1) | 2025.01.16 |
80. [Backend] 대규모 언어 모델(LLM)과 파인튜닝 (2) | 2025.01.16 |