본문 바로가기

encyclopedia/S

[Spring 온라인 강좌(영문)]http://grails.or.kr/

반응형
SMALL

http://grails.or.kr/

Spring 온라인 강좌(영문)

안녕하세요.

간만의 포스팅입니다.

스프링 프레임워크 온라인 강좌를 추천해드립니다.  Grails는 스프링 지식이 있으면 매우 좋습니다.

스프링강좌

자바 스프링 3.2 강좌

강좌 내용을 간단히 추리면 다음과 같으며 초중급 개발자로 프로젝트 진행에 필요한 기술은 거의 다룹니다.

  • 스프링의 소개
  • 스프링 Bean 설정
  • Autowiring
  • Annotation
  • SPEL
  • 데이터베이스 다루기
  • 스프링 MVC 소개
  • 폼 다루기
  • AOP
  • 스프링 시큐리티
  • 아파치 Tiles
  • Log4J와 JUnit
  • 하이버네이트
  • AJAX

udemy.com에서 제공하는 강좌로 본 강좌의 장단점은 다음과 같습니다.

장점

  • 매 강좌마다 쉽게 따라할 수 있는 예제로 설명한다.
  • 저렴하다.

단점

  • 영어 실력이 부족할 경우 그림의 떡이다.
  • PayPal 등으로 해외 결제를 진행해야 한다.

강사는 영국인으로 영국식 발음을 즐기면서 스프링을 공부해보세요.

Tagged with: 
Posted in 뉴스/다운로드

Grails와 표준 유효성 검사(validator)

Grails에서 유효성 검사는 스프링 Validator API와 데이터 바인딩을 이용합니다.

Grails는 좀 더 쉽게 검증 제약(constraints) 규칙을 묶어서 정의하는 메커니즘을 제공합니다.

도메인 클래스 모델에서 제약 규칙 정의 클로저

제약 규칙 기술할 때 괄호 사용 여부

Grails 제약 규칙을 괄호를 써서 적을 수도 있고 괄호를 쓰지 않을 수도 있습니다.

이전 Grails 버전에서는 괄호가 꼭 필요했지만 현재는 필요하지 않습니다. 따라서 원하는 코딩 스타일로 작성하면 되지만 하나의 프로젝트에서 꼭 일관성을 유지하기 바랍니다.

Grails 제공 표준 Validator

Grails는 아래의 validator를 기본 제공합니다.

  • blank
    빈 문자열 또는 NULL인지 검사
  • email
    올바른 이메일 주소인지 검사
  • inList
    일정 범위 또는 컬렉션의 원소 값인지 검사
  • matches
    정규식과 일치하는지 검사
  • maxSize
    지정한 최대값을 넘지 않는지 검사
  • minSize
    지정한 최소값을 넘는지 검사
  • nullable
    속성 값으로 NULL값 가능
  • size
    문자열의 길이, 정수 값의 크기, 컬렉션의 크기의 범위인지 검사
  • unique
    속성 값이 유일한 값인지 검사
  • url
    속성 값이 올바른 URL 주소인지 검사
  • validator
    클로저 형태로 사용자 정의 검증
  • bindable
    자동 데이터 바인딩으로 속성을 바인딩할지 여부

nullable과 blank의 차이

nullable과 blank 제약을 구별합니다. 이는 HTML 폼 전송에서 빈 필드 값을 전송할 때 매우 중요합니다.

blank: true는 빈 문자열일 수도 있지만 NULL일 수도 있습니다. 이렇게 규칙을 생각하면 다소 헛갈리기 쉽습니다.

따라서 다음과 같이 외우면 편리합니다.

  • 필수입력 값 필드 – blank: false
  • 필수입력 값이 아닌 필드 – nullable: true

모든 도메인 클래스의 속성은 기본적으로 NULL값이 아닙니다. 즉, 모든 필드 기본 값은 nullable: false 제약이 적용된다는 사실도 참고바랍니다.

Tagged with: 
Posted in 팁/리뷰

Grails 공식 가이드 문서 번역

Grails 공식 가이드 문서 번역을 진행합니다.

