Spring + iBatis 환경에서 VO와 db table column간의 매핑은 어떻게 하시나요?

4,145 views
Skip to first unread message

Andrew,Ahn

unread,
Nov 9, 2011, 11:18:04 PM11/9/11
to ks...@googlegroups.com
안녀하세요?

오랫만에 글을 남기는 것 같습니다.
요근래, 전자정부표준프레임워크를 사용할려고 보고 있는데,
여기는 VO로 다 처리하더라구요.
어차피 Spring이고, 다른 곳에도 유사할 것 같은데요.

일단 궁금한 점은 form -> model -> db column name간의 이름 규칙을 어떻게 하시는 지 궁금합니다.

User란 Class를 기준으로, DB Table은 Users라고 가정할때

User.userName -> Useres.USER_NAME
이럴 경우에 어떻게 매핑하시나요?

아니면, User.user_name -> Users.user_name 으로 가시나요?

다른 정부표준프레임워크를 쓰시는 분들도,
Controller -> Service -> DAO간의 Parameter Class를 공통 VO로 모두 쓰시나요?

어떻게 하면 편하게 작업할 수 있을까요? ^^
나꼼수를 너무 들었더니, 꼼수만 부릴려는 듯 싶네요
.
--
/**
* All Life is Problem Solving - Karl Popper
*
* @email Andrew, Ahn <rats...@gmail.com>
* @blog http://xinublog.tistory.com
* @deprecated twitter @ratsbomb
* @googletalk rats...@gmail.com
*/

박성철

unread,
Nov 10, 2011, 3:59:03 AM11/10/11
to Korea Spring User Group

> 안녀하세요?
안녕하세요. ^^

> 일단 궁금한 점은 form -> model -> db column name간의 이름 규칙을 어떻게 하시는 지 궁금합니다.
>
> User란 Class를 기준으로, DB Table은 Users라고 가정할때
> User.userName -> Useres.USER_NAME
> 이럴 경우에 어떻게 매핑하시나요?

넵! 저는 그렇게 합니다.

>
> 아니면, User.user_name -> Users.user_name 으로 가시나요?

개발자들이 (시간없고 귀찮다고) 고집을 피우면 이런 방식도 가능은 하지만 피합니다.

> 다른 정부표준프레임워크를 쓰시는 분들도,
> Controller -> Service -> DAO간의 Parameter Class를 공통 VO로 모두 쓰시나요?

공통 VO가 뭔가요?
저는 VO대신 도메인 객체 또는 DTO로 더 세분화해서 부르는 편인데요. 가능하면 (별 문제 없으면) 객체를 재사용하는 편입니
다. 하지만 용도가 다르면 그 용도에 맞는 객체를 따로 만들어 써야겠죠.

> 어떻게 하면 편하게 작업할 수 있을까요? ^^
> 나꼼수를 너무 들었더니, 꼼수만 부릴려는 듯 싶네요

명확한 코드를 작성하고
적절한 자동화 기술을 사용하고
좋은 갑과 PM을 만나시면...;;;

> --
> /**
> * All Life is Problem Solving - Karl Popper
> *

> * @email Andrew, Ahn <ratsb...@gmail.com>
> * @bloghttp://xinublog.tistory.com
> * @deprecated twitter @ratsbomb
> * @googletalk ratsb...@gmail.com
> */

Andrew,Ahn

unread,
Nov 10, 2011, 9:38:05 AM11/10/11
to ks...@googlegroups.com
안녕하세요? 오타가 났는데... 메일링리스트라서... ^^
성철님 오랫만이네요. :-)

아. 제 질문이 다소 명확하지 못했던 것 같습니다
예를 들어, User.userName -> Useres.USER_NAME 매핑하실때,
ibatis를 쓴다면, 
1. xml에서 ResultMap을 생성해서 column매핑을 하시는지, 
혹은 2. 쿼리에서 alias로 모델의 attribute name과 맞추는 지 궁금해서 질문 드렸었습니다.
아니면 제가 생각하는 다른 방법, 3. ibatis에 던지기전에 임의로 camel case형식을 attribute name을 _로 분리된 attribute name을 가진 모델로 변해서 넘기는지...
마지막 방법은 대략 좋다가도 좋지 못한 것 같긴 한데...

다른분들은 어떻게 사용하시는지요?

User.user_name -> Users.user_name 
저는 전에는 주로 위로 사용했는데, 이게 좀 더 명확한게 아닌지요?
이렇게 사용할 경우에는 어떤 점이 좋지 않나요?

