N+1문제를 @Query 와 Fetch join을 통해 해결했다. 근데 이것이 실제로 성능이 개선되었는지 검증을 해야 한다고 생각이 들었고, Jmeter를 활용해서 테스트를 진행해보겠다. 1. Jmeter 설치 Apache JMeter - Download Apache JMeterDownload Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may..
이번에는 배포 마지막 시간인 nginx와 SSL을 적용하여 https로 접속이 가능하게 할 것이다. 현재상황은 http:{도메인}:3000 번으로 접근하면 사이트가 잘 나오는것 까지 확인했습니다. 하지만 리버스프록시와 https를 적용하여 안전하게 운영하고 싶습니다. 따라서 nignx를 적용해서 내부포트가 어떻게 적용되어있는지 알려주지 않게, https를 적용해서 안전한 사이트를 운영하려고 합니다. 📋 전체 과정 요약현재 Docker 컨테이너 내리기 및 삭제 새로운 Dockerfile 생성 (React + Nginx 통합) HTTP로 서비스 확인SSL 인증서 발급 및 HTTPS 적용최종적으로 Docker로 배포하여 HTTPS 서비스 확인순으로 진행할 것입니다. 현재 실행중인 React Containe..
이번에는 도메인을 가비아에서 직접 구매해서 바꿔보겠다. 도메인 구매https://www.gabia.com/ 웹을 넘어 클라우드로. 가비아그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브www.gabia.com 1️⃣ 가비아에서 원하는 도메인을 입력합니다.2️⃣ 서비스정보를 입력해줍니다.저같은 경우는 1년만 서비스할것이기 때문에 1년만 선택해주고 결제페이지로 넘어갑니다. 3️⃣ 결제를 진행합니다. EC2 연결구매를 완료하셨으면 EC2를 연결하겠습니다.1️⃣먼저 AWS의 Route 53 대시보드에 진입합니다.https://us-east-1.console.aws.amazon.com/route53/v2/home?region=ap-northeast-2#Dashboard https://us-east-1.consol..
저번시간에 백엔드 자동배포까지 완료가 되었고 이번에는 리액트 수동배포를 진행할것이다. 다음시간에는 nginx설정을 진행할것이고... 📌 전체적인 과정 Dockerfile과 .dockerignore 생성 (로컬에서)node_modules 제외한 프로젝트 압축 및 서버로 전송서버에서 압축 해제, npm 설치 및 Docker 빌드Docker 컨테이너 실행 및 자동 재시작 설정 Dockfile과 .dockerignore 생성이 순서로 진행할것이다. 먼저 Dockfile 먼저 생성해준다.root 폴더에서 dockfile을 하나 만들고 내용은# Step 1: Build the React app //자신의 노드 버전에 맞게FROM node:20 AS build# 작업 디렉토리 설정WORKDIR /app# pa..
이제 github 특정 브랜치에 커밋이 발생하면 자동으로 배포가 되는 로직을 만들어보겠습니다. 저는 main브랜치에 푸쉬되면 배포가 되도록 하겠습니다. 젠킨스 설정1. 플러그인 설치웹훅 설치를 위해 Generic Webhook Trigger 플러그인을 설치하겠습니다. 2. 파이프라인 설정파이프라인의 상세 내용에 build triggers를 보면 generc Webhook Trigger가 추가된 것을 볼 수 있습니다. Post content parameters를 입력하겠습니다. main브랜치로 머지되었을때만 동작하는 트리거입니다. 깃허브 토큰도 적용해줍니다. 그리고 해당 옵션도 체크해줍니다. 젠킨스 설정 이번에는 레퍼지토리에서 웹 훅을 날려보도록 하겠습니다. Payload URL은 젠킨스 서버 주소 +..
이번엔 스프링부트 코드를 Webhooks를 통해 자동배포를 해보겠습니다. 젠킨스 안에 도커 설치하기젠킨스를 설치할때 도커 인 도커를 해야합니다. 만약 하지 않았다면 젠킨스를 삭제 후 다시 올려야 합니다. 1️⃣ Jenkins 컨테이너에 접속합니다.docker exec -it jenkins-server /bin/bash 2️⃣ sudo를 사용하기 위해 관리자 모드로 들어갑니다.su - 관리자 모드로 진입할때 비밀번호에서 계속 실패가 나올수 있는데 이때 밑을 참조하자. [오류해결] 젠킨스 su : Authentication failure 문제Jenkins 컨테이너에 접속하고 sudo를 사용하기 위해 관리자 모드로 진입중 해당 오류가 발생했다. 이는 Ubuntu 시스템에서 sudo passwd root 명령어..
이번에는 AWS 볼륨의 크기를 수정하려한다. 현재 AWS의 볼륨 크기는 이렇게 8GB로 설정이 되어있다. 이것을 16GB까지 늘려보겠다. (프리티어는 30GB까지 늘릴 수 있다.) 1️⃣ AWS -> 인스턴스 -> 스토리지 -> 볼륨ID 마우스 우클릭 볼륨 수정 클릭 2️⃣ 크기 변경후 수정 클 3️⃣볼륨 상태가 변경될때까지 기다리자.modifying -> optimizing -> 사용중 4️⃣수정이 되었는지 확인df -h 아직 파티션이 할당되지 않았기 때문에 사이즈는 변함이 없다. 5️⃣ 파티션 크기 확인lsblk'/dev/xvda' 디스크와 관련된 정보를 확인하자.xvda는 실제 디스크 장치를 나타내며 16기가를 나타내고,xvda1은 우리의 루트 파일 시스템의 크기를 보여준다. 따라서 이 xvda1..
오늘은 도커에 젠킨스를 설치하겠습니다.하지만 프리티어 인스턴스는 t2.micro를 사용하고 메모리가 1GB로 작습니다. 그래서 젠킨스나 스프링을 EC2서버에 올리게 되면 서버가 다운될 확률이 높습니다. 따라서 스왑 메모리를 설정한 후 젠킨스를 설치하겠습니다. Swap Memory실제 메모리가 가득 찼는데 더 많은 메모리가 필요로 할 때, 하드디스크의 공간을 가상 메모리로 대체하여 사용하는 것을 의미합니다.실제 메모리보다는 속도가 느리지만, 시스템이 다운되거나 장애를 발생시키는 것 보다는 스왑 메모리를 활용하여 안정성을 높일 수 있는 방법입니다. 1. 용량 확인df -h보면 주요 용량 디스크 /dec/root 에 디스크용량 6.8G에 사용중 용량 3.5G 남아있는 용량 3.3G 남아있다.2. 현재 스왑 메..
도커를 설치했으니 이제 도커에 MySQL을 올리고 MySQL 워크벤치와 연동해보겠다. Docker로 MySQL 설치 & 사용자 생성1. MySQL Docker 이미지 다운로드docker pull mysql 2. 다운로드한 이미지 확인docker images 3. MySQL Docker 컨테이너 생성다음 명령어로 컨테이너를 생성한다.컨테이너 이름: --name 뒤에 컨테이너 이름을 입력한다.비밀번호: 에서 비밀번호를 입력하는데 와 > 는 입력하지 않는다.MySQL의 특정 버전을 사용하고 싶다면 버전을 입력해준다.docker run --name mysql-container -e MYSQL_ROOT_PASSWORD= -d -p 3306:3306 mysql:latest 💡 명령어 참고:--name: 생성할..
그럼 저번에 진행했던 EC2 인스턴스 생성과 터미너스에 이어서 오늘은 EC2 우분투 서버에 Docker를 설치하겠습니다.EC2 서버에 도커를 설치하면, 애플리케이션을 컨테이너로 배포할 수 있어 빠르고 일관된 배포가 가능합니다. 자세한 Docker 관련 내용은 따로 정리하도록 하겠습니다. 먼저 저의 실행환경은 Ubuntu 24.04.1 LTS 버전입니다.Docker 설치하기1️⃣시스템 업데이트를 진행합니다. sudo apt update 2️⃣필요한 의존성 패키지 설치sudo apt install -y apt-transprot-https ca-certificates curl software-properties-common 3️⃣Docker 공식 GPG 키 추가curl -fsSL https://download..