Whiteship's Note

[GAE 시리즈] 5. 정적 자원

모하니?/Coding : 2010.08.03 14:23


CSS 파일, JS 파일, 이미지, 플래시, 음악, 무비 등 정적 자원은 서블릿 컨테이너가 아닌 별도의 웹서버로 서비스를 사용해서 서비스 해준다. 

이때 WAR로 패키징되는 애플리케이션의 모든 자원 중 /WEB-INF 밑에 있는 JSP 파일들을 제외하고는 모두 정적 자원으로 처리해준다. 따라서 별도의 설정을 할 필요 없지만.. 만약에 별도로 정적 파일을 지정하고 싶다면 web.xml 근처에 있는 appengine-web.xml 파일에 설정해주면 된다.

appengine-web.xml에 설정파일에 대한 자세한 내용은 http://code.google.com/intl/ko-KR/appengine/docs/java/config/appconfig.html


저작자 표시
신고
top


[GAE 시리즈] 4. JDO

모하니?/Coding : 2010.08.03 13:15


http://code.google.com/intl/ko-KR/appengine/docs/java/gettingstarted/usingdatastore.html

 분산 웹 애플리케이션을 만들려면 고민할께 많은데 GAE를 사용하면 그럴 걱정은 할 필요 없단다. 매력적이다. 하지만 손수 분산 웹서버, 분산 DB 환경을 구축해보고 싶긴하다. 머 어쨋건;; 지금은 GAE 공부 중이니깐;; GAE가 알아서 분산, 복제, 로드 밸런싱을 해주기 때문에 개발자는 그냥 심플한 API만 사용해서 개발하면 분산 환경은 알아서 사용하게 된다.

GAE의 datastore도 그러한 서비스 중 하나인데 두 종류 API를 지원한다. 하나는 JDO 하나는 JPA. JDO는 오래전부터 표준이었고 JPA는 하이버네이트 영향으로 생긴 EJB 3의 표준인데... 어째 둘이 생긴게 비슷하다. JDO가 JPA를 따라서 변형된 것 같은 모습인데 실제로 그런건진 모르겠다. 그러거나 말거나.. 쓰기 편하고 기능이 좋으면 그만이다.

JPA를 쓸때 persistence.xml 설정 파일 만들듯이 JDO를 쓸땐 jdoconfig.xml 파일을 만든다. 이 파일에 대한 자세한 설명은 생략;

http://code.google.com/intl/ko-KR/appengine/docs/java/datastore/usingjdo.html

난 JPA를 쓰고 싶은데, 아니 사실은 하이버네이트를 직접 사용하고 싶은데;; 예제가 JDO라 어쩔 수 없이 일단은 따라해 보기로 했다. 

다음은 도메인 클래스를 만들고 매핑 정보를 애노테이션으로 설정한다. JPA랑 똑같다.  그 다음도 사실 똑같다. PersistenceManagerFactory에서 PersistenceMaanger를 가져가다 사용하면 된다. 하이버네이트로 치자면 SessionFactory에서 Session 가져다 쓰는거랑 비슷하다. JDO에도 HQL 같은 JDOQL이라는 쿼리 언어가 있다. 도무지;; JDO랑 JPA랑 구분이 되지 않는다. 똑같아 보인다. 이럴바엔 하나로 합치는 표준을 하나 만들고 그 API를 쓰게 하는게 좋치 않을까.. 



저작자 표시
신고
top

TAG GAE, JDO

세상에 공짜는 없다.

모하니?/Thinking : 2010.08.03 11:45


그래서 딱히 좋아할 것도 없고
그래서 딱히 아쉬울 것도 없다.
그러니 무척 열심히 살아야 된다. 

예를 들어, 누가 식당에 들어가서 밥을 먹고 우연히 계산을 안하고 나왔다 치자. 이사람은 공짜로 밥을 먹은 것일까? 아니다. 그 사람은 돈을 낼 수도 있는데 돈을 내지 않았다는 죄책감을 받았고, 종업원들로부터 그지같은XX라는 욕도 얻어먹었으니 절대로 공짜가 아니다.

자그럼 누군가 열심히 공부한것을 블로깅 하고 있다. 남들도 다 보라고. 공짜로 퍼주고 있는 것이다. 과연 그럴까? 아니다. 어차피 블로깅이야 내가 공부한 것을 정리하는 목적이었으니 소기의 목적을 달성한 성취감이 돌아오며, 차후 누군가 내 글이 그사람에게 도움이 됐다는 댓글 하나라도 달린다면.. 그게 또 얼마나 맛있는지 모른다.

어찌 생각하면 참으로 공평한 세상 같지만 어찌 생각하면 참으로 무서운 세상인거다. 자식에게 주는 부모님의 사랑. 부부간에 서로룰 존중하는 마음. 남을 배려하는 마음과 태도. 이게 다 눈에 안 보인다고 '공짜'라고 착각하는 사람들이 늘어나면 세상은 흉악해지고 볼품없어진다.