Grails 공식 가이드 문서가 한국어로 제공될 경우 보다 많은 사람들이 쉽게 Grails를 접할 수 있으리라 생각합니다.

단, 언제 번역이 완료될 지는 기약할 수 없습니다. :-)

 

공식 문서 github 다운로드

공식 문서 github 업데이트

공식 문서 가이드 번역 빌드

공식 문서 가이드 pdf 파일 빌드

 

 

Posted in 뉴스/다운로드

Groovy on Grails는 없다.

세상에 Groovy on Grails는 없습니다.

단지 Grails 프레임워크만 존재합니다.

여러분이 http://grails.org/ 홈페이지 어디에서도 Groovy on이라는 문구는 찾을 수 없습니다.

그런데 왜 Groovy on Grails라는 말이 많이 쓰이고 있을까요? 아마도 Grails가 Groovy 없이 동작할 수 없기 때문에 많은 개발자가 혼동하는 것 같습니다.

Groovy 메일링리스트에서 Ruby on Rails의 대안으로 Groovy로 프레임워크를 만들자고 논의되다가 2005년에 Groovy on Rails 프레임워크가 탄생했습니다.

그러나 메일링리스트에서 프레임워크 이름 변경의 요구가 있어 2006년 3월에 Grails로 이름이 바뀌었습니다.

그러나 많은 개발자가 Groovy on Grails 또는 Groovy on Rails로 부르고 있습니다.

원래 이름이 Groovy on Rails였으므로 이는 이해할 수 있지만 Groovy on Grails는 말이 되지 않습니다.

왜냐하면 아무도 Spring MVC를 Spring on Java라고 부르지 않기 때문입니다. Struts on Java, Django on Python 같은 말도 없습니다.

따라서 결론은 Grails에 Groovy는 꼭 필요하지만 Grails 프레임워크 자체로 생각해야 합니다.

 

Why I’ll never use Groovy on Grails (왜 나는 Groovy on Grails를 사용하지 않는가) 블로그 글을 토대로 작성되었습니다.

해외에서도 IT를 모르는 사람들에게는 이러한 기술적인 용어를 아무런 이유 없이 나열해서 사용하면 유식해 보인다고 생각하는 것 같습니다.

Posted in 팁/리뷰

Grails 스캐폴딩 언제 써야할까?

스캐폴딩이 꼭 필요할까요?

아닙니다.

스캐폴딩 기반으로 UI를 제공하는 웹 애플리케이션은 드뭅니다. 스캐폴딩을 토대로 만든 UI는 매우 기계적이어서 그다지 사용자 친화적이지 않기 때문입니다.

그러면 왜 바로 멋진 UI를 만들지 않고 스캐폴딩을 사용할까요?

  • 바로 사용할 수 있는 동작하는 웹 애플리케이션을 잽싸게 만들 수 있기 때문입니다.
    도메인 중심의 개발을 통해 요구사항 파악, 문제해결 알고리즘 등에 집중할 수 있습니다. 왜냐하면 데이터베이스의 쿼리 등을 고려하지 않고 여러 가지 기능 테스트, 디버깅 등을 진행할 수 있기 때문입니다.
  • 스캐폴딩으로 자동생성한 페이지와 커스텀 페이지는 따로 개발할 수도 있고 같이 합칠 수도 있습니다.
    스캐폴딩 기반의 템플릿 또는 생성된 파일로 사용자 인터페이스를 커스터마이징할 수 있습니다.

 스캐폴딩 코드가 최선은 아닙니다.

스캐폴딩 코드는 서비스를 이용하지 않아서 실무에서 그대로 사용하기에는 무리가 있습니다.

그래서 스캐폴딩 코드가 가장 좋은 예제는 아니지만 Groovy/Grails 코드를 학습하는데는 많은 도움이 됩니다.

스캐폴딩으로 UI를 쉽게 구성할 수 있다보니 도메인 모델이 많고 복잡하면 최종 제품에까지 계속 사용하고 싶은 유혹이 있습니다.

