23
---------- 1 스프링 GENERIC AUTOWIRED를 이용해보자! https://fb.com/me.adunhansa https://twitter.com/arahansa http://adunhansa.tistory.com/ ABOUT CONTACT SOURCE 1

스프링 Generic autowired이용해보기

  • Upload
    -

  • View
    1.231

  • Download
    1

Embed Size (px)

Citation preview

Page 1: 스프링 Generic autowired이용해보기

---------- 1

스프링 GENERIC AUTOWIRED를 이용해보자!

https://fb.com/me.adunhansahttps://twitter.com/arahansahttp://adunhansa.tistory.com/

AB

OU

T

CO

NTA

CT

SOU

RC

E

1

Page 2: 스프링 Generic autowired이용해보기

1. 작성자 소개 2 -----------------------

-------------------------------------------- 평소 정리를 즐겨합니다. 한 때 동영상강좌도

맊들다보니.. 비실명과 맊화캐릭터를 쓰네요

양해 부탁드립니다 ㅎㅎ (이미 얼굴 아실붂은 다

아는데 ㅠ)

Page 3: 스프링 Generic autowired이용해보기

사건의 발단.. 친구녀석 홈피 개발.. 3

• 어쩌다보니 친구 녀석 홈피개발을 조금 도와주게 되었다.

• 자고로 아는 사람꺼는 절대 도와주지 말랬는데.. 바보였다.

• 아무튼..-_- 주말에 조금씩 기능추가를 하다가, 어떤 공통 삭제 기능을 구현했는데... 이럮 형태(뒷장)가 되어버렸다. ( 아.. 아직 맋은 부붂이 리팩토링 전이니 못난 부붂은 그러려니 해줍시다. ㅠㅜ)

Page 4: 스프링 Generic autowired이용해보기

사건의 발단.. 공통 삭제 컨트롤러? 4

• 해당 기능은 뭐 이렇다. @Pathvariable 로 받은 type 에 맞게 서비스를 바꿔서 삭제시킨다.

• 삭제 권한은 어드민에게맊 있다보니, 스프링 시큐리티로 URL 관리로 빠졌다.

Page 5: 스프링 Generic autowired이용해보기

문제점의 고찰 5

• 뭐.. 다시 한번 적자면(-_-ㅋ) 주말마다 코딩하다보니 리팩토링하기보다는 기능구현에 급급했지맊..

• 돌이켜 생각해보니 다음과 같은 단점이 생각났다.

• 1) 공통 삭제 영역이 하나 늘어날 때마다 서비스를 매번 적어주고 switch 문에다가 또 적어야 한다.

• 2) 정말 귀찮다.

Page 6: 스프링 Generic autowired이용해보기

그럼 이것은 어떤가? Generic Autowired 6

• 개발 꼬꼬마 시절이던, 2015년 9월즈음에 을지로역 근처의 페럼타워에서 이일민님의 세미나를 들은 적이 있는데 당시 스프링 4의 변화로 Generic autowired 를 들은 적이 있다.

• 당시에는 이걸 어디에 쓸지도 몰르고 그냥 와 그렇구나 라고 생각했는데.. 해당 코드를 보니 이걸 여기다가 써보면 되겠다는 생각이 들었다. (여따 써도 되는지 몰러...=ㅅ=)

Page 8: 스프링 Generic autowired이용해보기

음..그러면 공통으로 쓸 인터페이스를 정의해보자. 8

• 공통삭제서비스라고 이름을 일단 지어보고 메서드 없이 구현을 해보았다. 음 잘 된다!!

Page 9: 스프링 Generic autowired이용해보기

인터페이스에 메서드 추가 9

• 음 그럼.. 원래 있던 Switch 부붂을 어떤 맵의 키로 바꾸고, 밸류를 해당 서비스로 줘서 처리하면 되겠굮? => interface 에 메서드를 추가하고 키를 받아올 스트링 메서드를 하나 추가하면 될려나?

Page 10: 스프링 Generic autowired이용해보기

공통 맵의 구현 10

• 자 그럼 공통삭제 컨트롤러에 요렇게 넣어볼까? (생략된 부붂 : 각 서비스마다 요청주소 경로명을 적어준 부붂 )

그러면 컨트롤러는 맵을 잘 가지겠굮..그럼 그 아까 테스트는?

Page 11: 스프링 Generic autowired이용해보기

하지맊 테스트 실패ㅠ autowired 가 안된다?! 11

• 실패 ㅠㅜ.. 왜지?! 메서드를 추가한 것이 문제인가?

Page 12: 스프링 Generic autowired이용해보기

12

• 하다보니.. 공통Delete서비스를 구현한 클래스들이 autowired 가 안되었었는데, 우선 여기서 생각해봤던 점은

• @Autowired, @Inject, @Qualifier, @Resource 등의 차이였다. 음.. @Qualifier를 줘봐도 autowired 가 잘 안되서 @Resource 로 강력하게 땡겨와(?)봤다!

Page 14: 스프링 Generic autowired이용해보기

아.. 아무튼 Resource로 해보니!? 14

• Resource 로 해보니 다음과 같은 에러를 발견하였다. 아..? Concrete Class Autowired 가 실제 타입이 안 맞는다고 안 땡겨와지는 구나.. ! 해당 문제에 대해서는 다음의 링크를 참조하자. http://stackoverflow.com/questions/27540355/could-not-autowire-field-cant-to-com-sun-proxy-proxy22

Page 16: 스프링 Generic autowired이용해보기

16

• 즉 현재의 상태는 클래스를 그대로 @Autowired 로 땡겨왔는데, 그게 지금 jdk proxy 로 인해 타입이 안 맞는다고 하니, jdk proxy 를 사용할 수 있는 인터페이스 처리를 하자... (인터넷이 안되는 버스에서 코딩을 해서 라이브러리를 새로 깔 여력이 없었다!... 아니 근데.. 처음부터 안 깔렸었다..?! -_-좌절! )

Page 17: 스프링 Generic autowired이용해보기

관렦 링크 17

• 아무튼 JDK 프록시 cglib 관렦된 내용은 여기에 : http://wiki.javajigi.net/pages/viewpage.action?pageId=1065

• 이 글도 좋습니다 . http://www.slideshare.net/whiteship/ss-5766801

Page 18: 스프링 Generic autowired이용해보기

After 음..? 아무튼..? 코드가..? 18

• Switch 로 막 늘어나던 코드가 이렇게 변하게 되었고 기존 코드도 잘 동작한다..

Page 19: 스프링 Generic autowired이용해보기

Before 19

Page 20: 스프링 Generic autowired이용해보기

..고민..? ㅋ 20

Page 21: 스프링 Generic autowired이용해보기

자평 21

• 움.. Switch 가 무럭무럭 자라나던 코드가 그래도 더 이상 바뀔 일이 없이 된 것같아서 기붂이 좋긴하면서도, commonDelete되는 애들이 어떤 애들이 있는지 잘 몰라서 뭔가 좀 답답하다-_-;

• 다시 또 바꿔봐야할까..-_- => 이늄 ? 아니면 제너릭 컨트롤러?서비스? 뭐시낑이로...?

Page 22: 스프링 Generic autowired이용해보기

음.. 22

• 아무튼..좋은 의견있으시면 주시면 감사합니다 늅늅..

• 코드 이야기를 나눌 곳이 별로 없는데, 할일은 맋고 공부할 것또한 맋네요...

• 2016년 7월 15일 어느 야밤.

Page 23: 스프링 Generic autowired이용해보기

23

THANK YOU ! 즐거운 개발됩시다. 아라한사 올림

arahansa ------

------

페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/