Post

프로젝트 배포

프로젝트 배포

📚 학습 내용 정리

🚀 NGINX

  • High performance load balancer, web server, API gateway & reverse proxy
  • 비동기 방식이기 때문에 매우 높은 성능
  • 정적인 파일(주로 프론트엔드 파일들)을 서비스할 때 뛰어난 성능 (vs. 톰캣)
  • Load balancer 나 API gateway 용도로도 사용 가능
  • DOS 공격 방어도 가능하다

🌐 CORS (Cross-Origin Resource Sharing)

  • 도메인, 포트, 프로토콜이 다를 때 발생
  • 브라우저의 보안 정책으로 인해 발생하는 문제
  • 예시: https://domain-a.com의 프론트엔드 JavaScript 코드가 https://domain-b.com/data.json을 요청하는 경우
  • NGINX의 CORS 설정 기억하기
    • NGINX 설정 예시:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      server {
          location /api/ {
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Credentials' 'true';
              add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
              add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
              add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
              if ($request_method = 'OPTIONS') {
                  return 204;
              }
          }
      }
      

🔀 프론트엔드와 백엔드 분기

  • 포트 (8080 과 8081) -> Cross Origin
    • 브라우저는 도메인, 포트, 프로토콜 하나라도 틀리다면 다른 서버로 인식
    • 주소를 기준으로 분기처리
      • / 로 들어오는 요청은 프론트엔트 라우터로
      • /api 로 들어오는 요청은 백엔드로 보낸다
  • Webserver로서의 역할
  • API gateway로서의 역할

☁️ AWS AutoScaling 의 아쉬운 점

  • 도커를 왜 쓰는가에 대한 고찰
    • 효율적인 자원 관리
    • 자동화된 배포 및 스케일링
    • 환경 일관성 보장

🐳 어디까지 도커화 해야할까

  • 프론트엔드 / 백엔드는 필수적
    • 배포의 효율성 / 편의성을 생각하자
  • 선택적 도커화: DB / Jenkins / NGINX
    • 각 서비스의 필요와 효율성을 고려

🔧 GitLab -> Jenkins

  • CI/CD 파이프라인 구축
  • GitLab에서 코드 저장 및 관리
  • Jenkins로 자동화된 빌드, 테스트, 배포 수행

This post is licensed under CC BY 4.0 by the author.