공통 VO라함은, controller-service-dao의 signature에서 쓰이는 (parameter class) VO를 한 패키지내에서 하나로 대동단결해서 사용하더라구요.
제가 열어본 소스가 잘못된 케이스중에 하나겠지만요.

혹시, 정부표준프레임워크를 사용하시는 다른 프로젝트들에서도 그러한지 궁금해서요.

p.s. 질문하면서, 구글링 좀 했습니다.
Using SQL aliases to map columns to properties saves defining a <parameterMap> element, but there are limitations. There is no way to specify the types of the output columns (if necessary), there is no way to automatically load related data (complex properties), and there is a slight performance consequence (from accessing the result metadata). Architecturally, using aliases this way mixes "database logic" with "reporting logic", making the query harder to read and maintain. You can overcome these limitations with an explicit Result Map

ResultMap으로 column mapping하는 게 정석인 것 같긴 하네요. Database Datatype과 (Java) Model간의 Datatype을 명확히 한다는 점에서도 그렇구요.
아. 그렇지만, 모든 Model Attribute과 Table간의 Column을 Mapping하는 게 비효율적인 것 같은데...
자동으로 하면 좋겠지만....

Implicit Result Maps

these techniques will not work if you need to specify a column type, a null value, or any other property attributes.
A final issue is that there is some performance overhead when iBATIS has to map the column and property names automatically.

이렇네요. -_-)a 
질문을 적다가 구글링하다보면서 궁금한 점을 대충 다 풀어낸 것 같습니다.

이런 고민들을 안할려면 hibernate로 가는 게 맞을지도 모르겠네요.

관점의 문제가 아닌가 하네요.

아... 자문자답, 혼자서 산으로...  

2011/11/10 박성철 <gyu...@gmail.com>

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.




--
/**
* All Life is Problem Solving - Karl Popper
*
* @email Andrew, Ahn <rats...@gmail.com>
* @blog http://xinublog.tistory.com
* @deprecated twitter @ratsbomb
* @googletalk rats...@gmail.com
*/

황용대

unread,
Nov 10, 2011, 10:33:12 AM11/10/11
to ks...@googlegroups.com
저희는 jpa를 사용하는지라 첫번째 질문은 넘어가고
두번째 질문에 대해 답변을 하자면
도메인 모델을 조작하는 부분에서는 도메인 모델을 컨트롤러에서부터 dao까지 넘기고
검색 파라미터와 같이 데이터 모델과 관련 없는 것은 dto를 사용합니다

근데 dto나 vo가 차이가 있나요?

황용대 sta...@gmail.com

2011. 11. 10. 오후 1:18 "Andrew,Ahn" <rats...@gmail.com> 작성:

--

allforu0

unread,
Nov 10, 2011, 8:14:30 PM11/10/11
to ks...@googlegroups.com
뷰오브젝트, 트랜스퍼(?)오브젝트.. 이런 개념으로...
보여주기만 할 때는 vo, submit이나 어떤 데이터를 DB에 쓸 때(?) to 썼었는뎅.
dto는 데이터 트랜스퍼 오브젝트? 머 그런 걸로 알고 잇는데... 
움.. 그냥 쓰기 나름 아닌가여; 

2011년 11월 11일 오전 12:33, 황용대 <sta...@gmail.com>님의 말:

최영목

unread,
Nov 10, 2011, 8:44:02 PM11/10/11
to ks...@googlegroups.com
1. 저는 개인적으로 ResultMap에서 column매핑을 선호합니다. ^^ 그럴일은 거의 없지만 자바 변수명을 바꾸었을 때의 영향도가 상대적으로 적지 않나 생각됩니다. 대신 아주아주 미세하게나마 성능문제를 발생시킬 가능성은 있겠네요. (아직 ResultMap으로 인한 성능 저하는 경험을 못해보았습니다. ㅠㅠ)

2. VO의 의미 : 다음 URL을 참고하세요 ^^

저는 개인적으로 DTO는 말 그대로 데이터 전송 객체이고(레이어간, 객체간, 서버와 화면간의 데이터 전송을 위한 객체), VO를 언급하면 저는 DDD의 Value Object를 생각합니다.

하지만 많은 분들이 위 링크에 언급된 것처럼 VO를 DTO의 의미로 많이 사용하시기 때문에 VO를 DTO의 의미로 말씀하시는 것인지 아니면 도메인으로의 Value Object를 말씀하시는 것인지 꼭 확인하게 되더군요 ^^ 박성철님께서 말씀하신 것도 이런 맥락이 아닐까 조심스레 추측해봅니다. ^^

2011년 11월 11일 오전 10:14, allforu0 <allf...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages