스프링

 

 

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 엔드포인트 구현
    • 데이터베이스 연동을 통한 사용자 관리 기능 강화

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

사랑을 하면서 현명하게 된다는 것은 불가능한 것이다. -베이컨

댓글 ( 0)

댓글 남기기

작성