깃허브 SUBMODULE 활용
·
DevOps&Cloud
GitHub Submodule 이란 Git 프로젝트의 폴더에 다른 하위 Git 프로젝트를 포함하는 방식이다. 이를 통해서 대규모 프로젝트에서 공통으로 사용되는 라이브러리나 코드베이스를 쉽게 관리할 수 있다.서브모듈은 별도의 독립적인 Git 저장소로 동작하며, 메인 프로젝트와는 분리된 버전 관리를 제공한다는 장점이 있다. 처음에 깃 서브 모듈을 프로젝트에 도입하자고 했을때, 왜 필요한가에 대해 의아해 했었다. 그러다 깨달았던 것이 우리 프로젝트는 아래와 같은 방식으로 application.yml파일을 따로 분리해서 운영하고 있다는 것을 알게 되었다.  때문에 해당 레포지토리에서 dev, prod버전을 나누어 수정을 해주면 주기적으로 메인 레포지토리에서 가져와 줘야했다. 원래는 복사 붙여넣기 방식으로 운영을..
GITHUB Workflow 와 GCP
·
DevOps&Cloud
오늘은 무료 크레딧이 주어지는 GCP의 VM을 사용해 Spring Boot 깃허브 레포를 올리고 포트 번호를 여는 과정에 대해 적어보겠다.https://cloud.google.com/?hl=ko 클라우드 컴퓨팅 서비스 | Google Cloud데이터 관리, 하이브리드 및 멀티 클라우드, AI와 머신러닝 등 Google의 클라우드 컴퓨팅 서비스로 비즈니스 당면 과제를 해결하세요.cloud.google.com현재 내가 사용하고 있는 vm은 다음과 같다. 이미 외부 고정 IP를 사용중이며 또한 외부 IP로부터 접근을 허용해둔 상태이다. 그럼 이제 프로젝트 레포를 VM에 배포하는 순서에 대해 말해보자면 1.  프로젝트를 Docker Image로 빌드2. GCP Vm에서 빌드된 Docker Image를 PULL3..
Spring boot 쿼리 최적화 문제와 Spring Cloud Openfeign
·
Springboot
오늘은 내가 프로젝트의 전반적인 기능이 완성되고 성능을 개선시킨 부분에 대해 말해보고자 한다.일단 어느정도 개발이 완료 되고난후, 직접 Grafana로 각 API 요청시 발생하는 CPU 사용량이나 Memory 사용량에 대해 추적해보았다. 그러던중... 다음과 같은 이슈를 마주했다. 이슈👉 현재 작업하던 Post Service의 CPU 및 Memory 사용량이 다른 MSA 환경의 Service들보다 매우 높다는 것을 **[Grafana monitoring]**을 통해 확인이 되었다.문제👉 실제로 Jmeter로 서버 성능을 측정을 해보고 프론트에서도 요청을 보냈을때 시간이 매우 오래걸리는 것으로 보아 백엔드 비즈니스 로직자체가 무겁고 어딘가 불필요하게 시간이 소요된다는 것을 알 수 있었다. 해결👉 최대..
Spring Boot 순환 참조 오류(Error creating bean with name)
·
Springboot
오늘은 내가 프로젝트를 진행하면서 마주했던 문제 중 가장 흔한 '순환참조' 문제에 대해 설명해 보겠다.처음 마주했던 이슈는 다음과 같다.이슈👉 Local 환경에서 Spring boot를 실행시켰을때는 분명 멀쩡했는데, Git action으로 CICD를 진행하는 과정에서 다음과 같은 오류가 떴다.Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'commentService' defined in file [/home/runner/work/post-service/post-service/build/classes/java/main/com/justdo/plug/post/do..
백준 14501: 퇴사(실버 3)
·
Algorithm(Python)
문제상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다.오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다.백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다.각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다.N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일2일3일4일5일6일7일TiPi35112421020102015402001일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 15이다.상담을 하는데 필요한 기간은 1일보다 클 수 ..
백준 10026: 적록색약(골드 5)
·
Algorithm(Python)
문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색상이라 한다) 예를 들어, 그림이 아래와 같은 경우에 RRRBB GGBBB BBBRR BBRRR RRRRR 적록색약이 아닌 사람이 봤을 때 구역의 수는 총 4개이다. (빨강 2, 파랑 1, 초록 1) 하지만, 적록색약인 사람은 구역을 3개 볼 수 있다...
SpringBoot Builder 패턴의 이해
·
Springboot
Java 프로그래밍으로 객체를 생성하는 경우 생성자를 통해 만드는 경우가 대부분이다. 생성자를 생성할 때 매개변수가 적다면(2~3개) 생성을 하는 것이 어렵지는 않지만, 만약 매개변수가 많아진다면 코드리뷰를 하는 사람도, 코드를 작성한 본인도 추후 코드를 고칠때 가독성이 매우 떨어진다. 예를 들어, 아래와 같이 요청에서 받아야하는 매개변수가 대충 눈으로만 보아도 족히 10개는 되어 보인다. @Data public class PostRequestDto { private String title; private String content; private int like_count; private boolean temporary_state; private boolean state; private long mem..
백준 1012: 유기농배추(실버2)
·
Algorithm(Python)
문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추 흰 지렁이를 구입하기로 결심한다. 이 지렁이는 배추 근처에 서식하며 해충을 잡아먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추 흰 지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해 있는 것이다. 한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어 놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들..