도입 배경현재 Spring boot 프로젝트에 WAS(내장 톰캣)을 웹 서버로 사용 중이다. WAS(내장 톰캣)가 웹 서버의 역할까지 할 수 있지만, WAS는 비즈니스 로직만을 처리하고, 정적 리소스를 보여주는 부분은 Nginx가 담당하게 하여 WAS의 부하를 줄일 수 있도록 변경하려고 한다. 또한 Spring Boot 서버가 정상 작동하지 않을 경우, Nginx를 통해 사용자에게 에러 페이지를 표시함으로써 사용자 경험을 개선할 수 있을 것이다. 또한, 현재 SSL/TLS 인증서가 Spring boot에 직접 의존하고 있다. Nginx에 SSL 인증서 관리를 맡김으로써 WAS의 책임을 줄이고, 보안을 강화하고자 한다. 1. Docker Nginx 설치Nginx 이미지를 pull 해오고, 이미지가 잘 받아..
docker
인프라 개선현재 Spring boot는 도커에서 실행되고 있지 않다. MySQL만 도커로 실행 중이고, Spring boot 서버는 서버 로컬에서 직접 jar 파일로 실행해 둔 상태이다. 배포 서버(오라클 클라우드)가 프리티어 이기 때문에 추후에 클라우드 플랫폼 자체를 변경할 가능성이 있음. 추후에 이식성, 확장성, 일관성 등을 고려하여 서버 클라우드 플랫폼을 다른 곳으로 변경하더라도 쉽게 옮길 수 있도록 도커로 실행하는 것으로 변경하겠다. 📌 MySQL 컨테이너 데이터 보존 필요현재 도커로 실행중인 MySQL이 볼륨 설정이 되어있지 않다. 이는 컨테이너가 삭제되면 내부에 데이터들이 모두 날아간다는 의미이다. 호스트 서버에 MySQL 데이터가 저장될 수 있도록 마운트 설정을 추가해야 한다. 이미 실행..
spring boot 프로젝트를 github actions, docker를 활용하여 EC2에 배포하는 과정을 담았다. AWS EC2 인스턴스 생성(Ubuntu 22.04), EC2에 docker설치, Docker hub 계정이 있다는 가정하에 진행한다. 기존 배포 방법의 문제점 기존에 CI/CD 를 구축하지 않고 배포를 진행할 때, 우리는 spring boot 프로젝트를 직접 build 해서 jar 파일을 EC2에 Filezila 등으로 옮기고, java -jar 명령어를 실행하여 프로젝트를 실행했다. 프로젝트를 진행하면서 코드의 수정이 빈번하게 일어날 텐데, 매번 이런 과정을 거치는 것은 매우 비효율 적이다. CI/CD를 구축해 두면 이 과정을 자동화할 수 있어 개발 생산성을 높일 수 있다. Githu..