← 돌아가기|국제약품 LIMS

실무 프로젝트

국제약품 LIMS

의약품 품질 관리 공정 전반을 디지털화하여 시험 의뢰부터 분석, 결과 승인, 검체 폐기까지의 전 생애주기를 통합 관리하는 실험실 정보관리 시스템.

식약처 가이드라인을 준수하는 감사 추적(Audit Trail)과 ERP 연동을 통해 품질 데이터의 신뢰성과 전사 시스템 간 데이터 정합성을 안정적으로 확보합니다.

JavaSpring BootSpring SecuritySpring CacheRedisOracleMyBatisJavaScript

Role

담당 역할

Backend Developer로 참여하여 LIMS의 핵심 품질 관리 기능과 외부 시스템 연동 영역을 담당했습니다.

시험 데이터 처리와 승인 흐름에서 발생할 수 있는 동시성 및 정합성 이슈를 분석하고, 운영 환경에서도 안정적으로 동작하도록 개선하는 작업에 집중했습니다.

Achievements

주요 성과

01

중복 승인·상태 꼬임 문제 해결을 위한 공통 동시성 제어 설계

Problem

운영 환경에서 동일 검체에 대해 여러 사용자가 동시에 승인·폐기·상태 변경 요청을 보내면서 상태가 중복 처리되거나 이전 상태로 덮어써지는 문제가 반복적으로 발생했습니다.

Approach

  • 01.LIMS 프로젝트마다 상태 변경·승인 흐름에서 동시성 위험이 공통으로 존재함을 파악
  • 02.각 서비스마다 개별 구현 시 유지보수 비용 증가 및 처리 방식의 불일치 우려
  • 03.동시성 제어 로직을 공통 라이브러리로 분리 — 락 획득 → 실행 → 재시도 → 락 해제 고정 흐름 정의
  • 04.Redis 기반 분산 락으로 다중 인스턴스 환경 지원, 락 키·대기 시간·재시도 전략을 유연하게 설정 가능하도록 설계

Result

중복 승인 및 상태 꼬임 이슈가 완전히 해결되었습니다.

승인·상태 변경 과정에서 발생하던 데이터 불일치가 제거되어, 운영 중 수동 데이터 보정 작업이 더 이상 필요하지 않게 되었습니다.

RedisDistributed LockSpring BootLibrary Design
GitHub 검증 코드 보기 ↗
02

다단계 JOIN / UNION ALL 기반 보고서 쿼리 튜닝으로 조회 시간 50% 단축

Problem

여러 기준 데이터를 조합해 한 번에 보여주는 보고서 쿼리가 다수의 테이블 JOIN과 UNION ALL로 구성되어 있었습니다.

데이터 누적에 따라 조회 시간이 점점 늘어나 운영 환경에서 병목으로 작용했습니다.

Approach

  • 01.단순 인덱스 추가만으로는 개선이 미미했고, 실행 계획 분석을 통해 근본 원인을 파악
  • 02.불필요한 JOIN 제거 및 위치 재조정으로 중간 결과 집합 크기 감소
  • 03.UNION ALL로 합쳐진 쿼리 중 공통 조건을 선필터링하도록 구조 변경
  • 04.WHERE 절에서 반복적으로 사용되는 주요 조건 컬럼에 인덱스 추가로 Full Scan 제거

Result

동일 조건 기준 평균 조회 시간이 4.2초 → 2.1초로 약 50% 단축되었습니다.

보고서 조회 시 체감 지연이 개선되었습니다.

OracleQuery OptimizationExecution PlanIndex
03

제한적 캐싱 도입으로 조회 성능 및 시스템 안정성 개선

Problem

공통 코드와 품목 마스터처럼 변경 빈도가 낮은 참조 데이터가 있음에도 화면 조회나 업무 처리 시마다 데이터베이스를 직접 조회하는 구조였습니다.

시험 의뢰 등록이나 결과 입력 같은 주요 기능에서 동일한 기준 데이터가 반복 조회되어 DB 부하 증가와 응답 지연이 발생했습니다.

Approach

  • 01.LIMS는 시험 결과·승인 상태 등 실시간 정합성이 중요한 데이터가 많아 전체 캐싱은 부적합하다고 판단
  • 02.변경 가능성이 낮고 조회 빈도가 높은 코드성·마스터 데이터만 캐싱 대상으로 선별
  • 03.데이터 변경 시 캐시를 직접 갱신하는 대신 Evict 방식으로 제거 후 재조회 시 DB 기준으로 재적재
  • 04.캐시-DB 간 데이터 불일치 및 동시성 상황에서의 리스크 최소화

Result

반복적인 참조 데이터 조회로 인한 불필요한 DB 접근이 감소했습니다.

다수 사용자가 동시에 접근하는 환경에서 화면 응답 속도와 시스템 안정성이 개선되었습니다.

RedisSpring CacheCache EvictPerformance