NewsHabit 뉴빗
NewsHabit 뉴빗

NewsHabit 뉴빗

Created
Mar 15, 2024 08:34 AM
Last edited time
Last updated April 8, 2024
Tags
Spring
Backend
Crawling
Language
Java
Python

프로젝트 소개

뉴스와 어색한 사이인 사용자들을 위해 뉴스를 보다 친숙하게 접할 수 있는 습관을 제공하는 iOS 애플리케이션입니다.
notion image
notion image
notion image
notion image

프로젝트 개발 기간

2024.02 ~ 2024.03

기술 스택

Python Java Spring Spring Boot MySQL Docker AWS

프로젝트 아키텍쳐

notion image

기능 소개

백엔드 개발 및 서버 운영 전반을 단독으로 책임졌습니다.
API
  • 현재 시간을 기준으로 최근 인기 급상승 중인 뉴스의 간단한 정보를 제공합니다.
  • 선택한 카테고리들 중 원하는 수만큼의 기사를 랜덤하게 제공합니다.
Crawling
  • Naver Open API를 사용하여 검색어를 기반으로 뉴스에 대한 정보를 얻습니다.
  • 추가로 필요한 데이터는 BeautifulSoup 을 사용하여 정적 크롤링을 하였습니다.
Spring Boot
  • JPA 를 활용하여 RDS 데이터를 사용합니다.
  • RESTful API 를 제공하며, thymeleaf 를 통한 정적 리소스를 제공합니다.
  • Spring Security를 활용해 정해진 API에 대해서만 응답을 하여 안정성을 높였습니다.
  • 통합테스트를 통해 서비스의 안정성을 높였습니다.
AWS
  • EC2 인스턴스
    • Docker를 활용하여 Python 스크립트(크롤링)와 Spring Boot 컨테이너를 실행합니다.
  • RDS 인스턴스
    • MySQL을 이용하며 보안그룹을 통해 EC2 인스턴스와만 통신하여 데이터 안전성을 높였습니다.
  • Route 53
    • 사용자의 인터넷 트래픽을 적합한 인프라 자원으로 라우팅합니다.
  • CloudFront & ACM
    • CloudFront를 통해 클라이언트로부터의 모든 요청을 HTTPS로 리다이렉트하도록 설정하여 보안을 강화하였습니다.
    • 원본 인스턴스와 HTTP 통신을 하여 네트워크 오버헤드를 줄이고, 서버의 리소스 사용을 최적화 하였습니다.

문제 해결 경험

  • 미승인 API 요청을 처리하는 데 문제가 있었고 Spring Security를 사용해 해결해 보았습니다.
  • RDS 인스턴스의 시간대를 KST로 설정하여, 서버와 데이터베이스 간의 시간 불일치 문제를 해결하였습니다.
  • RDS에서의 읽기 작업 성능을 위해 @Transactional(readOnly = true)를 사용하여 개선하였습니다.
  • CloudFront의 무한 리다이렉트 문제를 해결하기 위해, CloudFront 설정과 웹 서버의 리다이렉션 규칙을 검토하여 수정하였습니다.

회고

AWS를 활용한 서버 설계 경험은 클라우드 인프라의 확장성과 유연성을 직접 체험하게 해주었고, 서버 관리와 네트워크 구성에 대한 이해를 높일 수 있었습니다. 또한, Spring Boot를 사용하여 프로젝트의 초기 설정을 진행하고 개발 환경과 배포 환경을 분리하는 방법을 경험함으로써, 실제 운영 환경에서 발생할 수 있는 다양한 이슈에 대비하는 능력을 키웠습니다. 이러한 다양한 경험을 통해 개발 역량을 한 단계 높일 수 있었고, 앞으로 다른 프로젝트들을 진행함에 있어 더 복잡하고 다양한 백엔드 시스템을 설계하고 구현할 수 있는 견고한 기반을 마련했다고 자부합니다.

Loading Comments...