260415_복습

정한결·2026년 4월 16일
post-thumbnail

1️⃣ 검색 + 페이징 → 기능 결합의 중요성

처음에는 단순히 목록을 보여주는 기능이었지만,
점점 아래처럼 확장됐다.

keyword로 검색
page로 페이지 이동
검색 + 페이징 동시에 적용

* 중요 포인트

처음엔 기능을 하나씩 따로 구현했는데, 막상 같이 쓰는 순간 복잡도가 확 올라갔다.

기능은 따로 만드는 것보다, 같이 쓸 때를 고려해서 설계해야 한다.

2️⃣ Pageable 도입 → 구조 개선의 시작

이 문제를 해결하기 위해 Pageable을 도입했다.

class Pageable {
    int pageNo;
    int pageSize;
}

*중요 포인트

이건 단순한 객체 추가가 아니라, 생각의 전환이라고 할 수 있다.

기존:

page 따로
size 따로

변경:

Pageable 하나로 관리

결과:

  • 코드가 깔끔해짐
  • 확장하기 쉬워짐
  • 의미가 명확해짐

3️⃣ 파일 기반 저장소 → 진짜 프로젝트 느낌

기존에는 메모리(List)에 저장했지만 파일로 저장하는 구조로 바꿨다.

파일 생성 / 삭제
JSON ↔ Map 변환
실제 데이터 유지

* 중요포인트

db 폴더 git에서 제외
테스트 끝나면 temp 폴더 자동 삭제

단순 기능보다 환경 관리가 더 중요하다는 걸 체감했다.

4️⃣ 테스트 구조 개선 → 안정성의 핵심

@BeforeEach를 활용해서 테스트마다 데이터를 초기화하도록 만들었다.

*중요 포인트

이 방법을 사용하지 않으면 테스트가 서로 영향을 줘서 결과가 계속 바뀐다.

테스트는 돌아가는 것보다, 항상 같은 결과가 나오는 게 중요하다는 것을 알 수 있었다.

5️⃣ Optional 적용 → null 처리의 패러다임 변화

findById에 Optional을 적용했다.

기존:

if (result != null)

변경:

optional.ifPresent(...)

*중요 포인트

“값이 없을 수도 있다”는 걸 코드로 강제할 수 있다.
또한 null 체크를 ‘개발자 책임 → 구조 책임’으로 바꾼다.
때문에 Optional은 null을 없애는 게 아니라, null을 안전하게 다루도록 강제하는 도구이다.

단순 문법이 아니라 실수를 줄이기 위한 설계 방식이라는 걸 느낄수 있었다.

🚀 전체 회고

이번 구간에서 가장 크게 느낀 건 하나였다.

기능 구현보다 구조와 설계가 더 중요하다.

** 기억에 남는 변화들:

검색 + 페이징 결합 → 복잡도 증가 경험
Pageable → 설계의 힘 체감
파일 저장소 → 실제 서비스 구조 느낌
테스트 초기화 → 안정성 확보
Optional → 안전한 코드 작성

0개의 댓글