Project 27

[프로젝트][MSA] API Gateway 작성으로 모듈 별 연결하기

우선 지금 진행하고 있는 api gateway와 각 도메인들을 모듈별로 구분해놓고, 각 모듈은 각기 다른 포트 번호를 가지고 있는 구조이다. 오늘은 api gateway 모듈에서 게이트웨이 설정으로 각 모듈 별 api 주소를 전부 8080 포트에서 뿌려주도록 변경해 볼 예정이다. 의존성 추가일단 스프링 클라우드 사용을 위한 의존성 추가를 해주자!ext { set('springCloudVersion', "2023.0.0")}dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' // 스프링 클라우드 implementation 'org.springframework.cloud:spring-c..

[프로젝트] 인텔리제이 깃 클론/pull 후 모듈 인식 불가 해결

문제프로젝트 초기 설정 중, 함께 피쳐 별 모듈을 나누고 깃을 클론 후 application.yml 파일을 설정하려고 하는데 풀 받은 필자의 인텔리제이 파일에서 나눠놓은 모듈을 모듈로 인식 못 하는 문제가 발생했다. 원인깃에서 풀 받으면 루트 파일의 모듈은 인텔리제이에서 알아서 찾아주는데, 그 외 따로 설정한 모듈은 알아서 찾지 못해서 인식을 못하는 것으로 추측했다. 따로 인식을 위한 추가 절차가 필요해보였다.  해결 시도 및 해결1. Import module 하기 👉 실패 모듈로 인식시키기 위해 상단 메뉴 File > Project Structure ... 로 이동해서 모듈을 import 하는 걸 시도해봤는데 왜인지 필자의 인텔리제이에서는 그대로 모듈로 인식을 못했다. 2.  해당 모듈의 build...

[프로젝트] 모놀리식과 MSA: MSA 구조 채택 이유

들어가며이번 프로젝트에서 모놀리식 아키텍쳐 대신 MSA 구조를 선택하기로 하면서, 모놀리식 아키텍쳐와 MSA는 어떻게 다르고 왜 이런 의사결정을 하기로 했는지 현재 프로젝트에 빗대어 기술해보려고 한다! 🔎모놀리식 아키텍쳐란? 모놀리식 아키텍처( Monolithic Architecture )는 소프트웨어 프로그램의 전통적인 모델로, 자체 포함 방식이며 다른 애플리케이션과 독립적인 통합된 유닛으로 만들어진다. “모놀리스"라는 단어는 거대하고 빙하 같은 것을 의미하는 경우가 많은데, 소프트웨어 설계의 모놀리식 아키텍처도 크게 다르지 않다. 즉, 한 문장으로 간단히 정리해 보면!MSA가 등장하기 이전에 하나의 서비스로 하나의 애플리케이션을 만드는 것이 모놀리식 아키텍쳐이다. 모놀리식 아키텍쳐의 장점 모놀리식 ..

[프로젝트 회고] 뉴스피드 개인 프로젝트를 마치며

약 6주간의 시간 동안 진행했던 내 첫 번째 개인 프로젝트가 드디어 끝났다. 100% 내가 해야하는 모든 기술적 의사결정과 처음 써 보는 스택들로 설렘 반 막막함 반이었던 개인 플젝이였다. 개발이 잘 풀렸던 적도 있었고 생각했던 대로 안 풀렸던 적도 있어서 힘들 때도 있었지만, 같은 주제로 프로젝트를 진행했던 동료들이 있어서 도움을 주고 도움을 받으며 중간에 포기하지 않고 무사히 끝낼 수 있었다고 생각한다. 이 타이밍에 프로젝트를 하면서 느꼈던 점들을 정리하고 되돌아보면서, 다음 프로젝트 땐 어떻게 더 발전할 수 있을지 회고해보는 시간을 가져보려 한다. 📌목적기여도 100%의 개인 프로젝트를 진행해보면서, 소프트웨어 설계부터 개발, 테스트까지 전반적인 진행 과정을 모두 경험해보는 것직전에 진행했던 팀 ..

Project/Newsfeed 2024.04.25

[프로젝트] Service, ServiceImpl 구조에 대한 내 생각과 결론 (부제: 이유없는 리팩토링을 지양하자)

