Buy me a coffeeBuy me a coffee

관련링크

Project Sagan: open-sourcing spring.io - https://spring.io/blog/2014/03/27/project-sagan-open-sourcing-spring-io

Sagan Project Repository: https://github.com/spring-io/sagan


Sagan Project(세이건 프로젝트)는 Spring Framework를 개발/운영하는 팀이 참여한 spring.io 의 레퍼런스 앱 프로젝트입니다.

인터넷에 검색하면 수 많은 Spring Framework로 된 많은 예제 파일들이 많으나, 돌아가지 않는 예제가 많거나, 오래된 코드.라이브러리 사용으로 최신 버전의 Java와 충돌되거나 라이브러리들의 충돌로 작동이 안되는 경우가 많습니다.

위의 문제를 해결하고자 Spring.io에서 Spring Framework로 된 레퍼런스 앱인 Sagan Project를 오픈소스화를 하여 출시하였습니다.

아래는 Sagan Project에 대한 SpringOne2GX 2014 동영상과 슬라이드입니다. 


Inside spring.io: a Production Spring Reference Application

Recorded at SpringOne2GX 2014.
Speaker: Brian Clozel
Slides: http://www.slideshare.net/SpringCentr...
Core Spring Track
Come take a look inside the newly open-sourced reference application that powers the http://spring.iosite, including:

Idiomatic use of Spring Boot
Taking advantage of Spring Framework 4 features
A tour of our JavaScript frontend using cujoJS's curl, Bower and Gulp for a clean and modular design
Zero-downtime deployment to Cloud Foundry using blue/green deployments
And more, with plenty of time for Q&A


Slide 자료

Inside spring.io: a Production Spring Reference Application


