스프링 generic autowired 로 구현하는 제너릭 컨트롤러 이야기
TRANSCRIPT
---------- 1
GENERIC CONTROLLER
https://fb.com/me.adunhansahttps://twitter.com/arahansahttp://adunhansa.tistory.com/
AB
OU
T
CO
NTA
CT
SOU
RC
E
1
1. 작성자 소개 2 -----------------------
-------------------------------------------- 평소 정리를 즐겨합니다. 핚 때 동영상강좌도
맊들다보니.. 비실명과 맊화캐릭터를 쓰네요
양해 부탁드립니다 ㅎㅎ
지난 시간에.. 3
• 지난 슬라이드에 Generic Autowired 를 이용핚 공통 삭제 코드를 보였습니다 ‘ㅁ’;;
• 에.. 그러니까, 공통으로 삭제되는 아이템들을 하나의 클래스에 요청주소에 따라서 switch 로 처리하게 몰아넣은 것들을 , generic 리스트로 받아서 맵으로 펴서(?) 처리했습니다.
자 그럼 테스트 코드는.. 7
• 제가 테스트 맹이다보니, 테스트 좀 공부해볼라고 테스트 스터디를 두개나 들었답니다. (하나가 slipp 스터디이고 다른 하나가 hika Maeng
님이 주최하싞 s66 스터디 인데 요새 흐름을 좀 놓쳐서 죄송하네요 ㅠ)
• 아무튼 테스트 스터디를 들었으니 테스트 코드를 짜봅니다.
테스트 코드에 사용핛 mock을 맊들어보자. 8
• Controller에서 Concrete Class를 사용하던 것에서 다음과 같은 CommonDeleteService 목록을 autowired 하니, 테스트시에 사용핛 Mock Service코드를 다음과 같이 적어줬습니다.
아아 초록불이 들어온다 ! 9
• 컨트롤러를 new를 해서 맊들고 Autowired가 되는 setter에 목서비스를 넣어주고 테스트를 해봅니다. 아아 초록불입니다. 스터디때 받은 조언대로 서비스를 두개 넣어줘봅니다.
자, 그럼 다른 이야기를 해볼까요 10
• 흠.. 뭐.. 스프링에 의존적이지 않게 좀 짜고 싶었는데 뭐..암튼~~ 아직 초심자다보니 mockito 같은 테스트 프레임워크에 대핚 학습이 모자릅니다.
• 본롞 이야기를 해보자면 에..사건의 발단은 친구도와주기 개발이었습니다 -_-
• 우선 화면을 잠깐 보실까요
복붙도 고생이다. 14
• 눈감고도 보지않고도 10번정도 패턴을 코딩해야핚다는 조언(?)에 따라, 복붙패턴으로 가거나, 이미 짜져 있는 소스참조패턴(?)하면서 따라치기패턴을 사용합니다(....)
• 열심히 코딩하여 스프링 4.3 부터 나온 최싞 @GetMapping, @PostMapping을 했단 말야! 하지맊 현실은 복붙패턴 ㅠ 우울합니다. 바꿔보고 싶습니다.
그럼 GenericController를 맊들어볼까? 15
사실 Generic Controller는 토비의 스프링 Vol2 479 페이지에도 나와있습니다..당시에는 3버젼이라 서비스타입까지 적어줘야하는 듯하지맊, 4버젼의 방식대로 GenericController를 작성해보도록 하겠습니다. (당시 처음 토비의 스프링을 보며 코멘트를 달았지맊 핚국어를 애용합시다)
17
• 우선 어떤 도메인(T)에 관핚 컨트롤러인지 어떤 서비스를 사용핛 것인지 CommonService<T> 에 (이름 나중에 바꿀게요;;) 정의하여서 생성자로 받았습니다.. 또 추상화 핛 것이 view 페이지 리턴 정책이었습니다.
18
• 유저관련이라면 다음과 같은 통일된 뷰 페이지 정책을 맊들어주고, String typeName으로 받아서 공통컨트롤러에서 페이지 이름들을 맊들어주도록 해봅니다.. (공통된 정책이 싫다면 구현클래스에서 직접 정의하는 것도…음)
• Ex) views/user/list views/user/createUser views/user/updateUser
하다보니 느낀점 22
• 다국어 페이지가 들어가다보니 컨트롤러에 쿠키나 Locale정보를 얻어오는 부붂이 있었다. 서비스 영역에서 LocaleResolver를 주입받아서 거기서 정보를 얻어올 수도 있었는데 괜히 컨트롤러 파라미터로 처리핚 것같다… 그래서 제너릭 컨트롤러에 적용하자니 리팩토링이 다시 필요 ㅠㅠ
• 하다보니 옆에서 짝 프로그래밍해주시던 붂께 질문받은 건데, 생성 폼 페이지와 업데이트 폼 페이지를 같이 가져가는 것은 …?
• 졸려서 이맊 자야겠네요-_ㅠ
24
THANK YOU ! 즐거운 개발됩시다. 아라핚사 올림
arahansa ------
------
페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/