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