Clean Code that Works.

봄싹 서버가 PostgreSql을 사용하기 때문에 기존에 만들어 두었던 시큐리티를 좀 바꾸어야 했다.
테스트 돌리는 중간에 프로퍼티 참조를 잘 못해서 삽질을 완전 많이 했다. -_-;;;

프로퍼티 홀더에서 프로퍼티를 찾는 순서는 어떻게 되고, 동일 키 값을 가진 프로퍼티를 나중에 찾은 값이 덮어 씌우는 것인거 같은데, 이것 좀 확인해 봐야겠다.

아직 하이버네이트 공부를 제대로 하지 않아서, 도메인 클래스 만드는데도 약간 고생을..
시큐리티 문서에 있는 ACL 스키마를 가지고 도메인 클래스를 만드는데(쿼리가지고 테이블 생성하기 싫어서, 무엇보다 봄싹에선 도메인 클래스를 가지고 하이버네이트가 자동 생성하는 형식을 사용하고 있다.)

처음에는 그냥 자바 기본 데이터 타입으로 도메인 클래스를 생성하였는데, 그러다가 문제에 봉착 하였다.
identity가 생성이 안되는 것이었다.

You will have to set the classIdentityQuery and sidIdentityQuery properties of JdbcMutableAclService to the following values, respectively:

  • select currval(pg_get_serial_sequence('acl_class', 'id'))

  • select currval(pg_get_serial_sequence('acl_sid', 'id'))


PostgreSQL에서는 위같은 방법으로 시퀀스를 자동 생성한다.

왜 안될까. 하고 찾아 보다가 PGSQL 문서를 찾아 보았다.
pg_get_serial_sequence(table_name, column_name)
get name of the sequence that a serial or bigserial column uses
이런 내용이...
serial, bigserial 타입의 컬럼만 시퀀스를 생성해 준단다.
어우 치사해 -_-;;

아무튼 자바에는 저런 타입이 없다.
그럼 어떻게 해야할 까..

도메인 클래스의 @Column에 속성중에 데이터 타입을 명시해 줄 방법이 있었다.
하이버네이트 어노테이션 설명
columnDefinition (optional): override the sql DDL fragment for this particular column (non portable)
이 속성을 명시 해 주면 된다. 아래와 같이..

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(columnDefinition="bigserial")
    private int id;

스프링 속성 설정은 아래와 같이 해주면 된다. ACL은 DB별로 속성을 타지 않게 하려고 전부 표준 SQL로 동작을 하는데, identity 가져 오는 것은 DB마다 다 다르므로 각각 DB 타입에 따라 명시해 주어야 한다. (기본은 Call Identity())


이제 시큐리티 설정도 어느정도 마무리 되어 가고,
9월 즈음에 스터디 게시판 설계 마무리 하고 테스트 작성하면서 ACL에 대해서 더 포스팅 하도록 해야겠다.