이거 고치는 데 얼마나 걸리느냐는 물음에 금방 된다고 답했다. 사흘 걸렸다.
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로 줄었다. 숫자가 줄어드는 것이 보이면 정리가 진행되고 있다는 것이 드러난다.
정리
- 시작 전에 몇 개인지 세는 데 5분이면 된다
- 그 5분을 안 쓰면 기간을 틀리게 답하게 된다
- 어디에 있는지와 몇 개인지와 종류가 몇 가지인지를 각각 센다
- 종류를 세면 물어볼 것이 드러난다
- 전부 같게 할지 다르게 둘지는 내가 정할 것이 아니다
- 흩어진 것을
messages.properties한 자리에 모으면 다음에는 한 줄만 고친다 .properties는 ISO-8859-1 로 읽힌다.defaultEncoding을 주거나native2ascii로 바꿔 둔다- 한 표현으로만 찾으면 다른 표현이 남는다
- 문자열을 조립하는 자리는 완성된 문장으로 못 찾는다
- 세어서 나온 숫자는 하한이지 전부가 아니다