일전에 Hybernate 로 오타냈던 사람입니다
어떤 분의 오타정정으로 Hibernate 에 관련된 것들을 구글링을 해보았습니다
몇 일간 구글링을 한 결과입니다
1. Hibernate 는 ORM 이기 때문에 Mybatis(iBatis) 와는 적용할 환경이나 역할이 다르다
2. ORM 특성상 소위 말하는 지저분한 DB 환경에서는 적용하기 힘들다
3. Hibernate 를 기피하는 한국 개발특성 상 할 수 있는 인력이 많지가 않아서 인력 수급에 문제가 생길 우려가 있다
4. 3의 이유로 Hibernate 관련하여 잘 아는 사람이 적어서 중간에 MyBatis 로 급변하는 프로젝트 역시 존재한다
여기까지는 이해했습니다
그럼에도 불구하고 전 Hibernate 로 이번 프로젝트를 꼭 하고 싶은 이유는 다음과 같습니다
1. MyBatis 와는 다르게 가변적인 DB 에 적합하다
2. 개발자의 SQL 관련 개발 시간을 줄여줘서 프로세스 개발에 중점적으로 투자할 여력이 생긴다
3. 만약 개발자가 Hibernate 에 대해서 계속 공부하고 익숙해지기 시작하면 그 효율은 MyBatis 와는 비교할 수 없을 정도로 유지보수가 간단해진다
라는 것이 이유인데
다만 한가지 궁금한 점이 있습니다
Hibernate 가 정말로 가변적인 DB 에 어느정도 선에서는 자유로운가 입니다
ORACLE, MY-SQL 등등.....
DB종류가 바뀌는 것에 대해서 자유롭다 라는 것은 이해했습니다
그럼 과연 다음과 같은 상황에서도 자유로운가? 라는 질문이 아직까지 머릿속에서 떠나지 않고 있습니다
1번DB : ORACLE 이며 USER 테이블에 ID : VARCHAR2(20), ADDR : VARCHAR2(200) 외 다수의 컬럼 존재
2번DB : MY-SQL 이며 USER 테이블에 ID : VARCHAR(10), ADDR1 : VARCHAR(150), ADDR2 : VARCHAR(100) 외 다수의 컬럼 존재
위와 같은 환경의 데이터베이스가 있다고 가정하죠
그리고 할려는 작업은 1번DB 의 데이터를 2번DB 로 옮기는 것입니다
일단 제 생각은 이렇습니다
먼저 테이블이나 스키마명 같은 경우는 Hibernate 특성상 달라도 무관하다고 봅니다
그럼 이제 해당되는 것은 테이블 컬럼 형식이나 데이터입니다
먼저 컬럼 형식의 경우 위의 경우에는 ID 를 옮기는 데에는 먼저 큰 문제가 생기게 됩니다
이유는 데이터인데
1번DB 의 경우 20의 길이를 가졌기 때문에 2번DB 의 10의 길이를 넘어가는 ID 가 존재합니다
그렇기 때문에 이 부분에서 10의 길이를 넘어가는 데이터는 절삭처리한다 라는 전제가 깔렸다면 먼저 해결된다고 봅니다
만약 아니라면 2번DB 의 ID 컬럼의 형식을 20으로 늘려주던가 해야겠죠
그리고 주소의 경우입니다
1번DB 의 주소는 하나의 컬럼에 입력되어 있는 상황입니다
그걸 2번DB 로 옮길려는 작업을 할려면 먼저 다음과 같은 전제조건이 깔려야 된다고 봅니다
1. 1번DB의 주소를 두개의 컬럼으로 나눌 수 있는 기준이 필요
2. 1번이 불가능하다면 ID 와 같이 데이터의 잘림을 감수하고 하나의 컬럼으로 밀어넣음
서론이 좀 길었습니다
제가 이 글을 쓴 목적이 위와 같은 작업이 과연 Hibernate 에서 가능하냐 라는 것이 머릿속에서 떠나지 않아서 입니다
혹시라도 Hibernate 가 위와 같은 작업이 가능하도록 개발하신 분이라면
xml 방식인지 annotation 방식인지 정도라도 조언을 좀 부탁드리겠습니다
제가 구글링이 좀 부족해서인지는 모르겠지만 이에 대한 해답의 경우 몇 일을 검색해도 나오지를 않네요....