20121014 개발일지 : Spring 3.0 공부 5일차

 계속해서 개발일기를 썼었어야 했는데 금요일에 거의 밤새서 스프링 공부를 하고 오늘도 하루종일 스프링 공부를 하느라고 뭐 거의 빠져들다 싶이 한 것 같다. 정말 간만에 개발에 푹 빠져든 것 같은데, 사실 개발이라기 보단 개발 시작 이전에 있어서 공부만 하는 것 같다.

 토비의 스프링 3을 쓰는데 저자 이일민 님은 개발만 거진 30여년을 하셨는데 역시나 자바나 엔터프라이즈 웹을 개발하면서 수 많은 시행착오와 난관을 겪어온 것을 글을 읽으면서 계속 느낄 수 있었다. 초반부터 계속 나오는 초난감 DAO부터가 나도 경험했지만 엔터프라이즈 자바 개발을 하면서 가장 기본적으로 삽질이 가능한 부분이니 말이다.


토비의 스프링 3

저자

이일민 지음

출판사

에이콘출판 | 2010-08-24 출간

카테고리

컴퓨터/IT

책소개

스프링 프레임워크 3 기초 원리부터 고급 실전활용까지 완벽 가이…
가격비교 글쓴이 평점  







 정말 엄청나게 많은 내용을 다룬 이 책, 수요일부터 보기 시작해서 3일동안 1100장을 보았는데 중간에 AOP나 서비스 추상화 는 일단은 건너뛰었다. 물론 더없이 중요한 개념인 것 같긴한데 일단은 DI와 IoC 를 Beans와 엮어서 이해하고, 자원의 생성/소멸, 커넥션 등의 가장 부단한 문제가 있는 JDBC Connection을 JdbcTemplate을 사용해서 이를 또한 DI와 IoC를 통해 사용하는 부분은 참으로 인상적이었던 것 같다.

 그리고 이제야 Spring MVC에 들어가기 시작했다. 샘플로 만들어 본 Dispatcher를 만들어서 Servlet과 연결하고, 이를 Model View Controller로 나눈후 비록 view가 JSP이고 JDBC를 쓴 부분은 아직 안다뤄봤는데도 불구하고 정말 멋지게 웹 서비스가 구성되는 것을 보니 감탄을 금치 못했다.

 그러다 보니 스프링에 대해 추억하기 시작했다. 2009년 초, 병역특례를 처음 시작했을 때 내가 받은 작업은 ASP작업이었다. 단순한 베이직에 차츰 질리기 시작할 쯔음 이와는 확연히 다른 스프링 2.5는 내게 정말 환상적으로 다가왔다.

2009/04/29 – [메튜장의 생각/IT업계에 관한 생각] – IT업체에서 병특은 무슨 일을 할까?

