1. SNS 애플리케이션용 REST API 구축 요약
1. 주요 리소스 정의
- 사용자(User)
- 필드: ID, 이름, 생일
- 게시물(Post)
- 필드: ID, 상세 설명
- 사용자와 연관됨 (사용자가 게시물을 생성)
2. HTTP 요청 메서드와 작업
- GET
- 리소스의 상세 정보 조회
- 예: 특정 사용자 또는 게시물 정보 가져오기
- POST
- 새로운 리소스 생성
- 예: 새 사용자 또는 게시물 생성
- PUT
- 기존 리소스 전체 업데이트
- 예: 사용자 전체 정보 수정
- PATCH
- 기존 리소스 일부 업데이트
- 예: 사용자 생일만 수정
- DELETE
- 리소스 삭제
- 예: 특정 사용자 또는 게시물 삭제
3. REST API 엔드포인트 설계
사용자 관련 엔드포인트
- 모든 사용자 조회: GET /users
- 새 사용자 생성: POST /users
- 특정 사용자 조회: GET /users/{id}
- 특정 사용자 삭제: DELETE /users/{id}
- 특정 사용자 업데이트: PUT /users/{id} 또는 PATCH /users/{id}
게시물 관련 엔드포인트
- 특정 사용자의 모든 게시물 조회: GET /users/{user_id}/posts
- 특정 사용자에게 새 게시물 생성: POST /users/{user_id}/posts
- 특정 게시물 조회: GET /users/{user_id}/posts/{post_id}
- 특정 게시물 삭제: DELETE /users/{user_id}/posts/{post_id}
- 특정 게시물 업데이트: PUT /users/{user_id}/posts/{post_id} 또는 PATCH /users/{user_id}/posts/{post_id}
4. URL 명명 규칙
- 복수형 사용 권장
- 예: /users, /posts
- 이유: 가독성이 높고 리소스의 집합을 명확히 표현
- 단수형 사용 시
- 예: /user, /post
- 권장하지 않음: 가독성이 떨어지고 일관성 유지가 어려움
5. 설계 시 고려 사항
- 리소스 간의 관계 명확히 하기
- 게시물은 특정 사용자와 연관되므로, 사용자 ID를 포함한 URL 구조 사용
- HTTP 메서드의 적절한 사용
- 각 작업에 맞는 HTTP 메서드를 선택하여 RESTful한 API 설계
- 명확하고 일관된 URL 구조 유지
- 모든 리소스에 복수형을 사용하여 일관성 있게 설계
6. REST API 설계의 장점
- 명확한 리소스 관리
- 사용자와 게시물 같은 주요 리소스를 중심으로 API를 설계함으로써 관리가 용이
- 표준화된 접근 방식
- HTTP 메서드를 활용하여 CRUD(Create, Read, Update, Delete) 작업을 표준화
- 확장성
- 리소스와 작업이 명확히 정의되어 있어 향후 기능 추가나 변경이 용이
2. SNS 애플리케이션용 REST API 구축: 사용자 관리 기초
1. 사용자(User) Bean 생성
- 클래스 생성
- 클래스 이름: User
- 패키지: 기존 패키지 뒤에 .user 추가
- 필드 정의
- private Integer id; // 사용자 ID
- private String name; // 사용자 이름
- private LocalDate birthDate; // 사용자 생일
- 메서드 생성
- 생성자(Constructor): 모든 필드를 매개변수로 받는 생성자 생성
- 게터(Getters) 및 세터(Setters): 각 필드에 대한 게터와 세터 생성
- toString 메서드: 객체의 문자열 표현을 위한 toString 메서드 생성
- 임포트 정리
- java.time.LocalDate 임포트
2. UserDaoService 생성
- 클래스 생성
- 클래스 이름: UserDaoService
- 패키지: 기존 패키지 뒤에 .user 추가
- 어노테이션: @Component를 사용하여 Spring 관리 빈으로 설정
- 필드 정의
- private static List<User> users = new ArrayList<>(); // 사용자 목록을 저장할 정적 리스트
- 초기 데이터 설정
- 정적 초기화 블록 (static block)
static { users.add(new User(1, "Adam", LocalDate.now().minusYears(30))); users.add(new User(2, "Eve", LocalDate.now().minusYears(25))); users.add(new User(3, "Jim", LocalDate.now().minusYears(20))); }
- 설명: LocalDate.now().minusYears(30) 등을 사용하여 사용자의 생일을 설정
- 메서드 정의
- 모든 사용자 조회: public List<User> findAll() { return users; }
- 추후 확장 예정: JPA와 Hibernate를 활용하여 데이터베이스와 연동할 예정
3. 설계 고려 사항
- 정적 리스트 활용
- 현재는 간단한 데이터 저장을 위해 ArrayList를 사용
- 향후 JPA와 Hibernate를 도입하여 데이터베이스와의 연동을 계획
- Spring 관리 빈 설정
- @Component 어노테이션을 통해 UserDaoService가 Spring에 의해 관리되도록 설정
4. 다음 단계 예고
- REST API 엔드포인트 구축
- 모든 사용자의 정보를 조회하는 API 생성 예정
- 데이터베이스 연동 준비
- JPA와 Hibernate를 이용한 데이터베이스 연동 학습 및 적용
5. 정리 및 마무리
- 완성된 내용
- 사용자 정보를 저장하고 관리할 수 있는 User Bean과 UserDaoService 생성
- 정적 리스트를 활용한 초기 사용자 데이터 설정
- 향후 계획
- REST API 엔드포인트 구현
- 데이터베이스 연동을 통한 사용자 관리 기능 강화
댓글 ( 0)
댓글 남기기