Spring Data JPA를 활용해 생상성을 극대화하고, 클라우드 환경에 직접 백그라운드 배포를 이룬 도서 관리 API 서버입니다.
- Language: Java
- Framework: Spring Boot
- Database: MySQL
- Infrastructure: AWS EC2, Linux
- API 설계: 클라이언트의 요청에 맞춘 GET / POST 메서드 기반의 API 규격 설계
- 기능 구현: 도서 정보 생성, 대출 상태 기록, 도서 반납 기능 통합 구현
- 예외 처리: 잘못된 API 요청이나 데이터베이스 접근 에러 등 예외 상황에 대비한 안정적인 Exception Handling 로직 적용
- 데이터 관리: MySQL을 연동하여 영구적인 데이터 저장소 구축
- 엔티티 매핑: 도서와 대출 기록 간의 비즈니스 요구사항을 반영하여 객체 간의 연관관계를 설정하고, 효율적인 데이터 조회를 위한 옵션 최적화
- AWS EC2 셋업: AWS EC2 인스턴스를 대여하여 리눅스 기반의 클라우드 서버 환경 구축
- 환경 분리: 코드 수정 없이 Profile 설정을 통해 로컬 개발 환경과 배포 환경의 DB 접속 정보를 제어
- 무중단 운영: 터미널 접속이 끊어져도 서버가 계속 동작할 수 있도록 Background 실행 모드 적용
- 사용자가 복잡한 IP 주소 대신 직관적인 도메인 이름으로 API 서버에 접근할 수 있도록 네트워크 및 DNS 설정 완료
순수 JPA나 SQL을 작성할 때 발생하는 반복적인 CRUD 코드를 JpaRepository 인터페이스를 통해 단축했습니다.
- 문제: 초기 Controller에 모든 비즈니스 로직과 데이터 접근 로직이 혼재되어 유지보수가 어려움.
- 해결: 스프링 컨테이너와 빈(Bean)의 동작 원리를 기반으로 코드를 리팩토링함. Presentation(Controller) - Business(Service) - Data Access(Repository) 계층으로 역할을 명확히 분리하여 결합도를 낮추고 응집도를 높인 좋은 코드 구조 확립.
- 문제: 엔티티를 직접 API 응답으로 반환할 경우, 엔티티 구조가 변경되면 API 스펙 또한 변동되어 유지보수가 힘들어집니다.
- 해결: 컨트롤러 계층과 서비스 계층 사이에 DTO 패턴을 도입했습니다. API가 요구하는 데이터만 담아 반환함으로써 엔티티를 보호하고 응답 스펙의 독립성을 보장했습니다.
localhost에서만 동작하던 애플리케이션을 외부 사용자가 24시간 접속할 수 있도록 구성했습니다. 가비아를 통해 도메인을 구입하고, AWS EC2 인스턴스에 백그라운드 실행 방식으로 서버를 배포하였습니다.