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.

구글앱엔진+스프링+스프링datajpa+메이븐

12,220 views

Published on

주말동안에 했던 삽질의 기록..

Published in: Technology
  • Be the first to comment

구글앱엔진+스프링+스프링datajpa+메이븐

  1. 1. ---------- 1 구글앱엔진에 스프링 배포하기 https://fb.com/me.adunhansa https://twitter.com/arahansa http://adunhansa.tistory.com/ ABOUT CONTACT SOURCE 1
  2. 2. 1. 작성자 소개 2 아라한사 ------------------------------------------------------------------- 국내에도 브로그래머문화가 확산되기를 바라며 이것저것.. 관심만 많음-.- 슬라이드로 정리를 즐겨하나, 하나의 템플릿으로 돌려쓰기하고있다..;;
  3. 3. ------------------------------------------------ ----------------------------------------- ------------------------------------------------- ------ ---------------------------- --------------------------- 3 업로드 후, 재 업로드 내용입니다. 참고로 필자는 공짜로 앱엔진을 쓰려다보니 datastore를 써야했고, datastore 에서 스프링소셜+시큐리티를 적용하는데 애를 먹어서 그냥 맘편하게 아마존으로 운영중입니다. 앱엔진에서 cloud sql 이라는 기능을 제공하니, 맘편하게 CLOUD SQL 을 쓰셔도 괜찮을 것같습니다.
  4. 4. 1. 왜 이걸 만들게 되었나?! 4 심심풀이로 구글에서 발표한 Go 언어를 살펴보고 얘기를 나누다 어쩌다 보니 Golang Korea 라는 페이스북그룹을 만들게 되었다.(간접광고 좀;;ㅋ) 구글은 듣기로 자신들의 언어, 기술을 배우는 그룹들에 대한 지원이 남다르다고 하여( ex. GDG) .. 혹시나 Golang 에 관련된 커뮤니티를 만들면 구글쪽에서 떡고물이라도 나올까 하는 마음에 조금 알고 있는 아마존보다는 구글앱엔진에 배포할 생각을 하게 되었다! 이 PPT는 그것을 정리한 것이다. (혹시 보고계신 구글관계자님 계시면 호스팅 파워좀..;;굽신굽신..)
  5. 5. 가이드와 문서 흐름 5 문서를 완료하기 앞서 개발자의 시간은 소중하기 때문에 주요 사항을 먼저 적자면 이 문서에서 겪은 가장 큰 이슈는 버젼관리 문제가 아닌가 싶다. 아..사실 굳이 jpa를 써야 하는 것은 아니다. 앱엔진에서는 jpa쪽보다는 low한 datastore 기술을 조금 강조하는 느낌이랄까. (단기간에 문서를 여기저기서 읽어서 어디서 읽은 건지 모르겠다.) 아무튼 굳이 spring-data-jpa 를 쓰다보니 앱엔진 플러그인(datanucleus-appengine) 이 버전이 낮았고 그로 인해서 data관련 라이브러리들은 버전을 일부러 downgrade 했다. 최신 버젼을 주로 쓰다보니, 이유를 알수 없는 버그를 만나, 일일이 라이브러리들을 버전을 맞춰가면서 테스트해야했다. 성능상의 문제도 염려되어서 spring-data-jpa 를 안쓸지도 모르지만, 아무튼 그대로 진행했고, 그리도 버젼관리 이후로 염두해 두어야 할점은 datanucleus 의 enhancer 가 적용이 되는 부분이 있으므로 이 점을 잘 설정해 줘야 한다. 나머지는 그냥 뭐.. ;; 자잘자잘하게 시간 소비하면서 만들었으니, 그냥 따라하면 잘 진행될 것같다. 문서 진행흐름은 기본 앱엔진 > 메이븐 > 스프링 > DB관련 처리다. 처음에는 옛날 문서들을 보다가, 스프링MVC2.5 까지만 진행한다고해서, 도대체 어디까지 지원하는지 여기저기 찾아봤는데 서블릿2.5 기반기술까지는 잘 작동한다. 고로 스프링 최신버젼을 써도 서블릿 2.5 지원기술을 쓰는 한, 당장은 잘 동작한다. (아마..?)
  6. 6. 가이드와 문서 흐름2 6 개발자의 시간은 중요하니(…) 두번째로 하고서 느낀 것을 간단히 적고 싶다. 이것만 보시고, 깃허브 소스받아서 돌리시면 사실 끝이다. 필자가 글을 주절주절쓰기도하고, 쓰는 목적이 개인적 정리가 목적이지 이쁘게 공유하겠단 생각도 별로 없어서(…) 글이 좀 지저분하고 길다고 생각하므로 적자면 초반에 어떻게 앱엔진 서버로 디플로이하는지만 보고 그 후론 소스도 간단하니 pom.xml 의 라이브러리들과 WEB-INF폴더의 appengine-web.xml 가 어떻게 구성됐는지 persistence.xml 에서 datanucleus 설정만 확인하면 끝난다. 앱엔진을 잠깐 사용해보고 느낀 점은 아마존에서 수작업으로 DB잡아주고 메일 서버 설치하고 했던 일들이 앱엔진에서는 (아직 다 해본 것은 아니지만 ) 이미 제공이 다 되어서 상당히 편할 것같다. 그래서 그냥 나머지를 신경안쓰고, 바로 로컬만 코딩하고 서버로 바로 DEPLOY해도 되는 점이 좋았다. (이때만 해도 신세계여서 우와~했다;;) 하지만 필자가 앱엔진에 익숙하지가 않아서 만났던, 수많은 잔버그들을 겪으면서 차라리 아마존에서 내 설정대로 쓰는게 더 시간이 빠르지않나 하는 생각이 들정도로…힘들었다. 하지만 이 부분은 필자가 익숙치가 않아서 그런거지만 구글앱엔진의 책임도 조금 있을 것이다(!!) 일정 부분 무료라는 점, 그리고 개발에만 좀 더 집중할 수 있다는 점이 매력이다. 하지만 성능상의 문제와 유연성같은 문제를 생각해보며 써야 한다고…어디서 읽었다.
  7. 7. 소스있는 곳 7 블로그에 그때 그때 필요한 명령어와 소스들을 적어두려한다. http://adunhansa.tistory.com/195 깃허브에서도 완성된 소스를 얻을 수 있다 https://github.com/arahansa/gaeSpring 자 그럼 시작해보자!@ 앱엔진~~!
  8. 8. 2. 구글앱엔진 잠시 살펴보기 : Paas 8 • 항상 모든 것을 시작할 때는 그.. 처음 접하는 용어의 난감함, 자신이 원하는 기능이 어떤 기술을 필요로 하는 지 모르는 부재로부터 출발하는 것은 아닌가 싶다. • 필자는 언제나 초보자를 위한 정리를 생각하므로(사실 잘 모르기 때문에…) 아마존과 구글앱엔진의 차이부터 살펴보자면 아마존은 Iaas 고 구글앱엔진은 Paas 다.. • 맨처음에 이게 무슨 시나락 까먹는 소린지 파스paas는 몸에 붙이는 걸로만 알고있던(-_-) 저자에게 저 용어는 와닿지가 않았으나, 자주보고 직접 쓰려다보니 아 그렇구나 하고 감이 오더라.
  9. 9. 2. 구글앱엔진 잠시 살펴보기 : Paas 9 용어가 Iaas, Paas, Saas 가 있었다. 아마존은 Iaas 다. Infrastructure as a Service의 줄임말로, 개발을 해서 배포를 한다고 했을 때, 그에 관련된 인프라(뭐 .. 서버라던가 그런것을 제공해준다 이 말인것같다! 하지만 서버만 제공해주기때문에 각종 설정등은 자신이 직접 해야 한다. ) 그리고 Paas 의 예가 구글앱엔진이다. 이것은 Platform as a Service 의 줄임말로, 단순히 서버만 제공해 주는게 아니라. 그에 관련된 개발도구를 제공해 준다. 자바, 스프링 같은 것들이 미리 다 설정되어있어서 코딩만 하면 된달까?! 플랫폼을 제공한다고 보면 된다! Saas 가 이제 소프트웨어 서비스 형태라고 한다. 네이버오피스같은 인터넷에서 소프트웨어를 제공하는 형태라고 한다. 아무튼 구글앱엔진이 파스란 걸 인제 알았으니 된 것이다; 참고 주소 : http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=1&docId=1364967&qb=aWFzcyBwYWFz&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=S4r %2B3spySoCsssFijPwsssssssV-211112&sid=VIr@1gpyVosAAC-aPHY
  10. 10. 구글앱엔진 잠시 살펴보기 : 가격정책 10 • 자 그러면 구글 앱엔진의 특징이 뭐가 있을까?! 무료가 일단 눈에 띈다…오오오..사스가 구글…;;
  11. 11. 2. 구글앱엔진 잠시 살펴보기 : 기능 11 • 다음의 기능을 제공한다고 나와있다. 더 이상의 자세한 설명은 생략한다.
  12. 12. 2. 구글앱엔진 잠시 살펴보기 12 • 자 그러면, 다음의 사이트로 들어가서 한번 구글앱엔진을 시작해보자!! https://cloud.google.com/appengine/
  13. 13. 주의!! 13 • 여기서 클라우드 SDK 를 설치하라고 하는데.. 필자가 매뉴얼대로 따라해본 결과… 무슨 잘못을 했는지 모르겠지만 빌드 시 에러가 났다-_-. 그리고 당장 필요한 건 appEngineSdk – java 버전이라고 생각된다.. • 공홈의 매뉴얼을 존중하기때문에 일단 삽질 후 지금의 슬라이드를 남겨두지만, 다음 장부터 따라하지 말고 바로 이클립스에서 플러그인 깔고, appEngineSdk 를 설치하는 것을 추천한다. (즉 클라우드SDK 를 당장 깔 필요가 없다!! 앱엔진 프로젝트 아이디만 만들어서 받아서 이클립스에서 할 예정이다.) • 그래서 본 PPT를 그대로 따라 하지말고, 일단 hello world까지는 http://uiandwe.tistory.com/896 이 부분을 따라하시기를 권한다!! 하지만 앱엔진등록은 본 슬라이드에서 참고해야할 것이다..; (이거 원 미로찾기도 아니고..)
  14. 14. 3. 구글앱엔진 시작! (클라우드 SDK 설치필요없다) 14 • 자 1번에서 프로젝트 이름을 정하고 2번. 언어를 java 로 선택! • 3번.시작코드는 헬로월드를 보라고 있는 것같고. • 4번 구글클라우드SDK 설치가 있다.
  15. 15. 3. 구글앱엔진 시작! (클라우드 SDK 설치필요없다) 15 (받을 필요없다)받으란 것 받아서 NEXT를 하다가 INSTALL 전에 자바를 선택! (근데 파이썬도 꼭 깔라고 한다;;) 음 .. 아무튼 설치를 완료하고.. 시키는 대로 클라우드 쉘을 열어서 명령어도 해주자. 1) 2) 3) 4)
  16. 16. 3. 구글앱엔진 시작!(이상하게 잘안된다. 패스) 16 • 자 이제 5번 로컬에서 앱실행이다. (실행안된다 패스.) • 2014년 12월13일 앱엔진은 자바7을 지원한다. 자바7JDK 가 설치되어있는지 확인하란 말이 있다! • 그리고 사이트엔 나온 프로젝트를 다운받아서 한번 메이븐으로 돌려보자! 메이븐 설치는 생략. • 공홈에 나온대로 소스를 쳤는데.. Package 까지 되도 서버가 실행이 되는 것을 볼 수가 없었다. Mvn tomcat:run 을 해봐도.. 서버가 안되었다. • 모르겠다(무책임) 이클립스로 넘어가서 그냥 실행해보자;;
  17. 17. 3. 구글앱엔진 프로젝트 일단 만들기 17 • 자, 일단 어떤 프로젝트를 가져와도 로컬에서 실행된다는 가정하에 프로젝트 만들기를 누르겠다. 이런 환경이 뜨면서 활동이 체크가 될 것이다. 화면 우측 상단의 내 콘솔로 이동하여서 다음과 같은 프로젝트 이름과 아이디를 확인하자 그리고 이클립스로 넘어가자(아이디가 제일 중요!)
  18. 18. 이클립스 구글앱엔진 플러그인 설치 18 • 이상하게 루나에서는 pending 에서 멈추고 케플러가 잘 깔린다..;; 누구 왜 이런지 아시는 분 있으시면 조언좀..;;(제 세컨컴에서는 루나에서도 깔림) • 아무튼 이클립스에서 구글앱엔진 플러그인을 설치한다. Location 주소는 여기에 잘 나와있으며 https://cloud.google.com/appengine/docs/java/tools/eclipse 설치하는 방법은 다들 아시리라 생각된다. Windows – install new software 였지..아마.;; (추후 수정 : 저 밑에 SDKs에서 앱엔진-자바도 깔면된다..흠 근데 메이븐에서도 다시 깔게 된다..;)
  19. 19. 이클립스 구글앱엔진 플러그인 설치 19 • 다시 킨 이클립스에서 window-preferences 로 들어가서 appengine 설정을 한다. 다운로드해서 appengine sdk 자바버젼을 받는다. 그후 add해서 경로 선택
  20. 20. 주의!! 20 • 주의! • 공홈에서 받은 소스를 가지고 아무리 비비적 거려도 -_- 제대로 안된다. 빌드패스, project facet. Run configuration augrument 들을 만져봤는데..안됐다… 공홈소스가 중요한게 아니므로… 그냥 이클립스에서 새로 웹프로젝트를 만들어서 배포해보겠다..(터..털썩ㅠㅠ) 나만 고생한게 아까워서 슬라이드를 남겨둔다. • 슬라이드 7장만 급하게 넘겨달라… 7장 순간이동 버튼!
  21. 21. 이클립스 구글앱엔진 서버 설정 21 • 자 이제 그러면 구글앱엔진 서버 설정 서버뷰에서 서버를 만들어줘야겠지?! 그리고 구글앱엔진으로 만들어준다 !
  22. 22. 이클립스 구글앱엔진 설정 22 • 자 이제 아까 그 다운받은 프로젝트로 콘솔모드로 가서 mvn eclipse:eclipse 를 실행하면 이클립스 프로젝트 파일이 생성된다. 로드하고서 서버로 키려고 하면 당연히 안될것이다. 자 프로젝트를 alt+enter 하여서 정보를 들어가서 빌드패스에서 이제 서버 라이브러리를 넣어주자.
  23. 23. 이클립스 구글앱엔진 설정 23 • 이래도 안된다; 아 그랬다. 메이븐에서 빌드한 것들을 이클립스에서 불러올때는 기본적으로 buildpath와 project factes 를 설정해줘야 한다. 필자는 이것저것 설정을 하다가 좀 삑사리가 나서 설정이 약간 지저분한데 프로젝트 정보에서 저 정도로 잡아주면 될 것이다.
  24. 24. 이클립스 구글앱엔진 설정 24 • 아… 이래도 뭔가 에러가 난다 .ㅡㅡ;; web.xml 에서 웹모듈맞추는거 무슨 에러가 뜬다. ㅡㅡ..내가 뭔가 애초에 잘못한건가…음..아무튼;; 과감히 저 부분들의 !DOCTYPE 으로 시작하는 부분을 지워줘보자! • 그럼 될 것같다.
  25. 25. 이클립스 구글앱엔진 설정 25 • 프로젝트를 클릭하고 이제 RUN 을 눌르면 드디어 SERVER 가 뜬다 오오오 ㅠㅠ
  26. 26. 이클립스 구글앱엔진 설정 26 • 하지만 방심은 금물..에러가 끊임없이 발생한다.ㅠ.ㅠ…
  27. 27. 이클립스 구글앱엔진 설정 27 • 갓글님에게서 발생한 에러는 갓글신님에게 물어보자. 다음과 같은 스택오버플로우 답변을 찾았다.
  28. 28. 이클립스 구글앱엔진 프로젝트 시작 28 자 이제 프로젝트를 만들어보자! 컨트롤n 을 누른후에 google- web applicationProject 로 들어간다. app id 적는부분은 leave app id 로 남겨도 된다. (적어줘도 어차피 다시 적어야되더라;;)
  29. 29. 에러 발생시 프로젝트 정보 설정 29 혹시 에러가 나는 경우가 있다. 자바버젼이 안 맞는다, 할때는 프로젝트를 alt+enter 누르면 프로젝트 환경설정이 나온다 . 빌드패스의 자바버젼을 1.7 버전으로 맞춰준다. 그리고 Run 메뉴의 run(Ctrl+F11 ) 을 통해서 바로 시작을 해주면..
  30. 30. 로컬 서버 확인 30 다음 메시지와 함께, 서버가 시작된다. http://localhost:8888 (필자 이클립스 환경임. 8080으로 접속이 디폴트일듯 ) 로 접속을 하면 다음과 같은 화면을 발견할 수 있다..^^ 자 이제 이것을 앱엔진 서버로 올려봐야겠다.
  31. 31. 앱엔진을 향한 디플로이! 31 Google- deploy to app engine을 누르면 다음장과 같이.. 에러가 뜰지도 모른다 ^^
  32. 32. 디플로이 서버아이디 설정 32 App engine project settings 를 누르고 my applications 라는 곳을 누르면 자신의 프로젝트들과 아이디가 나온다. 아이디를 확인 후 입력해주자.
  33. 33. 서버 확인 (디플로이 후) 33 그러면 deploy창이 활성화가 되고, 다음과 같이 서버에서 자신의 프로젝트가 웹에서도 돌아가는 것을 볼 수가 있다. https://appengine.google.com/ 에서 create application을 누르면 appspot 앞의 아이디를 자신이 직접 지정해줄수 있는 것같지만 아직 해보지 않았다. 아무튼.. 헬로월드는 간신히 띄웠으나(;;) 여기가 끝이 아니다. 스프링도 적용을 해봐야하고, DB도 어떻게 적용이 될지 전혀 감이 오지 않는다. 검색을 해봐도 바로 눈에 띄는 것도 안 보이고..음 아무튼 다음으로 넘어가보자.
  34. 34. ------------------------------------------------ ----------------------------------------- ------------------------------------------------- ------ ---------------------------- --------------------------- 34 2부 앱엔진 + Maven + Spring maven 앱엔진 프로젝트 설치와 스프링연동 (하아..슬라이드를 몇개를 지웠다가 다시 만드는지....) 삽질이;;
  35. 35. 먼저 Maven 설정부터 35 앱엔진의 사이트에는 다음같은 튜토리얼이 있다. 그곳을 참고로 해서 maven 설정을 알아보자. https://cloud.google.com/appengine/docs/java/gettingstarted/introduction 본 설정은 메이븐3버젼 이상, 자바7버젼에서 실행한다. mvn archetype:generate -Dappengine-version=1.9.17 -Dapplication-id=앱아이디 -Dfilter=com.google.appengine.archetypes: 를 실행한다. 그후 아키타입 1번 appengine-skeleton-archetype 실행
  36. 36. 먼저 Maven 설정부터 36 다음으로 버전은 최근버젼을 선택 groupId 는 아무거나 artifactId도 아무거나 version 은 그냥 엔터 package는 뭐.. 마음대로.. 그리고 Y 를 눌러주면 빌드 성공한다. cd “아까했던 artifactId” 로 폴더 들어간 후에 mvn clean install 로 소스정리한 후에 mvn eclipse:eclipse 로 이클립스프로젝트 생성
  37. 37. Maven 설정 후 이클립스 불러오기 37 • 이클립스에서 File – Import 를 해서 maven 을 치면 maven projects 를 불러오는 것이 있다. 임포트! 불러오면 pom.xml에서 execution으로 에러가 나는데 help – install new software 메뉴에서 ajdt 라는 것을 깔아주면 된다고 한다. 참고로 필자는 이걸 깔아도 안된다ㅜㅜ (되시는 분은 되시겠지) 그래도 메이븐 빌드시에 문제는 없다....혹시나해서 주소 남긴다. software 주소는 이거 http://dist.springsource.org/release/AJDT/configurator/ 정보 출처(http://hanuli7.tistory.com/39)
  38. 38. Maven 설정 후 로컬빌드 38 • 자 일단, src/main/webapp/WEB-INF/ 폴더의 web.xml 파일에서 index.html 을 시작파일로 잡아주고 index.html은 뭐 그냥 헬로월드나 띄워보자. pom.xml 에서 에러나도 그냥 프로젝트를 우클릭 Run as – maven build 누르면 설정화면이 나오는데 devAppserver 하면된다. 우클릭 Run as – maven build
  39. 39. Maven 설정 후 앱엡진도빌드 39 • 그러면 다음과 같이 빌드가 된다. 헬로월드를 로컬에 띄웠으면 다시 메이븐빌드를 해서 이번엔 밑에거 update어쩌고를 해보면 웹에도 바로 배포가 된 것을 볼 수가 있다. 자 그럼 메이븐이 적용이 되니 스프링을 적용해보자 <로컬빌드> <앱엔진 빌드>
  40. 40. 스프링 설정 적용 40 스프링적용에서 해보고 싶은 것은 일단 SPRING MVC 를 적용해서 주소가 제대로 되나 한번 보고 싶은 것이다.. 구글앱엔진의 스펙을 보니 자바7에 서블릿2.5 를 지원한다고 한다(....) 스프링 4.x 스펙을 보니 서블릿3을 추천하지만 2.5 도 지원을 한다고 나와있다. 2.5 버젼에서는 mock 기능을 제대로 사용못한다고 나와있던 것같았는데, 아무튼 스프링 최신버젼을 구글앱엔진에 적용해보도록 해보자!
  41. 41. 스프링 설정 적용 41 • pom.xml 에 다음과 같이 스프링mvc 를 추가해보자. • 그리고 컨트롤러를 만들자.
  42. 42. 스프링 설정 적용 : dispatcherServlet.xml 42 • 컨트롤러가 생기면 dispatcherServlet 이 필요하고, dispatcherServlet 을 web.xml 에 설정해줘야 한다. 설정해주자...참고로 필자는 /META-INF/spring 폴더에 스프링설정파일을 넣었다..일본책에서 이렇게하길래;; 그냥 편해보여서; 좋은&다른 생각있으시면 말씀좀해주시면 좋겠다.
  43. 43. 스프링 설정 적용 : web.xml 43 web.xml 에 들어갈 부분..;; (아 이걸보니 블로그까지 정리를 해야 하는 것인가. 좀 귀찮;;) 아무튼 그대로 하던대로 devServer도 빌드도 해보고, update로도 돌려보자. ㅎㅎ
  44. 44. 스프링 넣고 한번 빌드 44 아무튼 로컬로도 빌드해보고, 앱으로도 올려보자. 아주 잘 된다.. 뭐 프로젝트관리도구도 있다고 하던데,아직 안 써봤다..흠.. 그냥 뭐 이건.. 로컬에서 돌리는게 바로 서버에 적용되니..기분이 좋다^.^ 자 그러면 이제 DB를 저장을 해야할텐데. 앱엔진은 뭔가 DB저장개념이 다른 것같다. 살펴보자.
  45. 45. ------------------------------------------------ ----------------------------------------- ------------------------------------------------- ------ ---------------------------- --------------------------- 45 3부 앱엔진 + DB 앱엔진에서 DB저장 방법 (여기선 일단 조금이라도 익숙한 spring-data-jpa를 썼지만 나중엔 다른 것을 써 볼 것같다)
  46. 46. 앱엔진 DB 연동 : 앱엔진 데이터저장기술의 선택 46 처음에 공홈에서 받은 소스가 잘 안되서.. 속으로 공홈을 조금 욕했는데(-_-), 역시 공홈 매뉴얼이 최고인것같다. 본 주소에서 DATA 저장에 관한 오버뷰를 볼 수 있다. https://cloud.google.com/appengine/docs/java/storage https://cloud.google.com/ 에 들어가서 제품에서 스토리지부분에 3가지가 한글로 나오니까 거길 봐도 된다. 자 간단히 정리를 해서 얘기해보자면 세가지가 있다. 일단..무료를 쓰고싶다(아니 써야한다;;) 데이터스토어 클라우드SQL 클라우드 스토리지 유료여부 일정부분에 한해 공짜^^ 시작부터 유료 시작부터 유료 특징 No schema Mysql 기반, 각종 관 리기능 제공 파일과 관련된 메타데이터 구조
  47. 47. 앱엔진 DB 연동 : datastore 세부 47 공홈에 나온 내용이다. 한번 잠깐 살펴보자.
  48. 48. 48 ……………………………………… (잠시 필자는, 5차원의 정신과 시간의 방에 갔다옴.)
  49. 49. 메이븐에서 생성하기 49 ….. 마치 시간여행을 하고 온 기분이다. 독자분께선 그냥 보고 계시겠지만, 공홈에서 메이븐 사용시 앤트를 써야 빌드가 된다는 말이 있어, 그냥 그래들로 깃허브 예제를 얻어 고대로 빌드를 하다가 안되서 다시 메이븐으로 왔다..(-_-) 자. 아무튼 지금 하려는 것은 현재 앱엔진+ 메이븐 + 스프링 까지 온 상태다. 여기서 이제 spring-data-jpa 를 추가해주고 싶은데, 아시다시피 spring- data-jpa 는 하이버네이트 같은 구현체를 썼었다. 그런데 지금 구글앱엔진에서 쓰고자 하는 것은 datastore 이다. 그래서 하이버네이트를 못 쓰고, datanucleus 라는 것을 쓴다고 한다. 해외에서 예제도 없어서 그냥 여기저기 공홈을 보며 설정했는데 이게.. 시간이 생각보다 무척 오래 걸렸다. 에러가 나도 종잡을 수 없던 라이브러리간 버젼간의 문제도 많이 발생했고..제길슨..; 아무튼 어떻게 했는지 보자.
  50. 50. Data nucleus 설정 50 자, 다음같은 라이브러리들을 포함시켜 주자. (블로그에 도 소스 올릴 예정^^) 참고로 필자는 예제들을 그냥 복붙하다가 이게 어디에 쓰는건지, 버전간의 호환성이 어떻게 되는지 전혀 몰랐던 상태에서 엄청 고생했다..
  51. 51. Data nucleus 설정 : dependency 51 자 일단 datanucleus-appengine이 있다. 이게 제일 중요한 것인데 앱엔진에서 datanucleus 를 돌아가게 해주는 라이브러리로 2.버젼대에서 그 이상 구글이 지원을 제대로 안하고 있다. (레이지구글같으니…;;) 그래서 일단 앱엔진버젼에 맞춰서 data nucles 를 써야 하며(3버젼), 앱엔진 공홈에서는 이것을 앤트빌드를 사용하여서 빌드시 자동복사하여서 쓰라고 하였으나(- -이것때문에 괜히 그래들갔다가, 예제찾다가 ..으으..부들부들..) 보시는 바와 같이 그냥 메이븐 디펜던시에서 추가하여 쓰면된다. ㅠ.ㅠ.. 그리고 jpa 구현체에 datanucleus 를 쓰는 것이다보니, 약간 엔티티의 상태가 다르다고 한다. 그래서 ,datanucleus enhance 라는 것을 이용하여서 바이트코드에서 동작을 하여서 미리 모델을 조금 고쳐준다는데.. 그 부분은 다음장에서 설명해보자~
  52. 52. Data nucleus 설정 : enhancer 52 앱엔진공홈에서는 enhance를 위하여 앤트를 사용하라 나오는데, 보시는 바와 같이 api 모드에 jpa 를 해주시고, maven plugin 을 추가해주시면 되겠다! 이렇게 해주면 빌드를 하면서 enhancer가 작동하여 모델들을 조금 수정한다..참고로 이것도 최신버젼했다가 x고생;;
  53. 53. Persistence.xml 설정 53 메이븐에서는 클래스패스 기준으로 해서 /META- INF/persistence.xml 을 설정파일로 잡고있어서 아무튼 파일 만들어서 설정해줬다! Pom.xml 에서 잡았던 유닛 네임 그대로 써야한다~~ Provider에 datanucleus, connectionURL 로 appengine 을 쓰는 것에 주목하자!
  54. 54. 나머지 잡다한 설정들.. 컨트롤러+ 리파지토리+웹등등 나옴 54 나머지 뭐..뻔한 작업이니 대충 적고싶다. 밤도 늦었고.ㅠㅠ 그냥 블로그의 소스로 대신하려한다. 로그같은 건 귀찮아서 안했다..’ㅁ’… 그냥 뭐 컨트롤러 만들고.. 사용자 이름과 메시지를 입력하여 DB처리하고 보여주는 Repository 붙이고 Db만 바로 되나안되나 확인해보기로 하였다
  55. 55. 나머지 잡다한 설정들.. 55 만든 컨트롤러들과 jsp 들..-_- 그냥 깃허브에 소스를 올려야겠다. 음. 이건 리파지토리고.. 아참 맨밑에가 appengine-web.xml 인데 소스만 받아서 바꾸시는 분들은 저쪽의 application 아이디를 자신의 것으로 바꿔주셔야 한다.
  56. 56. 데이터 베이스 접근 확인 56 • 뭐…돌리면 대충 이렇게 돌려진다. http://localhost:8080/_ah/admin 으로 가면 자신의 로컬서버의 정보를 알 수 있다.
  57. 57. 앱엔진 db서버접근 확인 57 서버도 디비 접근 확인! 로컬은 되는데 서버도 업데이트하면서 잔에러가 꽤 많이 발생해서 당황스러웠다. 지금까지 겪은 에러중의 한가지(버젼문제) 인가.. 아니면 다른 문제인가.. 머리속에 수많은 삽질이 다시 생각났었는데.. Appengine-web.xml 에서도 에러가나고..; repository가 서버에서는 null 뜨고..음.; appengine-web.xml 에서 버전을 그냥 숫자로 주고 인스턴스를 지웠다가 다시 업데이트하면서 만드니 잘 동작하는 것같다.
  58. 58. 앱엔진 스프링 주의사항 58 http://blog.sixpoly.com/?p=491 여기 글을 참고하자면 앱엔진은 인스턴스를 1개남은 것마저도 사용자가 없으면 죽여놓는다고 한다. 그러다가 사용자가 접근을 시도하면 인스턴스를 만드는데, 스프링이 초반에 구동이 좀 시간이 걸리기 때문에 component scan 보다는 일일이 잡아주는 것을 선호하는 등의 문제가 많이 발생한다. 또 jpa 에서도 datastore 를 쓸때 못 쓰는 기능들이 몇가지 있기 때문에 이러한 부분들은 꼭 문서를 확인해야 한다. 지쳐서 이만..ㅠ.ㅠ….
  59. 59. 59 THANK YOU ! arahansa ------ ------ 페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/ 궁금증 모음 : 1. 왜 이클립스 루나버젼는 항상 지원된다고 나와있으면서도 플러그인 설치 시에 에러가 나는 것일까?! 2. 구글앱엔진의 성능과 유연성이 조금 떨어진다고 하는데, 어느 정도일까?! 3. pom.xml 에서 execution 저거.. <pluginManage~> 도 줘보고, adjt 도 깔아보고 했는데 해결책이 안나온다. 그냥 에러난채로 메이븐에서 빌드하는데, 뭔가 좋은 방법 있으신 분 해결책 좀 주셨으면 좋겠다. 참고 url : http://uiandwe.tistory.com/896 뒷장은 삽질한게 아까워서 내비둔다;;
  60. 60. SPRING DATA JPA 가기전 Gradle 60 메이븐과 함께, SpringDataJpa를 이용해서 db처리를 앱엔진내에서 하려했으나 예제가 잘 안나왔다. 참고로 앱엔진내에서 지금 쓰려고 하는 것은 datastore 인데 spring-data-jpa를 datastore에서 쓰려면 datanucleus 라는 것을 써야 한다고 하더라. 그런데 이 datanucleus 를 쓰려면 또 ant 를 써서 어쩌고저쩌고 라는 글이 공홈에 나왔다-_-… 뭐가 문젠지 모르겠지만, 암튼 잠시 검색해보니.. Gradle 쪽에서는 예제가 괜찮게 되어있다보니…결국… 그래들로 다시 빌드를 해보기로 마음먹었다. PPT가 길어지는군..;; 어차피 이왕 하게 된거 필요할 때 하게 되면 되는 것이다… (아 이렇게 그래들로 어물쩡 넘어가는군;; 겁난다.ㅠ.ㅠ) http://rominirani.com/2014/07/28/gradle-tutorial-series-an- overview/ 이 사이트에서 그래들의 설명하며 친절히 영어로^^ 잘 나와있다.
  61. 61. 대략 정신이 멍해지지만…그래들 61
  62. 62. 그래들 설치 62 • http://gradle.org 여기서 그래들 설치. 메이븐과 비슷하게 압축풀고 환경설정만 해주면 된다. • 이곳에서 강좌를 보면 좋을 것같다. 5강좌만 보면 그래들이 무엇인지 느낌이 올 것같다. http://rominirani.com/2014/07/28/gradle- tutorial-series-an-overview/ • 5번째 강좌가 깃허브주소를 포함하는데 다운받아서 일단 그래들- 앱엔진 빌드를 해보자. https://github.com/rominirani/HelloAppEngine Gradle
  63. 63. 그래들 + 앱엔진 연동 63 • 다운받은 깃허브 소스의 build.gradle 을 보자. • appId 와 appEmail 을 바꿔주고, appengineVersion도 1.9.17 로 바꿔주자. • 1.9.16으로 된건 1.9.17로 모두 바꿔주자!!
  64. 64. 그래들 + 앱엔진 연동 64 • srcmainwebappWEB-INF 라는 폴더에는 appengine-web.xml 이라는 파일이 있는데 그부분에서 앱엔진 프로젝트 아이디를 <application> 태그 안에 지정해주자
  65. 65. 그래들 잠시 보기 65 프로젝트 최상위폴더에서 gradle tasks 라는 명령어를 치면 쳐볼수 있는 명령어가 굉장히 많이 나온다. 그중에서 주목할 것은 appengineRun과 appengineUpdate다. Run 은 로컬빌드 update는 앱엔진서버로 배포다.
  66. 66. 그래들 빌드 66 gradle appengineRun 명령어와 gradle appengineUpdate 로 배포를 해보자. Update같은 경우는 중간에 인증과정을 거칠 것이다.. 알아서 다들 통과하실 것이라 믿는다. ㅎㅎ
  67. 67. 그래들 이클립스 플러그인 67 그래들 프로젝트를 이클립스로 열고 싶은데 어떻게 할까 일단 제일 빠른 방법은 이클립스에서 그래들 플러그인을 깔고 불러들이는 방법이다. Help – marketplace 에서 gradle 검색후 gradle integration~ 어쩌고를 설치한다. 그 후에 재시작후 file- import 를 해보면 gradle 메뉴가 뜬다. 임포트 하면 된다. . http://kwonnam.pe.kr/wiki/gradle/eclipse 이 홈페이지를 가면 그래들에서 이클립스 프로젝트 만드는 방법이 잘 나와있다.
  68. 68. 앱엔진… 68 2014/12/15일에 첫 피피티 배포를 하였는데, 생각외로 호응이 뜨거웠다.;; 2014/12/17 • 그래서 몇 가지 기능을 더 추가해보고자 한다. 보실 분이 계실지 모르겠지만 정보는 공유하면 좋다고 생각하니..음.. 일단 관리자 인증을 할 일이 있어서 스프링 시큐리티를 알아봤는데 시큐리티 3.2 버전에서는 서블릿3 동시성을 지원한다고 나와있다. • -_- 계륵같은 …음…아무튼 시큐리티는 일단 조금이나마 익숙하기도하고, 앱엔진에서 제공하는 인증기술이 궁금해서 알아보기로 하였다.
  69. 69. 앱엔진 인증 Oauth 시작하며 69 앱엔진 인증 링크는 여기다. 자 공홈에 의하면, 세가지 메소드에 의하여 사용자를 인증할 수 있다고 한다. 첫번째가 구글계정, 당신 자신의 구글앱 도메인에 있는 계정, 아니면 OpenID 식별자라고 한다. 만약 유저가 어플리케이션에 로그인하면, 앱은 유저의 이메일주소에 접근할 수 있다. 앱은 또한 유저가 관리자인지 확인할 수 있으며, admin-only 영역을 구현함으로써 이것이 쉽게 가능하다. 현재 구글은 더 이상 openId 제공자를 지원하지 않는다. 하지만 여전히 쓸수는 있는듯. 하지만 구글에서는 Oauth2.0 을 쓰기를 권장한다고 하니 Oauth 2.0 으로 가보자. http://www.slideshare.net/deview/hello-world-oauth 가 무엇인지 궁금하면 여기로 가보자^^ https://cloud.google.com/appengine/docs/java/users/
  70. 70. Oauth 2.0 70 일단 Oauth 가이드 주소는 다음과 같다 내용은 대략 이러하다. 세팅, 서비스에 접근 , 인증 심화토픽, 기타 문서와 라이브러리 openID 어쩌고저쩌고 으 아직 용어가 익숙치 않다. 다음으로 넘어가자. https://developers.google.com/accounts/docs/OpenIDConnect
  71. 71. Setting up OAuth 2.0 71 • API 로 가면 이런 다양한 화면이 나오는 데 여기 가지 말고, 사용자 인증정보로 들어가자.
  72. 72. 72 동의화면 구성을 누르면 정보를 입력하라는 화면이 나온다. 간단하므로 생략하고 확인 누르면 다음과 같이 클라이언트 ID를 만들게 된다.
  73. 73. Oauth 클라이언트 ID 생성 73 • http 를 제대로 적고 클라이언트 ID 를 만들기를 실행해보자, 다음과 같은 화면이 뜬다. 서버용으로는 서버용 시크릿 정보를 만들어야 한다.
  74. 74. 다시 시작 74 • 자 이제 다시 이클립스로 돌아오자. 이전까지의 환경들은 메이븐이 위주였다면 다시 이클립스로 돌아가서 좀 보겠다. 화면 상단의 앱엔진 플러그인 메뉴를 누르면 Add google apis 가 나오는데 저기서 Google+ Api 를 받아보자.
  75. 75. 75 • 그럼 다음과 같이 추가되는 것을 볼 수 있다

×