그러나 도메인 모델 중심 설계는 맞지만 사용자 경험을 위한 UI를 제공해야 한다는 측면에서는 이는 추천하지 않습니다.

스캐폴딩은 언제 사용할까요?

  1. 애플리케이션 개발 시작 단계에서 동기 부여 목적으로 스캐폴딩을 사용합니다.
    스캐폴딩을 사용하면 프로젝트 시작할 때 상당히 개발이 진척된 느낌을 주기 때문에 UI와 데이터 모델 사이에 단위/기능 테스트가 매우 쉽습니다.
  2. 관리자 화면에 스캐폴딩을 사용할 수 있습니다.
    일반 사용자가 모든 필드에 접근할 필요는 없습니다. 그러나 관리자는 때때로 모든 필드에 접근할 필요가 있습니다. 이럴 때 효과적으로 보안 접근제어를 한다면 동적 스캐폴딩을 활용해 쉽게 관리자 페이지를 만들 수 있습니다.
  3. 최종 제품에까지 스캐폴딩 코드를 사용한다면 반드시 커스터마이징합니다.
    스캐폴딩 코드는 서비스를 이용하지 않고 일부 스키마 관계를 표현할 수 없습니다. 최종 제품에서 Grails의 딱딱한 스캐폴딩 기반 UI는 사용자 친화적이지도 않습니다.
  4. 정적 스캐폴딩을 적절히 사용합니다.
    정적 스캐폴딩은 Grails 애플리케이션에서 현재 좋은 실무 예제가 아닙니다. 그러나 웹 애플리케이션 초보 개발자라면 정적 스캐폴딩으로 코드 학습에 좋은 출발점이 될 수 있습니다. 능숙한 개발자는 손수 개발한 커스텀 UI 페이지의 부족한 부분을 채우기 위해 동적 스캐폴딩을 사용합니다.

결론적으로 스캐폴딩 기반 UI가 사용자 경험 면에서 최선은 아니지만 도메인 모델 클래스와 필드가 많고 복잡할 때 간단히 UI를 구성할 수 있는 장점이 있으므로 개발 단계에서 유용하게 활용할 수 있습니다.

Tagged with: 
Posted in 팁/리뷰

Grails 애플리케이션 기본 포트 8080 변경

Grails 애플리케이션의 기본 포트는 8080입니다.

이 기본 포트를 변경하기 위한 방법은 다음과 같습니다.

1. 명령행 옵션 추가

2.  프로젝트 속성 지정

/grails-app/conf/BuildConfig.groovy 파일 수정 (아래 내용 추가)

3. 개인설정 변경

~/.grails/settings.groovy 파일 생성 (아래 내용 추가)

 

만약 여러 프로젝트를 수행하지 않을 경우에는 개인설정 변경이 편리하고 여러 프로젝트를 수행한다면 프로젝트별로 속성을 지정하는 것이 편리합니다.

Tagged with: 
Posted in 팁/리뷰

Groovy와 자바 비교

자바를 알면 Groovy 코드를 이해하는데 크게 어려움은 없습니다만 Groovy만의 특징을 이해할 필요가 있습니다.

1. 문장의 끝에 세미콜론 생략 가능

한 줄에 하나의 문장만 쓰면 세미콜론을 생략할 수 있습니다만 한 줄에 여러 개의 문장을 같이 사용할 경우에는 세미콜론을 꼭 붙여야 합니다.

2. return 문 생략 가능

마지막 문장을 평가한 다음에 리턴합니다.

이는 간단한 계산 후 반환하는 경우 쉽게 이해할 수 있지만 가끔은 더 혼동스럽기도 합니다. 따라서 return을 명시하는 것이 좀 더 코드를 이해하기 쉽다면 사용하고 그렇지 않으면 사용하지 않습니다.

3. 메소드 호출할 때 괄호 생략 가능

메소드를 호출 할 때 괄호를 생략할 수 있습니다만 메소드에 아무런 아규먼트가 없다면 괄호를 써서 메소드 호출임을 명시적으로 표현합니다.

