Loading the catalog…
Loading the catalog…
이번에는 회사에서 이미 가지고 있는 데이터를 Biz Assist에서도 활용하고 싶었다. 사업 정보나 계약 정보 실적이나 인력 관련 데이터가 이미 따로 관리되고 있었기 때문이다. 처음에는 그냥 회사 DB를 연결해서 필요한 데이터를 가져오면 되지 않을까 싶었다. 근데 생각해 보니까 이건 지금까지 외부 API 붙이던 거랑은 조금 달랐다. 회사 DB를 잘못 건드리면 안 된다. 그래서 이번에는 데이터를 가져오는 것보다 먼저 어떻게 안전하게 연결할지 부터 생각했다. 기존 DB랑 섞이면 안 됐다 Biz Assist는 이미 자체 DB를 사용하고 있었다. 공지나 알림 이력처럼 Biz Assist에서 직접 만드는 데이터는 여기에 저장하고 있다. 근데 회사 DB까지 연결하면 한 애플리케이션 안에 DB가 두 개가 된다. 이때 그냥 DataSource를 하나 더 추가하면 기존 Repository가 어느 DB를 사용하는지 헷갈릴 수도 있다. 특히 Biz Assist에서 사용하는 schema.sql 이 회사 DB에서 실행되면 큰일이다. 그래서 처음부터 두 DB의 역할을 명확하게 나눴다. Biz Assist DB → 기존 기능에서 계속 사용 → schema.sql 적용 → 읽기 / 쓰기 가능 회사 DB → 별도 연결 → 조회 전용 → Biz Assist 테이블 생성 안 함 기존 H2는 그대로 기본 DB로 두고 회사 DB는 별도의 DataSource로 분리했다. 회사 DB 연결 때문에 기존 기능이 영향을 받으면 안 됐다. 회사 DB는 조회만 하자 회사 DB에서 필요한 건 기존 데이터를 가져오는 기능이다. Biz Assist에서 회사 데이터를 수정할 이유는 없었다. 그래서 처음부터 read-only 로 연결하기로 했다. SELECT → 가능 INSERT UPDATE DELETE → 사용하지 않음 연결 풀도 크게 잡지 않았다. 회사 DB를 주 DB처럼 사용하는 게 아니라 필요한 정보를 조회하는 용도니까 최대 연결 수도 2개로 제한했다. 조회가 너무 오래 걸리는 상황을 막기 위해 쿼리 시간과 최대 조회 건수도 제한했다. 연결할 수 있다는 것보다 얼마나 제한해서 사용할지가 더 중요했다. 기본값은 아예 연결 안 함 또 하나 고민한 건 애플리케이션을 실행할 때마다 회사 DB에 붙어야 하냐는 거였다. 개발할 때는 회사 DB가 필요 없는 경우도 많다. 네트워크가 안 되는 환경에서 실행할 수도 있고 테스트할 때까지 외부 DB에 연결할 필요도 없다. 그래서 회사 DB 기능은 기본적으로 꺼두었다. company-db.enabled = false 필요할 때만 환경변수로 활성화한다. DB 주소나 계정 정보도 코드에 직접 넣지 않고 환경변수로 받도록 했다. 회사 DB 설정이 없다고 Biz Assist 자체가 실행되지 않는 구조는 피하고 싶었다. 일단 데이터부터 보지 않았다 회사 DB에 연결했으면 바로 실제 업무 데이터를 조회해 볼 수도 있었다. 근데 첫 단계부터 실제 데이터를 읽는 건 조금 부담스러웠다. 그래서 먼저 DB 구조만 확인하기로 했다. JDBC metadata를 이용해서 테이블 컬럼 Primary Key Foreign Key Index 같은 구조 정보만 확인하도록 했다. 실제 업무 데이터 행은 읽지 않는다. 그리고 모든 테이블을 다 보는 대신 사업이나 계약 실적이나 인력처럼 Biz Assist와 관련 있을 만한 이름만 찾도록 했다. 이 단계의 목적은 회사 DB에 어떤 데이터가 있는지 먼저 구조부터 파악하는 것 이었다. 쓰기 권한도 한번 확인해 보기로 했다 코드에서 read-only로 설정했더라도 DB 계정 자체에 쓰기 권한이 있을 수도 있다. 그래서 metadata를 확인할 때 현재 계정의 권한도 같이 확인하도록 했다. INSERT UPDATE DELETE TRUNCATE TRIGGER REFERENCES 이런 쓰기 권한이 있는지도 확인한다. 애플리케이션에서는 조회 전용으로 사용하더라도 계정 권한까지 같이 확인해 두는 게 나을 것 같았다. 기존 DB와 정말 분리됐는지도 확인했다 DB를 두 개 연결하는 구조를 만들었으니 이 부분도 테스트를 추가했다. 확인하고 싶었던 건 간단했다. Biz Assist DB → 기존 EXTERNAL_NOTICE 테이블 존재 회사 DB → Biz Assist 테이블 없음 즉 schema.sql 이 기존 DB에만 적용되고 회사 DB에는 영향을 주지 않는지 확인하는 테스트다. 회사 DB 연결 기능을 추가하면서 기존 DB 구조까지 바뀌면 안 되니까 이 부분은 먼저 막아두고 싶었다. 일단 연결보다 경계를 먼저 만들었다 처음에는 회사 DB 데이터도 가져와보자 정도로 시작했다. 근데 실제로 붙이려고 보니까 어떤 데이터를 가져올지보다 먼저 정해야 할 게 많았다. 기존 DB와 분리 ↓ 회사 DB는 조회 전용 ↓ 필요할 때만 연결 ↓ 접속 정보는 환경변수 ↓ 실제 데이터보다 구조부터 확인 이번 작업에서는 아직 회사 데이터를 Biz Assist 화면에 보여주지는 않았다. 대신 회사 DB를 연결할 때 어디까지 허용할지부터 정리했다. 외부 시스템을 붙일 때는 기능부터 만드는 것보다 경계를 먼저 잡는 게 맞는 것 같다.
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
회사 DB를 바로 연결해도 될까?. 이번에는 회사에서 이미 가지고 있는 데이터를 Biz Assist에서도 활용하고 싶었다. 사업 정보나 계약 정보 실적이나 인력 관련 데이터가 이미 따로 관리되고 있었기 때문이다. 처음에는 그냥 회사 DB를 연결해서 필요한 데이터를 가져오면 되지 않을까 싶었다. 근데 생각해 보니까 이건 지금까지 외부 API 붙이던 거랑은 조금 달랐다. 회사 DB를 잘못 건드리면 안 된다. 그래서 이번에는 데이터를 가져오는 것보다 먼저 어떻게 안전하게 연결할지 부터 생각했다. 기존 DB랑 섞이면 안 됐다 Biz Assist는 이미 자체 DB를 사용하고 있었다. 공지나 알림 이력처럼 Biz Assist에서 직접 만드는 데이터는 여기에 저장하고 있다. 근데 회사 DB까지 연결하면 한 애플리케이션…
Open source