개발
Day 30 - Hard
·3분 읽기
이 글은 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. 레이어드 아키텍처
역할별로 계층을 나누어 구조를 분리하는 방식이다.
| 역할 계층 | |
|---|---|
| 요청 처리 Cont | roller |
| 비즈니스 로직 Servic | e |
| 데이터 처리 Repos | itory |
- 역할이 분리되어 유지보수에 유리
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 초기화에 사용
✅ 정리
- 파라미터를 미리 파싱해두면 코드가 훨씬 단순해진다.
- 예외 상황을 처리하면 안정적인 프로그램을 만들 수 있다.
- 레이어를 나누면 구조가 깔끔해지고 유지보수가 쉬워진다.