TIL

👀Today I Learn

  • 나중에 서비스 호스팅을 위해 서버 환경을 어떻게 구성할지 고민해봤다🤔(사실 숙제기도 함ㅎㅎ)

서비스 호스팅 : AWS vs 로컬 호스팅

AWS 호스팅

  • 장점
    • 확장성(Scalability): 트래픽 증가 시 손쉽게 인프라를 확장 가능
    • 고가용성(High Availability): 여러 가용 영역을 활용하여 안정적인 서비스 제공
    • 관리 편의성: 자동 백업, 로깅, 모니터링 등의 기능 제공
    • 보안 강화: IAM, VPC, 보안 그룹 등을 통한 강력한 보안 설정 가능
  • 단점:
    • 비용 부담: EC2, RDS, S3 등 다양한 서비스를 사용할수록 비용 증가
    • 학습 곡선: AWS 서비스 및 설정을 익히는 데 시간이 필요함

로컬 호스팅

  • 집에 남는 컴퓨터를 활용하는 방법

  • 장점
    • 비용 절감: AWS와 비교하여 초기 비용이 거의 없음
    • 직접 컨트롤 가능: 서버 설정을 자유롭게 변경 가능
    • 연습 및 학습용으로 적합
  • 단점
    • 접근성 제한: 외부에서 접속하려면 포트포워딩, 도메인 설정 등이 필요
    • 유지보수 부담: 하드웨어 장애, 네트워크 장애 시 직접 해결해야 함
    • 확장성 부족: 트래픽 증가 시 즉각적인 스케일업이 어려움

정리

  • 실제 운영 서비스: AWS를 활용하는 것이 안정성과 확장성을 고려했을 때 적합
  • 개발 및 테스트 환경: 로컬 호스팅으로 충분


서비스 실행 : Nginx & Gunicorn 활용

  • Django는 기본적으로 runserver 명령어를 사용하여 개발 서버를 실행하지만, 운영 환경에서는 적합하지 않음
  • Gunicorn + Nginx 조합을 사용하여 안정적인 서비스 운영이 가능

Gunicorn: Django WSGI 서버

  • Gunicorn(Green Unicorn)은 WSGI(Web Server Gateway Interface) 서버로, Django 애플리케이션을 실행하는 역할을 함
  • 설치 및 실행

    pip install gunicorn
    gunicorn --workers 3 myproject.wsgi:application
    
  • 장점
    • 멀티 프로세스를 지원하여 성능 개선
    • 간단한 설정으로 빠르게 실행 가능
  • 단점
    • 직접적인 요청을 처리할 수 없고, 리버스 프록시(예: Nginx)와 함께 사용해야 함

Nginx: 리버스 프록시 서버

  • Nginx는 Gunicorn 앞단에서 클라이언트 요청을 받아 적절히 라우팅해주는 역할을 함
  • 설정 예시(/etc/nginx/sites-available/myproject)

    server {
        listen 80;
        server_name example.com;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  • 장점
    • 정적 파일(Static files) 제공 최적화
    • 로드 밸런싱 가능
    • 보안 및 성능 개선 가능

결론

  • Gunicorn + Nginx 조합을 사용하면 Django 서비스를 안전하고 효율적으로 배포할 수 있음


서버 환경 통일 및 관리: Docker 활용

Docker를 사용하는 이유

  • 환경 일관성 유지: 팀원별 로컬 환경 차이를 없앰
  • 배포 용이성: 서버와 동일한 환경을 로컬에서도 실행 가능
  • 확장성: 컨테이너 기반으로 확장 및 배포 용이

Docker로 Django 애플리케이션 실행하기

1) Dockerfile 작성

  FROM python:3.9
  WORKDIR /app
  COPY requirements.txt .
  RUN pip install -r requirements.txt
  COPY . .
  CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]

2) docker-compose.yml 작성

  version: '3'
  services:
    web:
      build: .
      ports:
        - "8000:8000"
      volumes:
        - .:/app

3) 실행 명령어

  docker-compose up --build

결론

  • Docker를 활용하면 개발 환경과 배포 환경을 통일할 수 있어 유지보수가 용이

요약

AWS vs 로컬 호스팅 비교

항목 AWS 로컬 호스팅
비용 유료 무료
확장성 높음 낮음
유지보수 쉬움 어려움
보안 강함 약함

서버 기술 비교

기술 역할
Gunicorn Django 애플리케이션 실행
Nginx 리버스 프록시 및 정적 파일 서빙
Docker 환경 통일 및 배포 자동화



💡Today I Thought

오늘의 체크리스트

  • 알고리즘 코드카타 1문제
  • SQL 코드카타 1문제
  • ML 공부
  • TIL 작성

회고

 오늘은 쉬어가는 날..☕

댓글남기기