2. 첫 업무 (CASE WHEN END)

2025. 3. 10. 02:38Legacy

반응형

회사의 첫 업무를 할당받기 전, 프로젝트 로컬 세팅이 필요했다.

서버 개발자 A : 이제 G님 오셨으니까 신규 업무로 가벼운 것부터 하나씩 해보도록 하죠.
서버 개발자 B : G님, 혹시 Spring 프로젝트를 직접 Tomcat 위에서 띄워보신 적 있으세요?
G : 네? 아니요.

갑자기 채용공고의 레거시 프로덕트 스펙이 떠올랐다. Spring 5.x 버전을 사용하는 프로덕트가 있다는 것. 스프링 5면 2017년 출시고, 지원 종료는 2024년 5월.. 주섬주섬 톰캣 홈페이지를 찾아갔다.

톰캣 아카이브


아카이브된 버전의 톰캣 위에서 G는 드디어 회사의 첫 업무를 할당받았다. 업무 내용은 클라이언트에 나무 큐 사진 다운로드 기능이 있는데, 그것을 새로나온 카본 큐 사진도 다운로드 할 수 있도록 수정해달라는 것.

나무 큐(왼쪽)와 카본 큐(오른쪽)

1. 비즈니스 로직은 동일하므로 쿼리는 수정하지 않는다.
또는 필요한 데이터를 제외하고 있을 경우 그 조건절만 제거한다.

2. 조회한 DAO 데이터를 서비스 코드에서 DTO 로 넘길 필드만 추가한다.

하지만 실제 소스는 그렇지 않았다.

1. 쿼리에서는 DB Function을 생성해서 사용하고 있다.
2. DB Function 의 Null Safe 를 보장하기 위해 NVL 함수를 사용하고 있다.
3. 나무 큐 상세 테이블과 카본 큐 상세 테이블이 다르다.
4. 서비스 코드에서는 쿼리 결과를 컨트롤러로 바로 넘긴다.

어디서부터 생각해야 할까. G는 코드를 들고 세션을 열었다.

G : 서비스 코드가 쿼리를 컨트롤러로 바이패싱하고 있어요. 쿼리도 복잡도가 불필요하게 높아요. 수정이 필요합니다.
A : 쿼리에서 처리하시면 돼요.
G : 네?
A : 쿼리에서 Case 나무 ... Case 카본 ... 으로 처리하시면 됩니다.
G : 왜 그렇게 처리하고 있죠?
A : 기존 쿼리들이 그렇게 하고 있고, 그때는 그게 최선이었어요.
G : ...

결국 그 문장이 나왔다. '그때는 그게 최선이었다'. 전직장에서부터 모든 히스토리를 용서하는 마법의 문장을 G는 또다시 접하게 되었다. G는 갸우뚱하며 쿼리를 수정한 후 PR 을 올렸고, 이슈는 운영까지 깔끔하게 통과되고 말았다.

SELECT
	CASE
    	WHEN CUE.NAMEID LIKE 'WOOD%' THEN NVL(FUNCTION_CUENAME(...))
        WHEN CUE.NAMEID LIKE 'CARBON%'THEN NVL(FUNCTION_CUENAME(...))
        ELSE ''
    END AS cueName
    ...
FROM CUE
...
반응형

'Legacy' 카테고리의 다른 글

1. 레거시 시스템 회사에 다닌다는 소설  (0) 2025.03.10