한국 스프링 유저그룹(KSUG)에서 지난 4월 17일에 LG CNS본사(명동 프라임타워) 9층 대회의실에서 제10회 세미나가 12시부터 6시까지 총 5가지 세션으로 진행되었습니다. KSUG를 알고 관심있게 된지는 그렇게 오래되지는 않았지만 제 기억으로는 꽤 오랜만에 진행된 세미나인 것 같습니다. 작년에 새 운영진과 함께 새로운 모습의 KSUG로써는 처음 진행된 세미나였습니다.
세미나의 시작은 현 KSUG회장이신 fupfin님의 인사말로 시작되었습니다.
간단한 스프링에 대한 소개와 함께 인터넷에 돌아다니는 유머러스한 언어별로 시각의 차이를 비교해 놓은 사진과 함께 자바의 모습에 대해서 설명하셨습니다. Haskell Fans이 바라본 자바의 모습을 특별히 강조하셨는데 구조적으로 잘 쌓았지만 블럭을 너무 많이 쌓아서 쓰러져버린 트럭에 비유한 자바의 모습을 스프링이 등장하기 전의 자바의 모습이라고 하셨습니다.
SCALAbility - scala를 통해 scalability 곱씹어보기
- 이동욱(LG CNS)
Martin Ordersky가 만든 Scala라는 언어(스칼라가 맞는 발음이랍니다.)를 통한 Scalability(확장성)에 대한 세션으로 내용도 그렇지만 특히나 깔끔한 PPT(aka 장표)가 인상적인 세션이었습니다.(딱 제가 좋아하는 스타일의 PPT였습니다. ㅎ)
Scalability는 "애플리케이션이 사용자의 요구에 맞추기 위해 크기나 용량을 변경해도 그 기능이 계속하여 잘 동작할 수 있는 능력"으로 정의하였습니다. 시작은 스칼라와는 상관없게 느껴지는 여러가지 얘기로 시작되었는데 실제 언어의 단어의 수와 프로그래밍언어의 단어의 갭은 상당히 크기 때문에 프로그래밍 언어로써 현실세계의 문제를 해결하는데는 어려움이 있습니다. 언어가 문제에 접근하는 방법에는 2가지가 있는데 단어의 증가와 규칙의 증가입니다. 너무 간단하면 접근은 쉬우나 문제해결에 어려움이 있으며 너무 증가하면 문제에 접근은 쉽지만 진입장벽이 큰 어려움이 있습니다.
Scalability를 설명하기 위해 여러가지를 보여주셨는데 개미집을 지상으로 6미터나 짓는 흰개미나 자기유사성(Self-Similarity)를 갖는 Fracktal을 보여주었습니다. 얼핏보면 주제와 전혀 상관없는 부분 처럼 느껴지기도 했지만 모두 확장성이란 것에 대한 이해를 돕기위한 내용들이었습니다. 언어에서 확장성(Scalability)이란 것은 "문제영역의 크기나 복잡도가 증가하여도 유사한 방법으로 문제 해결이 가능한 것"이라고 설명하셨습니다.
스칼라라는 언어는 처음부터 확장성을 고려해서 만들어진 언어고 상당히 많은 언어의 영향을 받았지만 그 많은 것들을 상당히 이쁘게 스칼라라는 언어안에 담았다고 합니다. Scala는 컴파일하면 .class로 떨어지는 Groovy, Clojure처럼 native to JVM으로 JVM을 속이며 JRuby, Jython은 ports to JVM입니다. 객체지향과 함수형 언어의 통합하여 간결하면서도 강력한 언어입니다. 플러그인만 설치하면 Eclipse, IntelliJ, NetBeans에서 모두 개발이 가능하며 스칼라에서 모든 것은 객체입니다.(Uniform Object Model)
그 뒤로는 변수와 클래스를 정의하는 것부터해서 분수 클래스를 만들어서 만들어진 분수클래스를 +로 더할수 있게 간단하게 확장하는 시연을 보여주면서 Currying에 대한 설명까지도 보여주었습니다. 클래스를 아주 간단하게 확장할 수 있어 Seamless합니다. 그 뒤로는 Scala의 인터페이스와 같은 Trait를 설명해 주시면 Trait로 객체를 조합하는 것을 보여주셨습니다. Trait는 Rich Interface인데 Rich Interface라는 말은 메서드가 많다는 의미이고 자바는 보통 Thin인터페이스입니다. 인터페이스가 리치인터페이스이면 사용자가 구현해야 할 것이 많기 때문에 피곤한데 Trait는 리치하면서도 사용자가 구현할게 많지 않도록 설계되었으며 마틴 오더스키가 제시한 크기비교를 하는Trait를 보여주셨습니다. 크기비교를 하는 경우 거의 비슷한 코드인데도 >, <=, >=를 모두 구현해야 하지만 Trait에서는 compare만 구현하면 됩니다.
값으로 주고 받을 수 있으면 First Class객체인데 Scala에서는 함수도 퍼스트클래스객체이므로 주고 받을 수 있습니다. 함수형의 2번째 특징은 부작용이 없다는 것으로 Referentially Transparent(투명한 참조)를 실현하고 있습니다. 이말은 대체를 하더라도 다른 문제가 발생하지 않으면 투명한 참조라고 합니다. 자바의 for문은 아무리 익숙해 져도 값을 추적하고 해야하는데 이를 foreach함수로 대체하고 함수를 아규먼트로 넘기도록 변경하였으며 Loop대신 Recursive를 하도록 하였기 때문에 더 자연어에 가까워서 익숙해 지면 이해가 쉽습니다. imperative style는 기존 자바개발자들에게 익숙하며 imperative command위주이고 side-effect가 있지만 functional style은 이해가 쉽고 에러가능성을 낮춰주는데 Scala는 functional style에 가깝게 설계되었습니다.
I'm not against types, but I don't know of any type systems that arent't a complete pain, so I still like dynamic typing. -Alan Kay
Scala는 정적타입을 가진 언어인데 정적 타입은 컴파일시에 타입 검증이 가능하고 리팩토링이 더 안전하며 코드자체가 Documantation이 되는 장점이 있습니다. Scala는 타입추론(Type Inference)을 도입하였는데 이는 되도록 간결함을 유지하면서 정작타입 시스템의 장점을 누리려는 노력입니다. 리터타입이 따로 없는데도 사람이 Integer끼리 더하면 결과도 Integer라고 생각하듯이 타입추론을 해냅니다.
자바에서의 캐스팅인 타입변환을 Scala에서는 형변환을 컨트롤 할 수 있습니다. int를 앞에서 만든 분수객체인 Rational로 변환해 주도록 선언하면 자동으로 변환이 되며 import해야만 사용되기 때문에 한번 형변환하면 전체가 변환되는 Ruby와는 다르게 개발자가 제어가 가능하다는 장점이 있습니다.
발표자료는 여기 있습니다.
이번 세미나에서 제가 가장 크게 흥미를 가지고 보았던 세션이었습니다. 스칼라라는 언어는 들은 적은 있었으나 그 자세한 내용은 몰랐었는데 스칼라라는 언어에 대해서 많이 알 수 있었고 저뿐만 아니라 다들 스칼라는 생소한 주제였을텐데 거기에 어려운 주제인 Scalability를 아주 쉽게 설명해 주셨던것 같습니다. 특히 Ruby가 어느정도 한계를 보여주었던 것을 모두 해결하려는듯 자바가 쌓아놓은 안정적인 기반을 그대로 이용한채 Functional의 장점을 가지고 개발할 수 있다는 것은 상당히 관심이 갔습니다. 자바스크립트에 꽤 흥미를 가지고 있어서인지 Functional이라면 왠지 더 관심이 가게 되더군요. 당장 쓰지는 않아도 조만간 헬로 스칼라를 찍어보게 되지 않을까 싶습니다. ㅎㅎㅎ
스프링 시큐리티를 이용한 웹보안
- 고종봉 (제너시스템스)
스프링 시큐리티는 스프링 개발자들의 메일링에서 스프링 기반의 보안구현체가 있어야지 않겠냐는 이야기가 나오면서 2003년 "스프링을 위한 아씨지 시크리티"로 출발하여 2004년 3월에 정식출범하여 스프링의 공식 서브 프로젝트가 되었습니다. 2007년 후반에 공식적으로 스프링 포트폴리오 프로젝트가 되면서 "스프링 시큐리티"로 이름이 변경되엇습니다.
이 세션은 라이브코딩(시간 낭비를 위해서 Copy & Paste)로 진행되었으며 웹페이지에 시큐리티를 적용하며 보안관리를 하는 것을 아주 간단한 예제를 통해서 설명되었습니다. 스프링 시큐리티의 보안에는 인증과 인가가 있는데 인증은 신원을 확인하는 것이고 인가는 접근할 권한이 있는지를 검사하는 것입니다. 스프링 시큐리트를 적용하려면 관련 jar파일들을 추가하고 web.xml에 filter를 추가하고 applicationContext-security.xml에 내용을 추가하면 바로 적용가능합니다.
라이브 코딩은 웹페이지에 스프링 시큐리티 적용하고 로그인 폼을 원하는 폼으로 변경한 뒤에 로그아웃기능을 추가하고 로그인/아웃의 상태를 표시해준지 권한없는 페이지에 접근한 403 access is denied페이지를 원하는 페이지로 변경하였습니다. 그뒤로는 추가적인 응용을 위해서 특정 URL은 보안을 통과하도록 설정하고 한계정으로 동시에 한명만 접속하도록 한뒤 사용자를 DB에서 가져오도록 수정하였습니다. 아주 간단한 예제였지만 스프링 시큐리티를 이해하기에는 부족함이 없었습니다. 추가적으로 심화실습인 MVC를 적용하여 @Secured 애노테이션으로 권한을 제어하는 시연까지 보여주셨습니다.
발표자료는 여기 올라와있습니다.
시스템을 개발하면 거의 필수적으로 포함되어야 하는 보안에 관한 이슈가 수년간의 오픈소스개발로 인하여 많은 노하우가 녹아있는 스프링 시큐리티에 대해서 스프링을 잘 모르는 저로써도 쉽게 이해할 수 있었던 세션이었습니다. 아주 간단한 예제를 통해서 시연을 보여주었기 때문에 이해하기가 쉬웠고 재미있었던데다가 스프링 시큐리티의 편리한 점을 이해하기 좋았습니다. 그 이상에 대해서 공부하는 것은 각자의 몫이겠죠 ㅎ
댓글 없음:
댓글 쓰기