thumbnail
웹 서비스 배포 흐름 이해하기
CI/CD
2025.07.02.

웹 서비스 배포 흐름 이해하기 – 웹서버, WAS, DB까지


🚀 처음 서비스를 만들고 나서 생긴 질문

처음 웹 서비스를 만들고 완성했을 때, 가장 먼저 든 생각은 “그럼 이걸 어떻게 배포하지?”였다.

프론트엔드는 HTML, CSS, JS로 마무리했고, 백엔드는 Java 기반의 Servlet으로 개발. 데이터는 MySQL에 잘 저장되고 있었지만, “이제 이걸 사용자들이 실제로 접속할 수 있게 하려면 어떻게 해야 할까?”라는 질문 앞에서 멈췄다.


🌐 웹서버와 WAS, 뭐가 다른 거지?

많은 사람들이 처음엔 웹서버 = WAS라고 생각한다. 하지만 실제로는 다르다.

  • 웹서버(Web Server): 정적 파일(HTML, 이미지, JS 등)을 서빙
  • WAS(Web Application Server): 동적 콘텐츠(로그인, DB 처리 등)를 처리

이 둘의 협업이 중요한 이유는 성능 때문이다.
예를 들어 Apache(Nginx)와 Tomcat을 조합하면, 정적 리소스는 웹서버에서 빠르게 처리하고, 동적 요청만 WAS가 부담하게 할 수 있다.

✅ 구조 요약:
클라이언트 → 웹서버(Apache/Nginx) → WAS(Tomcat) → DB


🏗 배포 구조 그리기 시작

서비스를 운영하기 위해 구성한 기본 아키텍처는 다음과 같다:

     [사용자]
         ↓
   [웹 브라우저]
         ↓
   [웹 서버 (Nginx)]
         ↓
   [WAS (Tomcat)]
         ↓
   [DB (MySQL)]

여기서 각 역할은 다음과 같다:

  • Nginx: 정적 파일 서빙, HTTPS 처리, 로드밸런싱
  • Tomcat: Java Servlet 처리, 비즈니스 로직 수행
  • MySQL: 데이터 저장

⚙️ 실제 배포 흐름

1. 소스코드 관리

  • GitHub에 백엔드와 프론트엔드를 각각 관리
  • main 브랜치에 머지되면 배포 자동화 트리거 발생

2. 빌드 & 배포 자동화

백엔드

  • Gradle/Maven으로 .war 파일 빌드
  • 빌드 후 WAS 서버에 자동 업로드 (ex: scp, FTP, GitHub Actions)

프론트엔드

  • 정적 HTML/CSS/JS 파일은 /var/www/html 경로에 업로드
  • CDN을 사용하면 Cloudflare 등을 통해 서빙 속도 최적화

🛡 보안 설정

🔒 HTTPS 적용

  • Nginx에서 Let’s Encrypt 인증서 적용
  • 443 포트를 통해 SSL 트래픽 수신

🔐 DB 보안

  • 외부 접속 차단 (bind-address=127.0.0.1)
  • DB 접속은 Tomcat에서만 가능하도록 설정

🔁 무중단 배포 전략

처음에는 수동으로 배포할 때마다 Tomcat을 재시작했지만, 서비스가 커지면서 무중단 배포가 필요해졌다.

도입한 전략:

  • WAS 이중화: Tomcat 2대를 띄우고, Nginx가 로드밸런싱
  • Blue-Green 배포: 새로운 버전은 별도 경로에 배포 후 스위칭
  • Health Check: /health 엔드포인트로 상태 체크

🧰 운영 중 생긴 일들

  • 로그가 너무 커져서 /var/log가 가득 찼던 일
  • Too many connections 오류로 DB 튜닝
  • 서브넷 문제로 웹서버 ↔ DB 연결이 막혔던 일

운영을 하면 할수록 단순히 “배포”만이 아니라 모니터링, 로그관리, 트래픽 대응이 중요하다는 걸 알게 됐다.


✅ 마무리하며

웹 서비스의 배포는 단순히 “코드 올리기”가 아니다.
웹서버, WAS, DB 간의 연결과 역할 분담, 그리고 보안과 무중단 운영까지 고려해야 진짜 운영환경을 만든다.

내가 배운 가장 중요한 점은:
**“서비스는 코드로 끝나는 게 아니라, 배포로 완성된다”**는 것이다.


📎 참고 아키텍처 도식

                 +-------------+
                 |   CLIENT    |
                 +------+------+
                        |
                HTTPS / HTTP 요청
                        ↓
             +----------+-----------+
             |      NGINX (웹서버)   |
             +----+-------------+---+
                  |             |
         정적 파일 응답    WAS로 Proxy 전달
                  |             ↓
             +----+-------------+----+
             |     TOMCAT (WAS)       |
             +-----------+------------+
                         |
                JDBC / JPA / ORM 등
                         ↓
                 +-------+--------+
                 |   MySQL / RDS  |
                 +----------------+

Thank You for Visiting My Blog, Have a Good Day 🌿

© 2024 Developer LIM.