이번 포스팅에서는 깃허브에 있는 스프링부트 코드를 Webhooks를 이용해 배포해보도록 하겠습니다. 젠킨스 안에 도커 인 도커 설치젠킨스를 설치할 때 해당 옵션을 추가하였습니다. 이는 도커 인 도커를 가능하게 해주는 옵션입니다.만약 하지 않았다면 젠킨스를 삭제한 후, 다시 올려주어야 합니다.-v /var/run/docker.sock:/var/run/docker.sock 1️⃣ Jenkins 컨테이너에 접속합니다.docker exec -it jenkins-server /bin/bash 2️⃣ sudo 를 사용하기 위해 관리자 모드로 들어갑니다.su - 3️⃣ Jenkins 안에 Docker를 설치합니다.# Docker 설치## - Old Version Removeapt-get remove docker do..
빌드를 하려는데 자꾸 용량이 부족해서 실행이 안되었다. 그래서 AWS의 볼륨의 크기를 수정해보고자 한다. 참고로 default 볼륨 크기는 8GB이고, 프리티어 기준 최대 30GB까지 늘릴 수 있다. 1. AWS > 인스턴스 하단 스토리지 > volume에서 볼륨 수정 클릭저는 지금 16GB까지 올린 상태인데, 처음 하시는 분은 8GB가 할당되어 있을 것입니다. 2. 크기 설정수정할 크기를 입력한다. 3. 완료가 될 때까지 대기볼륨 상태가 modifying -> optimizing -> 사용중이 될 때까지 일정 시간이 소요됩니다. 완료가 될 때까지 기다려주세요. 4. 확인df -h완료가 되면 df -h 명령어를 통해 수정이 되었는지 확인합니다.만일 안되었다면 파티션이 할당되지 않았을 경우일 수 있으니 다..
저의 경우에는 항상 ..! 젠킨스 플러그인이 한번에 다운로드가 되지 않았습니다. 몇번 더 retry 하다가도 실패하면 수동으로 설치해주어야 합니다. 젠킨스 Dashboard > Jenkins 관리 > Plugins > Installed plugins에 가면 다음과 같이 실패한 항목들도 함께 확인할 수 있습니다. 눈에 띄는 에러는 총 2개로 로드에 실패했다(Failed to load)는 에러와 없다(is missing)는 에러 가 존재합니다.1️⃣ 로드에 실패로드에 실패한 에러는 다음과 같이 Failed to load라고 명시되어 있습니다. 보통 버전이 상이한 경우가 많습니다. 그래서, 해당 플러그인으로 가버튼을 통해 다운그레이드 등으로 버전을 맞추어 주면 됩니다. 2️⃣ 플러그인이 존재하지 않음예를 들어..
이번에는 CI/CD를 위해 도커에 젠킨스를 설치해보도록 하겠습니다. 젠킨스는 간단히 말해 CI/CD를 위한 오픈 소스 도구로 소프트웨어 개발 생명주기를 자동화해줍니다.예를 들어 우리가 깃허브에 깃을 커밋하면, 이를 감지하여 배포까지 해줍니다 !! 아주 편리한 도구라고 할 수 있는데 한번 다운받아 보도록 하겠습니다. 근데 그 전에 ! 우리의 AWS 프리티어 EC2는 메모리가 작습니다. 그래서 메모리를 많이 사용하는 젠킨스를 그냥 설치하면 서버가 다운될 확률이 아주 높습니다.(만약 서버가 다운되었으면 인스턴스를 재부팅해주면 됩니다)그래서 먼저 스왑 메모리를 설정한 후 젠킨스를 설치해주도록 하겠습니다. 스왑메모리 설정스왑 메모리란 실제 메모리가 가득 찼는데 더 많은 메모리가 필요로 할 때, 하드디스크의 공간을..
서버도 만들었고, 도커도 설치했으니 이제 프로젝트에 필요한 요소들을 하나씩 설정해주도록 하겠습니다.그래서 이번 포스팅에서는 도커에 MySQL 이미지를 올리고, 올린 DB를 MySQL 워크벤치와 연동해보도록 하겠습니다.🥰 MySQL Docker 이미지 설치MySQL Docker 이미지 다운로드다음 명령어로 MySQL LTS 버전 Docker 이미지를 다운로드합니다.docker pull mysql 다운로드한 이미지 확인다음 명령어로 다운로드한 Docker 이미지를 확인합니다.docker images MySQL Docker 컨테이너 생성다음 명령어로 컨테이너를 생성합니다.컨테이너 이름: --name 뒤에 컨테이너 이름을 입력합니다.비밀번호: 에서 비밀번호를 입력하는데 와 > 는 입력하지 않습니다.MySQ..
프로젝트를 배포하기에 앞서, Docker를 설치해주도록 하겠습니다.도커는 각각의 응용프로그램들을 컨테이너화하여 배포할 수 있도록 해줍니다. 따라서 프로그램들을 편하게 관리하기 위해 설치해줄게요. 먼저 저의 실행환경은 Ubuntu 24.04 LTS 버전입니다. 1️⃣ 시스템 업데이트sudo apt update 2️⃣ 필요한 의존성 패키지 설치sudo apt install -y apt-transport-https ca-certificates curl software-properties-common3️⃣ Docker 공식 GPG 키 추가curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrin..
Restagram 프로젝트가 메인 구현요소가 완성되어 1차 배포를 해보려고 합니다. 여러가지 배포 방법이 있지만, 저는 AWS의 EC2를 이용하여 배포해보겠습니다.그러기 위해 먼저 AWS에서 인스턴스를 생성해보겠습니다. EC2 인스턴스 시작하기AWS의 EC2 페이지 접속저의 경우에는 서울로 지역을 설정(자동으로 설정됨)되어 있습니다.https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#Home: https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#Home: ap-northeast-2.console.aws.amazon.com 하단의 인스턴..
인스타그램과 같이 피드에 여러개의 이미지가 있고, 그 이미지들 중 첫번째 이미지만 가져오는 로직을 작성하고 있습니다. 첫번째 쿼리의 경우에는 보시는바와 같이 FeedImage 엔티티에서, 해당 feedImage의 feed의 id 기준으로 커서를 설정하였으며, (왜냐면 사용자에게 보여줄 때에는 피드 순으로 보여주어야 하기 때문에) writer가 user와 같은 경우 해당 이미지를 선택하는 방식입니다. @Override public List findByFeedWriterAndIdLessThanOrderByIdDesc(User user, Long cursorId) { List feedImageList = queryFactory .selectFrom(feedImag..
이전에 이어 페이지네이션 관련 로직을 최적화해보도록 하겠습니다.https://soyeonnnb.tistory.com/124 [Spring] 오프셋 기반 vs 커서 기반 페이지네이션현재 진행중인 Restagram 프로젝트는 프론트엔드에서 무한스크롤을 통해 사용자에게 피드 리스트를 보여줍니다.이러한 리스트는 한번에 모든 데이터들을 가져오지 않고 페이지를 분리해서 가져soyeonnnb.tistory.com 먼저, 쿼리 DSL을 쓰지 않은 결과부터 보도록 하겠습니다.쿼리DSL 안쓴거다음과 같이 단순히 jpa와 pageable 객체를 이용해 데이터를 가져와주었습니다. List feedList = feedRepository.findByIdLessThanAndWriterInOrderByIdDesc(cursorI..