MSA는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처이다. 모놀리틱 아키텍처는 하나의 애플리케이션이 모든 비즈니스 로직을 담당하고 있었다면, MSA에서는 특정 비즈니스 기능을 수행하는 각 서비스가 독립적으로 배포되고 확장될 수 있다. 하나의 애플리케이션에는 여러 비즈니스가 얽혀있다. 예를 들어, 사용자가 상품을 주문한다고 하면 User, Product, Order 도메인과 관련된 비즈니스 로직들이 정확하게 연결되어 동작해야 한다. 그렇기 때문에 MSA에서는 각 마이크로 서비스 간 통신을 구현할 필요가 있으며 이는 주로 HTTP/HTTPS 혹은 메시지 큐 등을 통해 이루어진다. Spring Cloud를 활용해 서비스 디스커버리, 로드..
WSL(Windows Subsystem for Linux)은 윈도우의 가상화 기능을 사용해, 별도의 가상머신(VM)을 설치하지 않고도 윈도우에서 리눅스를 사용할 수 있게 돕는 도구이다. WSL은 Version 1과 2가 있는데, WSL1는 Hyper-V를 활성화해야만 사용할 수 있다. Hyper-V는 Windows 11 Pro OS에서만 지원하기 때문에 Windows 11 Home OS인 경우, WSL1을 사용하기 위해서는 Hyper-V를 우회적으로 설치한 후, 활성화해야 한다. 하지만, WSL2는 Hyper-V를 활성화하지 않아도 사용할 수 있다고 한다. Windows 11 Home OS에 WSL2로 Ubuntu 및 Docker 사용 환경을 구성하는 과정에서 WSL2 문제를 해결한 방법에 대해 자세히..
저번 포스팅에서 Jenkins Freestyle project로 GitHub branch에 CI를 구축하는 과정에 대해 정리해보았다. 팀원들의 작업 코드 내용에 대한 빌드 테스트를 자동화하는 데 성공해, 효율적인 협업에 기여할 수 있었다. 하지만, Freestyle project는 한계점이 명확했다. GUI 상에서 몇 번의 클릭으로 원하는 구성을 만들 수 있다는 점은 분명 편리한 기능이었으나, 내가 원하는 보다 정교한 stage를 구성하기엔 어려움이 있었다. 마침 CD를 구현해야 하는 상황이었고 Git flow 전략과 유사한 방식의 branch 전략을 채택해 진행 중이었기에, develop branch에서 release branch를 생성하는 과정에 Jenkins Pipeline script를 작성하여 ..
Jenkins Pipeline script를 작성하고 자동 배포 테스트를 진행하던 중, Docker 사용과 관련해 문제가 있었다. stage('[Backend] Image Build & DockerHub Push') { when { expression { env.GITHUB_PR_STATE != 'opened' } } steps { script { docker.withRegistry('', registryCredential) { sh "docker build -t $imageName:latest ." sh "docker push $imageName:lates..
Jenkins와 GitHub를 연동해 develop branch에 대한 PR이 open되면 자동으로 빌드 테스트를 진행하도록 Jenkins CI 환경을 설정하는 과정을 자세히 기록하고자 한다. 우선, 사전에 다음의 Jenkins Plugin을 설치해야 한다. Plugin 목록 SSH AgentDockerDocker Commons PluginDocker PipelineDocker API PluginGeneric Webhook Trigger 1. GitHub Webhook 설정CI pipeline을 구축하기 위해서 가장 먼저 해야할 작업은, Jenkins 서버와 연결할 GitHub Repository가 Jenkins 서버에 신호 즉, hook을 보낼 수 있도록 설정해주는 것이다. GitHub Reposit..
필수 기능 구현을 어느정도 마치고 도메인 merge 작업도 conflict를 해결해가며 잘 이루어지고 있다. 회원 쪽 UserDetails 가 아직 구현되진 않아서 연결하는 데 시간을 들여야하지만, 연결 작업이 크게 어려울 것 같다는 생각은 없다. 아무튼 이와 더해 의도치 않게 프로젝트 기간이 1일 연장되면서 시간이 충분히 확보되었다. 드디어 내가 기다리고 기다리던 CI/CD 구축에 도전해볼 수 있게 되었다. 아무튼, 이전에 학습했던 내용을 토대로 배포 서버에 Jenkins 컨테이너를 실행하고, 필요한 플러그인이나 Credentials을 등록해야 한다는 것을 알고 있었다. GitHub 레포지토리에 Webhook으로 PR, Merge 등을 설정해주면 Jenkins가 이 hook을 받아 내가 설정한 Jenk..