Skip to content

리팩토링 BE

Park-Mu-Seong edited this page Jan 6, 2025 · 2 revisions

BE

스케줄러 클래스 분리하기

  • Category: 관심사 분리

  • Why?

    • 기존 스케줄러 로직과 메인 서비스 로직이 섞여있어 코드 를 찾기 어려움

feed-crawler 의존성 외부 주입 형태로 변경하기

  • Category: 확장성 개선

  • Why?

    • DB 변경, 테스트 등 다양한 환경에서 바로 사용할 수 있도록 의존성의 결합도를 낮추기 위함

Redis 동작들 직접 구현하여 캡슐화 하기

  • Category: 일관성 개선

  • Why?

    • OOP 원칙을 위배하는 코드를 수정하기 위함

도메인별 디렉토리 분리

  • Category: 가독성 개선

  • Why?

    • 한 도메인 내에 여러 파일이 위치하여 가독성이 저하됨
    • 특히 같은 계층의 파일이 여러 개인 경우 그 정도가 두드러짐

Response DTO 일괄 적용하기

  • Category: 일관성 개선

  • Why?

    • DTO를 사용하는 곳도 있고 사용하지 않는곳 도 존재하여 일관성이 떨어짐

데이터 전처리 작업 수행 계층 통일

  • Category: 일관성 개선

  • Why?

    • 레포지토리 계층과 서비스 계층의 역할 책임의 일관성이 떨어짐

API 서버 다중 프로세스로 바꿔서 부하 분산하기

  • Category: 가용성 테스트

  • Why?

    • PM2의 다중 프로세스를 활용한 부하분산을 통해 수치적으로 가용성 측면에서의 이점을 얻기 위함
  • 목표

    • 싱글 프로세스를 사용할때 보다 최대 서버 가용성 10% 이상 개선하기

채팅서버 다중 프로세스 부하 분산하기

  • Category: 가용성 테스트

  • Why?

    • 채팅 서버가 최대로 수용할 수 있는 웹소켓 커넥션 수를 파악하기 위함. 또한 이에 따라 클러스터를 활용한 가용성 측면에서의 이점을 얻기 위함
  • 목표

    • 최대 웹소켓 커넥션 개수 10% 개선

채팅 서버 분리하고 웹소켓 연결이 API에 주는 영향 확인하기

  • Category: 효율성 + 가용성 테스트

  • Why?

    • 웹소켓 서버와 API 서버가 분리되지 않아 발생하는 병목현상을 줄이기 위함
  • 목표

    • API 응답 속도 5% 개선

중복 RSS 링크 수락 문제

  • Category: 예외 개선

  • Why?

    • 중복된 RSS가 들어와도 별도의 예외처리가 되고 있지 않음

Feed Crawler 예외 처리

  • Category: 예외 개선

  • Why?

    • Feed Crawler 내 코드들을 재검토 하여 핸들링 되지 못한 예외 상황들을 고려 후 처리

NestJS 전역 예외

  • Category: 예외 개선

  • Why?

    • NestJS 내 코드들을 재검토 하여 핸들링 되지 못한 예외 상황들을 고려 후 처리

도커 사용

  • Category: 관리성 개선

  • Why?

    • 인프라 이전, 서비스 패키지 관리 등 다양한 상황에서 더욱 간편하게 서비스를 관리할 수 있도록 각 서비스에 도커를 적용 dockerfile, docker-compose 작성

Private , Public 인스턴스 내 서비스 이전

  • Category: 보안 / 가용성 개선

  • Why?

    • 비교적 불안정 하던 Private Instance 리소스 문제를 해겷하기 위해 수직확장 진행
    • 보안을 위해 NGINX 및 정적파일을 제외한 모든 서비스를 Private 영역으로 이전

Redis 복제, 샤딩

  • Category: 가용성 개선

  • Why?

    • Redis가 급격히 부하를 받을 때를 대비

MySQL 복제, 분산

  • Category: 가용성 개선

  • Why?

    • MySQL이 급격히 부하를 받을 때를 대비

오토 스케일링

  • Category: 가용성 개선

  • Why?

    • 클라우드 내 AutoScaling 서비스를 활용해 급격한 대규모 트래픽에 대비

jest 테스트 환경 병렬 동작 변경

  • Category: 테스트 환경 안전성 개선

  • why?

    • 테스트 실행시 발생가능한 DB 충돌을 방지하기 위해 병렬 동작을 제거 및 테스트용 DB initializing 필요성 대두

테스트용 DB MySQL로 변경

테스트 환경 호환성 개선

  • Why?
    • 기존의 편의성을 위해 테스트용 DB를 Sqlite 사용중이었으나, 프로덕션 레벨 DB환경을 구현하기 위해 Docker를 사용하여 임시 테스트 DB 구축

feed-crwaler 테스트 작성

  • Category: 테스트 커버리지 개선

  • Why?

    • feed-crwaler 테스트 작성을 통한 모듈의 안전성 보장을 위함