본문 바로가기

분류 전체보기

(104)
Spring Boot 3.1+에서 Docker로 MySQL 컨테이너 자동 실행 최근 프로젝트를 진행하면서 애플리케이션 실행의 필수적인 DB를 연결하기 위해 Docker로 일일히 Mysql 컨테이너를 실행후에 애플리케이션을 실행해야해서 매우 번거로웠다.하지만 Spring Boot 3.1.x 버전부터 자동으로 docker-compose.yml파일을 사용해서 자동으로 실행부터 연결까지 해주는 기능이 있어 구현했다. 1. build.gradle설정runtimeOnly 'mysql:mysql-connector-java:8.0.32' // MySql 연결 JDBC 드라이버 implementation 'org.springframework.boot:spring-boot-docker-compose' // docker-compose 통합 기능의존성은 2개를 추가해주면 된다.혹여나 아래와 같이 추가하..
인프라 분산 구현 하나의 서버 EC2에 집중되어 있던 서비스와 컨테이너를 분리 진행했다.기존의 서버 구성은 다음과 같다servicepostgismemcachednginxcertbot 위 5개의 컨테이너를 아래와 같이 분산 구현하려고 한다1번 EC2: service, nginx, certbot2번 EC2: postgis3번 EC2: memcahced  인프라를 분산하여 구현하려는 이유는 다음과 같다.1. 성능 향상 및 확장성service, Nginx, Certbot 인스턴스웹 애플리케이션과 관련된 모든 것이 한 곳에 있기 때문에, 웹 트래픽을 쉽게 관리하고, 애플리케이션의 로드 밸런싱을 구현 가능필요에 따라 인스턴스를 수평적으로 확장하여 더 많은 트래픽을 처리 가능memcached 인스턴스캐시 서버를 별도로 둬서 캐시의 부..
Github Actions + Docker compose 버전관리 + nginx Github Actions + Docker compose를 통해 버전을 관리하려고 한다Github Actions의 tag 기능을 통해 Docker compose로 버전을 넘겨서 컨테이너로 버전을 적용시키는 방법을 사용해보려고 한다.버전관리의 이점은 다음과 같다. 명확한 버전 관리:각 릴리스마다 고유한 태그를 할당하여, 특정 버전의 소스 코드에 쉽게 접근할 수 있다.버전 태그를 통해 배포된 버전과 코드를 쉽게 추적할 수 있다.자동화된 배포:GitHub Actions와 함께 사용하면, 특정 태그가 생성될 때 자동으로 배포 파이프라인을 트리거할 수 있다.EX) v1.0.0 태그가 생성되면 해당 태그에 맞는 배포 작업이 자동으로 실행되도록 설정할 수 있다.릴리스 관리 용이:태그를 사용하여 릴리스를 관리하면, 릴..
Nginx + Certbot을 통한 Https 및 TimeZone 적용 기존에 배포한 서버에서 Nginx + Certbot을 통해 서비스에 https를 적용해 보려고 한다.Nginx경량 웹서버 event-driven 구조로 동작하여 하나 또는 고정된 개수의 프로세스만 생성 따라서 동시성으로 처리 적은 자원으로 효율적Nginx는 master process와 요청을 처리하는 worker process로 구성 Nginx는 event-driven모델 사용하여  worker process 사이에 요청을 효율적으로 분배하기 위해 OS에 의존적인 메커니즘 사용Worker process의 개수는 설정 파일에서 적용 및 정의된 프로세스 개수와 사용가능한 CPU 코어 숫자에 맞게 자동으로 조정CertbotHttps를 사용하려면 CA(인증기관)에서 가져온 인증서 필요certbot은 개방형 무료..
Github Action CI/CD + Docker 새로운 프로젝트에 앞서서 배포를 진행하기에 Github Actions + Docker를 통해 배포를 진행해보려고 한다. 순서는 다음과 같다.1. Docker-compose.yml 작성- 서비스에 필요한 인프라 이미지 작성 - ex) postgis, memcached 작성 서비스할 Dockerfile에 관련된 설정 작성- ※주의 사항 host는 Docker compose 파일에서 정의한 서비스 이름으로 사용 application.yml의 각 인프라의 url 호스트명은 docker 컨테이너 명으로 설정- 기술적 의사결정Docker network 사용 Docker network 사용하여  관리 및 유지보수를 용이하게 함version: "3"services: postgresql: image: postgi..
2024-02-02 오늘은 최종프로젝트 30일차이다. 슬슬 막바지를 향해가고 있다. 오늘은 조회 성능을 향상하기 위해 캐싱 관련 기술을 적용시키려고 한다. 먼저 캐싱은 로컬캐시와 원격 캐시가 있다. 로컬캐시 자바 애플리케이션에서 cache 시스템을 사용 각각의 애플리케이션은 개별로 된 캐시 시스템을 가지고 있고, 1:1 방식으로 사용한다. 따라서 여러 서버로 구성된 환경에서는 각각의 애플리케이션에서 캐시 데이터를 서로 공유 불가능하다. Spring에서 사용가능한 cache 기능은 ConcurrentMap, CaffeineCache, SimpleCache 등 있다. 원격캐시 애플리케이션 외부에 독립적인 메모리 저장소를 별도로 구축하여 한 곳에서 관리한다. 서버 확장 시 동기화가 필요하진 않지만 네트워크 트래픽이 더 많이 발생..
2024-02-01 오늘은 프로젝트 29일차이다. 오늘은 최종발표회를 준비하기 위한 브로셔를 작성했다. 대부분의 시간을 브로셔를 작성했고 브로셔 내용에는 여태까지 했었던 주요 기술과 기술적 의사 결정 트러블 슈팅관련된 문제를 적었다.
2024-01-31 오늘은 프로젝트 28일 차이다. 오늘 진행한 내용은 어제 Ngrinder를 그대로 Ec2에서 테스트해 보기 위해서 Ec2에 private subnet에 인스턴스 생성을 진행했다. 테스트할 때 네트워크도 고려해야 하지만 단순 부하테스트 이기 때문에 Ec2 서버 안에 있는 private subnet에 Agent를 생성하여 먼저 Controller를 Ec2에서 public subnet으로 생성하고 보안그룹 설정했다 Agent 인스턴스 생성 시점에 탄력적 Ip를 잠시 연결하고 업데이트등 여러가지 환경구성등을 진행하고, 탄력적 IP가 연결된 상태에서는 Agent가 생성되어 있었다. 하지만 보안그룹을 포트에 맞게 생성 후 탄력적 IP를 해제한 상태에서 테스트를 진행하니 Ngrinder Controller에 Agen..