순순히 다음 문제들을 해결하시면 유혈사태는 일어나지 않을 것입니다.

음헤헤헷. 스프링 트러블슈팅을 주제로 지난 KSUG 때 발표했던 모습입니다. 사진은 컴퍼런스 후기 작성의 달인 정훈형이 찍어줬는데 잘 나왔네요. 감사감사~

정훈형 후기모음

[스프링 트러블슈팅] @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에서 뵙겠습니다. 아참.. 그리고 그날 제 발표 시간에 깜짝 이벤트도 준비 중이오니 많은 참석 바랍니다.

[KSUG] 스프링 AOP 선택, 활용, 이슈 – 스크린캐스팅

4918ca0e0a45cDR.zip


위 링크에서 동영상 링크를 사용하여 mov 파일을 다운 받으시거나, 퀵 타임 플레이어가 설치되어 있다면, 웹에서 바로 보실 수도 있습니다.

발표를 하고 2주 정도 지난 다음 녹화를 한 건데, 스크린캐스팅을 좀 짧게 찍고 싶어서 총 다섯 개로 나눠서 한 편당 10~15 내외로 찍었습니다. KSUG 블로그를 통해서 한 주에 한 편식 올리겠습니다. 쉬는 시간 짬짬히 구경해 주세요. 🙂

이번에 올린 동영상은 AOP에 대한 내용인데, AOP 자체에 대해서는 깊게 알지 못하기 때문에, 제가 아는 한도 내에서만 살짝 살펴봤습니다. 따라서 내용이 다소 수박겉할기식으로 느껴질 수도 있는데요. 첫 번째 동영상의 목적은 AOP에 대해 자세히 설명 드리는 것이 아니라 AOP라는 개념을 프로젝트에 도입하면 어떤 도움을 받을 수 있는지 좀 더 현실적인(코드를 통해서) 감을 잡게 해드리는 것이 목적이기 때문에 그다지 AOP 개념이나 역사에 대해 자세히 다루진 않았습니다. 가볍게 보실 수 있겠죠.ㅋ

어느새 점심 시간이네요. 식사 맛나게 하세요.


updated 2008/11/11

이번에는 스프링 AOP에 대한 주제로, 코딩으로 Proxy 만드는 방법, 스프링 API 사용 방법, XML 스키마 사용 방법, @AspectJ 사용 방법, AspectJ 연동 방법까지 살펴봅니다.


next 2008/11/18

스프링 AOP 선택, 활용, 이슈 – 발표자료 & 소스코드

원래 계획대로면 스크린캐스팅도 제공해야 하는데, 제가 이번 주에는 여유가 없을 것 같아서 일단 발표자료만 올립니다. KSUG에서 별다른 연락이 없기 때문에 일단 제 블로그에 올리죠. 나중에 KSUG에서 일괄적으로 정리해서 발표 자료 묶음을 올리면 좋겠네요.

nk0.pdf
방명록에 보니 소스코드 요청도 있어서, 같이 올려둡니다. 메이븐 프로젝트인데, 몇몇 라이브러리는 메이븐 중앙 저장소에서 받지 못할 수도 있습니다. 그럴 때는, OSAF 메이븐 저장소를 원격 저장소로 등록해서 사용하시면 됩니다. OSAF 메이븐 저장소 주소는 다음과 같습니다.

http://www.opensprout.org:8082/nexus/content/groups/public/

48f432da54eb7B8.zip