본문 바로가기
내일 배움 캠프 최종 프로젝트 - git actions CI/CD 앞 선 글들을 통하여 CI/CD 를 구축하기전 준비로 앱을 실행시킬 서버와 뒤에 받쳐줄 DB 와 캐싱 까지 구축 그리고 개발 서버에 맞는 application.yml 설정까지 맞췄다. 이로인해 배포를 하게 되면 서버에서 앱을 동작할 수 있는 단계 까지 왔다. 이제는 그럼 CI/CD를 구축할 차례가 되었다. 이 글들을 쓸때부터 CI/CD란 것을 구축하기위해 이러한 글들을 써온 것인데 그러하면 CI/CD란 무엇인가? CI/CD란 Continuous Integration/Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미 기본 개념 지속적인 통합(Continuous Integration) : 코드의 지속적인 통합 자동화된 빌드와 자동화된 테스트를 제공 안정.. 2024. 4. 11.
내일배움캠프 최종 프로젝트 - applicaton.yml 관리 submodules 사용 이제 개발서버에 백엔드 앱을 올릴 준비를 하게 되었으니 앱을도커컨테이너에 올리게 동작 시켰을 시 서버 환경에 맞게 DB와 Redis 연결 설정을 만들어 주어야 한다. 기본적으로 application.yml 이나 applicaton.properties 파일들은 민감한 정보이므로 github repo에 올리지 않는다. 앱을 배포를 하기 위해선 앱을 빌드를 해야하고 앱을 빌드할때는 꼭 필요한 설정파일이 application 설장파일이다. 이것들을 관리하는 방법 또 한 여러가지 방법이 있다. 그 중에 나는 git의 submodules 기능을 이용하여 application.yml을 관리 하는 방법을 택 했다. git submodules이란? 저장소 안에 다른 저장소를 원하는 디렉토리를 복제하는 기능이다. 예를 들.. 2024. 4. 11.
내일 배움 캠프 최종 프로젝트 - 스프링부트 서버를 컨테이너로 올리기 전 준비(도커 설치) CD를 구상했을때 서버에 배포하는 방식을 jar파일로 빌드 후 도커파일 이미지로 만들어 도커허브에 레포지에 업로드 후에 vm에서 도커이미지를 받아 컨테이너를 올려서 서버에 스프링부트 앱이 동작하는 방식으로 구성을 하였다. 그리고 초기 아키텍처 구상에 따라 하나의 서버에 데이터를 저장할 RDBSM인 MySql과 캐싱 및 동시성제어를 위한 redis를 컨테이너를 docker compse가 아닌 개별적으로 구성을하여 관리 할 수 있도록 구상을하였다. 그러기 위해선 vm 인스턴스에 도커를 설치하여 컨테이너를 올릴 수 있는 환경을 만들어 주어야 한다. 도커를 설치 해주기 위해 ssh 접속을 통하여 인스턴스 접속 해준다. 윈도우 였다면 간편하게 도커 데스크톱을 통해 도커를간단하게 설치할 수 있지만, 이곳 서버는 l.. 2024. 4. 11.
내일 배움 캠프 최종 프로젝트 - GCP VM mobaXterm 접속 전 글에 서버를 올리기위하여 vm 을 만드는 것을 해왔다. 매번 브라우저 를통해 인스턴스에 접속하는 것이 불편하니 ssh 접속을 로컬에서 바로 접속 할 수 있도록 ssh 접속에 필요한 키페어를 만들고 인스턴스에 퍼블릭 키를 등록하여 프라이빗 키를 통해 mobaXtrem의 putty접속을 해보겠다. 먼저 ssh 연결을 위한 키페어를 만들어야한다. mobaXterm이라는 프로그램을 설치 후 실행시키고 Tools라는 탭에 MobaKeyGen이라는 SSH key generator가 있을 것이다. 이 화면 을 통해 generate 버튼을 눌러서 no key. 밑 빈 공간을 마우스 커서를 계속 움직이면 랜덤한 RSA 방식의 공개키가 생성된다. 이 생성된 공개키에 key 코멘트를 나는 GCP에 연결한 google 계.. 2024. 4. 10.
내일 배움 캠프 최종 프로젝트 - CI/CD 설계 전 서버 구축(GCP Computing engine) 현재 단계에서는 프론트 설계 및 개발 작업이 들어가지 않고 프로젝트의 백엔드 기본 crud 및 기능 추가만 된 상태로 api 들의 성능을 체크를 로컬환경에서만 아닌 실제 서비스들어갈때 클라우드 환경에서 테스트 하기위해 그리고 CI/CD 환경을 구축하기 위해서 서버 구축의 필요성이 생겨 서버를 구축하고자 한다. 클라우드서비스를 이용하기위해 서비스중인 회사들을 살펴보면 대표적인 서비스 회사 amazon의 aws google의 GCP microsoft의 azure 등이 있다. 나는 여기서 google의 GCP를 선택을 하였다. GCP를 선택한 이유는 aws와 GCP를 개별로 경험해본 기억 그리고 프로젝트를 하면서 서버비 지원등을 고려 해보았을 때 aws는 대중적으로 사용하는 서비스고 구글링 기준으로 사용하는 .. 2024. 4. 9.
내일배움캠프 최종프로젝트 - 캐싱 적용-1 최종프로젝트 주제로 e커머스를 설계를 하게 되면서 조회 api 사용시 응답속도 개선 및 변경될 일이 없거나 변경 기회가 적은 데이터에 대한 서버와 DB 와의 트래픽 의 비용감소 및 최적화 목적으로 캐싱을 적용을 하려고 한다. 기본적으로 캐싱 전략에 대해 알아야한다. 캐싱 전략 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 중요한 기술로 일반적으로 캐시는 메모리(RAM)을 사용하기 때문에 기존 데이터 베이스보다 훨씬 빠르게 데이터를 응답 할 수 있어 이용자에게 빠르게 서비스를 제공할 수 있다. 하지만 기본적으로 RAM은 용량이 커봐야 16~32G 정도로 데이터를 모든 캐시에 저장해버리면 용량 부족현상이 일어나 시스템이 다운될 경우가 있다. 따라서 어느 종류에 대한 데이터를 캐시에 저장할지, 얼마만.. 2024. 4. 4.
내일배움캠프TIL-Docker를 활용해 MySQL을 컨테이너로 띄워 사용하자 프로젝트 과제를 하면서 개발환경에서 MySQL을 쓰게 되고 컴퓨터를 시작하면서 계속해서 MySQL서버가 필요하지 않을때도 프로세스가 점유되는 것이 불편하여 이번에는 Docker라는 것을 이용해서 원하는 때에만 MySQL을 사용할 수 있게 만들도록 만들려고 한다. 기본적으로 Docker를 사용하여 컨테이너를 띄워 사용하기위해 기본적인 지식이 필요로한다. Docker란 무엇인가? Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너 라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않.. 2024. 3. 13.
내일 배움 캠프 TIL -QueryDSL을 사용해서 수정일 순으로 정렬해서 가져오자 개인과제로 만들었었던 프로젝트로 기본적인 스프링 부트 crud 구현에서 조회 부분에 querydsl을 적용해보려고 한다. QueryDsL 이란 정적 타입을 이용하여, SQL과 같은 쿼리를 코드형태로 생성할 수 있도록 해주는 오픈소스 빌더 API이다. JPQL처럼 query문을 문자열로 작성하는 하드 코딩이 아닌 코드형태로 작성을하여 컴파일 시간에 에러가 식별되어 리스크를 줄일 수가 있다. JPQL을 사용한 quey문 public interface PersonRepository extends JpaRepository{ /*변수 바인딩 시, ?시퀀스 사용하는 경우 */ @Query("select p from Person p where p.firstName = ?1 and p.lastName = ?2") Pe.. 2024. 3. 11.
내일배움캠프TIL - @RestControllerAdvice 뉴스피드 프로젝트를 하게 되면서 api 요청에 대한 예외처리 응답을 따로따로 관리해주기가 힘들어 이것을 관리해 주는 것이 필요로 하였다. 이러한 부분을 해결하기위해 스프링 부트에서 제공하는 @RestControllerAdvice를 사용하여 예외처리를 하게 되었다. RestControllerAdvice는 주로 @RestController + @RestControllerAdvice + @ExceptionHandler 조합으로 사용된다. 먼저 예외를 담아서 Client에 보내줄 객체를 만든다. @Getter @Setter @AllArgsConstructor public class ExceptionDto { private int statusCode; private HttpStatus state; private .. 2024. 2. 14.