JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] Elasticsearch를 활용해 CRUD API 만들기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
build-crud-api-with-elasticsearch
type
post
updatedAt
Dec 6, 2025 04:48 AM
심플하게 만들기 위해 Service Layer 없이 Controller만 생성해서 CRUD API를 만들 것이다.
 

✅ 사용자 생성 API 만들기

  1. Controller 틀 만들기
    1. @RestController @RequestMapping("users") public class UserController { private UserDocumentRepository userDocumentRepository; public UserController(UserDocumentRepository userDocumentRepository) { this.userDocumentRepository = userDocumentRepository; } @PostMapping() public UserDocument createUser() { } }
       
  1. Request DTO 만들기
    1. UserCreateRequestDto
      public class UserCreateRequestDto { private String id; private String name; private Long age; private Boolean isActive; public String getId() { return id; } public String getName() { return name; } public Long getAge() { return age; } public Boolean getIsActive() { return isActive; } }
      • 참고) 일관성을 위해 메서드명을 getIsActive()라고 지어주자.
       
  1. Controller 완성하기
    1. @RestController @RequestMapping("users") public class UserController { private UserDocumentRepository userDocumentRepository; public UserController(UserDocumentRepository userDocumentRepository) { this.userDocumentRepository = userDocumentRepository; } @PostMapping() public UserDocument createUser(@RequestBody UserCreateRequestDto requestDto) { UserDocument user = new UserDocument(requestDto.getId(), requestDto.getName(), requestDto.getAge(), requestDto.getIsActive()); return userDocumentRepository.save(user); } }
       
  1. Postman으로 테스트해보기
    1. { "id": "1", "name": "Jaeseong", "age": 20, "isActive": true }
      notion image
{ "id": "2", "name": "JSCODE", "age": 25, "isActive": false }
notion image
 
 

✅ 사용자 조회 API 만들기

  1. Controller 만들기
    1. @RestController @RequestMapping("users") public class UserController { private UserDocumentRepository userDocumentRepository; public UserController(UserDocumentRepository userDocumentRepository) { this.userDocumentRepository = userDocumentRepository; } @PostMapping() public UserDocument createUser(@RequestBody UserCreateRequestDto requestDto) { UserDocument user = new UserDocument(requestDto.getId(), requestDto.getName(), requestDto.getAge(), requestDto.getIsActive()); return userDocumentRepository.save(user); } @GetMapping() public Page<UserDocument> findUsers() { return userDocumentRepository.findAll(PageRequest.of(0, 10)); } @GetMapping("/{id}") public UserDocument findUserById(@PathVariable String id) { return userDocumentRepository.findById(id) .orElseThrow(() -> new RuntimeException("존재하지 않는 사용자입니다.")); } }
       
  1. Postman으로 테스트해보기
    1. GET localhost:8080/users
      notion image
       
      GET localhost:8080/users/1
      notion image
       
      GET localhost:8080/users/2
      notion image
 
 

✅ 사용자 정보 수정 API 만들기

  1. Request DTO 만들기
    1. UserUpdateRequestDto
      public class UserUpdateRequestDto { private String name; private Long age; private Boolean isActive; public String getName() { return name; } public Long getAge() { return age; } public Boolean getIsActive() { return isActive; } }
      • 참고) 일관성을 위해 메서드명을 getIsActive()라고 지어주자.
       
  1. Controller 완성하기
    1. @RestController @RequestMapping("users") public class UserController { private UserDocumentRepository userDocumentRepository; public UserController(UserDocumentRepository userDocumentRepository) { this.userDocumentRepository = userDocumentRepository; } ... @PutMapping("/{id}") public UserDocument updateUser(@PathVariable String id, @RequestBody UserUpdateRequestDto requestDto) { UserDocument existingUser = userDocumentRepository.findById(id) .orElseThrow(() -> new RuntimeException("존재하지 않는 사용자입니다.")); existingUser.setAge(requestDto.getAge()); existingUser.setName(requestDto.getName()); existingUser.setIsActive(requestDto.getIsActive()); return userDocumentRepository.save(existingUser); } }
       
  1. Postman으로 테스트해보기
    1. notion image
      notion image
 

✅ 사용자 삭제 API 만들기

  1. Controller 완성하기
    1. @RestController @RequestMapping("users") public class UserController { private UserDocumentRepository userDocumentRepository; public UserController(UserDocumentRepository userDocumentRepository) { this.userDocumentRepository = userDocumentRepository; } ... @DeleteMapping("/{id}") public void deleteUser(@PathVariable String id) { UserDocument user = userDocumentRepository.findById(id) .orElseThrow(() -> new RuntimeException("존재하지 않는 사용자입니다.")); userDocumentRepository.delete(user); } }
       
  1. Postman으로 테스트해보기
    1. notion image
      notion image
 
 
👨🏻‍🏫
지금까지 Spring Boot에 Elasticsearch를 연동시켜 간단한 CRUD API를 만들어봤다. 그런데 실제 현업에서는 Elasticsearch만 단독으로 쓰지 않고, 주로 MySQL과 같은 RDB와 Elasticsearch를 같이 사용하는 편이다. 하지만 이번 실습에서 Elasticsearch만 활용해 API를 만든 이유는, Spring Boot에서 Elasticsearch를 활용하는 걸 빠르게 경험하기 위해서였다. 그럼 다음 강의에서는 Elasticsearch의 핵심 기능인 검색 기능에 대해 본격적으로 알아보자. (나중에 실제 현업 프로젝트와 유사하게 RDB와 Elasticsearch를 같이 활용해서 API를 만들어 볼 예정이니 조급해하지 말고 기초부터 하나씩 차근차근 배워나가자.)
 
 
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
type
series-footer
updatedAt
Dec 6, 2025 05:12 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.