프로젝트 운영 서버 구축을 도커라이징으로 진행하면서 느낀점과 마주친 에러를 나누려고 합니다.
도커를 왜 하게 됐는지?
운영 서버 구축을 앞두고 있었고 CTO님으로 부터 너 5년차에 어떤 개발자가 될꺼야? 라는 말씀에 현실을 직시하고 시작하게 되었습니다.
도커에 대한 지식이 없어 공부하고 있었는데 제안해주셔서 설렘과 걱정을 가지고 시작하게 되었습니다.
내가 느끼기에 기존 마이스 배포와 도커 컴포즈 배포 차이
▶️ 주로 사용한 개발 스택인 백앤드는 스프링 부트, 프론드 앤드는 vue로 개발한다고 가정 하겠습니다.
기존 배포 환경 구축
- 윈도우 환경에서 개발을 진행합니다.
- 제공 받은 테스트 서버에 Nginx, MySQL 등의 설치와 설정 그리고 개발 스펙에 맞춰서 패키지를 다운 받고 실행합니다.
- 운영 서버에서도 테스트 서버에서 진행 했던 것과 동일하게 설치 및 설정 그리고 실행을 진행합니다.
이렇게 대략 10개 조금 안되는 프로젝트를 진행해 왔습니다.
도커 컴포즈 배포 환경 구축
- 배포 과정에서 도커 컴포즈를 사용했기 때문에 개발 환경은 기존 방법과 동일합니다.
- 윈도우 환경에서 개발을 진행합니다.
- Nginx, MySQL, 자바 어플리케이션 등 모든 구성 요소를 컨테이너로 패키징합니다. 하나의 컨테이너로 실행합니다.
- 운영 서버에 이미지를 그대로 복사해 실행합니다.
차이
실제로 체감한 차이점은,
1. 구축 시간의 차이입니다.
물론 처음 하는 도커라이징이다 보니 학습하는 과정 + 삽질하는 과정을 치면 테스트 서버에서 걸린 2~3일 정도 소요 됐습니다.
하지만 운영 서버 환경을 구축하는데 최소 하루 이상 걸리던 작업이 도커 컴포즈로 배포했을 때 1~2시간 정도로 줄었습니다.
2. 유지보수하기 편하다 입니다.
배포 과정이 단조로워졌기 때문에 실수할 가능성도 적어지고 코드로 관리할 수 있어서 유지보수하기 편합니다.
실제로 배포를 하다보면 실수(권한 문제 등) 하는 경우가 많이 있었습니다.
진행하면서 느낀 장점과 단점
구글링을 하거나 챗지피티에게 물어보면 장점과 단점을 상세하게 알려줍니다.
도커라이징을 진행하면서 제가 느낀 일장일단을 정리했습니다.
일반 배포
장점
- 서버 및 애플리케이션의 설치, 구성, 최적화 과정을 직접 경험하고 공부할 수 있습니다.
- 수동으로 직접 구축하면서 생기는 문제들을 마주하면서 로그 분석과 디버깅을 할 수 있습니다.
- 리눅스와 조금 친해질 수 있습니다.
단점
- 매번 새롭게 구축을 해야한다. 새로운 서버가 올 때마다 개발 환경에 맞게 새롭게 구축을 해야하는 번거로움이 있습니다.
- 서버마다 환경이 다를 수 있어서 개발 환경과 운영 환경이 일치하지 않을 수 있습니다.
도커 컴포즈 배포
장점
- 테스트 서버와 운영 서버가 동일한 환경으로 배포되어서 일관성을 유지할 수 있었습니다.
- 서버 구축 시간이 감소했습니다.
단점
- 사전 도커 학습이 필요합니다.
- 이미지 용량 크기가 증가합니다. 마이스 프로젝트 특성상 사소한 수정사항이 많이 있습니다. 코드 수정사항이 발생할 때마다 이미지 빌드를 다시 해야 하기 때문에 이미지 용량을 많이 차지하게 됩니다.
- 버전 관리가 힘듭니다. 업데이트 할 때마다
tag
번호가 올라가기 때문에 관리하기 힘들었습니다.
추가 기능 구현
- 레지스트리에 도커 이미지를 등록해서 관리하고 도커 파일들도
Git
을 이용해 관리하려고 합니다. - 변경 사항을
push
했을 때 이미지를 등록 부터 도커 실행까지 한번에 할 수 있도록Jenkins
를 이용해 배포 자동화하려고 합니다.
앞으로의 기대효과 (소감)
도커를 혼자 공부하기에 진입장벽이 높다고 생각해 매번 문서만 보고 시도하지 못했습니다. 혼나면서 강제로 머리에 주입되고 부딪히면서 진행하다 보니 생각보다 복잡한 개념이 아니었습니다. 그리고 아직 갈 길이 많이 멀었다는 것을 깨달았습니다. 쿠버네티스 환경을 구축하는 그 날까지 열심히 달려보려고 합니다. 다음 글에서는 도커 배포를 진행하면서 겪은 에러들을 기록해보려고 합니다. 감사합니다.
'DevOps' 카테고리의 다른 글
[DevOps] 배포 전략에 대해서 알아보자 (3) | 2025.02.05 |
---|---|
[Ansible] 왜 Ansible을 사용하게 되었는가? (2) | 2024.12.23 |
[Ansible] 어플리케이션 배포 자동화 (2) | 2024.12.10 |
[Jenkins] Pipeline으로 배포 자동화 (2) (1) | 2024.05.09 |
[Jenkins] Spring Boot Application 배포 자동화 (1) (1) | 2024.05.09 |