아규먼트가 없는 메소드를 호출할 때는 Groovy 컴파일러가 속성으로 해석하지 않도록 괄호를 꼭 붙여줘야 합니다.

4. 멤버필드에 접근할 때 getter, setter를 쓰지 않고 직접 접근

Groovy 코드를 작성할 때는 멤버필드에 직접 접근하는 것처럼 사용하지만 실제로는 컴파일타임에 생성된 getter, setter를 호출합니다.

만약에 명시적으로 getter, setter 메소드를 선언하고 싶다면 아래와 같이 작성할 수도 있습니다:

위 예제에서 몇 가지 Groovy와 자바의 차이점을 확인할 수 있습니다.

5. 모든 Groovy 클래스는 자동으로 아규먼트를 가진 생성자 생성

이 생성자는 Map을 받아서 각 키값에 해당하는 속성이 있을 경우 set 메소드를 호출합니다. 이로서 객체를 생성하는데 입력하는 줄의 수를 줄일 수 있습니다.

그리고 Grails에서는 이러한 특징을 이용해 웹 페이지에서 값을 새 객체 인스턴스에 값을 할당합니다.

6. 타입은 생략 가능

명시적으로 타입을 지정하지 않고 def 키워드로 동적으로 변수를 선언할 수 있습니다.

그렇지만 Groovy 도메인 클래스의 속성에는 명시적으로 속성을 지정하는 것이 좋습니다.

7. assert 문에서 == 연산자는 왼쪽 연산자에서 equals() 메소드를 호출하는 것과 동일

8. java.lang.String 같은 자바 클래스에 Groovy는 일부 유용한 기능에 메소드를 추가 제공

toUpperCase() 메소드를 사용하는 것은 자바와 같습니다. 그러나 Groovy는 이 자바 String 클래스에 reverse() 같은 유용한 기능의 메소드를 추가했습니다.

 

Posted in 팁/리뷰

Groovy와 문자열 타입

Groovy에서 문자열은 자바의 기본 String 타입 외에 GString 타입을 추가로 제공합니다.

  • GString 타입의 문자열
    큰 따옴표로 감싼 문자열 리터럴
  • java.lang.String 타입의 문자열
    작은 따옴표로 감싼 문자열 리터럴

GString 타입은 자바 String 타입의 위치에 자유롭게 사용할 수 있습니다. String 문자열을 받는 메소드에 GString 문자열을 넘겨줘도 런타임에 자동으로 형변환되기 때문입니다.

GString 문자열의 가장 큰 장점은 문자열 안에 Groovy 변수 같은 수식(expression)을 평가할 수 있는 기능입니다. GString 문자열에 Groovy 수식을 넣는 방법은 두 가지 방법이 있습니다.

첫 번째 방법은 간단히 $ 기호를 붙인 변수를 다른 문자열 사이에 띄어쓰는 것입니다.

두 번째 방법은 $ 기호와 중괄호를 같이 사용하는 방법입니다.

두 번째 방법으로 복잡한 수식을 포함할 수 있고 작은 따옴표는 이스케이프 문자 없이 사용될 수 있기 때문에 HTML 만드는데 매우 유용합니다.

그리고 작은 따옴표 또는 큰 따옴표를 세 개 써서 여러 줄의 문자열 리터럴을 만들 수도 있습니다.

처음 따옴표 세 개로 열 때 백슬래시로 맨 처음에 쓸데 없이 개행문자(‘\n’)가 붙는 것을 방지합니다. 이 때 큰 따옴표 세 개를 써도 작은 따옴표 문자열처럼 Groovy 변수를 값으로 치환하지 않는 것에 유의합니다.

GString 타입의 문자열에서 첨자로 문자열의 일부를 아래와 같이 효과적으로 가져올 수 있습니다.

 

 

Posted in 팁/리뷰

Groovy와 데이터 타입

Grails 도메인 클래스에서 멤버변수 선언에 타입은 Integer, Long, Float, Boolean, String 등 사용할 수 있습니다. 뿐만 아니라 Date, Calendar, URL, byte[] 등을 사용할 수도 있습니다.

