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 의 ReloadableResourceBundleMessageSourcedefaultEncodingUTF-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
데이터는 넣었는데 고칠 화면이 없었다