Day 32 - Lombok
이 글은 2026년 04월 15일 작성된 글입니다.
오늘은 Lombok 도입, 목록 검색 기능 확장, 페이징 처리, 그리고 파일 및 JSON 관련 기능 추가 내용을 정리했다.
1. Lombok 도입
반복적으로 작성하던 getter, setter, 생성자 같은 코드를 줄이기 위해 Lombok을 도입했다.
compileOnly("org.projectlombok:lombok:1.18.38")
annotationProcessor("org.projectlombok:lombok:1.18.38")
testCompileOnly("org.projectlombok:lombok:1.18.38")
testAnnotationProcessor("org.projectlombok:lombok:1.18.38")Lombok을 적용하면 클래스가 훨씬 간결해지고, 핵심 필드와 역할에 더 집중해서 코드를 볼 수 있다.
- 보일러플레이트 코드 감소
- 클래스 가독성 향상
- 유지보수 부담 감소
2. 목록 검색 기능 추가
목록 조회에서 조건에 따라 내용을 검색하거나 작성자를 검색할 수 있도록 기능이 확장됐다.
목록?keywordType=content&keyword=과거
목록?keywordType=author&keyword=작자
목록?keyword=이순신처음에는 내용 기준 검색을 만들고, 이후 작성자 기준 검색과 기본 검색까지 차례대로 확장했다.
keywordType=content는 명언 내용 기준 검색keywordType=author는 작성자 기준 검색keywordType이 없으면 기본 검색으로 확장 가능
3. 페이징 처리
목록이 많아질수록 한 번에 전부 출력하는 방식은 불편하기 때문에 페이지 단위로 나누어 보여주는 기능을 추가했다.
목록
목록?page=2
목록?keyword=명언&page=2기본적으로는 1페이지가 보여지고, 가장 최근 데이터 5개가 먼저 출력되도록 구현했다.
- 기본 페이지는 1페이지
- 한 페이지당 5개 출력
- 검색과 페이징을 함께 사용할 수 있음
4. 검색과 페이징의 결합
검색 기능만 따로, 페이징 기능만 따로 있는 것이 아니라 검색 결과 안에서도 페이지를 나누어 볼 수 있도록 처리했다.
목록?keyword=명언&page=2이 기능은 실제 서비스에서도 자주 쓰이는 방식이다. 데이터가 많아질수록 필요한 결과만 나누어 보는 것이 훨씬 효율적이다.
- 검색 결과를 그대로 페이지 단위로 분리
- 사용자 입장에서 더 보기 편한 목록 제공
5. Pageable 도입
페이지 번호와 페이지 크기를 하나의 객체로 관리하기 위해 Pageable을 도입했다.
public class Pageable {
private int pageNo;
private int pageSize;
}이전에는 page와 size를 각각 따로 다뤘다면, 이제는 Pageable 객체 하나로 묶어서 전달할 수 있다.
pageNo: 현재 페이지 번호pageSize: 페이지당 출력 개수
이렇게 객체로 분리하면 메서드 파라미터가 깔끔해지고, 확장할 때도 훨씬 유리하다.
6. 파일 기능 추가
파일 생성, 파일 존재 여부 확인, 파일 삭제 기능을 구현했다.
File file = new File("test.txt");
file.createNewFile();
file.exists();
file.delete();파일 기능은 이후 데이터를 파일에 저장하거나 불러오는 기능의 기초가 된다. 단순해 보이지만 저장소를 파일 기반으로 확장하려면 꼭 필요한 과정이다.
- 파일 생성
- 파일 존재 여부 확인
- 파일 삭제
7. 파일 테스트 강화
파일 관련 기능이 늘어나면서 테스트도 함께 강화했다. 특히 테스트가 끝난 뒤 temp 폴더가 남지 않도록 정리하는 처리까지 포함했다.
@AfterEach
void tearDown() {
// temp 폴더 정리
}테스트는 성공하는 것도 중요하지만, 테스트 실행 뒤 환경이 깨끗하게 유지되는 것도 중요하다.
- 테스트 후 임시 폴더 정리
- 반복 실행 시 안정성 확보
- 파일 테스트 신뢰도 향상
8. JSON과 Map의 상호 변환
JSON 문자열과 Map 객체를 서로 변환할 수 있는 기능을 구현했다.
Map<String, Object> map = new HashMap<>();
String json = jsonUtil.toJson(map);
Map<String, Object> resultMap = jsonUtil.toMap(json);이 기능은 파일 저장이나 데이터 직렬화 과정에서 자주 사용된다. 객체를 바로 저장하기 어렵기 때문에 중간 형태로 JSON을 쓰는 경우가 많다.
- Map → JSON 변환
- JSON → Map 변환
- 데이터 저장 구조 확장 준비
9. WiseSayingFileRepositoryTest 시작
파일 기반 저장소 테스트를 시작했고, 저장 동작이 정상적으로 수행되는지 테스트 케이스를 추가했다.
파일 저장소는 메모리 저장소와 달리 실제 파일 입출력이 포함되기 때문에 더 꼼꼼한 검증이 필요하다.
@Test
void save() {
// 저장 테스트
}- 파일 저장 테스트 시작
- 이후 조회, 수정, 삭제 테스트로 확장 가능
✅ 정리
- Lombok을 도입하면서 반복 코드가 줄어들고 클래스가 더 깔끔해졌다.
- 목록 검색은 내용, 작성자, 기본 검색까지 점차 확장되었다.
- 페이징을 적용하면서 많은 데이터를 나누어 조회할 수 있게 되었다.
- Pageable을 따로 분리해두니 구조를 더 깔끔하게 다룰 수 있었다.
- 파일과 JSON 기능은 이후 영속성 처리의 기초가 되는 단계였다.