본문 바로가기
Storify

STORIFY(0214) - 프로젝트 회고

by Peter.JH 2024. 2. 14.
728x90

 

프로젝트를 시작할 때, 나의 목표는 안정적이며 확장성 있는 백엔드 시스템을 구축하는 것이었다.

 

선택지로는 Spring, Node.js, 그리고 NestJs가 있었다. 그 중에서도 NestJs를 선택한 이유는 다음과 같다.

첫째로, NestJs는 TypeScript를 기반으로 하며, 이를 통해 코드의 안정성을 향상시킬 수 있었다.

둘째로, NestJs의 모듈화와 의존성 주입 기능은 코드의 재사용성과 유지 보수성을 높여주었다. 이러한 특징들은 큰 규모의 프로젝트를 관리하는데 큰 도움이 되었다.

셋째로, NestJs는 Jest와 같은 테스팅 라이브러리와의 호환성이 뛰어나, 코드의 품질을 확신하고 유지할 수 있었다.

넷째로, 다양한 라이브러리와 미들웨어를 쉽게 통합하여 개발의 유연성을 높여주었다.

마지막으로, NestJs는 REST API 뿐만 아니라 GraphQL, WebSockets 등 다양한 프로토콜을 지원하는 등, 프로젝트의 다양한 요구 사항을 충족시킬 수 있었다. 이런 이유로 NestJs를 선택하게 되었다.

 

코드를 작성하면서, '단일 책임 원칙'과 '하나의 함수는 하나의 기능을 한다'라는 원칙을 준수하려 노력했다. 이 원칙들을 지키는 것이 중요한 이유는 다음과 같다.

첫째, 가독성이다. 각 함수나 클래스가 하나의 책임만을 가질 때, 코드를 읽는 사람이 해당 코드가 어떤 역할을 하는지 쉽게 이해할 수 있다. 이런 이해력은 코드의 가독성을 높이고, 이해하는 데 걸리는 시간을 줄여주었다.

둘째, 유지 보수성이다. 코드의 각 부분이 하나의 책임만을 가질 때, 해당 부분을 수정하거나 개선하려면 그 부분만을 이해하면 된다. 따라서 코드의 유지 보수성이 향상되며, 버그를 찾고 수정하는 데 필요한 시간도 줄어들었다.

셋째, 재사용성이다. 하나의 함수나 클래스가 하나의 기능만을 수행하면, 그 기능이 다른 곳에서 필요할 때 해당 함수나 클래스를 재사용할 수 있다. 이는 코드의 중복을 줄이고, 개발 시간을 단축시켰다.

넷째, 테스트 용이성이다. 하나의 기능만을 가진 함수나 클래스는 테스트하기가 더 쉽다. 각 기능을 독립적으로 테스트할 수 있으므로, 테스트의 복잡성이 줄어들고, 코드의 품질을 보다 높일 수 있었다.

 

프로젝트의 초기 단계에서 친구추가 기능을 구현하려고 했는데, 이 기능을 추가하려면 친구 신청, 친구 관리, 알림 생성, 알림 저장 등 여러 서브 기능들이 필요했다. 이 모든 기능을 하나의 Friend 모듈에 넣어버리면, 해당 모듈이 너무 많은 책임을 지게 되어 코드의 가독성과 유지 보수성이 떨어질 것이라는 문제가 있었다. 이 문제를 해결하기 위해, '단일 책임 원칙'과 '하나의 함수는 하나의 기능을 한다'는 소프트웨어 개발 원칙을 따르기로 결정했다. 또한 NestJs의 모듈화와 의존성 주입 기능을 활용하여 각 기능을 독립적인 모듈로 분리하였다. 이를 통해 각 모듈은 자신의 책임만을 지게 되었고, 필요한 기능은 다른 모듈에서 주입받아 사용하게 되어 코드의 재사용성이 향상되었다. 결과적으로, 친구 신청, 친구 관리, 알림 생성, 알림 저장 등의 모듈을 성공적으로 분리하였다. 이후 책 좋아요 기능을 추가할 때, 알림 생성 모듈을 주입받아 쉽게 알림 기능을 추가할 수 있었다. 이는 코드의 재사용성을 크게 높였다.

 

이러한 과정을 통해, 코드의 가독성, 유지 보수성, 재사용성을 모두 향상시켰다. 또한, 이후에 새로운 기능을 추가하거나 기존 기능을 수정할 때도 각 기능을 담당하는 모듈만을 수정하면 되므로, 개발 과정이 훨씬 더 빠르고 안정적이게 되었다. 이를 통해 프로젝트의 전반적인 개발 효율성을 크게 향상시킬 수 있었다.

 

이번 프로젝트를 통해 배운 점은 다음과 같다. 첫째, '단일 책임 원칙'과 '하나의 함수는 하나의 기능을 한다'라는 원칙을 철저히 지키는 것이 얼마나 중요한지를 깨달았다. 둘째, NestJs의 모듈화와 의존성 주입 기능을 활용하면, 코드의 재사용성과 유지 보수성을 크게 향상시킬 수 있다는 것을 알게 되었다. 이러한 경험은 앞으로의 개발에 큰 도움이 될 것이다.

 

 

 

 

------------------------------------------------

 

 

멘토링 피드백

취업하는데 필수적인것들
운영경험 - 안정적으로 운영경험이 필요하다. 
서버가 왜 죽는지 
aws에서 막을 수도 잇음

면접단골 질문
google에 접속햇을대 어던 일이 일어나는지 [라우터, 스위치]

모니터링 툴, .....
백엔드
jmeter (성능테스트)
ngrinder (성능테스트)
APM : pinpoint, elastic apm, newrelic, datadog, scouter
셀프 피드백을 받을 수 잇는 요소들을 만들어놔야 한다. 

책은 게속 읽어야한다. 
[현재 내가 사용하고 잇는 툴들에 대한 책, cs]



실제로 운영햇고 피드백을 받아봣다. [맘카페 홍보해도 괜찮을듯/] - 
사용자 경험
. 베타 버전 공개하여 불특정 사용자 회원 가입 20여 명. 일부 피드백 받음
(1) 잘 되긴 했는데 글과 상관없는 뜬금없는 그림이 나왔어요! ㅎㅎ
(2) 한 번 올려보긴 했는데...이미지랑 제목은 따로 수정할 수 없는 것 같아 조금 아쉬웠다. -
(3) 나 왜 회원가입에 실패했다고 뜨지?


추가 사항
웹소켓을 이용해 gpt 생성을 바로바로 보여주는것,
좋아요 알림을 바로바로 보여주는 것 


페어프로그래밍 기법에 대해 알아둘것


브라우저 쿠키 이슈
백엔드에서도 사용자 추적을 붙여 사용하는 경우도 잇다.

메소드가 길어지면 테스트 케이스가 길어진다.


이력서 작성해서 보내주기

github 코멘트 작성해서 공유하기


이력서 자유형식[다듬어서 제출할수잇을정도만]

728x90