Project

[프로젝트] 올봄 개선 프로젝트

_은선_ 2024. 8. 3. 03:02
728x90
SMALL

개요

개선 동기

이번 상반기 학교에서 캡스톤 디자인 프로젝트를 진행했다. 
백엔드를 혼자 도맡기도 했고, 3개월이라는 짧은 기간 내에 정해진 기능을 모두 구현해야 했기에, 정말 "기능"에만 초점을 맞췄던 느낌이 있었다.
따라서, 아래와 같은 방향으로 프로젝트를 개선하고자 한다.

 

"올봄" 프로젝트 소개

이번에 개선할 프로젝트는 AI 기반 장년층 라이프 케어 서비스 "올봄"이다.
이 프로젝트는 챗봇, ToDo 리스트, 일자리, 두뇌 향상 게임, 지도 등 총 5가지 기능을 담고 있다.
프로젝트의 코드는 아래애서 확인할 수 있다.

https://github.com/kookmin-sw/capstone-2024-25

 

GitHub - kookmin-sw/capstone-2024-25: 올봄: AI 기반 장년층 라이프 케어 서비스

올봄: AI 기반 장년층 라이프 케어 서비스. Contribute to kookmin-sw/capstone-2024-25 development by creating an account on GitHub.

github.com

 

 

🌱 "올봄" 개선 프로젝트

1. 성능 개선

AOP를 활용하여 API별로 실행 시간을 측정해보기

  • 성능 튜닝의 가장 기본은 병목 지점을 확인하는 것이다. 성능 문제를 해결하기 위해서는 먼저 시스템 내에서 어떤 부분이 병목 지점이 되어 전체 성능을 저하시키는지를 파악해야 한다.
  • 즉, 병목 지점이 전체 시스템의 성능을 결정짓는 주요 요소가 된다. AOP를 활용하여 시간이 오래 걸리는 API를 파악한 후 이를 중점으로 성능을 개선해보자.

API 개선

  • 위에서 시간이 오래 걸리는 API를 파악한 후 API를 개선해보자.
  • 쿼리 튜닝, 로직 최적화를 통해 전체 시스템의 성능을 향상시킬 수 있을 것이다.


2. API Rate Limiter 적용하기

도입 이유

API Rate Limiter를 통해 특정 시간 내에 허용된 요청 수를 제한함으로써 서버의 과부하를 방지하고, 서비스 안정성을 높일 수 있다.

이를 통해 악성 트래픽으로부터 서버를 보호할 수도 있다.

  • 서버 과부하 방지
    • 안정성 확보 : 동시에 많은 요청이 들어오면 서버가 과부하 상태에 이를 수 있다. Rate Limiter를 통해 요청 수를 제한함으로써 서버의 안정적인 운영을 보장할 수 있다.
    • 리소스 관리 : 서버 리소스(CPU, 메모리, 네트워크 대역폭 등)를 효율적으로 관리하여 성능 저하를 방지한다.
  • 악성 트래픽 차단
    • 보안 강화 : DDoS(Distributed Denial of Service) 공격과 같은 악성 트래픽으로부터 서버를 보호할 수 있다. Rate Limiter는 과도한 요청을 차단하여 서비스 거부 상태를 예방한다.
    • API 남용 방지: 사용자 또는 봇이 API를 과도하게 호출하는 것을 방지하여 공정한 서비스 이용을 보장한다.
  • 서비스 품질 향상
    • 공평한 자원 분배: 모든 사용자가 공평하게 서버 자원을 사용할 수 있도록 보장한다. 특정 사용자가 과도한 요청을 보내는 것을 막아 다른 사용자에게 미치는 영향을 최소화한다.
    • 응답 시간 개선: 과도한 요청으로 인한 대기 시간을 줄여 API 응답 시간을 개선할 수 있다.

 

3. 모니터링을 위한 그라파나, 프로메테우스 도입

도입 이유

Grafana와 Prometheus를 도입하여 시스템의 성능, 자원 사용량, 트래픽 등을 실시간으로 모니터링할 수 있다.

이는 문제 발생 시 신속한 대응과 원인 분석에 큰 도움을 준다.

  • 실시간 성능 모니터링
    시스템 상태 파악: Prometheus는 메트릭 데이터를 실시간으로 수집하고 저장하여, 현재 시스템 상태를 지속적으로 파악할 수 있다.
    실시간 대시보드: Grafana는 Prometheus의 데이터를 기반으로 실시간 대시보드를 제공하여, 시스템의 다양한 지표(CPU 사용량, 메모리 사용량, 네트워크 트래픽 등)를 시각적으로 모니터링할 수 있다.
  • 문제 탐지 및 대응
    알람 설정: Prometheus와 Grafana는 특정 조건(예: CPU 사용률이 80%를 초과할 때)에 도달하면 알람을 발생시킬 수 있다. 이를 통해 문제가 발생하기 전에 사전 대응이 가능하다.
    문제 분석: 문제가 발생했을 때, Grafana의 대시보드를 통해 쉽게 원인을 분석하고, 신속하게 해결할 수 있다.

 

