이 글은 2026년 04월 13일 작성된 글입니다.

오늘은 Rq 파라미터 처리 개선, 예외 처리, 테스트(assertThat), 그리고
레이어드 아키텍처 구조를 정리했다.


1. 파라미터 처리 리팩토링 (HashMap + Stream)

문자열을 매번 직접 파싱하는 대신, 생성자에서 한 번만 파싱하여\
HashMap에 저장하도록 개선했다.

@Test
@DisplayName("\"등록?이름=홍길동&고향=남원&성별=남성\"")
void t7() {
    Rq rq = new Rq("등록?이름=홍길동&고향=남원&성별=남성");

    String paramValue = rq.getParam("성별", "");

    assertEquals("남성", paramValue);
}
  • 생성자에서 초기화 → 중복 파싱 제거
  • HashMap으로 빠른 조회
  • Stream으로 코드 간결화

2. 예외 상황 처리

파라미터가 없거나 값이 비어있는 경우 기본값을 반환하도록 처리했다.

@Test
@DisplayName("\"등록?성별=\"")
void t8() {
    Rq rq = new Rq("등록?성별=");

    String paramValue = rq.getParam("성별", "모름");

    assertEquals("모름", paramValue);
}
@Test
@DisplayName("\"등록?성별\"")
void t9() {
    Rq rq = new Rq("등록?성별");

    String paramValue = rq.getParam("성별", "모름");

    assertEquals("모름", paramValue);
}
@Test
@DisplayName("\"등록\"")
void t10() {
    Rq rq = new Rq("등록");

    String paramValue = rq.getParam("성별", "모름");

    assertEquals("모름", paramValue);
}
  • 값이 없으면 기본값 반환
  • 예외 상황에서도 안정적으로 동작

3. assertThat (AssertJ)

기존 assertEquals 대신 assertThat을 도입했다.

assertThat(value).isEqualTo(2);
  • 가독성이 좋고 체이닝 방식 지원
  • 다양한 검증 메서드 제공

4. getParamAsInt 구현

문자열 파라미터를 정수로 변환하는 기능을 추가했다.

@Test
@DisplayName("\"목록?page=2\"")
void t11() {
    Rq rq = new Rq("목록?page=2");

    int value = rq.getParamAsInt("page", 1);

    assertThat(value).isEqualTo(2);
}
@Test
@DisplayName("\"목록?page=2번\"")
void t12() {
    Rq rq = new Rq("목록?page=2번");

    int value = rq.getParamAsInt("page", 1);

    assertThat(value).isEqualTo(1);
}
  • 변환 성공 → 값 반환
  • 변환 실패 → 기본값 반환

5. 레이어드 아키텍처

역할별로 계층을 나누어 구조를 분리하는 방식이다.

역할 계층


요청 처리 Controller
비즈니스 로직 Service
데이터 처리 Repository

  • 역할이 분리되어 유지보수에 유리

6. 구조 분리 (Controller / Service / Repository)

기능을 역할별로 분리했다.

  • SystemController → 종료
  • WiseSayingController → CRUD
  • Service → 로직 처리
  • Repository → 데이터 처리

7. AppContext

공통으로 사용하는 객체를 static으로 관리한다.

public class AppContext {
    public static WiseSayingService wiseSayingService;
}
  • 여러 곳에서 공유되는 객체 관리
  • Controller / Service / Repository 등록

8. static block

클래스 로딩 시 한 번 실행되는 초기화 블록이다.

static {
    // 초기화 코드
}
  • 복잡한 static 초기화에 사용

✅ 정리

  • 파라미터를 미리 파싱해두면 코드가 훨씬 단순해진다.
  • 예외 상황을 처리하면 안정적인 프로그램을 만들 수 있다.
  • 레이어를 나누면 구조가 깔끔해지고 유지보수가 쉬워진다.

0개의 댓글