← 돌아가기|하나제약 LIMS

실무 프로젝트

하나제약 LIMS

반복적인 시험·검사 업무를 전산화하여 수기 처리로 인한 오류를 줄이고, 시험 결과 관리와 승인 프로세스를 일관되게 운영할 수 있도록 지원하는 품질 관리 시스템.

감사 추적 기반의 이력 관리로 데이터 신뢰성을 확보하며 실제 운영 환경에서 활용되고 있습니다.

JavaSpring BootSpring SecurityOracleMyBatisJavaScript

Role

담당 역할

Backend Developer로 참여하여 하나제약 LIMS의 품질 관리 핵심 기능을 개발했습니다.

시험 의뢰·결과·승인 등 주요 도메인 로직과 ERP/MES 인터페이스 API를 개발하며, 데이터 정합성과 트랜잭션 안정성을 중점적으로 개선했습니다.

Achievements

주요 성과

01

운영 배치 프로그램 안정성 개선

Problem

운영 중이던 배치 프로그램은 장비 상태를 일괄 갱신하고, 다음날 수행될 모니터링 시험을 자동 생성하는 역할을 담당하고 있었습니다.

DB 부하나 네트워크 지연 같은 일시적인 오류가 발생할 경우 배치가 즉시 실패·종료되는 구조였습니다.

실패 여부를 즉시 인지할 수단이 없어 운영 단계에서 로그를 직접 확인해야만 상황을 파악할 수 있었습니다.

Approach

  • 01.기존 Spring @Scheduled 기반 구조를 유지해 변경 범위를 최소화
  • 02.예외 발생 시 즉시 종료하지 않고 자동 재시도 수행, 최대 3회로 제한하여 무한 재시도 방지
  • 03.재시도 간 간격을 두어 일시적인 장애의 자연 회복 가능성 확보
  • 04.재시도 이후에도 실패 시 배치 식별 정보·실행 시각·실패 원인을 포함한 회사 메일 알림 발송
  • 05.Quartz 등 별도 스케줄러 도입 없이 기존 구조를 유지하여 도입 복잡도 최소화

Result

일시적인 장애에도 배치가 자동으로 복구를 시도하는 구조가 확보되었습니다.

반복 실패 시 즉시 알림을 통해 운영자가 빠르게 대응할 수 있게 되었습니다.

Spring Batch@ScheduledRetryMail Notification
02

도메인 책임 분리 및 전략 패턴 적용을 통한 복잡한 비즈니스 로직 개선

Problem

LIMS 특성상 하나의 기능에 5~10개 이상의 테이블이 연관되고, 시험 유형·판정 방식·상태에 따른 다수의 조건 분기가 존재했습니다.

초기 구조에서는 상태 변경 규칙이 여러 서비스에 분산되어 중복과 불일치 가능성이 있었습니다.

서비스 레이어에 if-else 분기가 누적되어 메서드가 비대해지고 변경 시 영향 범위 예측이 어려웠습니다.

Approach

  • 01.상태와 규칙을 가진 도메인이 스스로 상태를 변경하도록 구조 재설계
  • 02.시험 의뢰·시험 결과 등 상태를 가지는 개념에 상태 전이 규칙과 검증 로직을 도메인 내부로 이동
  • 03.서비스는 상태 변경을 "요청"만 하고, 변경 가능 여부 판단과 전이 규칙은 도메인이 책임지도록 분리
  • 04.시험 유형별 결과 처리 로직을 공통 인터페이스로 정의하고 유형별 전략 클래스로 분리 (전략 패턴 적용)
  • 05.조건 분기가 늘어나도 기존 코드 수정 없이 전략 클래스 추가만으로 확장 가능한 구조 확보

Result

서비스 레이어에 집중되던 조건 분기와 상태 변경 로직이 도메인과 전략 클래스로 분산되어 가독성과 변경 용이성이 개선되었습니다.

신규 시험 유형 추가 시 기존 코드 수정 없이 전략 클래스 추가만으로 확장 가능한 구조가 되었습니다.

Domain DesignStrategy PatternOCPRefactoring