본문 바로가기
  • Let's study
BackEnd/Java

[Java] 명언 게시판 - 파일 기반 Repository 리팩토링

by 코딩고수이고파 2026. 7. 27.

이번에는 기존 메모리에 저장하던 명언을 파일에 저장하도록 변경하고, 검색 기능까지 구현했다.

구현 과정에서 Optional, 테스트 환경 분리, 검색 기능 리팩토링도 함께 진행했다.

1. WiseSayingFileRepository 도입

기존에는 ArrayList에 명언을 저장했지만, 프로그램을 종료하면 데이터가 모두 사라지는 문제가 있었다.

이를 해결하기 위해 WiseSayingFileRepository를 만들어 명언을 파일에 저장하고 다시 읽어오는 기능을 구현했다.

🔗 관련 커밋

2. 명언 저장과 자동 ID 생성

명언을 저장할 때마다 lastId를 저장하는 파일을 생성했다.

파일에 저장된 마지막 ID를 기준으로 다음 ID를 생성하므로 프로그램을 다시 실행해도 번호가 이어진다.

또한 테스트에서는 beforeEach를 사용하여 매 테스트마다 독립적인 저장 환경을 만들었다.

테스트가 서로 영향을 주지 않도록 하는 것이 중요하다.

🔗 관련 커밋

3. DB 경로 중복 제거 및 테스트 환경 개선

기존에는 DB 경로를 여러 곳에서 직접 작성하고 있었다.

경로가 변경되면 여러 파일을 수정해야 하는 문제가 있기 때문에 공통으로 관리하도록 리팩토링했다.

또한 테스트 실행 전후에 DB를 초기화하여 이전 테스트의 데이터가 다음 테스트에 영향을 주지 않도록 수정했다.

.gitignore에도 테스트용 DB를 추가하여 Git 저장소에 업로드되지 않도록 설정했다.

🔗 관련 커밋

4. Optional 도입

기존에는 조회 결과가 없으면 null을 반환했다.

이를 Optional로 변경하여 조회 결과가 없을 수도 있다는 것을 메서드의 반환 타입으로 명확하게 표현했다.

Optional을 사용하면 null 처리 의도를 코드에서 바로 확인할 수 있고 NullPointerException 발생 가능성을 줄일 수 있다.

🔗 관련 커밋

5. 삭제 기능 개선

기존에는 id를 전달받아 삭제를 수행했다.

리팩토링 후에는 삭제할 객체를 먼저 조회한 뒤 Repository에 전달하도록 변경했다.

🔗 관련 커밋

6. 수정 기능 구현

명언 저장 기능 구현에서 이미 구현된 기능이다. Test 코드로 잘 실행되는지만 확인하면 된다.

수정 후에는 변경된 객체를 다시 저장하여 파일에도 수정 내용이 반영된다.

🔗 관련 커밋

7. 다건 조회 구현

기존에는 명언 하나만 조회할 수 있었다.

이를 여러 개의 명언을 한 번에 조회할 수 있도록 변경했다.

목록 조회, 검색, 페이징 등 이후 기능들도 모두 다건 조회를 기반으로 동작하게 된다.

🔗 관련 커밋

8. 검색 기능 추가

검색 기능은 단계적으로 구현했다.

먼저 명언 내용을 기준으로 검색사고 이후 작가 이름으로도 검색할 수 있도록 확장했다.

마지막으로 두 기능을 하나의 조회 로직으로 통합하여 중복 코드를 제거했다.

🔗 관련 커밋

 

댓글