728x90
엔드포인트란?
엔드포인트는 클라이언트가 서버의 특정 기능에 접근하기 위한 URL 주소와 HTTP 메서드의 조합입니다. 클라이언트와 서버 간 통신의 "진입점"이라고 생각하면 됩니다.
예를 들어 POST /api/users 라고 하면:
POST: HTTP 메서드/api/users: 리소스 경로(URL)- 이 둘이 합쳐진 것이 하나의 엔드포인트
왜 사용하는가?
- 역할 분리: 같은 리소스에 대해 서로 다른 동작을 수행 (
GET /usersvsPOST /users) - 명확한 인터페이스: 클라이언트가 서버의 기능을 쉽게 이해하고 사용
- 확장성: 새로운 기능 추가 시 새로운 엔드포인트를 만들면 됨
- RESTful 설계: 리소스 중심의 체계적인 API 구조
어떻게 사용하는가 (Spring Boot 예제)
// 1. 사용자 조회 - GET
@GetMapping("/api/users/{userId}")
public ResponseEntity<User> getUser(@PathVariable Long userId) {
User user = userService.findById(userId);
return ResponseEntity.ok(user);
}
// 2. 사용자 생성 - POST
@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody UserRequest request) {
User user = userService.save(request);
return ResponseEntity.status(201).body(user);
}
// 3. 사용자 수정 - PUT
@PutMapping("/api/users/{userId}")
public ResponseEntity<User> updateUser(
@PathVariable Long userId,
@RequestBody UserRequest request) {
User user = userService.update(userId, request);
return ResponseEntity.ok(user);
}
// 4. 사용자 삭제 - DELETE
@DeleteMapping("/api/users/{userId}")
public ResponseEntity<Void> deleteUser(@PathVariable Long userId) {
userService.delete(userId);
return ResponseEntity.noContent().build();
}
주요 HTTP 메서드 (엔드포인트의 핵심)
| 메서드 | 역할 | 멱등성 | 캐시 가능 |
|---|---|---|---|
| GET | 조회 | O | O |
| POST | 생성 | X | X |
| PUT | 전체 수정 | O | X |
| PATCH | 부분 수정 | X | X |
| DELETE | 삭제 | O | X |
관련 핵심 키워드
1. REST (Representational State Transfer)
- 리소스 기반 아키텍처
- HTTP 메서드를 통한 상태 변화
- 엔드포인트 설계의 기본 원칙
2. 경로 변수 (Path Variable)
@GetMapping("/api/users/{userId}") // {userId}는 경로 변수
3. 쿼리 파라미터 (Query Parameter)
@GetMapping("/api/users")
public List<User> getUsers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
// GET /api/users?page=0&size=10
}
4. 요청 바디 (Request Body)
@PostMapping("/api/users")
public ResponseEntity<User> create(@RequestBody UserRequest request) {
// JSON 형태의 요청 데이터
}
5. 상태 코드 (HTTP Status Code)
200 OK: 성공201 Created: 생성 성공204 No Content: 처리 성공, 반환 데이터 없음400 Bad Request: 잘못된 요청404 Not Found: 리소스 없음500 Internal Server Error: 서버 에러
6. 라우팅 (Routing)
- 요청 경로에 따라 적절한 엔드포인트로 연결
- Spring Boot의
@RequestMapping,@GetMapping등이 라우팅 담당
7. API 명세 (API Specification)
- Swagger/OpenAPI로 엔드포인트 문서화
- 클라이언트가 사용 가능한 모든 엔드포인트 확인
실제 설계 예시
@RestController
@RequestMapping("/api/v1/posts")
public class PostController {
// GET /api/v1/posts - 모든 게시물 조회
@GetMapping
public ResponseEntity<Page<Post>> getPosts(
@RequestParam(defaultValue = "0") int page) {
return ResponseEntity.ok(postService.findAll(page));
}
// GET /api/v1/posts/{postId} - 특정 게시물 조회
@GetMapping("/{postId}")
public ResponseEntity<Post> getPost(@PathVariable Long postId) {
return ResponseEntity.ok(postService.findById(postId));
}
// POST /api/v1/posts - 게시물 생성
@PostMapping
public ResponseEntity<Post> createPost(@RequestBody PostRequest request) {
return ResponseEntity.status(201).body(postService.create(request));
}
// PATCH /api/v1/posts/{postId} - 게시물 부분 수정
@PatchMapping("/{postId}")
public ResponseEntity<Post> updatePost(
@PathVariable Long postId,
@RequestBody PostUpdateRequest request) {
return ResponseEntity.ok(postService.update(postId, request));
}
}
엔드포인트는 Spring Boot에서 RESTful API를 구축하는 가장 핵심적인 개념입니다. 당신의 DevRoller나 FitTracker 프로젝트에서도 이러한 엔드포인트 설계를 통해 클라이언트-서버 간 명확한 인터페이스를 만들고 있었을 것입니다.
728x90
'기술 학습' 카테고리의 다른 글
| 미들웨어(Middleware)란? (0) | 2026.02.04 |
|---|---|
| Passport란? (0) | 2026.02.04 |
| express.Router() 란? (0) | 2026.01.29 |
| MVC란? (0) | 2026.01.29 |
| Express To-Do List 프로젝트 코드 리뷰 (0) | 2026.01.29 |