백기선의 토스3, 1부 코딩 동영상 공개

2009년에 처음으로 스프링 교육을 준비하던 시절 만들었던 코딩 동영상입니다. 교육은 하루 6~8시간씩 총 4일 과정이었고 코딩을 통해서 몸으로 직접 익히는 교육을 구상했었습니다. 그 뒤로 교육 제의가 들어오는 곳이 간간히 있었고 그때마다 교육 내용은 아주 조금씩 변형되었지만 저때 처음 만들어둔 코딩 동영상은 변하지 않고 매번 아주 유용하게 써먹을 수 있었습니다.

하필이면 교육하는 날 제가 몸이 안좋아서 도무지 코딩을 제대로 할 자신이 없을 때 큰 힘이 되었고, 시간이 촉박한데 갑자기 코딩이 막혔을 때에도 매우 유용했습니다. 무엇보다 손은 놀면서 입으로만 코딩할 수 있는 것도 편했고 그럴 때마다 매번 속으로 또는 겉으로 ‘이 동영상을 만들어 두길 진짜 잘했다’고 몇 번이나 되뇌였습니다.

순수하게 코딩만 찍은거라서 아무런 음성이 없습니다. 여기에 육성으로 설명 추가하면서 녹화를 하다가는 말실수 하거나 중간에 다른 소리가 섞여서 녹화를 다시하는 상황이 발생할 수 있기 때문에 일부러 처음 녹화할 때 소리는 빼고 녹화를 했죠.

여기에 동영상 중간 중간 멈춰 가면서 육성으로 설명을 추가로 입히고 소스 코드랑 교재도 다시 정리해서 올리려면 적지 않은 노력이 들기 때문에 그렇게까진 못하겠고, 수고스럽지만 그런걸 다 해서 DVD에 담아서 오프라인으로 팔까도 생각해봤지만 누가 얼마나 사겠냐 싶기도 하고…

이래저래 백기선의 토스3 교육은 이걸로 끝.

[스프링 3] mvc:default-servlet-handler

http://toby.epril.com/?p=1107 여기서 봤던 내용을 이제서야 해본다.

web.xml을 보자.

[xml]
<servlet>
<servlet-name>mygroups</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mygroups</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
[/xml]

