[Nginx] Blue / Green 배포 전략으로 Spring 프로젝트 EC2 에 무중단 배포하기
·
개발 ━━━━━/Dev
무중단 배포 현재 연습하고 있는 프로젝트는 사진과 같은 단순 배포 방식으로 프로젝트가 배포 되고 있어 업데이트 사항이 있을 때 서버가 항상 종료가 되었다가 새로 시작하는 방식으로 운영되고 있었다. 종료가 된 상태에선 서비스 이용을 못할 뿐더러 새롭게 배포된 프로젝트에 문제가 있을시 수습되기 전까진 서비스 이용을 또 못하고 있는 상황이 연출되어 무중단 배포를 적용시켜보기로 했다. 무중단 배포 전략 1. Rolling Update (롤링 배포) 롤링 배포는 사용 중인 인스턴스 내에서 새 버전의 프로젝트를 점진적으로 교체하는 방식 서비스 중인 인스턴스 하나를 로드밸런서에 라우팅하지 않도록 한 뒤, 새 버전을 적용하여 라우팅하도록 한다. 새 버전을 배포할 때 인스턴스가 감소를 하므로 트래픽이 몰려 과부하가 발생..
[Docker] Spring + MySQL + AWS EC2 + Github Actions + Docker 를 활용한 프로젝트 진행하면서 발생했던 각종 오류들
·
개발 ━━━━━/Troubleshoot
글을 시작하기 전... 결론적으로 이 글은 Spring 프로젝트를 Dockerfile 로 빌드한 후 Github Actions 로 Docker Hub 에 올리고 EC2 환경에서 각종 컨테이너들을 Docker-Compose 로 관리하는 것을 목표로 이것 저것 해보면서 발생했던 모든 문제들을 다루는 글이라 내용이 다소 난잡하고 중구난방일 수 있다. 프로젝트 환경 진행했던 프로젝트가 있는데 성공적으로 끝마치고 나니 프로젝트 때 맡은 부분을 구현하느라 미처 해보지 못했던 서버 구성을 해보고 싶었고 이것 저것 실험해보고 싶은게 생겨 개인 서버를 구축해 프로젝트를 그대로 실행시켜 보기로 했다. 구 프로젝트는 1. Github Actions 로 jar 파일을 직접 배포하여 실행 2. MySQL 은 RDS 를 구성하여..
[Spring] 이전 데이터를 불러올때 stream문과 for문의 성능 차이 테스트 - 1
·
개발 ━━━━━/Spring
Spring 프로젝트에서 Websocket 을 이용한 채팅 기능을 구현하였다. 주고 받는 채팅 메세지들은 DB 에 저장이 되고, 채팅방에 입장시 이전 메세지들이 stream 문으로 불러와진다. stream 문 보단 for 문이 더 익숙한 나로선 실시간성이 중요한 채팅에서 stream 문과 for 문으로 각각 구현시 유의미한 성능 차이가 있을지 문득 궁금해졌다. 채팅 메세지들은 MySQL 과 Redis 에 저장되고 있고 Redis 에서만 불러오게끔 되어 있었는데 프로젝트를 진행하면서 이런 저런 테스트를 진행하다 보니 인메모리 데이터베이스인 Redis 에 있던 데이터들이 자꾸 날아가는 상황이 발생하였다. 그래서 채팅 메세지 불러오는 로직을 Redis 에 데이터가 있을 때) 1. Redis 데이터랑 MySQL..
[Spring] WebSocket 을 이용한 채팅 구현
·
개발 ━━━━━/Spring
WebSocket 이란 서버가 응답하고 연결을 종료하는 단방향 통신인 http 통신과는 달리 Server 와 Client 의 연결이 지속적으로 유지되는 양방향 통신을 하는 방식인 socket 통신이다. 접속까지는 HTTP 프로토콜를 이용하고 그 이후에는 자체적인 Websocket 프로토콜을 이용한다. Springboot 에 Websocket 서버 구축 build.gradle 에 의존성 (Dependency) 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-websocket' compileOnly ..
Github Actions 를 이용하여 AWS EC2 에 SpringBoot 애플리케이션 CI/CD 구축
·
개발 ━━━━━/Dev
(이전 글) Github Actions https://gukjan9.tistory.com/71 Github Actions Github Actions Github 에서 제공하는 CI / CD 툴로 코드 저장소 (Repository) 에 이벤트 (Event) 가 발생하였을 때 구성해둔 Workflow 가 실행되면서 프로젝트를 빌드 및 테스트 후 배포까지 진행되는 서비스이 gukjan9.tistory.com Github Secrets 구성 Github Actions 를 사용하여 EC2 에 프로젝트를 배포하기에 앞서 EC2 에 접속하기 위해 필요한 접속 ip 와 pem key 등이 있는데 이를 직접적으로 코드에 노출을 하면 보안상 위험이 있으므로 Repository 에 Settings > Secrets and ..
프레임워크 (Framework) 란
·
개발 ━━━━━/Definition
Framework 란 정의 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임 목적에 필요한 것을 고민할 필요 없이 이용할 수 있도록 일괄로 가져다 쓰도록 만들어 놓은 구조화된 틀 라이브러리, API 및 코드 구성을 위한 규칙등을 제공하여 일반적인 프로그래밍 작업을 보다 쉽게 수행 가능 종류 Spring Java 의 웹 프레임워크 Django Python 의 웹 프레임워크 Flask Python 의 마이크로 웹 프레임워크 Ruby on Rails Ruby 의 웹 프레임워크 Laravel PHP 의 웹 프레임워크 Bootstrap 트위터의 JavaScript 기반 웹 프레임워크 Express.js Node.js 의 meteor 프레임워크 NestJS Node...