전체 글 110

[프로젝트] 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

[삽질] 자꾸 CLI 명령어 까먹어서 이제 안 까먹으려고 쓰는 "Port 8080 was already in use" 에러 해결 방법

요 에러는 예전 스프링 framework로 톰캣 삽입해서 쓸 때부터 왕왕 봤던 에러다.가끔 로컬에서 애플리케이션 실행시키면 시작부터 이렇게 error가 뜨는 경우가 있다. 이 에러는 왜 나나요?에러 메시지 그대로 포트가 이미 사용중인 포트이기 때문이다. 발생 원인으로는 동일한 포트를 사용하는 어플리케이션을 번갈아가며 실행 시킨 경우 (이미 다른 하나가 실행중)IDE 상에서는 프로세스가 종료되었으나 실제 프로세스는 종료 안 된 경우등이 있다고 한다.   해결 방법 실행 하고자 하는 어플리케이션의 실행 포트를 바꾼다.현재 포트를 사용하고 있는 프로세스를 종료한다.필자는 명령 프롬프트를 통한 두 번째 방법을 선호한다. (필자의 환경은 Windows이다. Mac 과는 방법이 다르니 주의) cmd 창을 열고 아래..

General/debugging 2024.04.10

[TIL][CS] 운영체제(OS) 톺아보기

오늘 CS 스터디 주제는 '기초탄탄한 개발자가 되자!!' 운동의 일종으로 .. 기본 중 기본인 운영체제에 대해 알아보도록 하겠다! 📌운영체제란?운영체제(OS, Operating System)란 사용자가 컴퓨터를 쉽게 다루게 해 주는 인터페이스이다. 한정된 메모리나 시스템 자원을 효율적으로 분배해주는 야무진 녀석⭐이라고 생각하면 된다!  📌운영체제의 역할위에서, 운영체제는 한정된 메모리나 시스템 자원을 효율적으로 분배해준다고 했다. 그래서 '어떻게' 효율적으로 분배한다는 건지, 운영체제의 역할을 통해 알아보자. 운영체제의 역할은 크게 네 가지가 있다.CPU 스케쥴링과 프로세스 관리CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 어떤 프로세스가 CPU를 점유하고..

Computer Science 2024.04.09