Project/Newsfeed 8

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

약 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

[프로젝트] AOP로 'API 수행 시간/회원 별 총 API 사용시간 누적 저장' 기능 다르게 구현하기와 그에 따른 고민

내가 구현하고 싶은/구현해야 할 기능은 두 가지가 있었다. 회원 별 API 사용 시간 측정(저장) 기능과 API 수행시간 측정 기능이다. 이 기능들은 '핵심기능' 이라기 보단 '부가기능'에 가까웠으므로, 모듈화해서 부가기능 중심으로 설계, 구현하는게 맞다고 본 것이 AOP를 사용한 결정적 이유겠다. 두 가지 기능의 성격이 살짝 달라서 고민 후에 한 개는 @Pointcut으로 조인포인트를 설정해서 구현하고, 한 개는 애너테이션을 직접 만들어서 구현했다. 본 포스팅에서는 각 기능을 구현한 방법과 왜 이렇게 구현했는지에 대한 고민, 이후 고려해야 할 점들 등에 대해서 기술했다. 목차 - 회원 별 총 API 사용시간 누적 저장 구현 구현 과정 - API 수행 시간 측정 구현 구현 전 고민 구현 과정 -고려한 점..

Project/Newsfeed 2024.04.10

[프로젝트] QueryDSL 사용 시 Q클래스 import 불가 문제 해결 (gradle)

[✏️ 문제] 프로젝트 중, QueryDSL을 사용해서 뉴스피드 검색 기능을 구현하는 과정에서, RepositoryImpl 클래스에서 Q클래스 import가 안되는 문제가 발생했다. 툴을 이용한 자동 임포트가 안 돼서, 강제로 입력 해도 안 됐다 ..(당연히) [✏️ 분석] build.gradle에 설정을 잘못했나 해서 dependencies도 다시 들여다 보고, Configuration 클래스 관련 문제인가 싶어 다시 점검해 보아도 잘못 설정한 것은 없었다. 그러다 문득 import가 안된다면 경로 문제인 것이 아닐까 싶어 Q클래스가 속해 있는 루트 파일을 봤다. 문제 상황 발생 당시에 Q클래스 파일은 정상적으로 build/generated 디렉토리 밑에 정상적으로 있었는데, 인텔리제이가 이 Q클래스 ..

Project/Newsfeed 2024.03.02

[성능 테스트] Artillery로 부하 테스트 하기(1/3), Artillery 설치

현재 진행하고 있는 뉴스피드 프로젝트의 기능들을 얼추 마무리하고 나서,문득 내가 구현한 한 api에 대한 성능을 평가해보고 확장성을 검증해보기 위해 부하 테스트를 진행해 보기로 했다. 개발을 진행하다 어, 이런 상황도 있을 수 있겠구나? 내가 구현한 방향이 이런 상황을 버틸 수 있을까? 라는 의문이 들었기 때문인데 .. 의문에 대한 자세한 상황은 추후 포스팅에서 명시하도록 하고, 일단 기본적인 아틸러리 설치와 테스트 파일 생성에 대해 먼저 포스팅한다! 툴은 Artillery로 선정하고 진행해보았다.Artillery 란?먼저, 아틸러리에 대해 간단히 알아보자.Artillery는 간편하게 사용할 수 있는 기능과 유연성을 제공하여 개발자가 애플리케이션을 효과적으로 테스트할 수 있는 오픈 소스 라이브러리이다. ..

Project/Newsfeed 2024.02.27