자 여기에 바로 문제가 있다. /app/*를 /이렇게 바꾸는거다. 그럼 문제가 예상된다. 바로 index.jsp나 .html, .css, .js등 스프링 DispatcherServlet이 처리하지 않았으면 하는 요청들도 다 스프링한테 가게 된다.

스프링한테 가는 것까지는 문제가 되지 않는다. 다만 스프링이 해당 요청을 처리해주지 못한다는게 문제다. 그래서 스프링한테 가지 안도록.. 스프링이 처리할 수 있는 요청만 스프리안테 가도록 /app/*로 구분한거였다.

그런데 그냥 스프링한테 넘기면 스프링이 알아서 디폴트 서블릿 한테 요청을 위임해주는 엄청난 설정이 등장했다. 그건 바로 제목에 있는 mvc:default-servlet-handler

이 설정 하나면 모든게 해결 될 것 같다.

[xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc">

<context:component-scan base-package="whiteship"/>

<mvc:default-servlet-handler/>

</beans>
[/xml]

mygroups-servlet.xml에 mvc네임스페이스를 추가하고 를 추가했다.

오.. 잘 되는 것 같은데… 이게 왠일 스프링 @MVC가 동작하지 않는다. 애노테이션으로 만들어둔 컨트롤러가 동작하지 않는다.

무슨 문제일까? 다음주 KSUG 세미나떄 소개하겠다.

ps: 내 강의를 들어셨던 분들이라면 어떤 일인지 짐작이 가야할텐데.. 맞출 수 있을런지 모르겠다. 부디 맞춰 주세요.


[스프링 트러블슈팅] @Transactional이 이상해…

11월 초나 중순 쯤 KSUG에서 세미나를 한다길래 발표자로 지원했습니다. 예상 날짜는 11월 13인데 어찌될지는 아직 모릅니다. 제가 구상한 주제는 바로 “스프링 트러블슈팅”. 개구리 올챙이적 모른다고.. 저도 처음 스프링, 하이버네이트로 프로젝트를 시작했을 때 사소한 버그도 못잡아 토비님께 여쭤보곤 했었는데 요즘은 강의 다니면서 스프링 관련 문제들 찾아주고 해결해주는 재미가 쏠쏠 합니다. 잡아주기도 하고 잡는 방법을 알려드리기도 하는데… 그런 내용을 전달해 드릴계획입니다.

이번엔 그 중에 하나로 오늘 오전에 해결했던 문제 중 하나를 소개해 드릴까 합니다. 소개만…

[java]
public interface MemberService {

}
[/java]

[java]
@Service
@Transactional
public class MemberServiceImpl implements MemberService {

}
[/java]

[java]
@Controller
public class MemberController {
@Autowired MemberServiceImpl service;
}
[/java]

이렇게 설정한 상태에서 ApplicationContext를 만들다가 에러가 납니다. MemberController에 주입할 MemberServiceImpl 빈을 못 찾아서 MemberController의 @Autowired MemberServiceImpl 부분에서 에러가 납니다.

이 상황은 딱.. 예전에 토비님 블로그에 올라왔던 상황입니다. 토비님은 그 글에 대한 해답편도 올려두셨는데.. 해답은 토스3의 14장을 보라는 내용이었습니다. 지금 이 상황이 바로 그 퀴즈에 대한 정답이기도 하죠.ㅋㅋ

지금 이 상황에서 @Transactional을 지우면 에러 없이 ApplicationContext가 만들어 지지만 원하는 대로 동작하진 않겠죠. 트랜잭션이 필요했는데 그걸 못쓰는 것이니까요. 그럼 무엇이 문제이고 그 해결책은 무엇일까요. 객체지향적으로 생각하면 해결책은 쉽게 알 수 있는데 문제 원인을 남에게 설명할 수 있을 정도로 파악하기는 쉽지 않을 수 있습니다. 스프링 AOP에 대한 기본 지식을 잘 갖추고 있으시거나 토스3에서 AOP부분을 잘 읽으신 분들이라면 쉽게 알 수 있는 내용이긴 하죠.

저는 이 것과 더불어 스프링을 사용하시면서 자주 만나게 될 트러블들을 소개 및 재현해 드리고 그 원인과 해결책을 소개하는 시간으로 KSUG에서 뵙겠습니다. 아참.. 그리고 그날 제 발표 시간에 깜짝 이벤트도 준비 중이오니 많은 참석 바랍니다.

삼성SDS 스프링 3.0 교육 회고

그동안 스터디에 가야지만 멋진 사람들을 볼 수 있다고 생각했었는데 제대로 한방 먹었습니다. 스터디 못지 않게 사내 스터디와 대형 프로젝트 현장에서 갈고 닦아진 실력과 경험은… 빛이 났습니다.

우선 삼성SDS에 이렇게 멋진 분들이 있었다는 사실에 굉장히 놀랬고, 이 분들의 실력과 경험에 또 놀랬고, 무시무시한 학습 속도에 놀라고 왔습니다. 놀랐다기보다 쫄았다는 표현이 더 어울릴지도 모르겠습니다. 그래도 전 최선을 다해 강의하고 왔지요… 정말 자주 뵙고 싶은 분들인데.. 그러기 쉽지 않겠죠..ㅠ_ㅠ

SDS.JPG

저는 왼쪽에서 다섯번째 녹색 가로줄무늬(? 전. 미투랑 관계없어요.ㅋ) 오른쪽에서 세번째가 효근님이시죠. 후훗 다른 분들은 성함을 모르지만 얼굴은 오래 기억할 수 있을 것 같아요. (전 분명 공개해도 좋다는 허락을 받았습니다ㅋㅋ 제가 물어봤었죠.)

강의 내내 받았던 회고록을 공개합니다.

당분간은 강의 일정이 없어서 쉬는 기간입니다. (10월부터 다시 일정이 잡혀있습니다.) 좋은 책을 써주신 토비님 정말 감사합니다. 제가 강의를 나갈때 긴장하지 않는다고 말했지만 사실은 내심 사부님 책에 폐를 끼치진 않을까 많이 걱정하고 긴장하고 있답니다. 앞으로도 저자직강을 못들으시는 분들께 또 사부님께 누가되지 않도록 최선을 다하겠습니다!!

===================================

9월 6일(월요일) ~ 9월 9일(수요일) 3일간 CoE Specialist를 대상으로 스프링 3 교육이 있었습니다.

강사님은 백기선 선생님으로, “토비의 스프링 3”을 집필한 토비님 수제자라고 합니다.

강의는 이론 교육과 실습을 병행하여 진행되었습니다.

몇몇 강의는 익숙한 내용이라 지겹기도 했고,

몇몇 실습은 1000타/sec 선생님의 타이핑으로 인해 따라가지 못하기도 했습니다.

하지만 백선생님의 열혈 강의는 매우 훌륭했으며

스프링의 동작원리와 철학 그리고 API 사용에 대해 많이 배울 수 있었습니다.

특히 AOP 강의가 가장 멋졌습니다.

그리고 젊은 나이에도 높은 기술지식을 겸비한 백선생님을 보면서

매너리즘에 빠져있던 저희들에게 좋은 경험이 되기도 했습니다.

마지막으로 이렇게 훌륭한 교육을 받을 수 있게 해주신

강호수 그룹장님과 장세영 책임님 그리고 황상철 책임님 등 CoE 리더님들께 감사 드립니다.

아래는 회고 내용입니다.

<좋았던 점>

– 하루가 빨리 가는 듯 *

– 아이스크림 가위 바위 보 *

– 마지막 실습이 박진감 있었다 **

– 친절한 강사님의 설명 **

– AOP 강의가 훌륭했음 ******

– @MVC *

– 3일간 스프링과 구조에 대해 알 수 있는 알찬 교육이었음 ********

– 수고 많으셨습니다 *

– 다양한 실습 **

– Spring MVC에 대한 자세한 설명이 좋았음 *

– EL *

– 이론과 실습이 병행되어 좋았음 **

– OOP *

– 점진적 개발 실습(리팩토링) **

– DI 개념파악에 도움이 됨 *

– 예시를 통한 접근으로 Spring IoC, DI 근본원리를 이해할 수 있었음 **

– 동영상 코딩 과정 *

<부족한 점>

– 이론교육과 실습교육 시간 배분이 잘 되었으면 *****

– 쉬는 시간을 짧게 자주 가져서 강의 시간이 잘 지켜졌으면 ***

– 강의 중간 주간 회고가 부족 *

– 백선생님 실습속도가 많이 빨라요 *******

– 가위바위보 졌다 – 원종인 – *

– 너무 많은 API를 소개 **

– 교육기간이 너무 짧아서 아쉽다 **

– 현장상황에 맞는 질의 응답시간을 가졌으면 *

– Spring 3.0에 대한 확실한 비교 및 설명이 있었으면 **

– 피곤하다 *

– 클래스 이름이 너무 어렵다 8

– 강의내용이 많은데, 강의는 오전에 했으면..오후는 졸리니 실습 위주로 **

– 진행 중인 강의가 교재의 어느 부분인지 알려주시면 catch up 하기 좋을 듯 *

– 마지막 실습 따라가기 힘들었다 *

– 진행을 좀 더 빠르게 해주세요 – 김판기 – *

– 강의실 좌석배치가 안습 *

– 강의 동영상에는 단축키가 나타나지 않아, 순식간에 바뀌는 코드를 따라가기 힘들다 *

[토비의 스프링 3] 2차 완독 후기

결국 추천사를 쓸 수 있게 됐습니다. 캬캬캬.
배려해주신 출판사 부사장님과 토비님께 감사드립니다. 잘 쓸께요. 아.. 부담 100배!!!!
—————-지난 이야기—————–

사실 완독이라고 할 수는 없다. 이번엔 강의 준비를 하면서 다시 봤는데 강의할 부분만 읽었기 때문에 모든 글을 다시 읽진 않았다. 읽으면서 중간 중간 코드와 API 설명이 나온 부분을 유심히 보면서 혹시 소스 코드에 잘못된 것은 없는지 검증하는 작업을 했다. 내가 빅뱅의 쉘든 같은 사람이었다면 완벽하게 리뷰를 할 수 있었을텐데 난 레너드 수준에서 리뷰를 마감했다. 1차 때 보다 훨씬 적운 수의 리뷰를 드렸지만 품질 만큼은 1차때 보다 더 나은 리뷰를 해드린것 같아 다행으로 생각하고 있다. 그래도 분명히 놓친 부분이 있을텐데… 그건 개정판을 내실 때 수정할 수 있도록 출판사에 제보해주면 좋겠다. 아마 별도의 페이지가 있을지 싶다.

한 가지 아쉬움이 남는다. 난 추천사를 못 썼다. 근래 가장 많은 시간과 애정을 쏟아가며 리뷰한 책이고 그 누구보다도 여러 개발자에 이 책을 추천해주고 싶었는데 그럴 수 없었다. 여태까지 본 책 중에 이렇게까지 자발적으로 추천사를 쓰고 싶은 책은 없었는데 조금 안타깝다. 
내가 이 책을 리뷰 한 것은 이 책에 내가 적은 글을 남기고 싶어서도 아니고 돈을 받고 싶어서도 아니고 강의를 하고 싶어서도 아니었다. 돈은 애초에 생각도 안했고, 강의는 이미 리뷰를 시작한 다음에 계획 됐다. 추천사는 이 책을 읽다보니 너무도 쓰고 싶어졌지만 이젠 상관없다. 난 그냥 이 책 내용이 정말 좋았고 많은 도움을 받았다. 나도 어떻게든 이 책이 조금 더 반짝거리게 해주고 싶었다. 또 기나긴 여정에서 고군분투 하시는 토비님에게 조금이나마 힘이 되고 싶었다. 그것으로 됐다.