2016/07 2

trim()으로 걸러내지 못하는 공백문자 정규식으로 걸러내기

우리 서비스에서 공백이름으로는 저장할 수 없도록 trim()으로 막는 곳이 있는데 클라이언트는 물론 서버에서도 걸러지지 못하고 넘어가서 DB까지 저장되어버린 공백문자를 발견했다. 그 공백 문자는 바로 유니코드(U+00A0) No-Break space였다. HTML에서 공백쓸 때 쓰던 가 이 공백문자였던거구만.. ㅋㅋ java에서 그 문자가 정말 trim으로 걸러지지 않는지 테스트를 해보자. 먼저 유니코드(U+00A0)을 UTF-8로 하면 무엇인지 본다. (http://www.utf8-chartable.de/) c2 a0이다. String utf8char = "c2 a0"; // no-break space String[] strNumbers = utf8char.split(" "); byte[] rawCha..

개발/JAVA 2016.07.22

Spring batch step loop 할 때 메모리 이슈

(한달 전에 삽질했던 내용인데 이제 씀) 지난번에 step을 loop 구조로 하는 것에 대한 포스팅을 했었다.http://marobiana.tistory.com/133 여기에는 주의해야할 점이 있다. 싱글톤 bean이 아닌 bean을 Step 단위로 loop를 돌릴 경우,Step이 수행될 때마다 새 bean이 생성되고,다음 loop로 넘어가도, 이전 스텝에서 생긴 bean은 메모리 해제가 되지 않는다. 그 bean들은 계속 누적이되어 memory leak을 일으킨다. 쓰레드덤프를 떠본 것 까진 아니지만일정한 속도로 여러번 batch를 수행시켰을 때 같은 시간 경과 후 (2시간 30분) job이 죽었다. 로그를 보니 Out of Memory였다. 나의 경우 singleton bean으로 처리하지 못했던 이..

개발/Spring Batch 2016.07.22