20121030 개발일지 : Spring에서 클라이언트 IP주소 얻어오기

 오늘 학원 사람들이랑 간단한 저녁회식이 있어서 저녁식사 이후에 10시반쯤에 회사 출근해서 지금까지 앉아있다. 한 한시간 자긴 했는데 5시간 정도를 업무했는데 좀 웃긴게 정말 심한 삽질을 했다는 것이다. 

 그 삽질은 다름 아닌 Spring 3.1에서 @Controller 어노테이션 되어있는 Spring MVC구조에서의 컨트롤러에서 클라이언트의 IP주소 가져오기. 난 이게 안되는 줄 알았다. 아무리 @RequestMapping이 되어 있는 함수의 경우 request의 RemoteAddr 값이 자꾸 0:0:0:0:0:0:0:1 이 나오는 것이다.

 아래는 그 컨트롤러의 소스이다.

 @RequestMapping(value = “/Login.do”, method = RequestMethod.GET)

public String loginView(HttpServletRequest request,HttpSession sess, Model model) throws Exception {

logger.info(“HomeController – login”);

// 외부 접속여부 체크

String useSms = “N”;

int ipc = loginService.ipCheck(request);

logger.info(“IP : “+request.getRemoteAddr());

    

    if(ipc != 1)  useSms = “Y”;

    

model.addAttribute(“useSms”, useSms);

return “/main/login”;

}

 보다시피 단순히 IP를 통해 허용 IP만 통과시키기 위함이었는데, IP부분이 계속 0:0:0:.. 머시기로 찍히니 나로썬 참 곤란하지 않을 수가 없다.

 결론적으론 참 어이없게 해결했는데, 이는 스프링 문제가 아니라 톰켓 자체의 문제였다. IP v6 주소체계를 따라가다보니 주소가 저리 나온다고 한다. 정상이다. (참조 : http://kdarkdev.tistory.com/3 )

 따라서 WAS상에서 IP주소를 IP v4를 선호하도록 Run Configurations에서 -Djava.net.preferIPv4Stack=true 라는 Argument를 추가해 줘야한다. 참 이것때문에 한 두시간은 날린 것 같다..

 참고로 내가 하고 있는 작업은 단순 JSP로 Entity-Model-Service 정도만 분리되어 있는 웹 서비스를 Spring으로 이관하는 작업이다. 솔직히 쉽지많은 않다. 참 손이 갈 일이 많다는..

 한 3시쯤에 또 하나의 문제에 봉착했다. JSP에서는 직접 Java 데이터를 받아다가 잘만 쓰는데, 나의 경우는 Velocity를 사용하는데 이건 중요한 게 아니고 Spring 의 컨트롤러에서는 단순히 Model과 View만 처리하니 만약 오류가 난다면 새로운 페이지 혹은 현재 페이지에 Alert 창을 띄우도록 해야 한다. 새로 페이지 만들어서 로그인시 페이지 이동이 일어나게 하는 방식은 너무 구세대이고.. 현재 페이지에서 Alert띄우게 하려면 결국 Ajax이더라.

 그래서 결국 Ajax로 바꿀 생각을 하고 있다. 정말 가면 갈수록 프로젝트가 산으로 가는 것 같긴 하지만.. 어차피 배우려고 시작한 프로젝트인데, 기존의 자바스크립트의 Form기준 체크가 아닌 ID기준 체크로 바꾸고 Validation도 jQuery의 plugin을 사용하던지 하려고 한다. 물론 스크립트도 사용 가능하니 말이다.

 여기서 하나 괜찮은 것을 안 것이 바로 Object와 HashMap으로의 처리이다. 워낙 자바단에서 해시맵과 오브젝트를 자주 사용하다 보니 자바스크립트에서도 이를 본격적으로 사용해줘야 겠다는 생각이 들었다. 그런 의미에서 jQuery는 역시나 Object를 쉽게 변환할 수 있는 것을 지원한다.

 결국 아직 로그인 페이지 조차도 못끝냈다.. 하악 나 어쩐담 이번주까진 절반 이상은 끝내야 하는데 말이다.. 역시 학교다니면서 개발하는 것이란 쉬운 일은 아니다. 내일은 java script -> jQuery 포팅작업 및 메인화면 세팅에서 Tree Menu를 좀 더 이쁜것으로 바꾸고 본격적으로 YUI를 적용할 예정이다. 뭣보다 오늘 테스트하지 못한 Controller -> Service -> DAO가 잘 물리는지도 확인해야 겠고.. 아 내일 할일 좀 많네. 여튼 삽질의 철야로 기억될 오늘, 그래도 기분은 좋다 🙂

Software Engineer @Google in Silicon Valley, Carnegie Mellon University MSSM 21' AI기반 생활습관 서비스 스타트업 유라임 (Urhyme) (전)대표. 전 금융권 풀스택 소프트웨어 엔지니어. 실리콘벨리, 스타트업 이야기를 주로 씁니다. 대용량 분산처리 (주로 데이터, 머신러닝) 웹 서비스 설계와 데이터 시각화, 스타트업에 관심이 많습니다.

Translate »