블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
04-18 08:56
 

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
 

최근에 올라온 글

최근에 달린 댓글

org.springframework.context.annotation.CommonAnnotationBeanPostProcessor 이 클래스가...

<context:component-scan> 의 역할 중 하나를 맡고 있다라는 걸 어제야 알았다;;; 


찾아보니 AutowiredAnnotationBeanPostProcessor  이 클래스도 마찬가지...


쩝;;; 아직 멀었구만...



Posted by 자수씨
, |

어쩌다보니 iBATIS 환경도 아니고 하이버네이트 환경도 아닌 부분을 건들게 되었습니다.

다행히 Spring 3 환경이라 Spring JDBC 를 쓰다보니 좀 불편한 부분이 있어 ObjectRowMapper 를 새로 만들어보았습니다.

(이미 있을 수도 있겠지만 검색능력 부족으로...)

 

public class ObjectRowMapper<T> implements RowMapper<T>

사용법

 

 

퍼포먼스라... 일단 빠른 개발이 우선이기 때문에...

 

후우...

Posted by 자수씨
, |


인증(Authentication) - 주체의 신원을 주체가 주장하는 신원과 대비해 검증을 하는 과정
주체(Principal) - 사용자, 기기, 시스템이 될 수 있지만 주로 사용자를 말함
크리덴셜(Credential) - 주체가 인증받기 위해 제시해야 하는 신원 증명 정보. 주체가 사용자일 경우 비밀번호
권한부여(Authorization) - 인증된 사용자에게 권한들을 승인하는 과정, 항상 인증 과정을 거친 후에 수행되어야 함
접근 제어 (access control) - 애플리케이션 리소스에 대한 접근을 제어


참고자료

스프링 3 레시피

Posted by 자수씨
, |

Spring Roo 에서는 간단하게 "security setup" 명령으로 Spring Security 기본 설정을 추가할 수 있습니다.

기본적으로 admin 과 user 계정을 제공하고 "sha-256" 로 암호화된 패스워드를 제공합니다.
계정 추가가 필요할 때는 다음과 같은 작업을 통해서 가능합니다.


*nix 계열 서버에서 아래와 같은 명령어로 암호화된 패스워드를 생성할 수 있습니다.

# echo -n vicki | sha256sum
9f6646bd8c323f20de7538195709835dea9ab11108ea88326bdfaeb32cb2d9a4  -

위와 같이 "echo -n [패스워드] | sha256sum" 명령어를 입력하면 볼드체와 같이 암호화된 값을 확인할 수 있습니다.

생성된 패스워드를 이용하여 security 설정파일에 추가합니다.

/src/main/resources/META-INF/spring/applicationContext-security.xml



이제 /login 으로 접속하여 테스트 진행합니다.

Posted by 자수씨
, |

기본적으로 Spring Roo 는 UTF-8 의 인코딩 방식으로 데이터를 처리합니다.

"finder" 를 통해 검색 페이지를 추가하게 되면 GET 방식으로 데이터를 넘기는데, 인코딩 처리가 재대로 되지 않아 올바른 한글 검색 결과를 얻을 수 없습니다.

다음과 같은 방법으로 위의 문제를 해결합니다.

[WAS_HOME]/conf/server.xml


"Connector" 엘리먼트에 URIEncoding="UTF-8" 을 추가하여 다시 확인해보면 정상적으로 동작하는 것을 확인할 수 있습니다.


Posted by 자수씨
, |


1. SQLite 초기 설정

1.1 SQLiteDialect 추가

하이버네이트에서 사용할 SQLite Dialect 를 roo 프로젝트에 추가합니다.

/src/main/java/dialect/SQLiteDialect.java



1.2 Maven SQLite Dependency 추가

아래와 같이 pom.xml 에 SQLite dependency 를 추가합니다.

/pom.xml




2. SQLite 프로젝트 설정

2.1 JPA 설정

SQLiteDialect 를 사용하도록 아래와 같이 수정합니다.