4. 일자리 검색 API에 ElasticSearch 도입

현재 일자리 검색 API 문제점

 

현재 일자리 리스트 페이지에서 "직종으로 검색하기"를 누르면 일자리의 제목을 기준으로 검색하게끔 기능 구현이 돼있다.
그러나 채용 공고의 제목에 항상 직종이 포함되는 것은 아니다.
따라서 제목뿐만 아니라 직무 내용의 키워드로도 검색할 수 있도록 개선하여 사용자에게 더 정확하고 다양한 검색 결과를 제공해주자.

 

도입 이유

 

그냥 관계형 데이터 베이스에서 like문을 활용하여 키워드 검색을 하면 되는 것 아니냐는 의문을 품을 수도 있다.

하지만, 키워드 검색을 위해 직무 내용의 평균 글자 수가 500자가 넘어가는 직무들을 풀로 스캔하며 like문을 사용한다는 것은 굉장한 시간을 초래할 수 있다. 
또, 추후 채용 공고가 쌓이면 쌓일수록 이러한 방식으로 구현하는 것은 비효율적이게 되고, 검색 속도도 점점 느려진다. 이에 Elastic Search를 도입하기로 했다.


ElasticSearch를 도입하면 대량의 데이터를 빠르고 효율적으로 검색할 수 있다. 이는 사용자에게 더 빠르고 정확한 검색 결과를 제공하여 사용자 경험을 향상시킨다. 특히, 키워드 검색을 위해 긴 텍스트를 처리해야 하는 상황에서는 ElasticSearch의 도입이 효율적이다.

 

5. DB 분산락 적용을 통한 동시성 제어

Redis 분산락을 사용하여 여러 서버 간의 자원 동기화를 효과적으로 관리할 수 있다. 이는 데이터 일관성을 유지하고, 동시성 문제를 방지하여 안정적인 시스템 운영에 기여한다.

 

도입 이유

  • 동시성 문제 해결
    분산락은 여러 프로세스가 동시에 동일한 데이터를 수정하려는 경쟁 상태를 방지하여 데이터 무결성과 일관성을 보장한다. 
    특정 리소스에 대해 한 번에 하나의 프로세스만 접근하도록 제한함으로써 데이터 손실이나 불일치 문제를 예방해보자.
  • 성능 최적화
    분산락을 통해 불필요한 자원 사용을 방지하고, 동일한 데이터에 여러 프로세스가 중복 접근하는 상황을 줄여 성능 저하를 방지한다. 
    또한, Redis와 같은 인메모리 데이터 저장소를 활용하여 빠른 락/언락 작업을 수행함으로써 전체 시스템의 응답 시간을 단축시킨다.

 

6. CI/CD 파이프라인 개선

기존 CI/CD 파이프라인을 개선해보자. 배포 스크립트의 실행 시간을 줄이도록 최적화하고, Portainer와 같은 도구를 활용하여 컨테이너 관리를 자동화해보자. 병렬 처리, 캐싱, 불필요한 단계 제거로 배포 시간을 단축하고, Portainer로 컨테이너 오케스트레이션과 자동화된 배포 파이프라인을 구축하여 관리 효율성을 높이자.

 

7. SSE 구현 → 사용자의 약품 복용 시간을 이용하여 서버에서 알림 전송

 

사용자의 약 시간대 정보 활용

회원가입 시에 사용자의 복용중인 약품 정보를 기입 받았었다.

사용자의 약품 복용 시간에 맞춰 서버에서 클라이언트로 알림 전송을 하도록 기능 구현을 해보자.

 

 

 

도입 이유


Server-Sent Events(SSE)를 구현하면 서버에서 클라이언트로 실시간 알림을 전송할 수 있다. SSE는 서버가 주도하여 클라이언트에 데이터를 푸시하는 방식으로, HTTP 연결을 통해 실시간 업데이트를 제공하는 기술이다. 이를 통해 사용자는 약 복용 시간에 맞춘 알림을 실시간으로 받을 수 있다.

 

8. 대규모 설계 반영하여 모놀리식 → MSA 방식으로 아키텍처 수정

도입 이유

현재는 대규모 설계가 필요하지 않을 수 있지만, 미래에 사용자가 확장될 경우를 대비하여 MSA 방식을 도입해보자. MSA는 시스템을 여러 개의 독립적인 서비스로 분리하여 확장성과 유연성을 제공한다. MSA 방식으로 설계 시 개별 서비스의 장애가 전체 시스템에 영향을 미치지 않으며, 새로운 기능을 추가하거나 기존 기능을 수정하는 데에도 용이하다. 이번 기회를 통해 MSA 방식을 경험하고, 향후 시스템 확장 시 필요한 준비를 미리 갖추도록 하자.








728x90
LIST