위 글을 봐도 알겠지만 모든 서버의 세팅과 개발과정의 세팅, 심지어는 eclipse와 workspace까지 통째로 선임개발자가 주었기 때문에 내가 할 일은 정말로 많지 않았다. 업무도 거의 유지보수성이었기 때문에 SQL수정이나 몇몇 로직 수정 정도였지. 

 당시 기억나는 것은 내가 그 선임개발자에게 “이러한 스프링 세팅은 어떻게 해야 하나요?” 라고 물었을 때 그 선임은 “그게 내 몸값인데, 가르쳐 줄 수 없다.” 라고 하였다. 그리고 딱 2년뒤에도 역시 Spring 3.0을 실무에서 사용해 보았지만 금융권에 투입된 당시에는 뭐 이건 더 복잡해지고 협업과 온갖 상용 솔루션이 포함된 프로젝트가 되어버려서 손댈 엄두도 내지 못했다.(당시 놀랐던 것은 이를 모두 세팅한 사람이 그 아웃소싱 회사의 ‘기술이사’ 였던 것이다. 스프링만 제대로 세팅해도 기술이사수준이라니..)

 어쨌든 3년하고 절반정도 지난 지금 시점에서 나는 스프링에 대한 세팅방법을 알아보고 있다. 아니, 사실 세팅이라기보다는 객체지향 프로그래밍과 기존의 엔터프라이즈 자바 웹을 개발하는데 있어서의 문제점을 어떻게 스프링이 해결했는지에 대해 공부했다고 보는게 맞겠다. 마침 학교에서도 “객체지향 프로그래밍” 을 배우고 있어서 몇몇 중복되는 부분도 있고 하여 스프링 공부를 시작했다.

 참고로 나는 2005년부터 프리랜서 식으로 모 회사의 인트라넷을 유지보수 하곤 하였는데 이 시스템은 Tomcat+JSP+MySQL을 사용하긴 하지만 정말 단순한 웹의 구조로 되어있는, 그러면서도 전형적인 구조로 되어 있는 시스템이다. 한동안 나는 거의 할 일이 없었는데 최근 이 회사가 다른 법인을 신설하면서 나는 학생인 동시에 개발자로 들어가게 되었고, 방과 후에 밤늦게까지 남아서 일을 하고있다.

 그런데 최근에 나는 이 회사에 기존 인트라넷을 업그레이드 하자는 제안을 하였고, 이런 제안은 승인되었다. 기간은 정말 촉박하지만(2012년 말까지 완성..) 사실 나의 진짜 의도는 다른데에 있다. 바로 내 개발력의 노화를 막기 위해, 그리고 향후 사업추진시 내가 구상중인 아이디어를 빠르게 프로토타이핑 하기 위해.

 지난학기에 나는 소프트웨어 공학을 배우면서 여러가지 소프트웨어 개발 산업의 이슈와 개발론, 협업, 유지보수, OOP등에 대해 배웠는데 사실 이런 과목들이 어찌보면 실무와 학문이 잘 조합된 SW개발의 한 부분이라는 생각이 들었다. 이를 배우고나니 나도 머릿속을 보다 더 OOP적인 사고로 바꿔야겠다는 생각이 들었다. 

 실제로 내 개발에 대한 평가는 거의 퍼블리셔 혹은 코더 수준에 가까운데, 내가 생각하는 코더와 프로그래머의 차이는 자바를 기준으로 봤을 때 JSP로만 코딩을 하느냐 아니면 최소한 java파일과 jsp파일을 분리하는가 이다. 물론 나도 MVC 작업을 많이 해보긴 했지만 JSP나 ASP, PHP를 단독으로 써서 작업한 것도 많은 것 같다.

 그래서 머릿속을 OOP적인 생각으로 바꾸는 데에 가장 좋은 방법이 바로 스프링 공부라고 생각했다. DI, IoC, AOP등의 개념은 정말 머릿속을 OOP적으로 바꾸는 데에 안성맞춤이었다고 생각한다. 그런 의미에서 토비의 스프링3 책은 정말 좋은 책 같은데, 사실 나는 “예제로 쉽게 배우는 스프링 3.0” 책으로 먼저 좀 수박 겉핥기 식으로 접근해 봤는데 정말로 그정도 수준밖에 접근하지 못한 것 같다. DI가 정말 단순히 스프링에서 자동으로 빈을 통해 클래스에 다른 클래스를 넣어준다(?) 뭐 이런 수준으로밖에 이해를 하지 못했는데 토비의 스프링은 UserDAO 클래스를 만들어가면서 DI가 필요한 것에 대해, 그리고 관심사의 분리를 통해 클래스를 느슨한 관계로 떼어내는 것 등. 그런 것들은 OOP적인 사고에서 정말 필요할 뿐만 아니라 변화하는 세계에서 실제로 확장에 유연한 프로그램을 제작하는 데에 큰 도움이 될 것이라 생각했다.

 뭐 개발일지인데 말이 길어져버렸다. 수,금,일 이렇게 3일간 공부한 것을 몰아넣었다고 생각하고..(뭐 어차피 나밖에 안보긴 하겠지만;) 좌우간 내일까지는 @MVC를 끝내서 본격적으로 porting작업에 들어가야 겠다.

 그리고 한가지만 더. 전부터 고민중이었는데, 내가 긍국적으로 웹에서 표현하고 싶은 서비스가 바로 SNS이다. 결국 대규모 사용자 응답 처리인데, 왜 대부분의 SNS서비스들이 자바, 그것도 스프링 같은 프레임워크로 짜여지지 않았을까? 물론 이 기준은 페이스북과 트위터 기준이긴 하지만.. 물론 구축 비용도 비싸겠지만 톰켓이란 좋은 무료 WAS가 있고 Spring 또한 오픈소스 아닌가. 

 그런 부분이 정말 의문이다. 아마도 정말 세계적인 서비스라면 자체적인 프레임워크 개발팀이 있어서 그렇겠지? 라는 생각을 해보지만 글쎄, 세계적으로 스프링이 엔터프라이즈 웹 부분에서 많이 사용되는 추세에, 만약 내가 회사를 시작하더라도 Spring으로 웹 서비스를 만든다면, 그것이 굳이 기업을 위한 서비스가 아니더라도 대규모 대용량 처리에 맞게 설계된 스프링이라면 분명 SNS는 안성맞춤이 아닐까. 뭐 물론 대규모 SNS서비스들은 그들만에 또 다른 처리 방법에 있어서의 고민이 있었겠지만 말이다. 

 어쨌든 나는 6년간 잡고 있는 자바의 틀을 쉽게 놓지는 않을 것 같다. 최근 약간 관심이 생긴 스칼라는 또 모르겠다만.. VM위에서 개발하는 나의 모습은 아마도 최소 10년은 가지 않을까 라는 생각과 함께, 내일도 열심히 해서 porting에 착수하길 바란다.