프로젝트 기능 구현을 마무리 하고, 성능 테스트 및 성능 향상을 위한 리팩토링을 끝낸 후 다른 리팩토링 거리(?)를 찾고 있었다. 그러다 전에 진행한 팀 프로젝트에선 Service 레이어 계층을 인터페이스와 그 구현체로 분리해서 개발했었는데, (부끄럽지만 그 땐 제대로 된 이유도 모르고 강사님께서 이게 좋다! 라고 하시는 걸 무작정 따라만 했었다) 이번 개인 프로젝트에서는 서비스 계층 추상화를 따로 진행하지 않은 점이 생각났다. 그래서 왜 사람들이 Service 인터페이스와 그 구현체를 분리해서 추상화하는지 이유를 생각해보고 내 프로젝트에 적용해보는 과정까지 진행해보려 한다. (결론부터 말하자면 구현체 분리는 하지 않기로 결정함) 먼저 기존 코드와 분리 후 코드를 비교해보면 이렇다. (예시)🔹분리 전 ..

Project/Newsfeed 2024.04.19

[성능 테스트][트러블슈팅] Artillery로 부하 테스트 하기(3/3), 성능 개선을 해보자

[성능 테스트][트러블 슈팅] Artillery로 부하 테스트 하기(2/3), 성능 저하 원인을 찾아보자[성능 테스트] Artillery로 부하 테스트 하기(1/3), Artillery 설치현재 진행하고 있는 뉴스피드 프로젝트의 기능들을 얼추 마무리하고 나서, 문득 내가 구현한 한 api에 대한 성능을 평가해보고 확장성developer-jinnie.tistory.com 지난 글에서는 성능 테스트를 진행한 후에, 성능 저하 원인을 인지하고 이를 해결하기 위해서 어떤 방법들이 있을지 생각해봤다. 이번 글에서는 이 방법들을 이용해서 성능 개선을 해나가는 과정과 결과를 담아보려 한다! ++ 모든 테스트는 외부적인 요인이 결과에 영향을 주지 않도록 동일한 환경에서 진행했다.시도 방법 1 - fetch join  ..

Project/Newsfeed 2024.04.15

[성능 테스트][트러블 슈팅] Artillery로 부하 테스트 하기(2/3), 성능 저하 원인을 찾아보자

[성능 테스트] Artillery로 부하 테스트 하기(1/3), Artillery 설치현재 진행하고 있는 뉴스피드 프로젝트의 기능들을 얼추 마무리하고 나서, 문득 내가 구현한 한 api에 대한 성능을 평가해보고 확장성을 검증해보기 위해 부하 테스트를 진행해 보기로 했다. 개developer-jinnie.tistory.com지난 글에서는 부하 테스트를 위한 툴을 정하고 간단한 테스트를 진행해 봤다.이번 글에서는 특정 API에 대해 부하 테스트를 진행한 후 결과를 분석해보는 시간을 가져보려 한다. 게시글 기능이 유저, 댓글, 게시글 좋아요, 멀티미디어 등 여러 엔티티와 연관관계로 묶여있는데다가 피드 서비스의 핵심 기능이기 때문에 게시글 전체 목록을 보여주는 '게시글 전체보기 API'를 선택해서 부하를 주어 ..

Project/Newsfeed 2024.04.13

[프로젝트] 스택오버플로우 에러 해결 (부제: 드디어 내게도 말로만 듣던 이 에러가)

✏️문제두둥 ..  인스타그램처럼 내 피드에 들어가면 내가 쓴 글만 모아서 볼 수 있게 하는 '내가 쓴 글 보기' API를 만들다가 스택오버플로우 에러가 났다.처음엔 빨간 ERROR 저 글자 보자마자 어디서 잘못됐지 ..? 착잡하다가,, StackOverflowError 저 글자를 보고 갑자기 오 !!! ㅋㅋㅋㅋ말로만 듣던 스택오버플로우다 !!! 실제로 본 건 처음이라 반가움 + 좋음 콤보에 인증샷 부터 박았다.이번 기회에 처음 접해본 스택오버플로우 에러를 디버깅해보자. 일단 제일 처음에 알아본건 그래서 스택오버플로우가 정확히 뭐랬더라? StackOverflow 란?지정한 스택 메모리 사이즈보다 더 많은 스택 메모리를 사용하게 되어 에러가 발생하는 상황을 일컫는다.  스택오버플로우가 발생하는 대표적인 사..

Project/Newsfeed 2024.04.13