Search

NewsHabit 뉴빗

프로젝트 소개

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

프로젝트 개발 기간

2024.02 ~ 2024.03

기술 스택

Python Java Spring Spring Boot MySQL Docker AWS

프로젝트 아키텍쳐

기능 소개

백엔드 개발 및 서버 운영 전반을 단독으로 책임졌습니다.
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를 사용하여 프로젝트의 초기 설정을 진행하고 개발 환경과 배포 환경을 분리하는 방법을 경험함으로써, 실제 운영 환경에서 발생할 수 있는 다양한 이슈에 대비하는 능력을 키웠습니다. 이러한 다양한 경험을 통해 개발 역량을 한 단계 높일 수 있었고, 앞으로 다른 프로젝트들을 진행함에 있어 더 복잡하고 다양한 백엔드 시스템을 설계하고 구현할 수 있는 견고한 기반을 마련했다고 자부합니다.