티스토리 뷰

반응형

웹 개발 실무 기술 A to Z

최근 웹 애플리케이션은 클라우드 네이티브(Cloud Native) 환경에서 동작하는 것이 표준이 되어가고 있습니다.
✔️ Docker를 활용한 컨테이너 기반 배포
✔️ Kubernetes를 통한 자동화된 컨테이너 오케스트레이션
✔️ 서버리스(Serverless) 컴퓨팅으로 운영 비용 절감

이번 글에서는 Docker, Kubernetes, AWS Lambda를 활용하여 클라우드 네이티브 애플리케이션을 구축하는 방법을 살펴보겠습니다.


1. 클라우드 네이티브란?

1-1. 클라우드 네이티브(Cloud Native) 개념

✔️ 클라우드 환경에서 최적화된 웹 애플리케이션을 개발하는 방식
✔️ 컨테이너(Container) + 마이크로서비스(MSA) + 서버리스(Serverless) 기반
✔️ 자동 확장, 배포, 운영 효율성 극대화

1-2. 클라우드 네이티브 아키텍처의 특징

특징 설명

컨테이너 기반 Docker, Kubernetes 활용
자동 확장(Autoscaling) 트래픽 증가에 따라 서비스 자동 확장
무중단 배포(Zero Downtime Deployment) Rolling Update, Blue-Green Deployment
서버리스(Serverless) AWS Lambda, Google Cloud Functions 활용

클라우드 네이티브 환경을 활용하면 웹 애플리케이션의 유연성과 확장성을 극대화할 수 있음!


2. Docker – 컨테이너 기반 애플리케이션 배포

2-1. Docker란?

✔️ 애플리케이션을 컨테이너(Container)로 패키징하여 배포하는 기술
✔️ 서버 환경에 상관없이 동일한 실행 환경 보장

2-2. Docker 설치 및 실행

(1) Docker 설치

👉 Docker 공식 사이트에서 Docker 설치

(2) 간단한 Node.js 애플리케이션을 Docker 컨테이너로 실행

mkdir docker-app && cd docker-app
npm init -y
npm install express
// index.js
const express = require("express");
const app = express();

app.get("/", (req, res) => res.send("Hello, Docker!"));
app.listen(3000, () => console.log("Server running on port 3000"));

(3) Dockerfile 생성

# 베이스 이미지 선택
FROM node:16

# 작업 디렉토리 설정
WORKDIR /app

# 의존성 설치
COPY package.json ./
RUN npm install

# 애플리케이션 코드 복사
COPY . .

# 컨테이너 실행 명령어
CMD ["node", "index.js"]

(4) Docker 컨테이너 실행

docker build -t my-node-app .
docker run -p 3000:3000 my-node-app

Docker를 활용하면 어디서든 동일한 환경에서 애플리케이션 실행 가능!


3. Kubernetes – 컨테이너 오케스트레이션

3-1. Kubernetes란?

✔️ 컨테이너를 관리하는 오픈소스 오케스트레이션 도구
✔️ 자동 확장(Auto Scaling), 로드 밸런싱, 무중단 배포 지원
✔️ 다수의 컨테이너를 효율적으로 배포하고 운영 가능

3-2. Kubernetes 기본 개념

개념 설명

Pod 컨테이너가 실행되는 최소 단위
Deployment 애플리케이션 배포 및 업데이트 관리
Service 외부 트래픽을 컨테이너로 연결
Ingress 도메인 기반 라우팅 설정
ConfigMap & Secret 환경 변수 및 보안 설정

3-3. Kubernetes에서 Node.js 애플리케이션 배포

(1) Kubernetes Deployment 설정 파일 작성 (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-app
        image: my-node-app:latest
        ports:
        - containerPort: 3000

(2) Kubernetes Service 설정 파일 (service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: node-service
spec:
  selector:
    app: node-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: LoadBalancer

(3) Kubernetes 배포 실행

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

Kubernetes를 활용하면 대규모 트래픽에도 안정적으로 애플리케이션 운영 가능!


4. 서버리스(Serverless) – AWS Lambda 활용

4-1. 서버리스(Serverless)란?

✔️ 서버를 직접 관리할 필요 없이 이벤트 기반으로 코드 실행
✔️ 필요한 순간에만 실행되므로 비용 절감 가능
✔️ AWS Lambda, Google Cloud Functions, Azure Functions 지원

4-2. AWS Lambda로 서버리스 API 구축

(1) AWS Lambda 함수 생성

AWS 콘솔에서 Lambda > Create function 선택 후 Node.js 환경 선택

(2) Lambda 함수 코드 작성

exports.handler = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({ message: "Hello, Serverless!" }),
  };
};

(3) AWS API Gateway 연결

AWS API Gateway를 설정하여 Lambda 함수를 HTTP 엔드포인트로 연결

AWS Lambda를 활용하면 서버 없이 API 실행 가능!


5. 클라우드 네이티브 애플리케이션의 장점과 단점

5-1. 장점

✔️ 유연한 확장성 → 트래픽 증가 시 자동 확장
✔️ 운영 부담 최소화 → 서버 관리 필요 없음
✔️ 비용 절감 → 사용한 만큼만 요금 지불

5-2. 단점

초기 설정 복잡 → Docker, Kubernetes 설정이 필요
Cold Start 문제 → 서버리스 환경에서는 첫 실행이 느릴 수 있음
모니터링 및 디버깅 어려움 → 컨테이너 및 서버리스 환경에서 로그 관리 필요

적절한 환경을 선택하여 클라우드 네이티브의 장점을 극대화할 수 있음!


6. 마무리 및 다음 글 예고

이번 글에서는 **클라우드 네이티브 웹 애플리케이션을 구축하는 방법 (Docker, Kubernetes, AWS Lambda)**을 살펴보았습니다.
다음 글에서는 **CI/CD(지속적 통합 및 배포) 파이프라인 구축 방법 (GitHub Actions, Jenkins, GitLab CI/CD)**을 소개하겠습니다.

다음 글 예고: "CI/CD 구축 – GitHub Actions, Jenkins, GitLab CI/CD 활용" 🚀

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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
글 보관함
반응형