SY 개발일지
article thumbnail
[Spring/MongoDB] 스프링 프로젝트에 MongoDB 연결하기 (설치 및 연결)
프로젝트 2024. 7. 12. 18:20

현재 진행중인 프로젝트에는 채팅이 있습니다.이러한 채팅 기능은 많이들 NoSQL을 이용하여 구현하는데, 그 이유는 다음과 같습니다. 1️⃣ 데이터의 수정이 없습니다. 현재 진행중인 프로젝트 특성 상 채팅내역 삭제는 고려하지 않았습니다.2️⃣ 많은 데이터가 실시간으로 생성됩니다. 하지만, 채팅방에 대해 채팅 메세지가 존재할 뿐, 그 외의 관계는 따로 없습니다.      (즉, Join이 없습니다.) 전 채팅 기능에 대해 다음과 같은 특성을 추출해보았고, 기존의 MySQL 에서 MongoDB로 변경한 후 데이터를 가져오는 데에서 테스트를 해보고자 합니다.MongoDB는 무료이며, 또한 이전에 노마드코더에서 node.js 강의를 들었을 때 한번 다루어보았기 때문에 선택하게 되었습니다. 그러기 위해 우선 현재 ..

[트러블슈팅] 객체 삭제 시 org.hibernate.StaleObjectStateException 에러 발생
프로젝트 2024. 6. 24. 20:34

유저 RefreshTokenRepository에서 accessToken과 refreshToken 을 이용해서 데이터를 삭제해주는 로직을 작성하였습니다. // Service@Transactionalpublic void tokenRemove(HttpServletResponse response, String accessToken, String refreshToken) { // 쿠키에서 삭제 -> 클라이언트에게 감 log.info("토큰 삭제"); tokenCookieRemove(response, TYPE_ACCESS); tokenCookieRemove(response, TYPE_REFRESH); refreshTokenRepository.deleteByAccessTokenAndRefr..

article thumbnail
[CI/CD] 스프링부트에 HTTPS 적용
프로젝트/CICD 2024. 6. 21. 15:36

프론트엔드와 백엔드가 소통을 하지 못하는 일이 발생하였습니다.프론트에서 백으로 HTTPS 요청을 보내도록 하였는데 HTTPS이 인증이 안되어 에러가 발생하는 것처럼 보였습니다.그래서 스프링부트 컨테이너에 직접 HTTPS 옵션을 걸어보도록 하겠습니다.  1️⃣ 먼저 스프링에서는 .pem을 인식하지 못하기 때문에 springboot key 생성을 해줍니다. openssl pkcs12 -export -in /etc/letsencrypt/live/restagram.shop/fullchain.pem -inkey /etc/letsencrypt/live/restagram.shop/privkey.pem -out keystore.p12 -name restagram -CAfile /etc/letsencrypt/live/r..

article thumbnail
[CI/CD] nginx 설치부터 Let's Encrypt 인증서 발급 받기 with Ubuntu 24.04
프로젝트/CICD 2024. 6. 20. 18:19

현재 사이트에 들어가면 이런 식으로 주의를 요한다는 메세지가 뜹니다이는 https가 적용되지 않아 암호화가 되지 않았으므로 주의해달라는 표시입니다. 따라서 이번 포스팅에서는 https를 적용하고 포트도 80, 443 포트로 변경해보도록 하겠습니다. 우선 let's encrypt를 진행하기 위해 nginx부터 설치해주도록 하겠습니다.Nginx 설정설치설치 전 패키지 목록 업데이트sudo apt-get update nginx 설치sudo apt-get install nginx 방화벽 설정방화벽 설정sudo ufw app list다음과 같은 명령어를 입력하면 아래와 같은 리스트가 출력됩니다.각 설정은 다음을 의미합니다.Nginx HTTP: 포트 80번만 허용Nginx HTTPS: 포트 443번만 허용Nginx..

article thumbnail
[CI/CD] 가비아에서 도메인을 구매한 후 AWS EC2 서버 연결하기
프로젝트/CICD 2024. 6. 19. 22:23