/src/main/resources/META-INF/persistence.xml




DB 접속 정보를 설정합니다. 아래와 같이 database.url 에 DB 파일 위치를 설정할 수 있습니다.

/src/main/resources/META-INF/spring/database.properties



3. 프로젝트 실행

프로젝트를 Tomcat 이나 다른 WAS 를 통해 구동하게 되면 SQLite DB 파일이 생성되게 됩니다. 이 상태로 데이터를 조작하다가 다시 시작하게 되면 DB 가 초기화 되게 됩니다.

첫번째 프로젝트를 구동후에는 다음과 같이 설정을 해야 데이터가 유지되게 됩니다.

/src/main/resources/META-INF/persistence.xml




위에서 처럼 hibernate.hbm2ddl.auto 의 값을 "update" 로 변경하게 되면 현재 있는 DB 를 수정하게 됩니다. "create" 로 값이 설정되어 있으면 실행할 때 마다 새로운 DB 를 생성하게 됩니다. "validate" 는 정상적으로 동작을 하지 않는 것 같아... "update" 를 권장합니다.

Posted by 자수씨
, |

지난 번 포스팅에서 작성한 코드에 대한 테스트 코드를 만들어보겠습니다.


1. 테스트 클래스 생성

/spring-data-sample/src/test/java/kr/co/vicki/sample/spring/data/jpa/repository/IMemberRepositoryTest.java


위의 테스트 코드를 실행하니 아래와 같은... 시퀀스가 없다고 합니다.




하이버네이트 용 시퀀스를 생성합니다.



코드를 실행하면 결과는 체크가 불가능하지만 녹색바가 뜨기 때문에 정상 동작한다고 생각합니다 -ㅅ-;;;


2. JpaRepository 의 이용



JpaRepository 는 기존에 사용하였던 CrudRepository 와 PagingAndSortingRepository 를 상속받는 구조입니다.

기존에 사용하였던 CRUD 외에 페이징과 소팅도 지원을 하며 메소드 이름을 통해 쿼리 제너레이션이 가능합니다.

IMemberRepository 의 superclass 를 JpaRepository 로 변경한 후 아래와 같이 메소드를 추가합니다.



findByMemberId(String memberId) 메소드는 메소드 이름 통해 쿼리를 생성하여 실행되게 됩니다.

select m from Member m where m.memberId = ?1


아래와 같은 규칙으로 메소드 이름으로 쿼리가 생성되니 참고를...
Keyword
Sample JPQL snippet
And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2
Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Between findByStartDateBetween … where x.startDate between 1? and ?2
LessThan findByAgeLessThan … where x.age < ?1
GreaterThan findByAgeGreaterThan … where x.age > ?1
IsNull findByAgeIsNull … where x.age is null
IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null
Like findByFirstnameLike … where x.firstname like ?1
NotLike findByFirstnameNotLike … where x.firstname not like ?1
OrderBy findByAgeOrderByLastnameDesc … where x.age > ?1 order by x.lastname desc
Not findByLastnameNot … where x.lastname <> ?1


SQL 없이 직관적으로 코딩이 가능한 Spring Data JPA!!! 실제 개발 프로젝트에 적용시키까지는 많은 시간이 걸리겠지만 컨셉은 아주 상콤합니다!!!

Posted by 자수씨
, |

이전 포스팅에 이어 샘플 소스를 작성해보도록 하겠습니다.


1. 테이블 생성
샘플 테스트에 사용할 테이블을 아래 스크립트를 실행시켜 생성합니다.




2. domain, repository 소스 구성



Member 클래스: id 컬럼을 기본적으로 제공해주는 AbstractPersistable 를 상속받습니다.
- kr.co.vicki.sample.spring.data.jpa.domain.Member



IMemberRepository 클래스: id 를 이용하여 기본적인 CRUD 를 제공해주는 CrudRepository 를 상속받습니다.
- kr.co.vicki.sample.spring.data.jpa.repository.IMemberRepository



