Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기

1,633 views

Published on

스프링의 Generic Autowired 로 구현해보는 Generic Controller

Published in: Engineering

스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기

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

×