Notice
Recent Posts
Recent Comments
Link
GitHub Contribution 그래프
Loading data ...
«   2026/02   »
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
Archives
Today
Total
관리 메뉴

Youn's IT Memo

레거시 프로젝트 DB 동기화 문: Oracle Docker Image를 활용한 프로세스 본문

데이터베이스

레거시 프로젝트 DB 동기화 문: Oracle Docker Image를 활용한 프로세스

bellman66 2024. 4. 6. 16:15

발단

최근에 맡게 된 레거시 프로젝트에서는 DB 동기화의 필요성을 느끼게 되었습니다. 
오라클의 패키지 & 프로시저로 구성된 환경이었기 때문에 프로젝트 팀원들 간의 작업 환경 통일성과
각자의 로컬에서 작업을 지원하기 위해서는 DB의 일관성이 필수적이었고,
이에 따라 Oracle Docker Image를 활용하여 동기화하는 방안을 모색하게 되었습니다.


요약

레거시 프로젝트에서 DB 동기화를 위한 프로세스를 정리하고자 합니다.
프로젝트 팀원들의 효율적인 협업과 작업 환경 통일성을 제공하기 위해
Oracle Docker Image를 사용하여 DB를 동기화하는 방법에 대해 정리해보겠습니다.

https://github.com/oracle/docker-images

 


Process

1. 패키지 구조 정립

오라클 이미지의 경우 이미지내 docker-entrypoint-initdb.d/startup & setup 폴더에서 초기 Init을 실행합니다 

Init을 하기위한 패키지 구조를 다음과 같이 정립하였습니다

Root
- DDL
- procedure
- sequence
- shell
- view

 

2. User Shell 작성

DDL, procedure 같은 폴더와 다르게 Shell같은 경우 기본 유저 세팅을 담당합니다.

Shell 폴더의 경우 Setup으로 배치되며 DDL, Procedure 시작전 유저 정보를 설정합니다

sqlplus / as sysdba<<eof

UPDATE sys.props$ SET value$ = 'UTF8' WHERE name = 'NLS_CHARACTERSET';

UPDATE sys.props$ SET value$ = 'UTF8' WHERE name = 'NLS_NCHAR_CHARACTERSET';

UPDATE sys.props$ SET value$ = 'KOREAN_KOREA.UTF8' WHERE name = 'NLS_LANGUAGE';

commit;

shutdown immediate;

startup mount;

alter system enable restricted session;

alter database open;

alter database character set internal_use UTF8;

alter database national character set internal_use UTF8;

shutdown immediate;

startup;

create tablespace TS_TEST datafile '/home/oracle/TS_TEST.dbf' SIZE 2048M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

create user USER identified by USER default tablespace TS_TEST quota unlimited on TS_TEST;
grant all privileges to USER;

commit;

exit;
eof

 

3. Dockerfile 작성

Oracle Docker Image를 생성하기 위해 Dockerfile을 작성합니다.
이 Dockerfile에는 Setup & Startup Init을 하기위한 설정을 정의합니다.

FROM doctorkirk/oracle-19c

ADD shell/init_user.sh /docker-entrypoint-initdb.d/setup/

ADD shell/000_init.sh /docker-entrypoint-initdb.d/startup/

ADD DDL/*.sql /docker-entrypoint-initdb.d/startup/

ADD view/*.sql /docker-entrypoint-initdb.d/startup/

ADD seqence/*.sql /docker-entrypoint-initdb.d/startup/

ADD procedure/*.sql /docker-entrypoint-initdb.d/startup/

마무리

Oracle Docker Image를 활용한 DB 동기화 프로세스를 통해 프로젝트 팀은 효율적인 협업과 작업 환경의 통일성을 확보할 수 있었습니다. 각 팀원은 독립적으로 작업을 진행하면서도 일관된 환경에서 작업할 수 있어 개발 생산성을 향상시킬 수 있는 구조였던거 같습니다.

 

하지만 초기에 배포되는 시간이 7분 정도 걸리는 점과 지속적으로 이미지를 업데이트 하는 에러사항이 존재합니다.

그런 부분에서 결국은 채택되진 못했지만 상황에 맞춰 차후에 선택해볼만한 좋은 방법이라 생각됩니다.

'데이터베이스' 카테고리의 다른 글

SQL 트리거 - Log 설계  (0) 2023.09.09