<aside> <img src="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" alt="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" width="40px" />
package com.example.member.api;
import com.example.member.dto.MemberResponse;
import com.example.member.dto.MemberSearchRequest;
import com.example.common.dto.ErrorResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "Member", description = "회원 관련 API")
@RestController
@RequestMapping("/api/members")
public class MemberController {
@Operation(
summary = "회원 목록 조회",
description = "가족 ID 기준 활성 회원 목록을 조회한다. page는 0부터 시작, size 기본값은 20, sort 형식은 '필드명,asc|desc' 이다."
)
@ApiResponses({
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "가족 정보가 존재하지 않음"),
@ApiResponse(responseCode = "500", description = "서버 오류"),
})
@GetMapping
public ResponseEntity<List<MemberResponse>> getMembers(
@Parameter(description = "가족 ID", example = "10")
@RequestParam Long familyId,
@Parameter(description = "회원 상태", example = "ACTIVE")
@RequestParam(defaultValue = "ACTIVE") String status,
@ParameterObject
@PageableDefault(size = 20, sort = "createdAt")
Pageable pageable
) {
return ResponseEntity.ok(List.of());
}
@Operation(
summary = "회원 단건 조회",
description = "memberId로 회원 상세를 조회한다. 존재하지 않으면 404를 반환한다."
)
@ApiResponses({
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "가족 정보가 존재하지 않음"),
@ApiResponse(responseCode = "500", description = "서버 오류"),
})
@GetMapping("/{memberId}")
public ResponseEntity<MemberResponse> getMember(
@Parameter(description = "회원 ID", example = "1")
@PathVariable Long memberId
) {
return ResponseEntity.ok(new MemberResponse());
}
}
</aside>
<aside> <img src="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" alt="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" width="40px" />
package com.example.member.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Schema(description = "회원 생성 요청 DTO")
public class MemberCreateRequest {
@Schema(description = "가족 ID", example = "10")
private Long familyId;
@Schema(description = "회원 이름", example = "홍길동")
private String name;
@Schema(description = "회원 상태", example = "ACTIVE")
private String status;
}
</aside>
<aside> <img src="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" alt="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" width="40px" />
@Schema(description = "회원 응답 DTO")
public class MemberResponse {
@Schema(description = "회원 ID", example = "1")
private Long id;
@Schema(description = "회원 이름", example = "홍길동")
private String name;
@Schema(description = "회원 상태", example = "ACTIVE")
private String status;
}
</aside>
<aside> <img src="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" alt="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" width="40px" />
@Schema(description = "회원 페이지 응답 DTO")
public class MemberPageResponse {
@Schema(description = "회원 목록")
private List<MemberResponse> content;
@Schema(description = "현재 페이지", example = "0")
private int page;
@Schema(description = "페이지 크기", example = "10")
private int size;
@Schema(description = "전체 요소 수", example = "25")
private long totalElements;
}
</aside>
<aside> <img src="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" alt="https://cdn-icons-png.flaticon.com/512/3602/3602241.png" width="40px" />
@Schema(description = "공통 에러 응답")
public class ErrorResponse {
@Schema(description = "에러 코드", example = "MEMBER_NOT_FOUND")
private String code;
@Schema(description = "에러 메시지", example = "회원이 존재하지 않습니다.")
private String message;
@Schema(description = "에러 발생 시간", example = "2026-02-19T12:00:00")
private String timestamp;
}
</aside>