기술 학습

엔드포인트란?

hawon6691 2026. 2. 2. 11:49
728x90

엔드포인트란?

엔드포인트는 클라이언트가 서버의 특정 기능에 접근하기 위한 URL 주소와 HTTP 메서드의 조합입니다. 클라이언트와 서버 간 통신의 "진입점"이라고 생각하면 됩니다.

예를 들어 POST /api/users 라고 하면:

  • POST: HTTP 메서드
  • /api/users: 리소스 경로(URL)
  • 이 둘이 합쳐진 것이 하나의 엔드포인트

왜 사용하는가?

  1. 역할 분리: 같은 리소스에 대해 서로 다른 동작을 수행 (GET /users vs POST /users)
  2. 명확한 인터페이스: 클라이언트가 서버의 기능을 쉽게 이해하고 사용
  3. 확장성: 새로운 기능 추가 시 새로운 엔드포인트를 만들면 됨
  4. 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