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은 젠킨스 서버 주소 +..
Jenkins 컨테이너에 접속하고 sudo를 사용하기 위해 관리자 모드로 진입중 해당 오류가 발생했다. 이는 Ubuntu 시스템에서 sudo passwd root 명령어로 호스트(즉, Ubuntu 자체)에서의 root 비밀번호를 설정한 것입니다. 그러나 Docker 컨테이너 내부의 root 비밀번호는 호스트 시스템의 설정과 독립적이어서, 호스트에서 설정한 root 비밀번호가 컨테이너에 반영되지 않습니다. 이를 해결하기 위해서는 컨테이너 내부에서 root 비밀번호를 설정해주어야 합니다.다음은 이를 해결하기 위한 방법입니다.컨테이너 내부에서 root 비밀번호 설정먼저, root 권한을 가진 사용자로 컨테이너에 접근합니다. 현재 jenkins 사용자로 접근했기 때문에 root 권한을 얻을 수 없는 상태입니다...
이번엔 스프링부트 코드를 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..
젠킨스 플러그인이 한번에 다운로드가 되지 않았습니다. 이것들은 수동으로 설치해주어여합니다. {본인의 젠킨스 주소}/manage/pluginManager/installed 에가면 실패한 항목을 볼 수 있습니다. 1️⃣Failed to load (로드 실패)로드에 실패한 경우는 버전이 상이한 경우가 많습니다. 그래서 해당 플러그인으로 가서 를 눌러 버전을 맞추어 줍니다. 2️⃣is missing이렇게 플러그인이 없다는 에러를 확인했으면, hpi 파일을 직접 설치해줍니다. Dashboard -> Jenkins관리 ->Plugins -> Available plugins에서 해당 플러그인을 검색합니다. 이름을 눌러 해당 플러그인 페이지로 접속합니다. 3.Releases에서 Download의 direct link를..
오늘은 도커에 젠킨스를 설치하겠습니다.하지만 프리티어 인스턴스는 t2.micro를 사용하고 메모리가 1GB로 작습니다. 그래서 젠킨스나 스프링을 EC2서버에 올리게 되면 서버가 다운될 확률이 높습니다. 따라서 스왑 메모리를 설정한 후 젠킨스를 설치하겠습니다. Swap Memory실제 메모리가 가득 찼는데 더 많은 메모리가 필요로 할 때, 하드디스크의 공간을 가상 메모리로 대체하여 사용하는 것을 의미합니다.실제 메모리보다는 속도가 느리지만, 시스템이 다운되거나 장애를 발생시키는 것 보다는 스왑 메모리를 활용하여 안정성을 높일 수 있는 방법입니다. 1. 용량 확인df -h보면 주요 용량 디스크 /dec/root 에 디스크용량 6.8G에 사용중 용량 3.5G 남아있는 용량 3.3G 남아있다.2. 현재 스왑 메..