Groovy에서 아래의 패키지/클래스는 기본적으로 임포트되기 때문입니다. 따라서 Groovy에서는 추가적으로 import 문을 작성할 필요가 없습니다.

  • java.io.*
  • java.lang.*
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.*
  • java.util.*
  • groovy.lang.*
  • groovy.util.*

그리고 BigDecimal 산술 연산으로 기본적으로 처리됩니다.

즉, Groovy에서 부동소수점 리터럴은 기본적으로 BigDecimal 타입으로 처리됩니다. 예를 들어, 3.14 값은 자바에서는 기본적으로 double 타입이지만 Groovy에서는 BigDecimal이 됩니다.

이 때문에 많은 개발자들이 Groovy의 산술연산의 속도가 느릴 것이라고 생각합니다만 속도  저하보다 얻는 이점이 더 크다고 생각합니다.

정말로 float 또는 double을 사용하고 싶다면 명시적으로 해당 타입으로 선언해야 합니다.

또는 리터럴에 접미사를 붙여서 선언할 수도 있습니다.

Tagged with: 
Posted in 팁/리뷰

Grails 시작하기

본 예제는 Grails in Action, 2nd Edition의 1장의 예제 내용을 요약한 것입니다. – 현재 작성 중

웹 2.0 QOTD 예제

Quote-of-the-Day(오늘의 명언)을 무작위로 보여주는 예제입니다.

1. qotd 애플리케이션의 생성 및 실행, 종료

1.1. qotd 애플리케이션의 생성

1.2. qotd 애플리케이션의 실행 및 확인

qotd 애플리케이션은 다음과 같이 실행합니다:

qotd 애플리케이션은 웹 브라우저에서 다음 주소로 접근할 수 있습니다:

http://localhost:8080/qotd

만약 8080 포트가 이미 사용 중인 경우 C:\Users\사용자이름\.grails\settings.groovy 파일에 다음에 다음과 같이 입력해 포트를 변경합니다.

1.3. qotd 애플리케이션의 종료

애플리케이션은 다음과 같이 종료합니다:

2. quote 컨트롤러

2.1. quote 컨트롤러의 생성

QuoteController.groovy 컨트롤러 소스 파일 외에도 quote 뷰 디렉토리, QuoteControllerSpec.groovy 단위 테스트 파일이 같이 만들어집니다.

2.2. QuoteController.groovy 컨트롤러 파일의 내용

QuoteController.groovy 파일은 다음과 같이 기본적으로 작성되어 있습니다:

2.2. quote 컨트롤러에 home() 액션 추가

간단히 문자열을 렌더링 출력하는 home()  액션 메소드를 추가합니다.

http://localhost:8080/qotd/quote/index에 접근하면 알맞은 뷰 파일이 아직 없어서 에러가 발생합니다만 http://localhost:8080/qotd/quote/home에 접근하면 컨트롤러에 입력한 문자열을 출력합니다.

2.3. redirect 액션 처리

index 액션 메소드는 아직 렌더링하는 뷰가 없어서 에러가 발생하므로 home 액션 메소드로 리다이렉트하도록 처리합니다:

이제 index 액션 메소드로 접근하면 home 액션 메소드로 리다이렉트되어 문자열을 출력합니다.

3. 컨트롤러 액션과 뷰

3.1. random() 액션 메소드의 추가

3.2. 렌더링 뷰 추가

grails-app\views\quote\random.gsp 파일을 만들어 아래와 같이 작성합니다:

간단한 마크업으로 ${content}와 ${author} 변수로 컨트롤러에서 받은 값을 출력합니다.

3.3. 뷰에 CSS 적용

3.4. 레이아웃 적용

4. quote 도메인 클래스

4.1. quote 도메인 클래스의 생성

Quote.groovy 도메인 클래스 소스 파일과 단위 테스트 QuoteSpec.groovy 파일이 같이 만들어집니다.

quote 도메인 클래스의 내용은 기본적으로 아래와 같습니다.

4.2. 도메인 클래스에 속성 추가

4.3. 부트스트랩 설정

 

 

Posted in 강좌        






                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

반응형
LIST