2015년 4월 18일 Spring Camp(http://www.springcamp.io/2015/) 에서 위의  SpringOne2GX 2014 발표자료를 참고하여 만든 한국어 자료

spring.io를 통해 배우는 spring 개발사례



Spring 2.x부터 개발을 해본 사람으로서 Spring 4.X까지의 발전을 보니 7년사이에 엄청 많이 바뀌었다는 걸 느꼈음.

(대학원때부터 Spring Framework에 대하여 보긴했음 처음에 IoC(Inversion of Control), DL(Dependency Lookup),DP(Dependency Pull), DI(Dependency Injection) 개념이 책에 나오니 이거 뭥미 하며 헤메던 기억이 나군요 (MVC 소스코드만 Copy & Paste만 하면 되긴 하다만 그런건 학원에서 언제든지 배울수 있는 내용들 -_-;;)

ps. 참고할만한 아래의 자료들  

Spring Camp 2014(http://www.springcamp.io/2014/)에서 발표된 Spring Boot 

Spring-Boot (springcamp2014)



Buy me a coffeeBuy me a coffee

InfoQ에 나온 "Building Microservices with Spring Boot"글 링크


Spring-boot에 대한 2015년 2월 10일자 따끈따끈한 자료입니다.

이거 보고 웹서비스 도입해봐야할듯 

Buy me a coffeeBuy me a coffee

요즘 떠오르는 "스프링 부트(Spring Boot)"에 대한 스크린캐스트.

"Building 'Bootiful'­ Applications with Spring Boot" by Josh Long


Buy me a coffeeBuy me a coffee
Buy me a coffeeBuy me a coffee

2011년도말 슬라이드이지만 아직도 Spring Framework3를 사용하는 곳이 많으므로 아직도 볼만한 자바 웹개발 시작하기 슬라이드 모음

(현재 2013년 12월경에 Spring Framework 4.0이 나왔지만 아직 4.0대로 완전히 넘어가지 않았고 3.0과 비슷한 점이 많으니 3.0쪽을 많이 보면 됨. 2.0에서 3.0으로 넘어갈때 @(annotation)으로 바뀌면서 완전 바뀌고 3.0에서 4.0으로 넘어갈때엔 xml를 가급적 피하고 java단에서 처리하려는 느낌이 많이 듦)


Buy me a coffeeBuy me a coffee

[Hello world 오픈세미나]spring upgrade


스프링 어플리케이션의 문제해결사례와 안티패턴



Buy me a coffeeBuy me a coffee

Spring Framework Known Vulnerabilities and Issues


Spring Framework

Spring MVC

Spring Security


스프링 프레임워크(Spring Framework)의 알려진 취약점 정리들중 필요한 내용만 찾음.

Buy me a coffeeBuy me a coffee

이전에 만들어진 스프링 웹 소스를 분석하고 있었다.

소스를 받아서 Tomcat으로 웹 소스를 실행하려니 에러 발생. 아래와 같은 에러가 발생했다.

2012. 7. 9 오후 5:59:38 org.apache.catalina.core.ContainerBase addChildInternal
심각: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/***]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:142)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5274)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 11 more
2012. 7. 9 오후 5:59:38 org.apache.catalina.startup.HostConfig deployDescriptor
심각: Error deploying configuration descriptor C:\***\***.xml
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/***]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)


위의 문제는 웹 검색을 한 결과 "라이브러리 충돌이 났다"라는 답이 나왔다.


아래의 라이브러리는 M2로서 메이븐 버전입니다. 문제가 있는건 아니지만 아마도 라이브러리 충돌이 나는것 같습니다.  대신 다른 버전의 라이브러리로 사용을 해보시던가 아니면 첨부파일에 있는 예제로 다시 한번 확인 부탁드리겠습니다.


웹 소스에선 org.springframework-3.1.0.M2 를 사용하고 있었고 위의 에러가 주르륵 나왔었고, 위의 글을 보고 나서 최신 버전인 org.springframework-3.1.1.RELEASE 로 변경하였더니 정상적인 코드라고 잘 돌아갔음.


라이브러리 충돌이 왜 났을까? 저장소에 저장된 라이브러리가 최종 소스니, 예전에 문제 없었던것 같은데 왜?

원인을 모르고 문제를 해결한 셈이 되니 정말 찜찜했다.

하루종일 위의 에러때문에 머리 깨지는줄 알았는데 ㅠㅠ


Buy me a coffeeBuy me a coffee

아래의 URL들은 Spring Security에서 가상 URL로 처리하는 URL이며, 서블릿 필터 처리 과정에서 감시 되고 처리된다.

위와 같은 URL은 웹 어플리케이션의 Context ROOT에 대해 상대 경로를 가진다.


  • /j_spring_security_check
    사용자명/비밀번호 폼 인증을 위해 UsernamePasswordAuthenticationFilter를 통해 확인함.
  • /j_spring_openid_security_check
    (OpenID Provider에 의해) 반환되는 OpenID 인증을 위해 OpenIDAuthenticationFilter를 통해 확인함.
  • /j_spring_cas_security_check
    CAS SSO 로그인으로부터 돌아옴과 동시에 CAS 인증에서 사용됨
  • /spring_security_login
    auto-generate 로그인 페이지를 사용하도록 설정할때 DefaultLoginPageGeneratingFilter에서 사용하는 URL
  • /j_spring_security_logout
    로그아웃 액션을 감지하기 위해 LogoutFilter에서 사용하는 URL
  • /saml/SSO
    SAML SSO 사인 온 요청을 처리하기 위해 스프링 시큐리티 SAML SSO 확장 SAMLProcessingFilter에서 사용하는 URL
  • /saml/logout
    SAML SSO 사인 아웃 요청을 처리하기 위해 스프링 시큐리티 SAML SSO 확장 SAMLLogoutFilter에서 사용하는 URL
  • /j_spring_security_switch_user
    사용자를 다른 사용자로 전환하기 위해 SwitchUserFilter에서 사용하는 URL
  • /j_spring_security_exit_user
    사용자 변경 기능을 빠져나가기 위해 사용하는 URL


Buy me a coffeeBuy me a coffee

+ Recent posts