간단한 게시물 CRUD API 를 스프링부트 기반으로 만들어보았습니다.
이와 관련된 테크스펙 문서를 아래와 같이 작성해봤습니다.
해당 프로젝트 소스의 간략한 정보는 아래와 같습니다.
* 프로젝트명: sparta-prestudy-simple-board
* GitHub Url: https://github.com/yuni02/sparta-prestudy-simple-board
해당 서비스의 기능 요구사항은 아래와 같습니다.
더보기
- 전체 게시글 목록 조회 API
- 제목, 작성자명, 작성 내용, 작성 날짜를 조회하기
- 작성 날짜 기준 내림차순으로 정렬하기
- 게시글 작성 API
- 제목, 작성자명, 비밀번호, 작성 내용을 저장하고
- 저장된 게시글을 Client 로 반환하기
- 선택한 게시글 조회 API
- 선택한 게시글의 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기
- (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
- 선택한 게시글 수정 API
- 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인한 후
- 제목, 작성자명, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
- 선택한 게시글 삭제 API
- 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
- 선택한 게시글을 삭제하고 Client 로 성공했다는 표시 반환하기
- 회원 가입 API
- username, password를 Client에서 전달받기
- username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a
z), 숫자(09)로 구성되어야 한다. - password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a
z, AZ), 숫자(0~9)로 구성되어야 한다. - DB에 중복된 username이 없다면 회원을 저장하고 Client 로 성공했다는 메시지, 상태코드 반환하기
- 로그인 API
- username, password를 Client에서 전달받기
- DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
- 로그인 성공 시, 로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급하고,
- 발급한 토큰을 Header에 추가하고 성공했다는 메시지, 상태코드 와 함께 Client에 반환하기
작성자: 나
마지막 수정일: 2025-02-26
요약 (Summary)
이 API는 사용자 인증(회원가입, 로그인)과 게시판 기능(게시글 조회, 작성, 수정, 삭제)을 제공합니다. JWT 기반의 인증 시스템과 RESTful API 구조를 통해 안전하고 효율적인 서비스를 구현합니다.
배경 (Background)
사용자들이 계정을 생성하고 로그인하여 게시글을 관리할 수 있는 서비스 구현이 필요합니다. 회원 정보 검증과 JWT 기반 인증을 통해 보안을 강화하고, 게시글 관리 기능을 통해 사용자 간 정보 공유가 가능하도록 합니다.
추가로 비밀번호 인증 방식의 게시글 관리도 지원하여 비회원도 게시글을 작성할 수 있는 유연성을 제공합니다.
목표 (Goals)
- 회원 가입 및 로그인 기능 구현
- JWT 기반의 사용자 인증 시스템 구현
- 게시글 CRUD 기능 구현
- 비밀번호 기반의 게시글 수정/삭제 메커니즘 제공
목표가 아닌 것 (Non-goals)
- 소셜 로그인 기능
- 회원 정보 수정/탈퇴 기능
- 댓글 기능
- 게시글 검색 기능 (단순 조회만 구현)
- 파일 업로드 기능
계획 (Plan)
이 프로젝트는 Spring Boot 기반의 백엔드 서비스와 AWS 클라우드 환경을 활용하여 구현됩니다. 아래는 전체 시스템 아키텍처와 구현 계획입니다.
1. 구현 방식
1.1 기술 스택
- 백엔드: Spring Boot, Spring Security, Spring Data JPA
- 데이터베이스: MySQL
- 인증: JWT (JSON Web Token)
- 배포 환경: AWS EC2, Docker
1.2 시스템 아키텍처
- 3-티어 아키텍처 적용
- 프레젠테이션 계층: REST API 컨트롤러
- 비즈니스 계층: 서비스 레이어
- 데이터 액세스 계층: 리포지토리 레이어
1.3 API 설계 원칙
- RESTful 원칙 준수
- 적절한 HTTP 메서드 사용 (GET, POST, PUT, PATCH, DELETE)
- 명확한 에러 응답과 상태 코드 제공
2. 데이터 흐름도
사용자 요청이 처리되는 전체 흐름은 다음과 같습니다:
- 클라이언트에서 API 요청
- Spring Security 필터에서 인증 여부 확인
- 컨트롤러에서 요청 처리 및 서비스 레이어 호출
- 서비스 레이어에서 비즈니스 로직 처리
- 리포지토리를 통한 데이터베이스 접근
- 결과 반환 및 응답 생성
3. 인증 처리 흐름도
4. 게시글 관리 흐름도
5. 배포 계획
5.1 AWS EC2 배포 절차
- EC2 인스턴스 생성
- Amazon Linux 2 AMI 사용
- t2.micro 또는 t2.small 인스턴스 타입 선택
- 보안 그룹 설정 (HTTP 80, HTTPS 443, SSH 22 포트 오픈)
- 데이터베이스 설정
- EC2 내부에 MySQL 설치 및 구성
- 데이터베이스 스키마 및 사용자 설정
- 애플리케이션 배포
- Git에서 소스코드 클론
- Java 11 및 필요한 의존성 설치
- Spring Boot 애플리케이션 빌드 및 실행
- Nginx를 사용한 리버스 프록시 설정 (선택사항)
- CI/CD 구성 (선택사항)
- GitHub Actions를 활용한 자동 빌드 및 배포 파이프라인 구성
5. 도메인 연결 (선택사항)
- Route 53을 통한 도메인 구매 또는 기존 도메인 사용
- Elastic IP 할당 및 도메인 연결
- SSL 인증서 발급 및 적용 (Let's Encrypt 활용)