728x90
오늘의 키워드
controller 분기처리
controller 분기 처리
클라이언트와 어떻게 상호작용할지를 먼저 고민 후 분기 처리가 필요하다.
같은 기능이라도 클라이언트의 요구사항에 따라 다른 API를 제공해야 하는 사례를 살펴보자.
웹과 모바일에서 서로 다른 API 제공
클라이언트API 엔드포인트응답 데이터
웹 | GET /api/v1/web/products | 상세한 상품 정보 + 추천 상품 목록 포함 |
모바일 | GET /api/v1/mobile/products | 최소한의 데이터만 제공하여 성능 최적화 |
내부 시스템용 API와 외부 공개 API 분리
내부 시스템용 API | GET /internal/users/{id} | 모든 정보 제공 |
외부 API | GET /api/v1/users/{id} | 민감 정보 제외하고 제공 |
내부(Admin)과 외부(User) API 분리
회원 관리 기능
- 일반 사용자용 API (UserController)
- GET /api/v1/users/me → 내 정보 조회
- PUT /api/v1/users/me → 내 정보 수정
- 관리자용 API (AdminUserController)
- GET /admin/users/{id} → 특정 사용자 조회
- DELETE /admin/users/{id} → 특정 사용자 삭제
// ✅ 일반 사용자 컨트롤러
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
@GetMapping("/me")
public ResponseEntity<UserDTO> getMyInfo(@AuthenticationPrincipal User user) {
return ResponseEntity.ok(userService.getUserInfo(user.getId()));
}
@PutMapping("/me")
public ResponseEntity<?> updateMyInfo(@AuthenticationPrincipal User user, @RequestBody UpdateUserRequest request) {
userService.updateUser(user.getId(), request);
return ResponseEntity.ok("수정 완료");
}
}
// ✅ 관리자 전용 컨트롤러
@RestController
@RequestMapping("/admin/users")
@PreAuthorize("hasRole('ADMIN')") // 관리자 권한 필요
public class AdminUserController {
@GetMapping("/{id}")
public ResponseEntity<UserDTO> getUserById(@PathVariable Long id) {
return ResponseEntity.ok(userService.getUserInfo(id));
}
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return ResponseEntity.ok("삭제 완료");
}
}
비동기(Async) vs 동기(Sync) 처리 방식 분리
보고서 생성 API
- 동기 API (SyncReportController)
- POST /api/v1/reports/sync → 요청 시 바로 결과 반환
- 비동기 API (AsyncReportController)
- POST /api/v1/reports/async → 요청을 처리 큐에 넣고, 결과는 나중에 조회
728x90
'TIL' 카테고리의 다른 글
[TIL] 2025.02.27 DDD (0) | 2025.02.27 |
---|---|
[TIL] 2025.02.26 프로젝트 회고 (0) | 2025.02.26 |
[TIL] 2025.02.24 swagger (0) | 2025.02.25 |
[TIL] 2025.02.21 queryParameter dto로 받아보기 (0) | 2025.02.22 |
[TIL] 2025.02.21 sort 값 dto로 받아보기 (0) | 2025.02.21 |