3. 환경 설정



/META-INF/persistence.xml (JPA 설정)


/infrastructure.xml (DB 환경 설정)


/repository-context.xml (jpa repository 등록)




이제 테스트 코드를 만들일만 남았습니다.

Posted by 자수씨
, |

Spring Data JPA 가 눈에 들어와서 간략한 튜토리얼을 작성합니다.


1. Maven 프로젝트 생성하기

이클립스에서 "New Maven Project" 로 Spring Data JPA 용 프로젝트를 생성합니다.

생성 시에 "Create a simple project (skip archetype selection)" 을 체크하시면 좀 더 빠르게 구조화된 프로젝트 구성이 가능합니다.




빌드 패스에서 "JRE System Library" 를 1.4 에서 1.6 으로 변경하고 /src/test/resource 를 삭제하면 위와 같은 구성이 됩니다.


2. pom.xml 설정

pom.xml 에 디펜던시와 플러그인과 관련된 설정을 적용합니다.



위와 같이 pom.xml 을 설정하고 저장하면, Spring Data JPA 로 개발할 수 있는 기본 환경 구성이 완료되었습니다~

Posted by 자수씨
, |



지금까지 Spring Roo 를 디버깅하기 위해 오랬동안 돌아왔습니다.
이제 그 결실을 맞보러~


Spring Roo addon 디버깅

1. 새로운 roo 프로젝트 생성

> roo-dev

Listening for transport dt_socket at address: 6889
    ____  ____  ____
   / __ \/ __ \/ __ \
  / /_/ / / / / / / /
 / _, _/ /_/ / /_/ /
/_/ |_|\____/\____/    1.1.5.RELEASE [rev d3a68c3]

Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo>

dt_socket 6889 번 포트로 리스닝 중이라는 멘트와 함께 Roo Shell 이 실행되었습니다.

아래의 roo script 를 이용하여 프로젝트를 구성합니다.

project --topLevelPackage kr.co.vicki.roo.sample.rentshop
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
entity --class ~.domain.Car --testAutomatically
field string --fieldName modelName --notNull
field number --fieldName displacement --type java.lang.Integer --notNull 0
entity --class ~.domain.Customer --testAutomatically
field string --fieldName name --notNull
entity --class ~.domain.Rent --testAutomatically
field reference --fieldName car --type ~.domain.Car --notNull
field number --fieldName period --type java.lang.Integer --notNull 0



2. STS 디버깅 환경 설정

이전 포스트에서 설정한 포트를 이용하여 Remote Java Application 설정을 구성합니다.






3. Web MVC Controller Add-on 디버깅

프로젝트도 만들었고 디버깅할 수 있는 환경도 구성되었습니다.

org.springframework.roo.addon.web.mvc.controller 프로젝트의 아래 소스코드를 열어서 중단점을 설정합니다.
/org.springframework.roo.addon.web.mvc.controller/src/main/java/org/springframework/roo/addon/web/mvc/controller/ControllerOperationsImpl.java



위에서 구성하였던 Remote Java Application 를 실행합니다.


아래와 같이 roo 명령을 실행하면 STS 에서 디버깅이 가능합니다.

    ____  ____  ____
   / __ \/ __ \/ __ \

  / /_/ / / / / / / /
 / _, _/ /_/ / /_/ /
/_/ |_|\____/\____/    1.1.5.RELEASE [rev d3a68c3]


Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo> controller all --package ~.web


처음 디버깅 할 경우 source 에 대한 경로 설정이 되어 있지 않기 때문에 아래의 캡쳐 이미지를 참조하여 source 를 설정합니다.



이제~ Spring Roo Add-on 소스 중단 점을 디버깅 할 수 있게 되었습니다.




실제로 addon 을 개발하고 디버깅하는 것은 아니였지만, 제공되는 addon 을 디버깅 함으로써 flow 를 파악할 수 있게되었습니다.
후훗~





Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백