이번에는 가비아에서 도메인을 구매한 후에 aws ec2 서버와 연결해보도록 하겠습니다. 도메인 구매1️⃣ 먼저 가비아 페이지에 로그인해주세요https://www.gabia.com/ 웹을 넘어 클라우드로. 가비아그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브www.gabia.com 2️⃣ 여기에 원하는 도메인을 입력하여 검색 후 신청합니다.원하는 도메인을 선택하여 신청합니다. 3️⃣ 서비스정보를 입력합니다.기간의 경우 1년과 2년 사이의 가격이 매우 다르니 저는 저렴하게 1년을 선택해주었습니다.하단의 동시 신청 가능 서비스와 같은 경우에는 금액적 부담이 커서 하지 않았습니다. 결제 방법의 경우 신용카드는 1000원 이상이어야 하기 때문에 무통장 입금을 선택해주었습니다. 정상적으로 결제가 되었다면 서비스 ..

article thumbnail
[CI/CD] 도커와 젠킨스, 그리고 WebHooks로 React 자동 배포로직 만들기
프로젝트/CICD 2024. 6. 19. 18:59

이번에는 저번 백엔드에 이어 프론트엔드 React 컨테이너를 배포해보도록 하겠습니다 ☺ 어느정도 백엔드와 겹치는 부분이 많아 파이프라인 설정부터 웹 훅까지 하나의 포스팅에서 다루어보려고 합니다. .env 파일 서버에 등록하기먼저 배포를 준비하기 위해 .env 파일을 서버에 복사하겠습니다.1. 도커 젠킨스 컨테이너 안으로 들어가기docker exec -it jenkins-server /bin/bash 2. 루트 계정으로 접속하기su - 3. 파일 생성하기vi /var/jenkins_home/.env 3. 파일 작성 후 저장젠킨스 서버에 npm 설치하기배포를 하기 위해 npm install, npm run 등의 명령어를 사용해주기 위해 npm을 먼저 설치해주도록 하겠습니다. 1. 도커 젠킨스 컨테이너 안으로..

article thumbnail
[CI/CD] 도커와 젠킨스, 그리고 WebHooks로 Spring boot 자동 배포로직 만들기
프로젝트/CICD 2024. 6. 19. 15:21

다음과 같이 빌드가 잘 되는 것을 확인하였습니다. 그러면 이제 github 특정 브랜치에 커밋 이벤트가 발생하면 자동으로 배포가 되는 로직을 만들어 주겠습니다. 이러한 로직은 WebHooks를 통해 이루어집니다. 저의 경우에는 master 브런치에 커밋이 푸시될 때 배포가 되도록 하겠습니다. 젠킨스 설정플러그인 설치우선 웹 훅을 이용하기 위해 Generic Webhook Trigger 라는 플러그인을 설치해주도록 하겠습니다.파이프라인 설정이전에 설정한 파이프라인을 수정해보도록 하겠습니다.파이프라인의 상세 내용에 build triggers를 보면 generic Webhook Trigger가 추가된 것을 확인할 수 있습니다. 먼저 Post content parameters를 입력해보도록 하겠습니다. 위에서 ..

article thumbnail
[트러블슈팅][QueryDSL/CI/CD] Attempt to recreate a file for type QClass 해결
프로젝트/CICD 2024. 6. 19. 14:45

프로젝트를 배포하며 자꾸 아래와 같은 에러가 발생하였습니다.+ chmod +x gradlew+ ./gradlew clean bootJarStarting a Gradle Daemon (subsequent builds will be faster)> Task :cleanQuerydslSourcesDir> Task :clean UP-TO-DATE> Task :initQuerydslSourcesDir> Task :compileQuerydsl> Task :compileJavaAttempt to recreate a file for type com.restgram.global.entity.QBaseEntityerror: Attempt to recreate a file for type com.restgram.global..

article thumbnail
[CI/CD] 도커와 젠킨스를 통해 스프링부트 배포하기 with Github
프로젝트/CICD 2024. 6. 18. 18:28

이번 포스팅에서는 깃허브에 있는 스프링부트 코드를 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..