Skip to content
isdnetworks
Go back

몇 개인지부터 세어 봤다

이거 고치는 데 얼마나 걸리느냐는 물음에 금방 된다고 답했다. 사흘 걸렸다.

Table of contents

Open Table of contents

눈에 보이는 것만 봤다

로그인 화면 문구를 바꾸는 일이라 JSP 하나면 되는 줄 알았다. 시작하고 나서 같은 문구가 여기저기 있다는 것을 알았다.

$ grep -rln "로그인이 필요합니다" --include=*.jsp --include=*.java .

여섯 곳이 나왔다. JSP 만이 아니라 HandlerInterceptor 와 API 쪽 Controller 에도 같은 문자열이 박혀 있었다. 그리고 조금씩 다른 문구가 또 있었다.

세는 데 걸리는 5분

시작하기 전에 저 명령 하나만 돌렸으면 여섯 곳이라고 답할 수 있었다. 세는 데는 5분이면 되는데 그 5분을 안 써서 기간을 틀리게 답했다.

그 뒤로는 무엇을 묻든 먼저 셌다. grep 에 -l 을 주면 파일 목록이, -o 를 주면 걸린 문자열만 나온다. 뒤엣것을 sort -u 에 물리면 종류가 나온다.

$ grep -rln "패턴" --include=*.java .          # 어디에
$ grep -rho "패턴[^\"]*" --include=*.java . | sort -u   # 몇 가지

종류를 세니 물어볼 것이 나왔다

문구가 몇 가지인지 세어 봤다.

로그인이 필요합니다
로그인 후 이용해 주세요
로그인 해주세요.
세션이 만료되었습니다

네 가지가 전부 같은 상황에서 나오고 있었다. 하나로 통일할지 상황별로 다르게 둘지는 내가 정할 것이 아니라 물어봐야 하는 것이었다.

세어 보니 물어볼 것이 드러났다. 안 세었으면 하나만 고치고 나머지는 그대로 뒀을 것이다.

여섯 곳에 흩어져 있으면 다음에도 여섯 곳을 고쳐야 한다. 그래서 문구를 messages.properties 한 파일에 모았다. JSP 에서는 <spring:message code="login.required"/> 로 부른다. 다음에 바꿀 때는 한 줄만 고치면 된다.

여기서 한 번 걸렸다. 한글을 그대로 넣었더니 화면에 물음표가 찍혔다. .properties 는 ISO-8859-1 로 읽히기 때문이다.

두 가지 길이 있었다. JDK 의 native2ascii -encoding UTF-8 로 한글을 \uXXXX 로 바꿔 두거나, Spring 의 ReloadableResourceBundleMessageSource 에 defaultEncoding 을 UTF-8 로 주는 것이다. 뒤쪽은 파일을 그대로 읽을 수 있어서 그쪽으로 했다.

<bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  <property name="basename" value="classpath:messages"/>
  <property name="defaultEncoding" value="UTF-8"/>
</bean>

세지 못하는 것도 있었다

바꾸고 나서 다시 세니 원래 문구는 없었다. 그런데 다른 표현으로 남아 있는 것이 한 곳 있었다. 처음에 한 문구로만 찾았기 때문이다. 종류를 먼저 세고 나서 찾아야 했다.

문자열을 조립하는 자리도 검색에 안 잡혔다.

String msg = "로그인" + (isMobile ? " 해주세요" : "이 필요합니다");

조각으로 흩어져 있으니 완성된 문장으로 찾으면 안 나온다. 이런 것은 JSP 를 하나씩 열어 보는 수밖에 없었다. 세어서 나온 숫자가 하한이지 전부가 아니라는 것을 적어 뒀다.

세는 grep 은 .sh 파일로 남겼다. 며칠 간격으로 돌려 보니 84에서 61로, 다시 38로 줄었다. 숫자가 줄어드는 것이 보이면 정리가 진행되고 있다는 것이 드러난다.

정리


Share this post on:

Previous Post
서버가 늘 때마다 코드를 고쳤다
Next Post
데이터는 넣었는데 고칠 화면이 없었다