부모가 자식에게 무한대의 신뢰와 사랑을 주지 못하면 자식은 비뚤어지기 마련이고 범죄자가 될 가능성이 높다. 공부해도 모자를 시간에 게임이나 하며 허송세월 하다가는 돈많은 부모둬서 외국나가 띵까띵까 거리던 애들한테 평생 짓눌려 살 수가 밖에 없다. 그러니까 열심히 살아야 한다.

그렇치 기선아? 열심히 살자고.
저작자 표시
신고
top


[GAE 시리즈] 3. JSP와 로깅

모하니?/Coding : 2010.08.03 06:53


http://code.google.com/intl/ko-KR/appengine/docs/java/gettingstarted/usingjsps.html

GAE라고 해서 JSP에 특별한 머시기를 해주는건 아니고 그냥 일반적인 Servlet&JSP 코딩하듯이 코딩하면 된다.

JSP는 web 폴더 밑에 두면 자동으로 매핑 되니까 guestbook.jsp 같은걸 만들고, 그 안에서 직접 자바 코드 호출해서 사용하고 있다. (빨리 스프링 MVC 적용해서 걷어내고 싶다.)  그 다음엔 폼을 추가하고 그 폼 서브밋을 처리할 서블릿을 하나 만들고 (그안에서 로그인 확인 중복 코드 발생한다.) 로그인 여부에따라 java.util.logging.Logger를 사용해서 로그 메시지를 남기고 있다. 그 서블릿 매핑 정보를 web.xml에 추가한다. (이부분도 역시 어서 스프링 MVC를 도입하고 싶게 해주는 부분이다. 귀찮게 맨날 web.xml에 대여섯줄 씩 매핑 정보를;; @_@;)

자.. 이제 끝이 아니라. 로깅을 설정하는게 이게 조금 재밌다.

web/WEB-INF 폴더 밑에 보면 appengine-web.xml이 있는데 드디어 이녀석이 하는 일 중 하나가 밝혀진다. 바로 환경 변수 설정이다. 

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

이런식으로 로깅 파일 위치를 설정해주면 GAE에서 해당 위치에 로깅 파일을 사용하여 어드민 콘솔 이라는 앱으로 GAE에 배포한 앱의 로그 메시지를 기록하고 간편하게 찾아볼 수 있는 서비스를 제공해준다. log4j 설정만 써보고 자바 Logger 설정은 안써봤는데; 의외로 간편하다.

.level = WARNING
whiteship.level = INFO

달랑 요거;


 


저작자 표시
신고
top


[GAE 시리즈] 2. 구글 로그인

모하니?/Coding : 2010.08.03 06:22


http://code.google.com/intl/ko-KR/appengine/docs/java/gettingstarted/usingusers.html

        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();
        if(user != null) {
            resp.setContentType("text/plain");
            resp.getWriter().println("Hello, " + user.getNickname());
        } else {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
        }

이 코드가 핵심인데.. 많은 것들을 해준다.

1. 우선 무척이나 간단하다. 이렇게 쉽게 구글 로그인을 연동할 수 있다니... API도 직관적이라 어떤 일을 하는지 쉽게 알 수 있다. 마지막 줄의 코드가 로그인 한 다음 바로 로그인을 요청한 페이지로 이동하기 위한 API 인데 흠.. 괜찮은 것 같다. 권한 관리는 어떻게 하는지..  실제론 스프링 시큐리티랑 연동해서 쓰는지 아님 구글에서 제공하는 인증/권한 관리 API가 있는 것인지.. 있다면 권한 관리 설정은 편리한지 궁금하다.

2. 로그인 화면 자동생성. 로그인이 필요할 때 guestbook 예제에서 봤던 로그인 화면이 등장하는데 나는 그런 JSP 파일을 만든적도 없는데 알아서 만들어줬다. 편리하다.

3. 간편할 뿐 아니라 이 코드는 개발 환경과 배포 환경에 따라 동작 방식이 바뀐다. 오.. 놀라워라; 즉 개발환경에서는 아무런 아이디만 넣어도 로그인이 되고, 관리로 로그인하기 체크 박스가 존재한다. 하지만 GAE에 배포하는 순간 실제 구글 계정으로 로그인 한단다. 아직 GAE에 배포는 안해봤다. 그런데.. 개발할 때 실제 구글 계정으로 테스트해보고 싶으면 어쩌지?? 

4. 로그아웃 URL로 제공한다. userService.createLogoutURL()을 사용하면 된다.


저작자 표시
신고
top

TAG GAE, Java



: 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : ··· : 528 :





티스토리 툴바