본문 바로가기
  • Let's study

BackEnd/Java12

[Java] 명언 게시판 - FileRepository 적용 / db 분리 인터페이스 도입으로 저장소 교체가 가능하도록 리팩토링기존에는 Service가 WiseSayingRepository를 사용하고 있었다.Service 코드의 수정 없이 WiseSayingFileRepository로 변경하려면 두 Repository의 함수 명과, 파리미터가 같아야 한다.이를 해결하기 위해 Repository 인터페이스를 도입하였다.Repository 인터페이스 작성저장소에서 반드시 제공해야 하는 기능만 인터페이스에 정의하였다. public interface WiseSayingRepository { boolean delete(int id); Optional findById(int id); WiseSaying save(WiseSaying wiseSaying); List fi.. 2026. 7. 28.
[Java] 명언 게시판 - 파일 기반 Repository 리팩토링 이번에는 기존 메모리에 저장하던 명언을 파일에 저장하도록 변경하고, 검색 기능까지 구현했다.구현 과정에서 Optional, 테스트 환경 분리, 검색 기능 리팩토링도 함께 진행했다.1. WiseSayingFileRepository 도입기존에는 ArrayList에 명언을 저장했지만, 프로그램을 종료하면 데이터가 모두 사라지는 문제가 있었다.이를 해결하기 위해 WiseSayingFileRepository를 만들어 명언을 파일에 저장하고 다시 읽어오는 기능을 구현했다.🔗 관련 커밋WiseSayingFileRepository 명언 저장/조회 구현2. 명언 저장과 자동 ID 생성명언을 저장할 때마다 lastId를 저장하는 파일을 생성했다.파일에 저장된 마지막 ID를 기준으로 다음 ID를 생성하므로 프로그램을 다시.. 2026. 7. 27.
[Java] 명언 게시판 - 파일 저장 및 JSON 직렬화 구현 1. 파일 입출력 구현파일 생성, 삭제 및 읽기/쓰기 구현명언 데이터를 메모리가 아닌 파일에 저장하기 위해 파일 입출력 기능을 구현하였다.구현한 기능은 다음과 같다. 파일 생성파일 존재 여부 확인파일 읽기파일 쓰기파일 삭제파일 저장 기능을 추가하면서 프로그램을 종료해도 데이터가 유지될 수 있는 기반을 마련하였다.🔗 관련 커밋파일 생성 및 존재 여부 확인파일 삭제 구현파일 읽기/쓰기 구현2. 테스트 환경 개선테스트 전처리 / 후처리 적용파일 테스트를 실행하면 테스트용 파일이 계속 남는 문제가 있었다.이를 해결하기 위해 @BeforeAll과 @AfterAll을 사용하여 테스트 시작 전 필요한 환경을 준비하고, 테스트가 끝난 후 생성된 파일을 삭제하도록 수정하였다.또한 테스트 과정에서 생성되는 temp 폴더.. 2026. 7. 26.
[Java] 명언 게시판 - 검색 및 페이징 구현 1. 검색 기능 구현검색 기능 구현 (keywordType, keyword 지원)처음에는 하나의 파라미터만 처리하도록 구현하였다.이후 keywordType과 keyword 두 개의 파라미터를 모두 받을 수 있도록 수정하여 검색 기능을 완성하였다.예를 들어 다음과 같은 명령을 처리할 수 있다. 목록?keywordType=content&keyword=과거목록?keywordType=author&keyword=작자미상 검색 조건에 맞는 명언만 조회하도록 Repository의 조회 로직을 수정하였다.🔗 관련 커밋검색 기능 구현(단일 검색 조건)검색 기능 구현(keywordType, keyword 지원)2. 페이징 기능 구현목록이 많아질 경우 한 번에 모두 출력하지 않고 페이지 단위로 조회하도록 구현하였다.처음.. 2026. 7. 26.
[Java] 명언 게시판 - TDD 적용하기 이번에는 이미 구현했던 명언 게시판을 TDD(Test Driven Development) 방식으로 다시 구현해보았다.기능 구현 자체보다 테스트를 먼저 작성하고, 테스트를 통과시키는 방식으로 개발하는 과정에 집중하였다.세부 코드는 각 커밋을 참고하면 된다.AssertJ 추가테스트 코드에서 검증을 편하게 하기 위해 AssertJ를 사용하였다.build.gradle.ktstestImplementation("org.assertj:assertj-core:3.26.3") AssertJ는 assertThat()을 이용하여 가독성 좋은 테스트 코드를 작성할 수 있다.🔗 관련 커밋assertj 의존성 추가TestUtil 작성콘솔 프로그램은 입력과 출력이 콘솔에 의존하기 때문에 테스트하기가 어렵다.이를 해결하기 위해 .. 2026. 7. 23.
[Java] 명언 게시판 만들기 - 레이어드 아키텍처 & 리팩토링 레이어드 아키텍처 적용기존에는 App 클래스가 사용자 입력, 명언 등록, 수정, 삭제, 목록 조회 등 모든 기능을 담당했다.하지만 기능이 많아질수록 하나의 클래스에 책임이 집중되어 유지보수가 어려워진다.이를 해결하기 위해 레이어드 아키텍처(Layered Architecture)를 적용하여 역할에 따라 클래스를 분리하였다.구조 변경기존 구조 App ├─ 등록 ├─ 목록 ├─ 삭제 └─ 수정 변경 후 구조 App ↓WiseSayingController ↓WiseSayingService ↓WiseSayingRepository 각 클래스는 자신의 역할만 담당하도록 변경하였다.AppApp은 사용자의 명령을 입력받고, 어떤 기능을 실행할지만 결정한다.기존처럼 등록, 삭제, 수정 로직을 직접 처리하지.. 2026. 7. 22.