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

Contenu connexe

Tendances

동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 라한사 아
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문라한사 아
 
스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료라한사 아
 
아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리라한사 아
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test라한사 아
 
스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글라한사 아
 
Go revel 컨셉_정리
Go revel 컨셉_정리Go revel 컨셉_정리
Go revel 컨셉_정리라한사 아
 
스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 라한사 아
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기라한사 아
 
Spring project 예제 분석
Spring project 예제 분석Spring project 예제 분석
Spring project 예제 분석홍섭 안
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐라한사 아
 
Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신라한사 아
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치Juneyoung Oh
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYHyun-woo Park
 
쉽게 쓰여진 Django
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 DjangoTaehoon Kim
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나JeongHwan Kim
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 

Tendances (20)

동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문
 
스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료
 
아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test
 
Gulp 입문
Gulp 입문 Gulp 입문
Gulp 입문
 
스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글스프링시큐리티와 소셜연습 이해를 위한 글
스프링시큐리티와 소셜연습 이해를 위한 글
 
Go revel 컨셉_정리
Go revel 컨셉_정리Go revel 컨셉_정리
Go revel 컨셉_정리
 
스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기 스프링 프레임워크로 블로그 개발하기
스프링 프레임워크로 블로그 개발하기
 
자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기
 
Spring project 예제 분석
Spring project 예제 분석Spring project 예제 분석
Spring project 예제 분석
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
 
Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신Aws ses 이메일 보내기 받기 송신 수신
Aws ses 이메일 보내기 받기 송신 수신
 
플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDY
 
쉽게 쓰여진 Django
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 Django
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
전처리기
전처리기전처리기
전처리기
 

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

[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command patterndragor0123
 
평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미mniktw
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"Ji Heon Kim
 
[NEXT] Android Profiler
[NEXT] Android Profiler[NEXT] Android Profiler
[NEXT] Android ProfilerYoungSu Son
 

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

[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
Slipp 발표 - GO
Slipp 발표 - GOSlipp 발표 - GO
Slipp 발표 - GO
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command pattern
 
평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미평범한 개발자의 실수 꾸러미
평범한 개발자의 실수 꾸러미
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"
 
[NEXT] Android Profiler
[NEXT] Android Profiler[NEXT] Android Profiler
[NEXT] Android Profiler
 
Vim 강의
Vim 강의Vim 강의
Vim 강의
 

Dernier

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 

Dernier (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 

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

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