전체 과정 P4 실무 실험과 문제 해결 · 약 100분 · 중급

CH08실무 실험: 조건 최적화와 방법 개발

그래디언트 · 온도 · 유속을 바꿔 가며 다성분 시료의 분리 조건을 찾고, 작은 방법 개발 프로젝트를 끝까지 수행합니다.

선수 챕터: CH06 CH07

학습 목표#

  • 머무름 폭이 넓은 혼합물이 등용매로는 왜 안 되는지 설명하고, 스카우팅 그래디언트(5 → 95 %B) 결과에서 피크가 나올 때의 %B 를 계산해 그래디언트 범위 · 기울기를 좁힐 수 있습니다.
  • 지연 부피(dwell volume) 를 측정하고, 그래디언트 지연 시간 · 재평형(후처리) 시간을 계산하며, 지연 부피가 다른 장비로 메서드를 옮길 때 무엇이 바뀌는지 말할 수 있습니다.
  • 컬럼 온도가 머무름 · 압력 · 선택성(α) 에 주는 영향을 구분하고, 기울기만으로 풀리지 않는 임계 쌍을 온도로 분리할 수 있습니다.
  • 반 딤터(van Deemter) 식 H = A + B/u + C·u 를 Python 으로 계산해 최적 유속을 찾고, 효율 · 분석 시간 · 압력 사이에서 운전 유속을 근거를 들어 고를 수 있습니다.
  • 아세트아미노펜 · 카페인 · 아스피린 혼합 정제(시뮬레이션)를 대상으로 컬럼 · 파장 → 이동상 · pH → 그래디언트 → 온도 · 유속 순서로 방법을 개발하고, SST 기준 설정 · 검량 · 함량(% 표시량) 계산 · 보고서까지 한 번에 수행할 수 있습니다.

이론#

1교시 — 그래디언트 · 온도 · 유속 최적화#

이 단원에서 할 일#

ch06 에서는 메탄올 비율을 20 · 30 · 40 % 로 바꿔 가며 등용매 조건 하나를 골랐습니다. 성분 세 개가 비슷한 시간대에 나왔기 때문에 가능했습니다. 이번에는 극성이 크게 다른 다섯 성분이 섞인 **화장품 성분 혼합 표준 MIX-COS5**(카페인 + 방부제 4종, 시뮬레이터 가상 시료)를 분석합니다. 어떤 등용매 조성으로도 "빨리 + 모두 분리" 를 만족하지 못하는 시료입니다.

이번 단원에서는 다음 순서로 진행합니다.

  1. 등용매가 실패하는 것을 확인하고, 스카우팅 그래디언트로 다섯 피크의 위치를 한 번에 봅니다.
  2. 스카우팅 결과로 그래디언트 범위를 좁히고, 지연 부피 · 재평형을 계산해 메서드 시간을 정합니다.
  3. 기울기만으로 풀리지 않는 임계 쌍(critical pair) 을 온도로 분리합니다.
  4. 반 딤터 곡선으로 유속을 점검하고 메서드를 확정합니다.
3D 모델 준비 상황

3D 장비 모델(assets/robot/robot.json)은 강좌 진행에 맞춰 추가됩니다. 차시 머리에 3D 뷰어 버튼이 보이지 않으면 아직 준비 중입니다. 모델이 준비되면 펌프의 혼합점(멀티채널 밸브 · 믹서) → 펌프 헤드 → 퍼지 밸브 → 샘플러 → 컬럼 입구까지 이어지는 캐필러리를 3D 로 따라가며, 이 길의 부피가 곧 이번 차시의 지연 부피라는 것을 확인해 봅니다. 그 전에는 아래 Playground 계산 실습으로 같은 내용을 숫자로 확인합니다.

3D 시뮬레이터 열기

3D 뷰어 열기

시료 — MIX-COS5 (화장품 성분 혼합 표준, 가상)#

약어성분성질 (C18 기준)농도 (mg/L)
CAF카페인극성 큼 → 빨리 나옴 (ch06 · ch07 과 같은 물질)20
PE페녹시에탄올중간. 254 nm 흡수가 약해 피크가 작음200
MP메틸파라벤중간. PE 와 머무름이 비슷함20
PP프로필파라벤소수성 큼20
BP부틸파라벤소수성 가장 큼 → 가장 늦게 나옴20
  • 장비 구성은 ch07 과 같습니다: C18 150 × 4.6 mm, 5 µm, 채널 A = 물, 채널 B = 메탄올, 1.0 mL/min, 10 µL, 254 nm.
  • 시료 용매는 물:메탄올 70:30 으로 맞춥니다. 그래디언트 시작 조성보다 크게 진한(메탄올이 많은) 용매에 녹이면 앞쪽 피크가 갈라집니다(ch06 오류 5번).

등용매로 분리되지 않는 시료#

먼저 메탄올 30 % 와 50 % 등용매로 한 번씩 주입해 봅니다(시뮬레이터 결과).

조건카페인 tRPE · MP부틸파라벤 tR문제
메탄올 30 %5.1629.77 · 38.74120 min 이 지나도 안 나옴뒤쪽 피크가 너무 늦고 넓게 퍼짐
메탄올 50 %2.33 (k ≈ 0.4)6.98 · 6.98 (완전히 겹침)48.35카페인은 t₀ 근처, PE · MP 는 겹치고, 그래도 48 분
메탄올 60 %1.94 (k ≈ 0.2)MP 3.66 · PE 3.96 (Rs 1.50)15.10카페인이 t₀ 와 붙어 정량 불가
  • 등용매에서는 모든 성분의 k 가 같은 조성에서 정해집니다. 극성이 비슷한 성분 몇 개는 괜찮지만, 이번처럼 k 가 수백 배 차이 나는 시료는 "앞 피크에 맞추면 뒤가 너무 늦고, 뒤 피크에 맞추면 앞이 t₀ 에 묻히는" 상황이 됩니다. 이것을 일반 용출 문제(general elution problem) 라고 합니다.
  • 해법은 그래디언트입니다. 처음에는 약한 이동상(물이 많음)으로 앞 성분을 붙잡아 두고, 시간이 지나며 메탄올을 늘려 뒤 성분을 밀어냅니다. 그래서 모든 피크가 비슷한 k(그리고 비슷한 폭)로 나옵니다.
  • 등용매 60 % 에서 PE 가 MP 뒤에 나온 것에 주목합니다. 메탄올 30 % 에서는 PE 가 먼저였습니다. 두 성분은 메탄올 비율에 대한 민감도(ch06 의 S)가 달라, 조성에 따라 순서가 바뀝니다. 이 쌍이 이번 단원 내내 문제를 일으키는 임계 쌍입니다.

스카우팅 그래디언트 — 5 → 95 %B 로 한 번에 훑기#

스카우팅 그래디언트(scouting gradient) 는 아무것도 모를 때 "넓고 길게" 한 번 돌려 피크가 어디쯤 나오는지 보는 그래디언트입니다. 이 강좌의 기본값은 다음과 같습니다.

시간 (min)%A%B유속뜻
0.0095.05.01.000거의 물 — 극성 성분을 붙잡음
20.005.095.01.000분당 4.5 %p 로 직선 증가
25.005.095.01.00095 % 유지 — 남은 성분 씻어 냄

정지 시간 25 min, 후처리 시간 10 min, 30 °C 입니다.

스카우팅 그래디언트 5 → 95 %B / 20 min · 30 °C · 1.0 mL/min · 254 nm 0 2 4 6 8 10 12 14 16 18 20 22 시간 (min) 0 50 100 %B 흡광도 페녹시에탄올 14.51 메틸파라벤 14.58 카페인 9.04 프로필파라벤 17.36 부틸파라벤 18.46 지연 t_D = 1.0 min 임계 쌍 Rs 0.34 크로마토그램 시간표의 %B (펌프 혼합점) 컬럼 입구에 닿는 %B (지연 부피 1.0 mL) 첫 피크(카페인) 용출 %B ≈ 34 %, 마지막 피크(부틸파라벤) ≈ 76 % → 다음 그래디언트를 35 → 75 %B 로 좁힘
스카우팅 그래디언트 결과 — 다섯 피크가 9 ~ 18.5 min 에 모두 나오지만 PE · MP 가 겹침(Rs 0.34). 점선은 시간표의 %B, 주황선은 지연 부피 때문에 1.0 min 늦게 컬럼에 닿는 실제 %B
피크tR (min)용출 %B (계산)다음 피크와 Rs
카페인9.04약 34 %24.13
페녹시에탄올14.51약 59 %0.34
메틸파라벤14.58약 59 %13.95
프로필파라벤17.36약 71 %5.93
부틸파라벤18.46약 76 %—

용출 %B 는 그 피크가 컬럼을 빠져나올 무렵 컬럼 안에 있던 조성입니다. 다음 식으로 어림합니다.

용출 %B ≈ 시작 %B + 기울기(%p/min) × (tR − t_D − t₀)

  • t_D(지연 시간) = 지연 부피 ÷ 유속 = 1.0 mL ÷ 1.0 mL/min = 1.0 min, t₀ = 1.62 min(ch06).
  • 카페인: 5 + 4.5 × (9.04 − 1.0 − 1.62) = 5 + 4.5 × 6.42 ≈ 34 %
  • 부틸파라벤: 5 + 4.5 × (18.46 − 2.62) ≈ 76 %
등용매로 갈까, 그래디언트로 갈까 — 25 / 40 % 규칙

스카우팅에서 첫 피크와 마지막 피크의 시간 차 Δt 를 그래디언트 시간 t_G 로 나눠 봅니다(Snyder · Dolan 의 경험 규칙).

  • Δt / t_G < 0.25 → 등용매로도 충분할 가능성이 큽니다. 용출 %B 의 평균 근처 조성으로 등용매를 시험합니다.
  • Δt / t_G > 0.40 → 그래디언트가 필요합니다.
  • 그 사이 → 둘 다 시험해 봅니다.

이번 시료는 (18.46 − 9.04) ÷ 20 = 0.47 로 그래디언트가 필요합니다. 위의 등용매 실패 결과와 맞습니다.

결과로 조건 좁히기#

스카우팅 결과에서 다음 그래디언트를 정하는 순서입니다.

  1. 시작 %B ≈ 첫 피크의 용출 %B 근처(34 % → 35 %). 이보다 많이 낮으면 첫 피크 앞에 빈 시간이 생기고, 많이 높으면 첫 피크의 k 가 1 아래로 떨어져 t₀ 교란과 섞입니다.
  2. 끝 %B ≈ 마지막 피크의 용출 %B 근처(76 % → 75 %).
  3. 그래디언트 시간은 기울기를 비슷하게 두고 범위에 맞춰 줄입니다. (75 − 35) ÷ 4.5 ≈ 8.9 → 8 min(기울기 5 %p/min).
  4. 끝 %B 를 2 min 유지해 늦게 나오는 성분을 씻어 내고, 처음 조성으로 돌아갑니다.

이렇게 만든 PRAC_GRD_COS5_v01(35 → 75 %B / 8 min, 30 °C)은 마지막 피크가 11.11 min 으로 스카우팅(18.46 min)보다 7 분 빨라졌습니다. 하지만 PE · MP 는 여전히 겹칩니다(Rs 0.20, 순서도 MP → PE 로 바뀜).

범위를 좁히는 것은 "시간"을 줄이는 일입니다

범위를 좁혀도 기울기가 비슷하면 선택성(α)도 비슷합니다. 시간은 줄지만 임계 쌍은 그대로 남습니다. 임계 쌍을 풀려면 (1) 기울기를 완만하게 하거나 (2) α 를 바꾸는 변수(온도 · 유기 용매 종류 · pH)를 움직여야 합니다.

기울기를 먼저 시험해 봅니다. PRAC_GRD_COS5_v02(30 → 70 %B / 15 min, 기울기 2.7 %p/min)는 Rs 가 0.83 으로 조금 나아졌지만, 마지막 피크가 18.51 min 으로 스카우팅만큼 길어졌습니다. 이 쌍은 메탄올 50 ~ 60 % 근처에서 α 가 거의 1 이라, 기울기로 k 를 키워도 Rs 가 잘 늘지 않습니다. 다음 변수는 온도입니다.

드웰 볼륨(지연 부피)과 그래디언트 지연#

지연 부피(dwell volume, V_D) 는 펌프에서 용매가 섞이는 점(혼합점) 부터 컬럼 입구까지의 부피입니다. 쿼터너리 펌프(G7111B, ch02)는 펌프 앞의 멀티채널 밸브에서 섞이므로, 펌프 헤드 · 믹서 · 퍼지 밸브 · 샘플러(니들 · 루프 · 주입 밸브) · 캐필러리가 모두 지연 부피에 들어갑니다.

값식이 강좌 값
지연 부피 V_D측정 (아래 따라하기)1.0 mL (시뮬레이터 측정 1.03 mL, ch05 가정값과 같게 반올림)
지연 시간 t_DV_D ÷ 유속1.0 mL/min 에서 1.0 min
컬럼 부피(불감 부피) V₀ch04 계산1.62 mL
  • 주입 순간 시간표는 이미 %B 를 올리기 시작하지만, 그 조성이 컬럼 입구에 닿는 것은 t_D 뒤입니다. 그래서 모든 그래디언트에는 처음에 t_D 만큼의 숨은 등용매 구간이 있습니다(그림의 주황선).
  • 지연 부피가 다른 장비(예: 혼합점이 컬럼에 더 가까운 바이너리 펌프 장비)로 메서드를 옮기면, 숨은 등용매 구간이 짧아져 앞쪽 피크의 RT · 분리가 바뀝니다. 시뮬레이터에서 V_D 를 0.4 mL 로 바꾸면 스카우팅의 카페인이 9.04 → 8.50 min, 2.0 mL 로 바꾸면 9.95 min 으로 밀립니다(차이 ≈ ΔV_D ÷ 유속).
  • 옮겨 간 장비의 V_D 가 더 작으면 시간표 맨 앞에 (V_D,원래 − V_D,새 장비) ÷ 유속 만큼 처음 조성 유지(isocratic hold) 줄을 넣어 맞춥니다. 반대로 더 크면 그만큼 주입을 늦추는 기능(주입 지연)을 쓰거나, 차이를 기록하고 결과를 다시 확인합니다.

재평형(후처리) 시간은 ch05 의 규칙을 그대로 씁니다. 처음 조성으로 돌아간 이동상이 지연 부피를 지나 컬럼에 닿고(V_D), 컬럼 부피의 5배를 흘려 씻을 때까지 기다립니다.

후처리 시간 ≈ (V_D + 5 × V₀) ÷ 유속 = (1.0 + 5 × 1.62) ÷ 1.0 ≈ 9.1 min

  • 시간표가 처음 조성으로 돌아가는 줄(예: 10.1 min)부터 정지 시간까지도 재평형에 들어가므로, 그 시간만큼 후처리 시간을 줄여도 됩니다.
  • 재평형이 모자라면 다음 주입의 앞쪽 피크 RT 가 앞당겨지고 흔들립니다(오류 2번). 시퀀스 첫 주입만 RT 가 다르면 "시퀀스 전 평형 부족", 매 주입 RT 가 조금씩 흔들리면 "후처리 시간 부족" 을 의심합니다.

따라하기 — 지연 부피 측정과 스카우팅 실행#

  1. 시나리오 <b>파일 › 시나리오 불러오기</b>(<kbd>Ctrl</kbd>+<kbd>O</kbd>)에서 CH08_METHOD_DEV 를 엽니다. C18 컬럼이 달려 있고 A = 물, B = 메탄올이 퍼지된 상태입니다.
  2. <b>도구 › 지연 부피 측정</b>을 고릅니다. 시뮬레이터가 컬럼 자리를 영(0) 부피 유니언으로 바꾸고, 채널 B 를 물 + 0.1 % 아세톤(추적자)으로 임시 등록합니다. 3D 뷰에서 컬럼이 유니언으로 바뀌는 것을 확인합니다.
  3. 시작을 누르면 1.0 mL/min, 265 nm 에서 0 → 100 %B 계단(step) 을 주고 신호를 기록합니다. 신호가 계단 높이의 50 % 에 닿는 시간 1.03 min × 1.0 mL/min = 1.03 mL 가 지연 부피로 표시됩니다.
  4. 결과를 장비 정보에 저장 → 컬럼 복원을 누릅니다. 측정이 끝나면 채널 B 는 다시 메탄올로 돌아갑니다. 실물에서는 아세톤이 든 병과 라인을 반드시 씻어 낸 뒤 원래 용매로 바꿉니다.
  5. <b>Method › Open Method</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>O</kbd>)로 PRAC_GRD_B10TO90_v01(ch05)을 열고, 바로 <b>Method › Save As</b>(<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>S</kbd>)로 PRAC_SCOUT_B5TO95_v01 을 만듭니다.
  6. 펌프 탭(<kbd>Ctrl</kbd>+<kbd>1</kbd>) 시간표를 위 스카우팅 표대로 고칩니다(0.00 → 5 %B, 20.00 → 95 %B, 25.00 → 95 %B). 컬럼 온도 탭(<kbd>Ctrl</kbd>+<kbd>3</kbd>) 30.0 °C, 검출기 탭(<kbd>Ctrl</kbd>+<kbd>4</kbd>) 254 nm, 정지 시간 25.00 · 후처리 시간 10.00 min 으로 두고 <kbd>Ctrl</kbd>+<kbd>S</kbd> 로 저장합니다.
  7. <b>편집 › 표준용액 조제</b> 혼합 희석 탭에서 MIX-COS5(용매 물:메탄올 70:30)를 만들고, <b>편집 › 바이알 준비</b>에서 위치 12 에 놓습니다.
  8. 시스템 준비(퍼지 → 평형 → Balance <kbd>Z</kbd>)를 마치고 <b>Run › Single Run</b>(<kbd>F5</kbd>) → 위치 12, 이름 MIX-COS5-SCOUT 로 주입합니다. 기다리기 길면 <b>보기 › 시간 배속</b>(<kbd>Ctrl</kbd>+<kbd>]</kbd>)을 씁니다.

조건 비교 화면#

조건을 여러 개 시험할 때는 메서드를 하나씩 열고 닫는 대신 조건 비교 화면을 씁니다. 이 시뮬레이터 전용 화면으로, 실물 소프트웨어에서는 메서드를 버전별로 저장하고 결과를 겹쳐 보는 작업에 해당합니다.

모드 › 조건 비교 ─ MIX-COS5 · 컬럼 C18 150 × 4.6 mm, 5 µm Ctrl+Shift+M A 실험 목록 ☑ 1 SCOUT 5→95/20 30 °C ☑ 2 v01 35→75/8 30 °C ☐ 3 v02 30→70/15 30 °C ☐ 4 v03 35→75/8 40 °C ☐ 5 v04 35→75/8 45 °C ☑ 6 v05 35→75/8 50 °C 체크한 줄만 C 에 겹쳐 표시 줄 추가 Insert · 복제 Ctrl+D 실행 F5 (선택 줄 1회 주입) B 조건 편집 시작 %B [35.0] 끝 %B [75.0] 그래디언트 시간 [8.00] min 유지 [2.00] min · 온도 [50.0] °C 유속 [1.000] mL/min "메서드로 저장" → Method › Save As C 크로마토그램 겹쳐 보기 임계 쌍 휠 확대 · 끌어서 구간 확대 · 더블클릭 원래 크기 D 피크 · 분리도 표 피크tRw½Rs(앞) 카페인3.350.094- 페녹시에탄올6.700.11918.51 메틸파라벤7.110.1122.09 프로필 · 부틸파라벤 … 가장 작은 Rs 줄 = 임계 쌍 (빨간 글씨) E 요약 최소 Rs 2.09 마지막 피크 10.46 min 최대 압력 83 bar 1회 총 시간 20.5 min 기준 미달 칸은 ▲ 표시
조건 비교 화면 구성도 — A 실험 목록, B 조건 편집, C 크로마토그램 겹쳐 보기, D 피크 · 분리도 표, E 압력 · 시간 요약
영역하는 일
A 실험 목록조건 한 줄 = 메서드 하나. 체크한 줄만 C 에 겹쳐 그림. <kbd>Insert</kbd> 줄 추가, <kbd>Ctrl</kbd>+<kbd>D</kbd> 선택 줄 복제
B 조건 편집시작 · 끝 %B, 그래디언트 시간, 유지 시간, 온도, 유속. 바꾼 값은 그 줄에만 적용
C 크로마토그램선택한 실험을 색을 달리해 겹쳐 그림. 끌어서 구간 확대, 더블클릭으로 원래 크기
D 피크 · 분리도 표피크별 tR · w½ · 앞 피크와의 Rs. 가장 작은 Rs 줄(임계 쌍)은 빨간 글씨
E 요약최소 Rs, 마지막 피크 시간, 최대 압력, 1회 총 시간(정지 + 후처리 + 준비). 기준 미달은 ▲

컬럼 온도 — 머무름 · 압력 · 선택성#

온도를 올리면 세 가지가 함께 바뀝니다.

바뀌는 것방향이유이번 시료에서 (35 → 75 %B / 8 min)
머무름 (k, tR)대부분 줄어듦분석물이 고정상에 붙는 것이 열에 약함(발열 흡착). 대략 1 °C 에 k 가 1 ~ 2 % 줄어드는 정도부틸파라벤 11.11 → 10.46 min (30 → 50 °C)
압력줄어듦이동상 점도가 낮아짐최대 124 → 83 bar
선택성 (α)성분마다 다르게 바뀜성분마다 온도 민감도(흡착 엔탈피)가 다름PE 가 MP 보다 더 크게 앞당겨져 순서 · 간격이 바뀜
같은 그래디언트(35 → 75 %B / 8 min), 온도만 바꿈 — 임계 쌍 부분 확대 30 °C PE 7.73 MP 7.69 Rs 0.20 부족 40 °C PE 7.19 MP 7.39 Rs 0.99 부족 50 °C PE 6.70 MP 7.11 Rs 2.09 통과 6.0 6.5 7.0 7.5 8.0 시간 (min) PE 페녹시에탄올 · MP 메틸파라벤. 30 °C 에서는 순서가 바뀌어 MP 가 먼저 나오고, 온도를 올리면 PE 가 더 크게 앞당겨져 벌어짐
같은 그래디언트에서 온도만 30 · 40 · 50 °C 로 바꾼 임계 쌍 — 30 °C 는 MP 가 먼저 나오며 겹치고(Rs 0.20), 40 °C 는 PE 가 앞서기 시작(0.99), 50 °C 에서 Rs 2.09
메서드그래디언트온도PE · MP tR임계 쌍 Rs마지막 피크최대 압력
SCOUT5 → 95 / 20 min30 °C14.51 · 14.580.3418.46124 bar
v0135 → 75 / 8 min30 °C7.73 · 7.69 (순서 바뀜)0.2011.11124 bar
v0230 → 70 / 15 min30 °C11.43 · 11.670.8318.51124 bar
v0335 → 75 / 8 min40 °C7.19 · 7.390.9910.75101 bar
v0435 → 75 / 8 min45 °C6.94 · 7.251.5810.6092 bar
v0535 → 75 / 8 min50 °C6.70 · 7.112.0910.4683 bar
  • 45 °C 에서 이미 1.5 를 넘지만, 여유(robustness) 를 생각해 50 °C 를 고릅니다. 실제 장비의 온도는 ± 1 ~ 2 °C 흔들릴 수 있습니다. 시뮬레이터로 확인하면 48 °C 에서 1.89, 52 °C 에서 2.30 으로 기준을 넉넉히 지킵니다. 45 °C 로 정하면 43 °C 에서 기준 아래로 떨어질 수 있습니다.
  • 온도는 컬럼 허용 온도 안에서만 올립니다. 컬럼 라벨 · 성적서의 최고 온도를 확인합니다(실리카 C18 은 60 °C 안팎이 흔하지만 제품마다 다름 — 확인 필요). 높은 온도 + 높은 pH 는 실리카를 빨리 녹이므로 함께 쓰지 않습니다.
  • 온도는 유속 · 조성보다 늦게 안정됩니다. 온도를 바꾼 뒤에는 ch04 기준(설정값 ± 0.5 °C 에서 2분 이상)이 될 때까지 기다리고, 컬럼 앞 이동상 예열(열교환기) 이 켜져 있는지 확인합니다. 차가운 이동상이 뜨거운 컬럼에 들어가면 컬럼 안 온도가 고르지 않아 피크가 넓어집니다.

유속과 반 딤터 곡선 — 효율 vs 시간 vs 압력#

같은 컬럼이라도 이동상을 얼마나 빨리 흘리느냐에 따라 피크 폭이 달라집니다. 이 관계를 반 딤터(van Deemter) 식으로 나타냅니다.

H = A + B/u + C·u

기호이름뜻줄이는 방법
H단 높이 (plate height, HETP)컬럼 길이 ÷ 이론단수. 작을수록 피크가 날카로움—
u선속도 (linear velocity)이동상이 컬럼을 지나는 속도 = 컬럼 길이 ÷ t₀. 유속에 비례—
A흐름 경로 차이 (eddy diffusion)입자 사이 길이 여러 갈래라 분자마다 걷는 거리가 다름. 유속과 무관작고 고른 입자, 잘 충전된 컬럼
B/u세로 확산 (longitudinal diffusion)띠가 앞뒤로 퍼짐. 느릴수록 오래 머물러 커짐유속을 너무 낮추지 않음
C·u물질 전달 (mass transfer)입자 안쪽 구멍을 드나드는 데 시간이 걸려 뒤처짐. 빠를수록 커짐작은 입자, 높은 온도(확산이 빨라짐)

이 시뮬레이터 컬럼(150 × 4.6 mm, 5 µm)의 값은 A = 11 µm, B = 9 µm·mm/s, C = 6.5 µm·s/mm 입니다. 1.0 mL/min 에서 u = 150 mm ÷ (1.62 × 60 s) ≈ 1.54 mm/s 이므로 H ≈ 26.9 µm, N = 150 000 µm ÷ 26.9 ≈ 5580 으로 ch07 SST 의 N(5610 ~ 5720)과 비슷합니다.

반 딤터 곡선 — C18 150 × 4.6 mm, 5 µm (시뮬레이터 컬럼 값) 0.0 0.5 1.0 1.5 2.0 2.5 3.0 유속 (mL/min) — 선속도 u 에 비례 0 10 20 30 40 50 H (µm) A (흐름 경로 차이) = 11 B/u (세로 확산) C·u (물질 전달) H = A + B/u + C·u 최적 0.76 mL/minH 26.3 µm · N 5700 운전 1.0 mL/min · N 5580 (−2 %) · 분석 시간 −24 % 압력 ≈ 118 bar × 유속 → 3.0 mL/min 근처가 350 bar 한계 낮은 유속에서는 확산(B/u)이, 높은 유속에서는 물질 전달 지연(C·u)이 피크를 넓힙니다. 바닥이 평평해 최적보다 조금 빠르게 써도 손해가 작습니다.
반 딤터 곡선 — 세 항의 합이 가장 작은 곳(최적 0.76 mL/min)과 운전 유속 1.0 mL/min, 압력 한계 영역
  • 곡선의 최솟값은 u_opt = √(B/C) 에서 생기고, 그때 H_min = A + 2√(B·C) 입니다. 이번 컬럼은 u_opt ≈ 1.18 mm/s → 0.76 mL/min, H_min ≈ 26.3 µm(N ≈ 5700)입니다.
  • 1.0 mL/min 은 최적보다 N 이 약 2 % 낮을 뿐인데 분석 시간은 24 % 짧습니다. 곡선 바닥이 평평하고 오른쪽(C·u)이 완만하기 때문에, 실무에서는 최적보다 조금 빠른 유속을 흔히 씁니다.
  • 유속을 더 올리면 압력이 비례해 오릅니다(물:메탄올 70:30, 30 °C 에서 약 118 bar × 유속). 2.0 mL/min 은 N 이 약 21 % 줄고 압력이 236 bar 가 됩니다. 압력 한계(ch04 의 350 bar)와 컬럼 · 펌프 수명을 함께 봅니다.
  • 온도를 올리면 확산이 빨라져 C 항이 작아지고 곡선의 오른쪽이 더 평평해집니다. 50 °C 메서드에서 유속을 올려도 손해가 30 °C 보다 작은 이유입니다.
그래디언트에서 유속만 바꾸면 분리가 바뀝니다

그래디언트의 선택성은 "컬럼 부피 몇 개만큼 흘리는 동안 %B 가 얼마나 바뀌는가" 로 정해집니다. 유속을 1.0 → 1.5 mL/min 로 올리면서 그래디언트 시간을 그대로(8 min) 두면 컬럼이 받는 기울기가 완만해져 피크 간격 · 순서가 달라집니다(이번 시료는 Rs 2.68 로 오히려 커지지만, 다른 시료에서는 나빠질 수 있음). 같은 분리를 빠르게 하려면 그래디언트 시간 × 유속을 일정하게 맞춥니다: 8 min × 1.0 = 5.33 min × 1.5. 이렇게 하면 모든 RT 가 1/1.5 로 줄고(부틸파라벤 10.46 → 6.97 min), Rs 는 N 감소만큼만 줄어듭니다(2.09 → 1.96). 지연 시간도 V_D ÷ 유속으로 함께 줄어든다는 것을 기억합니다.

따라하기 — 조건 비교로 기울기 · 온도 최적화#

  1. <b>모드 › 조건 비교</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>M</kbd>)를 엽니다. A 영역에 방금 돌린 SCOUT 줄이 들어 있습니다. D 영역에서 빨간 줄(PE–MP, Rs 0.34)을 확인합니다.
  2. SCOUT 줄을 고르고 <kbd>Ctrl</kbd>+<kbd>D</kbd> 로 복제한 뒤, B 영역에 시작 35 · 끝 75 · 시간 8 · 유지 2 를 넣어 v01 로 이름 붙입니다. <kbd>F5</kbd> 로 실행합니다.
  3. C 영역에서 SCOUT 와 v01 을 겹쳐 보고, 6.5 ~ 8.0 min 을 끌어 확대합니다. 피크가 두 개 겹쳐 있는데 어느 쪽이 PE 인지 모르겠으면, <b>편집 › 표준용액 조제</b>에서 PE · MP 단일 표준을 만들어 같은 조건으로 한 번씩 주입해 확인합니다(피크 추적).
  4. v01 을 복제해 시작 30 · 끝 70 · 시간 15 로 바꾼 v02 를 실행합니다. E 영역의 최소 Rs 와 마지막 피크 시간을 v01 과 비교합니다.
  5. v01 을 다시 복제해 온도만 40 으로 바꾼 v03, 45 의 v04, 50 의 v05 를 차례로 실행합니다. 온도가 바뀌는 줄은 시뮬레이터가 온도 안정까지 자동으로 기다린 뒤 주입합니다(B 영역 ● 온도 대기).
  6. 위 표와 결과를 비교하고, v05 줄에서 오른쪽 클릭 → 메서드로 저장을 고릅니다. 이름 PRAC_GRD_COS5_v05 로 저장되고 메서드 편집기에 시간표가 그대로 들어갑니다.
  7. 메서드 편집기에서 시간표 끝에 10.10 · 65.0 · 35.0 · 1.000(처음 조성으로 복귀) 줄을 넣고, 정지 시간 11.50, 후처리 시간 8.00 min 으로 정한 뒤 <kbd>Ctrl</kbd>+<kbd>S</kbd> 로 저장합니다. 재평형은 10.1 min 부터 11.5 min 까지(1.4 min)와 후처리 8 min 을 합쳐 9.4 min 으로, 위에서 계산한 9.1 min 보다 깁니다.
자주 하는 실수
  • 스카우팅을 건너뛰고 "느낌상" 시작 %B 를 정합니다 → 첫 피크가 t₀ 에 묻히거나 마지막 피크가 시간표 밖으로 나가 다음 주입에 섞입니다.
  • 조건을 바꿀 때 두 변수를 한꺼번에 바꿉니다(예: 기울기와 온도) → Rs 가 좋아져도 무엇 때문인지 모릅니다. 한 번에 하나씩 바꿉니다.
  • 피크 순서가 바뀐 것을 모르고 tR 순서대로 이름을 붙입니다 → v01 의 7.69 min 피크는 PE 가 아니라 MP 입니다. 순서가 바뀔 수 있는 조건에서는 단일 표준이나 DAD 스펙트럼으로 확인합니다(오류 3번).
  • 온도를 바꾸고 바로 주입합니다 → 첫 주입의 RT 가 다음 주입들과 다릅니다. 온도 안정 표시를 확인합니다.
  • 유속을 올리면서 그래디언트 시간을 그대로 둡니다 → 분리가 바뀝니다. 그래디언트 시간 × 유속을 일정하게 맞춥니다.
  • 후처리 시간을 0 으로 둡니다 → 매 주입 앞쪽 피크 RT 가 흔들립니다(오류 2번).

단축키 · 메뉴 정리 (1교시)#

동작메뉴단축키
시나리오 불러오기<b>파일 › 시나리오 불러오기</b><kbd>Ctrl</kbd>+<kbd>O</kbd>
지연 부피 측정<b>도구 › 지연 부피 측정</b>—
조건 비교 화면<b>모드 › 조건 비교</b><kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>M</kbd>
실험 줄 추가 / 복제조건 비교 A 영역<kbd>Insert</kbd> / <kbd>Ctrl</kbd>+<kbd>D</kbd>
선택한 줄 실행<b>Run › Single Run</b><kbd>F5</kbd>
조건 줄 → 메서드A 영역 오른쪽 클릭 › 메서드로 저장—
메서드 불러오기 / 다른 이름 저장<b>Method › Open Method</b> / <b>Method › Save As</b><kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>O</kbd> / <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>S</kbd>
펌프 · 컬럼 온도 · 검출기 탭메서드 편집기<kbd>Ctrl</kbd>+<kbd>1</kbd> / <kbd>Ctrl</kbd>+<kbd>3</kbd> / <kbd>Ctrl</kbd>+<kbd>4</kbd>
시간 배속<b>보기 › 시간 배속</b><kbd>Ctrl</kbd>+<kbd>]</kbd>

단축키는 시뮬레이터 버전에 따라 바뀔 수 있습니다. <b>도움말 › 단축키 목록</b>(<kbd>?</kbd>)에서 최신 목록을 확인합니다.

결과 확인#

  • 지연 부피가 약 1.0 mL(1.03 mL)로 측정되고, 장비 정보에 저장되었습니다.
  • 스카우팅에서 다섯 피크가 9.0 ~ 18.5 min 에 나오고, 임계 쌍 PE · MP 의 Rs 가 약 0.3 입니다.
  • PRAC_GRD_COS5_v05(35 → 75 %B / 8 min, 50 °C, 1.0 mL/min)에서 모든 이웃 피크의 Rs ≥ 1.5(최소 2.09), 마지막 피크 약 10.5 min, 최대 압력 약 83 bar 입니다.

Python 으로 지연 시간 · 용출 %B · 재평형 계산하기#

스카우팅 결과를 넣으면 다음 그래디언트의 범위와 후처리 시간을 제안하는 계산입니다.

python시뮬 실행 가능
FLOW = 1.0        # mL/min
VD = 1.0          # 지연 부피 (mL)
V0 = 1.62         # 컬럼 부피 (mL)
B0, B1, TG = 5.0, 95.0, 20.0           # 스카우팅: 시작 %B, 끝 %B, 그래디언트 시간 (min)

scout = {"CAF": 9.04, "PE": 14.51, "MP": 14.58, "PP": 17.36, "BP": 18.46}

t0, tD = V0 / FLOW, VD / FLOW
slope = (B1 - B0) / TG                 # %p/min
print(f"t0 = {t0:.2f} min, tD = {tD:.2f} min, 기울기 = {slope:.1f} %p/min")

elute = {}
for name, tr in scout.items():
    elute[name] = B0 + slope * (tr - tD - t0)
    print(f"  {name:4s} tR {tr:6.2f} min -> 용출 %B {elute[name]:5.1f}")

span = (max(scout.values()) - min(scout.values())) / TG
mode = "그래디언트" if span > 0.40 else ("등용매 가능" if span < 0.25 else "둘 다 시험")
print(f"dt/tG = {span:.2f} -> {mode}")

start = round(min(elute.values()) / 5) * 5        # 5 % 단위로 반올림
end = round(max(elute.values()) / 5) * 5
tg_new = (end - start) / slope
post = (VD + 5 * V0) / FLOW
print(f"제안: {start:.0f} -> {end:.0f} %B, 약 {tg_new:.1f} min (같은 기울기), 후처리 >= {post:.1f} min")
  • 출력의 제안(35 → 75 %B, 약 8.9 min)을 정수 분으로 줄여 8 min 으로 쓴 것이 v01 입니다.
  • VD 를 0.4 로 바꿔 실행하면 같은 크로마토그램에서 계산한 용출 %B 가 모두 약 3 %p 높게 나옵니다. 지연 부피를 모르고 계산하면 조건이 틀어진다는 뜻입니다.

2교시 — 미니 프로젝트: 진통제 성분 분석 방법 만들기#

이 단원에서 할 일#

이번 단원은 지금까지 배운 것을 모두 쓰는 작은 방법 개발 프로젝트입니다. 시뮬레이터의 가상 복합 진통제 정제 TAB-APC 에서 세 성분을 분리하고 정량하는 메서드를 처음부터 만듭니다.

성분약어1정 표시량산 · 염기 성질 (수용액 pKa, 대략값)
아세트아미노펜 (acetaminophen, paracetamol)APAP250 mg페놀 OH, pKa 약 9.5 → 이번 pH 범위에서는 중성
카페인 (caffeine)CAF65 mg매우 약한 염기(짝산 pKa 약 0.6) → 이번 pH 범위에서는 중성
아스피린 (acetylsalicylic acid)ASA250 mg카복실산, pKa 약 3.5 → pH 에 따라 이온화
(분해물) 살리실산 (salicylic acid)SA—카복실산, pKa 약 3.0. 아스피린이 물과 만나 분해(가수분해)되며 생김
  • TAB-APC 는 실습용 가상 시료입니다. 표시량 조합은 시판 복합 진통제에서 흔한 형태를 빌려 왔을 뿐 특정 제품의 값이 아닙니다.
  • 정량 대상은 APAP · CAF · ASA 세 성분입니다. SA 는 정량하지 않지만, ASA 바로 뒤에 나오므로 ASA–SA 분리가 메서드의 임계 쌍이 됩니다.
  • 팀 미션의 조건: 분석 시간(정지 시간) 10 min 이내, 이웃 피크 Rs ≥ 2.0, 세 성분 정량, 보고서 제출.
방법 개발 순서 — 영향이 큰 것부터 고정하고, 한 번에 하나씩 바꿉니다 ① 목표 정하기 분석물 · 정량 범위 분석 시간 ≤ 10 min ② 컬럼 · 파장 C18 150 × 4.6, 5 µm DAD 스펙트럼 → 230 nm ③ 이동상 · pH pKa 보고 pH 2.5 인산 완충액 / 메탄올 ④ 그래디언트 스카우팅 5 → 95 %B → 범위 · 기울기 좁히기 ⑤ 온도 · 유속 선택성 · 압력 · 시간 미세 조정 ⑥ 확정 · SST 기준 메서드 v01 저장 Rs · T · N · RSD 기준 ⑦ 검량 · 정량 3성분 5수준 검량 정제 함량 (% 표시량) ⑧ 보고 · 발표 보고서 한 장 조건 선택 근거 되돌아감 점선: SST · 견고성 미달이면 영향이 큰 단계(③ 이동상 · pH)로 되돌아갑니다 한 번에 변수 하나만 바꾸고, 바꿀 때마다 메서드 버전을 올려 저장합니다 (v01 → v02, ch05 규칙).
방법 개발 순서 — 영향이 큰 변수부터 고정하고, 한 번에 하나씩 바꾸며, SST 를 통과하지 못하면 앞 단계로 돌아갑니다

1단계 — 목표 · 컬럼 · 파장#

목표를 숫자로 적는 것부터 시작합니다. "잘 분리" 가 아니라 "Rs ≥ 2.0, 정지 시간 ≤ 10 min, 표시량 대비 90 ~ 110 % 범위에서 검량" 처럼 판정할 수 있게 씁니다.

  • 컬럼: 세 성분 모두 작은 유기 분자이고 극성 차이가 적당하므로 지금 달린 C18 150 × 4.6 mm, 5 µm 로 시작합니다. 산성 이동상(pH 2.5)을 쓸 것이므로 컬럼 라벨의 허용 pH 범위(보통 2 ~ 8 안팎 — 제품마다 확인)를 먼저 확인합니다.
  • 파장: 세 성분의 흡수 최대(λmax)가 서로 다릅니다. <b>설정 › 장비 구성 › 검출기</b>에서 DAD 로 바꾸고(ch04), 스펙트럼 저장 모두 로 스카우팅을 한 번 돌려 피크마다 스펙트럼을 봅니다.
파장APAPCAFASASA판단
230 nm0.800.451.000.70세 성분 모두 충분 → 선택
254 nm0.850.400.200.15ASA 감도가 낮음
275 nm0.351.000.150.25CAF 는 좋지만 ASA · APAP 가 약함

표의 숫자는 시뮬레이터 스펙트럼 라이브러리의 상대 감응(가장 큰 값 = 1) 으로, 실제 물질의 흡광 계수가 아닙니다. 실제 λmax 는 용매 · pH 에 따라 조금씩 다르므로 DAD 스펙트럼이나 문헌(참고자료)으로 확인합니다.

  • 230 nm 는 메탄올의 UV 컷오프(약 205 nm, ch04)보다 충분히 길어 베이스라인 문제가 적고, 인산 완충액도 이 파장에서 흡수가 거의 없습니다. 반면 아세트산 · 포름산 완충액은 230 nm 근처에서 흡수가 커지므로 피합니다.
  • VWD 로 돌아가 230 nm 하나로 써도 되고, DAD 에서 성분마다 다른 파장을 쓰는 방법도 있습니다. 이번 프로젝트는 230 nm 하나로 통일해 단순하게 갑니다.

2단계 — 분석물 성질과 이동상 pH#

역상 크로마토그래피에서 이온이 된 분자는 물에 잘 녹아 C18 에 덜 붙습니다. 산(HA)은 pH 가 pKa 보다 높을수록 이온(A⁻)이 많아지고, 그만큼 빨리 나옵니다.

중성 분율 = 1 ÷ (1 + 10^(pH − pKa))

이동상 pH아스피린 (pKa 3.5) 중성 분율살리실산 (pKa 3.0) 중성 분율결과
2.591 %76 %두 산이 충분히 붙어 있고 서로 잘 떨어짐
3.076 %50 %아직 분리되지만 pH 가 조금만 흔들려도 RT 가 크게 움직임
3.550 %24 %두 산의 k 가 거의 같아져 겹침
7.0 (물만)0.03 %0.01 %두 산이 거의 다 이온 → t₀ 가까이 나오고 꼬리 · RT 흔들림
이동상 pH 와 머무름 인자 k (메탄올 30 %, 30 °C, 시뮬레이터 모델) 인산 완충 범위(pKa₁ 2.15 ± 1) 2 3 4 5 6 7 이동상 pH (수용액 쪽) 0.2 0.5 1 2 5 10 20 k (로그 눈금) 아세트아미노펜 (중성) 카페인 (중성) 아스피린 (pKa 3.5) 살리실산 (pKa 3.0) ASA pKa SA pKa pH 2.5 선택 pH 3.5 근처: 두 산이 겹침 pH 가 pKa 보다 높아지면 산(아스피린 · 살리실산)이 이온이 되어 머무름이 크게 줄어듭니다. 중성 물질은 거의 그대로입니다. pKa 는 수용액 값입니다. 메탄올이 섞이면 조금 달라지므로 실제 조건에서 확인합니다.
이동상 pH 에 따른 머무름 인자 — 중성 물질(APAP · CAF)은 거의 그대로이고, 산(ASA · SA)은 pKa 근처에서 크게 바뀝니다. 인산 완충 범위 안의 pH 2.5 를 고릅니다

pH 를 고르는 원칙은 다음과 같습니다.

  • pKa 에서 1 ~ 2 단위 떨어진 pH 를 씁니다. pKa 근처에서는 pH 0.1 차이로도 RT 가 크게 움직여, 날마다 결과가 흔들립니다(견고성이 나쁨). 이번에는 ASA pKa 3.5 보다 1 단위 낮은 pH 2.5 를 고릅니다.
  • pH 는 그냥 산을 넣는 것이 아니라 완충액(buffer) 으로 맞춥니다. 완충액은 자기 pKa ± 1 범위에서만 pH 를 잘 붙잡습니다. 인산의 첫 번째 pKa 는 약 2.15 이므로 인산 완충액은 pH 약 1.2 ~ 3.2 에서 쓸 수 있고, pH 2.5 는 이 안에 들어갑니다.
  • 물만 쓰면(pH 7 근처, 완충 없음) 시료 자체의 산이 컬럼 안 pH 를 바꿔 피크 모양이 일그러집니다. 이온화하는 분석물이 있으면 반드시 완충합니다.
  • 산성 이동상이 중성 물질(APAP · CAF)에 주는 영향은 거의 없습니다. 이번에 pH 를 바꿔도 이 두 성분의 tR 이 그대로인 것을 확인합니다.
인산염 완충액과 메탄올 — 석출 주의 (ch03 복습)

20 mM 인산칼륨 완충액은 메탄올 비율이 높아지면 염이 석출될 수 있습니다. 이번 메서드는 %B 를 50 % 이하로만 쓰도록 설계합니다. 분석이 끝나면 완충액 → 물(또는 물 90 : 메탄올 10) 로 먼저 충분히 씻고 나서 보관 용매로 바꿉니다. 시뮬레이터는 완충액이 등록된 채널을 높은 유기 용매 비율로 돌리면 염 석출 위험 경고를 띄웁니다.

완충액과 시료 준비#

항목내용
채널 A20 mM 인산칼륨 완충액 pH 2.5 — KH₂PO₄ 2.72 g 을 물 약 950 mL 에 녹이고, pH 미터를 보며 인산(H₃PO₄)으로 pH 2.50 에 맞춘 뒤 1 L 로 채움 → 0.45 µm 여과
채널 B메탄올 (HPLC 등급)
희석액채널 A 85 : 메탄올 15 (그래디언트 시작 조성과 같게)
표준 원액APAP · ASA 각 1000 mg/L, CAF 260 mg/L (희석액에 녹임)
시료20정 평균 무게 700.0 mg → 분말 701.4 mg 을 250 mL 플라스크에 넣고 메탄올 50 mL 로 녹임(초음파 10 min) → 채널 A 로 표선 → 0.45 µm 여과 → 5.00 mL 를 50 mL 로 희석(× 10)
  • pH 는 유기 용매를 섞기 전 수용액에서 잽니다. 메탄올을 섞은 뒤 pH 미터 값은 수용액과 의미가 다릅니다.
  • 아스피린은 물속에서 천천히 살리실산으로 분해됩니다. 산성 · 차가운 조건이 분해를 늦추므로, 표준 · 시료를 같은 날 만들고 바로 분석합니다. 시뮬레이터는 조제 후 시간이 지날수록 SA 피크가 커지게 만들어져 있습니다(이 강좌 규칙: 조제 후 4시간 안에 분석).
  • 시료 바이알 속 농도(100 % 함량일 때)는 APAP · ASA 약 100 mg/L, CAF 약 26 mg/L 입니다. 검량 수준은 이 값의 50 · 75 · 100 · 125 · 150 % 로 잡습니다(실습 D).
시약 · 시료 취급 안전
  • 인산(진한 인산)은 피부 · 눈에 부식성입니다. 보안경 · 니트릴 장갑 · 실험복을 착용하고, pH 를 맞출 때는 산을 물에 조금씩 넣습니다.
  • 메탄올은 독성 · 인화성입니다. 후드 안에서 다루고, 초음파 세척기에 넣는 플라스크는 마개를 느슨하게 해 압력이 차지 않게 합니다.
  • 정제 분말은 날리지 않게 칭량지를 접어 옮기고, 남은 분말 · 시료 용액은 실험실 폐기 규칙(유기 폐액 / 고체 폐기물)에 따라 버립니다. 의약품 시료라도 절대 먹거나 맛보지 않습니다.
  • 시린지 필터를 쓸 때는 바이알 쪽을 사람에게 향하지 않게 하고, 힘을 너무 주지 않습니다(ch07).

3단계 — 조건 검토 순서: 컬럼 · 파장 → 이동상 · pH → 그래디언트 → 온도 · 유속#

영향이 큰 변수부터 고정하는 이유는, 뒤 단계의 미세 조정이 앞 단계의 큰 변화에 쉽게 무너지기 때문입니다. pH 를 바꾸면 산성 성분의 RT 가 수 분씩 움직이지만, 온도 5 °C 는 수 초 ~ 수십 초를 움직입니다.

(1) pH 스카우팅 — 같은 스카우팅 그래디언트(5 → 95 %B / 20 min, 30 °C, 230 nm)로 채널 A 만 바꿔 봅니다.

채널 AAPAPCAFASASA최소 Rs (쌍)판단
물 (완충 없음, pH 약 7)6.899.044.996.382.42 (SA–APAP)산이 맨 앞으로 와서 순서가 바뀌고, 실제로는 꼬리가 길고 RT 가 흔들림
인산 완충액 pH 3.06.899.0411.5712.152.58 (ASA–SA)분리는 되지만 pKa 에 가까워 견고성이 낮음
인산 완충액 pH 2.56.899.0412.0113.144.99 (ASA–SA)선택 — 순서 APAP → CAF → ASA → SA

(2) 그래디언트 — pH 2.5 스카우팅의 용출 %B 를 1교시 식으로 구하면 APAP 약 24 %, SA 약 52 % 입니다. Δt / t_G = (13.14 − 6.89) ÷ 20 ≈ 0.31 로 등용매와 그래디언트 사이입니다.

  • 등용매 메탄올 25 % 로 시험하면 SA 가 28.0 min 에 나와 10분 목표를 크게 넘습니다.
  • 그래서 15 → 50 %B / 6 min(2 min 유지)을 고릅니다. 시작 %B 는 APAP 의 k 가 1.5 이상 남도록 용출 %B(24 %)보다 낮게, 끝 %B 는 SA 용출 %B(52 %) 근처이면서 완충액 석출을 피하는 50 % 로 정했습니다.

(3) 온도 · 유속 — 1.0 mL/min 에서 온도를 비교합니다.

조건 (15 → 50 %B / 6 min)APAPCAFASASA최소 Rs정지 시간 10 min 안?
30 °C4.906.478.709.814.86 (ASA–SA)마지막 피크가 9.81 min — 피크 꼬리가 10 min 에 걸림
40 °C4.686.228.409.334.38 (ASA–SA)여유 있게 들어옴 → 선택
  • 40 °C 에서 최대 압력은 약 101 bar 입니다. 유속을 더 올릴 수도 있지만(1교시 반 딤터), 이미 목표를 만족하므로 필요 이상으로 조건을 몰아붙이지 않습니다. 압력 · 컬럼 수명에 여유를 두는 것도 좋은 방법의 조건입니다.
  • APAP 의 k = (4.68 − 1.62) ÷ 1.62 ≈ 1.9 로, t₀ 교란과 충분히 떨어져 있습니다.

4단계 — 최종 메서드 확정과 SST 기준#

항목값
메서드 이름APC_TAB_GRD_v01
컬럼C18 150 × 4.6 mm, 5 µm, 40 °C
이동상A: 20 mM 인산칼륨 pH 2.5, B: 메탄올
시간표0.00 → 15 %B, 6.00 → 50 %B, 8.00 → 50 %B, 8.10 → 15 %B
유속 · 주입량 · 파장1.0 mL/min · 10 µL · 230 nm (VWD 또는 DAD 신호 A)
정지 · 후처리 시간10.00 min · 8.00 min (재평형 8.1 → 10.0 min 1.9 min + 8 min ≥ 9.1 min)
예상 결과APAP 4.68 · CAF 6.22 · ASA 8.40 · SA 9.33 min

SST 용액 SST-APC 는 100 % 수준 혼합 표준에 살리실산 2 mg/L 를 더한 것입니다. 임계 쌍(ASA–SA)의 분리도를 매번 확인하기 위해서입니다.

SST 항목대상이 프로젝트 기준 (예시)이유
분리도 RsASA–SA (임계 쌍)≥ 2.0아스피린 면적에 분해물이 섞이지 않게
대칭도 TASA≤ 1.5산성 분석물은 pH 가 틀어지면 꼬리가 먼저 나빠짐
면적 반복성APAP · CAF · ASA, 6회RSD ≤ 2.0 % (각각)외부표준법의 전제 (ch07)
RT 반복성세 성분RSD ≤ 1.0 %펌프 조성 · 온도 · 재평형 확인
이론단수 NCAF≥ 5000컬럼 상태 확인
  • 그래디언트에서 계산한 N 은 피크가 압축되어 등용매보다 크게 나옵니다(이번 CAF 는 약 17 000). 그래서 N 기준은 같은 메서드에서 얻은 값끼리만 비교하고, 등용매 메서드의 기준을 그대로 가져오지 않습니다.
  • 기준은 개발 중 얻은 값보다 조금 느슨하게 정합니다. 개발 때 Rs 가 4.4 라고 기준을 4.0 으로 잡으면, 컬럼이 조금만 늙어도 매번 부적합이 됩니다. 반대로 너무 느슨하면 문제를 잡지 못합니다. 이번에는 "분리 확실(2.0)" 을 기준으로 했습니다.

따라하기 — 방법 개발부터 보고서까지#

  1. <b>모드 › 용매 관리</b>(<kbd>Ctrl</kbd>+<kbd>M</kbd>)에서 채널 A 를 20 mM KH2PO4 pH 2.5 로 새로 등록합니다(<b>편집 › 완충액 조제</b>에서 위 표대로 만들면 목록에 생김). 채널 A 를 퍼지합니다. 완충액이 등록되면 C 영역에 석출 경고 기준 %B 가 표시됩니다.
  2. <b>설정 › 장비 구성 › 검출기</b>에서 DAD 로 바꾸고, 검출기 설정(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd>)에서 신호 A 230 nm, 스펙트럼 저장 모두 로 둡니다.
  3. <b>편집 › 표준용액 조제</b>에서 원액 3개와 혼합 표준 5수준 STD-APC-L1 ~ L5, SST 용액 SST-APC, 시료 SMP-APC-1(시료 탭에서 TAB-APC 선택, 위 시료 준비대로)을 만듭니다.
  4. 조건 비교(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>M</kbd>)에서 STD-APC-L3 로 pH 스카우팅 3줄(물 / pH 3.0 / pH 2.5)을 만듭니다. 채널 A 를 바꾸는 줄은 시뮬레이터가 퍼지 → 10 컬럼 부피 평형을 자동으로 끼워 넣습니다.
  5. pH 2.5 줄을 복제해 그래디언트 15 → 50 / 6, 온도 30 · 40 줄을 실행합니다. DAD 스펙트럼으로 피크 이름을 확인합니다(<b>Data › Spectrum</b> 창에서 피크 정점 스펙트럼을 라이브러리와 비교).
  6. 40 °C 줄을 메서드로 저장 → APC_TAB_GRD_v01. 메서드 편집기에서 8.10 min 복귀 줄, 정지 10.00 · 후처리 8.00 min 을 넣고 <kbd>Ctrl</kbd>+<kbd>S</kbd>.
  7. <b>Sequence › New Sequence</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>N</kbd>)로 SEQ_APC_TEAM<번호> 를 만듭니다: 블랭크 1 → SST-APC 6회 → 블랭크 1 → STD-APC-L1 ~ L5 → 블랭크 1 → SMP-APC-1 2회 → STD-APC-L3(확인 표준) 1회. 표준물 줄은 종류 Standard, 수준 1 ~ 5, 세 성분 농도를 넣고, 시료 줄은 희석 배수 칸을 비워 둡니다(함량 계산은 실습 D 에서 한 번에 함).
  8. <kbd>F6</kbd> 로 실행합니다. 끝나면 <b>Report › System Suitability</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Y</kbd>)에서 위 SST 기준을 넣고 판정합니다. 모두 PASS 일 때만 다음으로 갑니다.
  9. <b>Calibration › New Calibration Table</b> → 세 화합물(APAP · CAF · ASA)을 등록하고 <b>Calibration › Process Sequence</b>, <b>Calibration › Quant Results</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>K</kbd>)로 결과를 확인한 뒤 <b>파일 › 결과 내보내기 › CSV</b> 로 저장합니다.
  10. 분석이 끝나면 ch03 순서대로 완충액을 물로 씻어 내고(<b>모드 › 용매 관리</b>에서 채널 A 를 물 로 바꾼 뒤 퍼지 · 20 컬럼 부피 세척), 컬럼을 보관 용매로 바꿉니다.

검량 · 시료 정량 · 함량 계산#

검량은 ch07 과 같은 외부표준법이지만, 성분이 세 개라 검량식도 세 개입니다. 시료 결과는 "1정에 몇 mg" 과 "표시량의 몇 %" 로 냅니다.

1정당 함량(mg) = 바이알 농도(mg/L) × 희석 배수 × 플라스크 부피(L) × (평균 정제 무게 ÷ 취한 분말 무게)

함량(% 표시량) = 1정당 함량 ÷ 표시량 × 100

성분검량식 (5수준)시료 면적 평균바이알 (mg/L)1정당 (mg)% 표시량
APAPy = 18.209x + 3.81803.498.8246.698.6 %
CAFy = 9.572x + 2.1253.326.265.5100.7 %
ASAy = 21.411x + 8.12095.697.5243.397.3 %
  • 정확한 값은 실습 D 에서 계산합니다(위 표는 반올림).
  • 바이알 농도 → 1정당 (APAP): 98.83 mg/L × 10 × 0.250 L × (700.0 ÷ 701.4) ≈ 246.6 mg → 246.6 ÷ 250 × 100 ≈ 98.6 %.
  • 판정 범위(예: 표시량의 90 ~ 110 %)는 공정서 · 품목 허가 기준이 정합니다. 이 프로젝트에서는 95 ~ 105 % 를 실습용 예시 기준으로 씁니다.
  • SA 는 정량하지 않지만, ASA 면적에 대한 SA 면적 비(%) 를 참고로 기록합니다. 이 값이 시료마다 크게 다르면 시료 조제 후 시간이 길었거나 정제가 습기를 먹었을 가능성을 적습니다.

보고서 작성과 팀별 발표#

보고서 형식은 ch07 의 한 장 보고서 ① ~ ⑤ 를 그대로 쓰고, 방법 개발 프로젝트이므로 ⑥ 조건 선택 근거 칸을 더합니다.

칸넣을 것
① 조건메서드 이름 · 버전, 컬럼, 이동상(완충액 조성 · pH), 시간표, 온도, 유속, 파장, 지연 부피
② 크로마토그램SST-APC 1회 + 시료 1회, 피크 이름 · RT
③ 검량선세 성분 식 · R² · 범위 · 수준별 잔차
④ 결과 표성분별 1정당 mg, % 표시량, 2회 평균 · 차이, SA/ASA 면적비(참고)
⑤ 판정SST 항목별 PASS/FAIL, 확인 표준, 결론, 분석자 · 검토자
⑥ 조건 선택 근거시험한 조건 표(버린 조건 포함) + 각 결정의 이유 한 줄씩

발표(팀당 3분)는 "무엇을 바꿨더니 무엇이 어떻게 바뀌었고, 그래서 이것을 골랐다" 의 흐름으로 합니다. 결과 숫자보다 결정의 근거가 평가 대상입니다. 다른 팀과 조건이 다르면 아래를 비교합니다.

  • 같은 Rs 기준을 지키면서 누가 더 짧은가, 그 대가(압력 · 견고성)는 무엇인가.
  • 온도 · 유속을 끝까지 올린 팀과 여유를 둔 팀의 SST 결과(특히 RT RSD · T)는 어떻게 다른가.
  • pH 3.0 을 고른 팀이 있다면, pH 를 ± 0.1 바꾼 줄을 실행해 ASA–SA Rs 가 얼마나 흔들리는지(견고성) 보여 줍니다.
자주 하는 실수
  • pH 를 메탄올과 섞은 뒤에 맞춥니다 → 수용액 pH 와 다른 값이 되어, 다른 날 · 다른 사람이 같은 이동상을 만들 수 없습니다. 수용액에서 맞추고 그 값을 기록합니다.
  • 완충액 채널 그대로 %B 를 80 % 이상 올리는 그래디언트를 시험합니다 → 염 석출 위험 경고 · 압력 상승(오류 5번). 끝 %B 를 석출 기준 아래로 둡니다.
  • 시료 용액을 만들어 두고 다음 날 분석합니다 → 아스피린이 분해되어 ASA 함량이 낮게, SA 가 크게 나옵니다(오류 6번).
  • 희석 배수를 시퀀스 표에도 넣고 함량 식에서도 또 곱합니다 → 결과가 10배가 됩니다(ch07 오류 4번). 이번 프로젝트는 함량 식 한 곳에서만 곱합니다.
  • 평균 정제 무게와 취한 분말 무게의 비를 거꾸로 씁니다 → 함량이 0.4 % 정도 틀어지는데, 기준 근처 시료에서는 판정이 바뀔 수 있습니다.
  • 개발 중 최고 Rs 를 SST 기준으로 그대로 씁니다 → 컬럼이 조금만 바뀌어도 매번 부적합이 됩니다.

단축키 · 메뉴 정리 (2교시)#

동작메뉴단축키
완충액 조제<b>편집 › 완충액 조제</b>—
용매 관리 (채널 등록 · 퍼지)<b>모드 › 용매 관리</b><kbd>Ctrl</kbd>+<kbd>M</kbd>
검출기 종류 바꾸기 (VWD ↔ DAD)<b>설정 › 장비 구성 › 검출기</b>—
검출기 설정<b>모드 › 검출기 설정</b><kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd>
피크 스펙트럼 보기<b>Data › Spectrum</b>—
새 시퀀스 / 실행<b>Sequence › New Sequence</b> / <b>Run › Run Sequence</b><kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>N</kbd> / <kbd>F6</kbd>
시스템 적합성<b>Report › System Suitability</b><kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Y</kbd>
검량 · 정량 결과<b>Calibration › Process Sequence</b> / <b>Calibration › Quant Results</b>— / <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>K</kbd>
결과 저장<b>파일 › 결과 내보내기 › CSV</b>—

결과 확인#

  • pH 2.5 에서 피크 순서가 APAP → CAF → ASA → SA 이고, APC_TAB_GRD_v01(40 °C)로 마지막 피크가 약 9.3 min, ASA–SA Rs 약 4.4 입니다.
  • SST 다섯 항목이 모두 PASS 입니다.
  • 세 성분의 함량이 표시량의 95 ~ 105 % 안(APAP 약 98.6 %, CAF 약 100.7 %, ASA 약 97.3 %)입니다.
  • 보고서 ⑥ 칸에 버린 조건(물만 쓴 이동상, pH 3.0, 30 °C)과 그 이유가 적혀 있습니다.

실습 (시뮬레이터)#

실습 A — 반 딤터 곡선을 수치로 그려 최적 유속 찾기 (1교시)

시뮬레이터 컬럼(A = 11, B = 9, C = 6.5)의 반 딤터 곡선을 표와 글자 막대로 출력합니다.

  1. 유속 0.2 ~ 3.0 mL/min(0.1 간격)마다 선속도 u, 단 높이 H, 이론단수 N 을 계산합니다.
  2. 같은 줄에 카페인 tR(1.0 mL/min 에서 5.16 min, 유속에 반비례)과 압력(1.0 mL/min 에서 118 bar, 유속에 비례)을 출력하고, 350 bar 를 넘는 줄에 표시를 붙입니다.
  3. H 가 가장 작은 유속과, 식 u_opt = √(B/C) 로 구한 최적 유속을 비교합니다.
  4. 1.0 mL/min 이 최적보다 N 을 몇 % 잃고, 분석 시간을 몇 % 줄이는지 출력합니다.
python시뮬 실행 가능
import numpy as np

L_MM = 150                      # 컬럼 길이 (mm)
T0_AT_1 = 1.62                  # 1.0 mL/min 에서 불감 시간 (min)
A, B, C = 11.0, 9.0, 6.5        # 반 딤터 계수 (시뮬레이터 컬럼 값)
P_AT_1, P_LIMIT = 118.0, 350.0  # bar
TR_CAF_AT_1 = 5.16              # min

flow = np.round(np.arange(0.2, 3.01, 0.1), 2)

u = np.zeros_like(flow)         # TODO 1: 선속도 (mm/s) = L / (t0 * 60), t0 = T0_AT_1 / flow
H = np.zeros_like(flow)         # TODO 1: A + B/u + C*u
N = np.zeros_like(flow)         # TODO 1: 150 mm = 150000 um 를 H 로 나눔

# TODO 2: 유속마다 u, H, N, 카페인 tR, 압력을 한 줄씩 출력하고 P_LIMIT 초과 표시

# TODO 3: H 가 최소인 유속(np.argmin)과 sqrt(B/C) 로 구한 최적 유속 비교

# TODO 4: 1.0 mL/min 의 N 손실(%)과 시간 절약(%)
print(flow)
풀이
python시뮬 실행 가능
import numpy as np

L_MM = 150                      # 컬럼 길이 (mm)
T0_AT_1 = 1.62                  # 1.0 mL/min 에서 불감 시간 (min)
A, B, C = 11.0, 9.0, 6.5        # 반 딤터 계수 (시뮬레이터 컬럼 값)
P_AT_1, P_LIMIT = 118.0, 350.0  # bar
TR_CAF_AT_1 = 5.16              # min

flow = np.round(np.arange(0.2, 3.01, 0.1), 2)
u = L_MM / (T0_AT_1 / flow * 60)            # mm/s
H = A + B / u + C * u                       # um
N = L_MM * 1000 / H
t_caf = TR_CAF_AT_1 / flow
p = P_AT_1 * flow

print(" F(mL/min) u(mm/s)  H(um)     N  tR(min) P(bar)  H 막대")
for f, ui, hi, ni, ti, pi in zip(flow, u, H, N, t_caf, p):
    bar = "#" * int((hi - 20) * 2)
    mark = "  <- 압력 초과" if pi > P_LIMIT else ""
    print(f"   {f:4.1f}    {ui:6.3f} {hi:6.2f}  {ni:5.0f}  {ti:6.2f} {pi:6.0f}  {bar}{mark}")

i = int(np.argmin(H))
u_opt = np.sqrt(B / C)
f_opt = u_opt / (L_MM / (T0_AT_1 * 60))
h_min = A + 2 * np.sqrt(B * C)
print(f"\n표의 H 최소: {flow[i]:.1f} mL/min (H {H[i]:.2f} um, N {N[i]:.0f})")
print(f"식의 최적: u_opt = {u_opt:.3f} mm/s -> {f_opt:.2f} mL/min, H_min {h_min:.2f} um, N {L_MM * 1000 / h_min:.0f}")

j = int(np.where(flow == 1.0)[0][0])
loss = (1 - N[j] / (L_MM * 1000 / h_min)) * 100
save = (1 - f_opt / 1.0) * 100
print(f"1.0 mL/min: N {N[j]:.0f} (최적 대비 -{loss:.1f} %), 분석 시간 {save:.0f} % 단축, 압력 {p[j]:.0f} bar")

표의 최소는 0.8 mL/min(N 5700), 식으로 구한 최적은 0.76 mL/min(H_min 26.30 µm, N 약 5700)입니다. 0.1 간격 표로는 최적을 정확히 못 잡으므로 식과 함께 봅니다. 1.0 mL/min 은 N 이 약 2.1 % 낮지만 분석 시간이 24 % 짧고, 3.0 mL/min 에서 압력이 354 bar 로 한계를 넘습니다. 그래서 이 컬럼의 운전 유속은 1.0 mL/min 근처가 알맞습니다.

실습 B — 5성분 혼합 시료의 기울기 · 온도 최적화 (1교시)

시뮬레이터의 머무름 모델을 줄여 옮긴 함수 run() 이 들어 있습니다. 시간표 · 온도를 넣으면 다섯 성분의 tR 과 반높이 폭을 돌려줍니다.

  1. 스카우팅(5 → 95 %B / 20 min, 30 °C)을 실행해 피크 표와 이웃 피크 Rs 를 출력하고, 임계 쌍을 찾습니다.
  2. 시작 %B(25 · 30 · 35 · 40), 끝 %B(70 · 75 · 80), 그래디언트 시간(6 · 8 · 10 · 12 min), 온도(30 · 40 · 45 · 50 °C)를 모두 조합해 계산합니다.
  3. 모든 이웃 피크 Rs ≥ 1.5 이고 마지막 피크가 11 min 이하인 조건만 남겨, 마지막 피크가 빠른 순으로 5개를 출력합니다.
  4. 30 °C 에서 가장 좋은 조건의 최소 Rs 도 출력해, 온도 없이 기울기만으로는 왜 안 되는지 확인합니다.
python시뮬 실행 가능
import math

T0, VD = 1.62, 1.0          # min (1.0 mL/min), mL
N_PLATES = 5584             # 1.0 mL/min 이론단수 (실습 A)
LIB = {                     # 이름: (log kw, S, 흡착 엔탈피 kJ/mol) - 시뮬레이터 가상 값
    "CAF": (1.389, 3.5, -10.0),
    "PE":  (2.32, 3.6, -19.0),
    "MP":  (2.62, 4.2, -12.0),
    "PP":  (3.64, 5.0, -14.0),
    "BP":  (4.16, 5.4, -15.0),
}

def k_at(name, phi, temp):
    lkw, s, dh = LIB[name]
    lk = lkw - s * phi / 100
    lk += (-dh / 0.008314) * (1 / (temp + 273.15) - 1 / 303.15) / math.log(10)
    return 10 ** lk

def phi_prog(t, table):
    if t <= table[0][0]:
        return table[0][1]
    for (t1, p1), (t2, p2) in zip(table, table[1:]):
        if t <= t2:
            return p1 + (p2 - p1) * (t - t1) / (t2 - t1)
    return table[-1][1]

def run(table, temp=30.0, dt=0.005):
    """시간표 [(min, %B), ...] -> {이름: (tR, w1/2)}"""
    out = {}
    for name in LIB:
        x, t = 0.0, 0.0
        while x < 1 and t < 120:
            phi = phi_prog(t - VD - x * T0, table)       # 띠가 있는 자리의 %B
            x += dt / (T0 * (1 + k_at(name, phi, temp)))
            t += dt
        k_e = k_at(name, phi_prog(t - VD - T0, table), temp)
        out[name] = (t, 2.355 * T0 * (1 + k_e) / math.sqrt(N_PLATES))
    return out

def rs_pairs(out):
    order = sorted(out, key=lambda c: out[c][0])
    return [(a, b, 1.18 * (out[b][0] - out[a][0]) / (out[a][1] + out[b][1]))
            for a, b in zip(order, order[1:])]

# TODO 1: 스카우팅 [(0, 5), (20, 95), (25, 95)] 실행, 피크 표와 Rs 출력, 임계 쌍 찾기

# TODO 2: 시작 · 끝 %B, 그래디언트 시간, 온도 조합 (시간표 = [(0, s), (g, e), (g + 2, e)])

# TODO 3: 최소 Rs >= 1.5, 마지막 피크 <= 11 min 조건만 남겨 빠른 순 5개

# TODO 4: 30 C 에서 가장 좋은 최소 Rs
풀이
python시뮬 실행 가능
import math
import itertools

T0, VD = 1.62, 1.0
N_PLATES = 5584
LIB = {
    "CAF": (1.389, 3.5, -10.0),
    "PE":  (2.32, 3.6, -19.0),
    "MP":  (2.62, 4.2, -12.0),
    "PP":  (3.64, 5.0, -14.0),
    "BP":  (4.16, 5.4, -15.0),
}

def k_at(name, phi, temp):
    lkw, s, dh = LIB[name]
    lk = lkw - s * phi / 100
    lk += (-dh / 0.008314) * (1 / (temp + 273.15) - 1 / 303.15) / math.log(10)
    return 10 ** lk

def phi_prog(t, table):
    if t <= table[0][0]:
        return table[0][1]
    for (t1, p1), (t2, p2) in zip(table, table[1:]):
        if t <= t2:
            return p1 + (p2 - p1) * (t - t1) / (t2 - t1)
    return table[-1][1]

def run(table, temp=30.0, dt=0.005):
    out = {}
    for name in LIB:
        x, t = 0.0, 0.0
        while x < 1 and t < 120:
            phi = phi_prog(t - VD - x * T0, table)
            x += dt / (T0 * (1 + k_at(name, phi, temp)))
            t += dt
        k_e = k_at(name, phi_prog(t - VD - T0, table), temp)
        out[name] = (t, 2.355 * T0 * (1 + k_e) / math.sqrt(N_PLATES))
    return out

def rs_pairs(out):
    order = sorted(out, key=lambda c: out[c][0])
    return [(a, b, 1.18 * (out[b][0] - out[a][0]) / (out[a][1] + out[b][1]))
            for a, b in zip(order, order[1:])]

# 1) 스카우팅
scout = run([(0, 5), (20, 95), (25, 95)], 30)
print("스카우팅 5 -> 95 %B / 20 min, 30 C")
for name in sorted(scout, key=lambda c: scout[c][0]):
    print(f"  {name:4s} tR {scout[name][0]:6.2f}  w1/2 {scout[name][1]:.3f}")
pairs = rs_pairs(scout)
for a, b, r in pairs:
    print(f"  Rs {a}-{b}: {r:5.2f}")
a, b, r = min(pairs, key=lambda p: p[2])
print(f"임계 쌍: {a}-{b} (Rs {r:.2f})\n")

# 2) ~ 3) 조합 탐색
results = []
for s, e, g, temp in itertools.product((25, 30, 35, 40), (70, 75, 80), (6, 8, 10, 12), (30, 40, 45, 50)):
    out = run([(0, s), (g, e), (g + 2, e)], temp)
    min_rs = min(r for _, _, r in rs_pairs(out))
    last = max(v[0] for v in out.values())
    results.append((min_rs, last, s, e, g, temp))

ok = sorted([r for r in results if r[0] >= 1.5 and r[1] <= 11], key=lambda r: r[1])
print(f"조건 {len(results)}개 중 통과 {len(ok)}개 - 빠른 순 5개")
for min_rs, last, s, e, g, temp in ok[:5]:
    print(f"  {s} -> {e} %B / {g} min, {temp} C : 최소 Rs {min_rs:.2f}, 마지막 {last:.2f} min")

# 4) 30 C 에서의 한계
best30 = max([r for r in results if r[5] == 30], key=lambda r: r[0])
print(f"\n30 C 최고: {best30[2]} -> {best30[3]} %B / {best30[4]} min, "
      f"최소 Rs {best30[0]:.2f}, 마지막 {best30[1]:.2f} min")

스카우팅의 임계 쌍은 PE–MP(Rs 0.34) 입니다. 192개 조건 가운데 기준을 통과하는 조건은 모두 45 °C 이상이며, 가장 빠른 쪽은 50 °C 의 짧은 그래디언트입니다. 30 °C 에서는 어떤 기울기도 최소 Rs 가 1 에 못 미칩니다 — 이 쌍은 메탄올 조성으로는 α 가 거의 바뀌지 않아 온도로 선택성을 바꿔야 풀린다는 뜻입니다. 가장 빠른 조건이 최선은 아닙니다. 본문은 온도 · 조성 흔들림에 대한 여유를 보고 35 → 75 %B / 8 min, 50 °C(최소 Rs 2.09)를 골랐습니다. 통과 목록에서 "Rs 여유" 와 "시간" 을 함께 보고 근거를 적어 봅니다.

확인 문제 1

스카우팅 그래디언트(5 → 95 %B / 20 min, 지연 시간 1.0 min, t₀ 1.6 min)에서 첫 피크가 6.6 min, 마지막 피크가 9.0 min 에 나왔습니다. 가장 알맞은 다음 단계는?

  1. 그래디언트가 꼭 필요하므로 범위를 0 → 100 %B 로 더 넓힌다
  2. Δt / t_G ≈ 0.12 로 작으므로, 용출 %B(약 23 ~ 34 %)의 가운데 근처 조성으로 등용매를 시험한다
  3. 유속을 2배로 올려 분석 시간을 절반으로 줄인다
  4. 컬럼 온도를 60 °C 로 올린다
정답 보기② — (9.0 − 6.6) ÷ 20 = 0.12 로 0.25 보다 작아 등용매로도 충분할 가능성이 큽니다. 용출 %B 는 5 + 4.5 × (6.6 − 2.6) ≈ 23 %, 5 + 4.5 × (9.0 − 2.6) ≈ 34 % 이므로 그 사이(약 25 ~ 30 %)에서 시작합니다. ① 은 반대 방향이고, ③ · ④ 는 피크 위치를 보고 정하는 단계가 아닙니다.
확인 문제 2

지연 부피 1.0 mL 인 장비에서 개발한 그래디언트 메서드(1.0 mL/min)를 지연 부피 0.4 mL 인 장비로 옮겼더니 앞쪽 피크들이 일찍 나오고 첫 두 피크의 분리가 나빠졌습니다. 가장 알맞은 조치는?

  1. 새 장비 시간표 맨 앞에 처음 조성 유지 0.6 min 을 넣는다
  2. 새 장비의 후처리 시간을 0 으로 줄인다
  3. 시작 %B 를 10 %p 올린다
  4. 컬럼을 더 긴 것으로 바꾼다
정답 보기① — 지연 부피가 작으면 그래디언트가 컬럼에 더 빨리 닿아, 원래 장비에 있던 "숨은 등용매 구간" 이 (1.0 − 0.4) ÷ 1.0 = 0.6 min 줄어듭니다. 그만큼 처음 조성 유지 줄을 넣으면 컬럼이 받는 조성 변화가 원래와 같아집니다. ② 는 재평형 부족을, ③ 은 앞 피크를 더 빨리 나오게 해 반대 효과를 냅니다.
실습 C — pH 에 따른 이온화와 머무름: 이동상 pH 고르기 (2교시)

아스피린(pKa 3.5)과 살리실산(pKa 3.0)의 머무름을 pH 별로 계산해 이동상 pH 를 고릅니다(메탄올 30 % 등용매, 30 °C 모델).

  1. pH 2.0 ~ 5.0(0.25 간격)마다 두 산의 중성 분율과 k 를 계산합니다. 이온형의 k 는 중성형의 1/20 로 둡니다.
  2. 이론단수 5584 로 두 피크의 반높이 폭을 구하고, 두 산 사이의 Rs 를 출력합니다.
  3. 아래 세 조건을 모두 만족하는 pH 만 후보 로 표시합니다: (a) Rs ≥ 2.0, (b) 완충 범위 안(인산 pKa₁ 2.15 ± 1), (c) 견고성 — pH 가 ± 0.1 바뀌어도 아스피린 k 의 변화가 5 % 이하.
  4. 후보 가운데 견고성이 가장 좋은 pH 를 고르고, 그 pH 에서 두 산의 tR 을 출력합니다.
python시뮬 실행 가능
import math

T0, N_PLATES = 1.62, 5584
ACIDS = {"ASA": (7.41, 3.5), "SA": (13.8, 3.0)}   # (중성형 k, pKa) - 메탄올 30 %, 30 C
BUFFER_PKA = 2.15                                # 인산 pKa1

def neutral_fraction(ph, pka):
    return 0.0                     # TODO 1: 1 / (1 + 10 ** (ph - pka))

def k_obs(name, ph):
    k_n, pka = ACIDS[name]
    fn = neutral_fraction(ph, pka)
    return 0.0                     # TODO 1: 중성형 k * fn + 이온형 k(= k_n / 20) * (1 - fn)

def rs(ph):
    return 0.0                     # TODO 2: tR = T0 (1 + k), w1/2 = 2.355 T0 (1 + k) / sqrt(N), Rs = 1.18 dt / (w1 + w2)

for i in range(13):
    ph = 2.0 + 0.25 * i
    # TODO 3: 중성 분율, k, Rs, 견고성(+-0.1 에서 ASA k 변화 %) 출력하고 조건 셋을 모두 만족하면 "후보"
    print(f"pH {ph:4.2f}")

# TODO 4: 후보 중 견고성이 가장 좋은 pH 와 두 산의 tR
풀이
python시뮬 실행 가능
import math

T0, N_PLATES = 1.62, 5584
ACIDS = {"ASA": (7.41, 3.5), "SA": (13.8, 3.0)}
BUFFER_PKA = 2.15

def neutral_fraction(ph, pka):
    return 1 / (1 + 10 ** (ph - pka))

def k_obs(name, ph):
    k_n, pka = ACIDS[name]
    fn = neutral_fraction(ph, pka)
    return k_n * fn + (k_n / 20) * (1 - fn)

def peak(name, ph):
    k = k_obs(name, ph)
    tr = T0 * (1 + k)
    return tr, 2.355 * tr / math.sqrt(N_PLATES)

def rs(ph):
    (t1, w1), (t2, w2) = peak("ASA", ph), peak("SA", ph)
    return 1.18 * abs(t2 - t1) / (w1 + w2)

def robustness(ph):
    lo, hi = k_obs("ASA", ph - 0.1), k_obs("ASA", ph + 0.1)
    return (lo - hi) / k_obs("ASA", ph) * 100     # pH +-0.1 에서 k 변화 (%)

print(" pH   ASA중성  SA중성  k(ASA) k(SA)    Rs  견고성(%)  판정")
cands = []
for i in range(13):
    ph = 2.0 + 0.25 * i
    r, rob = rs(ph), robustness(ph)
    in_buf = abs(ph - BUFFER_PKA) <= 1.0
    ok = r >= 2.0 and in_buf and rob <= 5.0
    if ok:
        cands.append((rob, ph))
    note = "후보" if ok else ("완충 범위 밖" if not in_buf else "")
    print(f"{ph:4.2f}   {neutral_fraction(ph, 3.5) * 100:5.1f}%  {neutral_fraction(ph, 3.0) * 100:5.1f}%"
          f"  {k_obs('ASA', ph):6.2f} {k_obs('SA', ph):6.2f} {r:6.2f}   {rob:6.2f}    {note}")

rob, best = min(cands)
(t1, _), (t2, _) = peak("ASA", best), peak("SA", best)
print(f"\n선택: pH {best:.2f} (견고성 {rob:.2f} %) -> ASA {t1:.2f} min, SA {t2:.2f} min, Rs {rs(best):.2f}")

pH 3.25 이상은 인산 완충 범위 밖이고, 그중 pH 3.5 근처에서는 두 산의 k 가 같아져 Rs 가 0 에 가깝습니다. 완충 범위 안에서도 pH 3.0 은 Rs 는 충분하지만 ± 0.1 에 아스피린 k 가 약 10 % 움직여 견고성 기준을 넘습니다. 후보는 pH 2.0 · 2.25 · 2.5 이고, 숫자만 보면 pH 2.0 이 가장 견고합니다. 본문이 pH 2.5 를 고른 것은 컬럼 허용 pH 하한(보통 2 안팎)에서 여유를 두기 위해서입니다 — 계산 결과에 컬럼 조건까지 더해 판단하는 연습입니다.

실습 D — 세 성분 검량 · 정제 함량 · SST 판정 · 보고서 (2교시)

팀 시퀀스 SEQ_APC_TEAM 의 결과(시뮬레이터 예시 값)를 아래 코드 위쪽에 넣어 두었습니다.

  1. 세 성분마다 5수준 검량식(np.polyfit)과 R², 수준별 잔차(%)를 구합니다.
  2. 시료 2회 주입의 바이알 농도 → 1정당 mg → % 표시량을 구하고 평균을 냅니다. 희석 배수는 이 계산 한 곳에서만 곱합니다.
  3. SST 6회 결과로 면적 RSD(각 성분), ASA–SA 최소 Rs, ASA 최대 T, CAF 최소 N 을 판정합니다.
  4. 결과를 ①조건 · ③검량 · ④결과 · ⑤판정 칸을 갖춘 텍스트 보고서로 출력하고, 함량이 95 ~ 105 % 를 벗어나면 확인 필요 를 붙입니다.
python시뮬 실행 가능
import numpy as np
import statistics as st

LABEL = {"APAP": 250.0, "CAF": 65.0, "ASA": 250.0}       # 1정 표시량 (mg)
AVG_TAB, TAKEN = 700.0, 701.4                           # 평균 정제 무게, 취한 분말 (mg)
FLASK_L, DIL = 0.250, 10                                # 플라스크 (L), 추가 희석 배수

CAL = {   # 성분: [(농도 mg/L, 면적), ...]  L1 ~ L5
    "APAP": [(50, 917.1), (75, 1370.6), (100, 1830.8), (125, 2252.8), (150, 2752.1)],
    "CAF":  [(13, 128.4), (19.5, 185.5), (26, 252.3), (32.5, 313.3), (39, 375.6)],
    "ASA":  [(50, 1080.0), (75, 1602.4), (100, 2160.3), (125, 2691.1), (150, 3212.0)],
}
SAMPLE = {"APAP": [1799.4, 1807.3], "CAF": [254.0, 252.6], "ASA": [2095.4, 2095.8]}
SST = {   # SST-APC 6회
    "area_APAP": [1830.2, 1826.5, 1835.9, 1829.0, 1833.4, 1827.7],
    "area_CAF":  [252.1, 252.9, 251.6, 253.2, 252.4, 251.9],
    "area_ASA":  [2158.8, 2164.1, 2155.0, 2161.7, 2150.3, 2159.6],
    "rs_ASA_SA": [4.41, 4.38, 4.36, 4.40, 4.35, 4.39],
    "t_ASA":     [1.18, 1.20, 1.19, 1.21, 1.22, 1.20],
    "n_CAF":     [17420, 17310, 17480, 17260, 17390, 17350],
}

# TODO 1: 성분별 검량식 a, b, R2, 수준별 잔차(%)
# TODO 2: 시료 바이알 농도 -> 1정당 mg -> % 표시량, 평균
# TODO 3: SST 판정 (면적 RSD <= 2.0 %, Rs >= 2.0, T <= 1.5, N >= 5000)
# TODO 4: 보고서 출력
print(CAL.keys())
풀이
python시뮬 실행 가능
import numpy as np
import statistics as st

LABEL = {"APAP": 250.0, "CAF": 65.0, "ASA": 250.0}
AVG_TAB, TAKEN = 700.0, 701.4
FLASK_L, DIL = 0.250, 10

CAL = {
    "APAP": [(50, 917.1), (75, 1370.6), (100, 1830.8), (125, 2252.8), (150, 2752.1)],
    "CAF":  [(13, 128.4), (19.5, 185.5), (26, 252.3), (32.5, 313.3), (39, 375.6)],
    "ASA":  [(50, 1080.0), (75, 1602.4), (100, 2160.3), (125, 2691.1), (150, 3212.0)],
}
SAMPLE = {"APAP": [1799.4, 1807.3], "CAF": [254.0, 252.6], "ASA": [2095.4, 2095.8]}
SST = {
    "area_APAP": [1830.2, 1826.5, 1835.9, 1829.0, 1833.4, 1827.7],
    "area_CAF":  [252.1, 252.9, 251.6, 253.2, 252.4, 251.9],
    "area_ASA":  [2158.8, 2164.1, 2155.0, 2161.7, 2150.3, 2159.6],
    "rs_ASA_SA": [4.41, 4.38, 4.36, 4.40, 4.35, 4.39],
    "t_ASA":     [1.18, 1.20, 1.19, 1.21, 1.22, 1.20],
    "n_CAF":     [17420, 17310, 17480, 17260, 17390, 17350],
}

# 1) 검량
fits = {}
for comp, pts in CAL.items():
    x = np.array([p[0] for p in pts], dtype=float)
    y = np.array([p[1] for p in pts])
    a, b = np.polyfit(x, y, 1)
    pred = a * x + b
    r2 = 1 - np.sum((y - pred) ** 2) / np.sum((y - y.mean()) ** 2)
    res = ((y - b) / a - x) / x * 100
    fits[comp] = (a, b, r2, res, x.min(), x.max(), y.min(), y.max())

# 2) 함량
assay = {}
for comp, areas in SAMPLE.items():
    a, b, *_, ylo, yhi = fits[comp]
    vals = []
    for area in areas:
        if not ylo <= area <= yhi:
            raise ValueError(f"{comp} 면적 {area} 가 검량 범위 밖 - 희석을 다시 정합니다")
        vial = (area - b) / a
        mg = vial * DIL * FLASK_L * (AVG_TAB / TAKEN)
        vals.append((vial, mg, mg / LABEL[comp] * 100))
    assay[comp] = vals

# 3) SST
def rsd(v):
    return st.stdev(v) / st.mean(v) * 100

sst = [
    ("면적 RSD APAP", rsd(SST["area_APAP"]), "<=", 2.0),
    ("면적 RSD CAF",  rsd(SST["area_CAF"]),  "<=", 2.0),
    ("면적 RSD ASA",  rsd(SST["area_ASA"]),  "<=", 2.0),
    ("Rs ASA-SA 최소", min(SST["rs_ASA_SA"]), ">=", 2.0),
    ("T ASA 최대",     max(SST["t_ASA"]),     "<=", 1.5),
    ("N CAF 최소",     min(SST["n_CAF"]),     ">=", 5000),
]
sst_ok = all((v <= lim) if op == "<=" else (v >= lim) for _, v, op, lim in sst)

# 4) 보고서
line = "-" * 66
print(line)
print(" 복합 진통제 TAB-APC 함량 시험 보고서           SEQ_APC_TEAM")
print(line)
print(" (1) 조건  APC_TAB_GRD_v01 / C18 150x4.6 5um, 40 C / 1.0 mL/min / 230 nm")
print("           A: 20 mM KH2PO4 pH 2.5, B: MeOH / 15 -> 50 %B 6 min / VD 1.0 mL")
print(" (3) 검량")
for comp, (a, b, r2, res, xlo, xhi, *_) in fits.items():
    worst = res[np.argmax(np.abs(res))]
    print(f"     {comp:4s} y = {a:6.3f} x + {b:5.1f}  R2 {r2:.5f}  {xlo:g}-{xhi:g} mg/L  최대 잔차 {worst:+.2f} %")
print(" (4) 결과            바이알(mg/L)   1정(mg)   % 표시량")
for comp, vals in assay.items():
    for i, (vial, mg, pct) in enumerate(vals, 1):
        print(f"     {comp:4s} #{i}        {vial:8.2f}    {mg:7.1f}    {pct:6.1f}")
    mean_pct = np.mean([v[2] for v in vals])
    flag = "" if 95 <= mean_pct <= 105 else "  확인 필요"
    print(f"     {comp:4s} 평균                 {np.mean([v[1] for v in vals]):7.1f}    {mean_pct:6.1f}{flag}")
print(" (5) 판정")
for name, v, op, lim in sst:
    ok = (v <= lim) if op == "<=" else (v >= lim)
    print(f"     {name:14s} {v:9.2f}  ({op} {lim:g})  {'PASS' if ok else 'FAIL'}")
print(f" 결론: SST {'적합' if sst_ok else '부적합 - 결과 보고 안 함'}")
print(" 분석자: ________  검토자: ________  날짜: 2026-10-11")
print(line)

검량식은 APAP y = 18.209x + 3.8, CAF y = 9.572x + 2.1, ASA y = 21.411x + 8.1 이고 R² 는 모두 0.999 이상, 수준별 잔차는 ±2 % 안입니다. 함량은 APAP 약 98.6 %(246.6 mg), CAF 약 100.7 %(65.5 mg), ASA 약 97.3 %(243.3 mg)로 모두 95 ~ 105 % 안이며, SST 여섯 항목이 모두 PASS 입니다(면적 RSD 약 0.2 %, Rs 최소 4.35, T 최대 1.22, N 최소 17 260). 시료 면적이 검량 범위를 벗어나면 ValueError 로 멈추게 한 것은, ch07 의 "범위 밖 값은 보고하지 않는다" 규칙을 코드로 강제한 것입니다.

확인 문제 3

아스피린(pKa 약 3.5)이 든 시료를 C18 · 메탄올 그래디언트로 분석하려 합니다. 이동상 수용액 쪽으로 가장 알맞은 것은?

  1. 정제수만 (pH 약 7, 완충 없음)
  2. 인산 완충액 pH 3.5
  3. 인산 완충액 pH 2.5
  4. 인산 완충액 pH 7.0
정답 보기③ — pKa 보다 1 단위 낮은 pH 2.5 에서 아스피린은 약 91 % 가 중성이라 C18 에 잘 붙고, pH 가 조금 흔들려도 RT 가 크게 움직이지 않습니다. 인산(pKa₁ 약 2.15)의 완충 범위 안이기도 합니다. ② 는 pKa 와 같아 RT 가 매우 불안정하고, ① · ④ 는 거의 이온이 되어 t₀ 근처로 나오며 ① 은 완충 능력도 없습니다.
확인 문제 4

방법 개발 중 ASA–SA 의 Rs 가 늘 4.3 ~ 4.5 로 나왔습니다. 이 메서드의 SST 분리도 기준으로 가장 알맞은 것은?

  1. Rs ≥ 4.5 — 개발 중 가장 좋았던 값
  2. Rs ≥ 2.0 — 분리가 확실한 수준으로, 컬럼 상태 변화에 여유를 둔 값
  3. Rs ≥ 0.5 — 피크 두 개가 보이기만 하면 됨
  4. 기준을 두지 않는다 — 정량 대상이 아닌 SA 와의 분리이므로
정답 보기② — SST 기준은 "결과를 믿을 수 있는 최소 성능" 이어야 합니다. ① 처럼 최고값을 쓰면 정상 범위의 흔들림에도 부적합이 되고, ③ 은 아스피린 면적에 분해물이 섞이는 것을 막지 못합니다. ④ — SA 는 정량하지 않아도 ASA 바로 옆에 나오는 임계 쌍이라, ASA 면적의 정확도를 지키려면 반드시 기준을 둡니다.
실습 E — 채널 A 의 pH 를 바꿔 아스피린 머무름 비교하기 (2교시, Python · 시뮬레이터)
  1. Playground 의 시간 제한을 180 초로 바꿉니다.
  2. 아래 코드를 실행합니다. 채널 A 를 물(pH 약 6.5)로 두고 10번 바이알(진통제 혼합)을 분석한 뒤, A 를 20 mM 인산염 pH 2.5(PB25)로 바꿔 퍼지 · 평형하고 다시 분석합니다.
  3. 두 조건에서 아세트아미노펜과 아스피린의 머무름 시간 · 순서를 비교합니다.
python시뮬 실행 가능
# 진통제 혼합 시료: 채널 A 의 pH 를 바꿔 아스피린 머무름 비교
from hplc import HPLC

lc = HPLC(verbose=False)
for solvent_a in ("Water", "PB25"):            # 물(pH 약 6.5) -> 20 mM 인산염 pH 2.5
    lc.pump_off()
    lc.set_solvent("A", solvent_a)              # 교체 후 퍼지는 startup 이 해 줍니다
    lc.startup(flow=1.0, b=40, temp=30, wavelength=230)
    lc.set_stop_time(12)
    lc.set_speed(60)
    run = lc.inject(vial=10, volume=10)         # 10번 = 아세트아미노펜 · 카페인 · 아스피린
    print("A 채널 =", solvent_a)
    for p in sorted(run.peaks, key=lambda p: p["tR"]):
        if p["area"] >= 20:                     # 1.5 min 근처의 작은 교란 피크는 건너뜀
            print("  %-14s tR %6.2f min  면적 %8.1f" % (p["name"], p["tR"], p["area"]))
    print()
lc.shutdown()
풀이

물(pH 약 6.5)에서는 아스피린(pKa 3.5)이 거의 다 이온화되어 C18 에 잘 붙지 않으므로 약 1.7 min 에 아세트아미노펜보다 먼저 나옵니다. pH 2.5 완충액에서는 중성 분율이 커져 약 8.3 min 으로 크게 늦어지고 순서가 바뀝니다. 중성 물질인 아세트아미노펜(약 2.8 min)은 거의 그대로입니다. 2교시의 "산성 이동상(pH 2.5)을 고르는 이유"를 직접 확인한 것입니다.

  • 용매를 바꾼 채널은 퍼지가 필요하므로, startup() 이 퍼지 밸브 열기 → 퍼지 → 닫기를 대신 해 줍니다.
  • 이 혼합 시료의 카페인(13 µg/mL)은 시뮬레이터의 230 nm 에서 신호가 작아 자동 적분 목록에 나오지 않을 수 있습니다.

자주 나는 오류와 해결#

1) 마지막 피크가 다음 주입 크로마토그램에 나타남 (유령 피크)#

text
[Data] 013-SMP-APC-1-02: unknown peak at 1.84 min (area 21.6) - not in calibration table
[Method] Warning: last peak of previous run eluted after stop time (9.81 min > 9.50 min)
  • 원인: 정지 시간이 마지막 피크(또는 그 꼬리)보다 짧습니다. 그래디언트 끝 %B 가 너무 낮아 늦은 성분이 다 안 나온 경우도 같습니다. 30 °C 메서드에 정지 시간 9.5 min 을 쓰면 SA(9.81 min)가 다음 주입 앞쪽에 나타납니다.
  • 해결: 블랭크를 정지 시간 2배로 한 번 주입해 늦게 나오는 피크가 있는지 봅니다. 정지 시간을 마지막 피크 + 여유로 늘리거나, 끝 %B 를 올리거나(완충액 석출 기준 아래에서), 온도를 올려 마지막 피크를 앞당깁니다.

2) 그래디언트 메서드에서 앞쪽 피크 RT 가 주입마다 흔들림#

text
[SST] APC_TAB_GRD_v01: RT RSD APAP 1.84 % (limit <= 1.0 %) FAIL
[Run] Post time 0.00 min - column not re-equilibrated (1.9 min < required 9.1 min)
  • 원인: 후처리 시간이 짧아 처음 조성으로 재평형되기 전에 다음 주입이 들어갔습니다. 앞쪽(낮은 %B 에서 나오는) 피크일수록 크게 흔들립니다.
  • 해결: 후처리 시간 ≥ (V_D + 5 × V₀) ÷ 유속 − (복귀 줄부터 정지 시간까지)로 늘립니다. 시퀀스 첫 주입만 다르면 시퀀스 전에 처음 조성으로 10 컬럼 부피 이상 평형하거나, 버리는 주입(conditioning run) 한 줄을 넣습니다.

3) 조건을 바꿨더니 피크 이름이 뒤바뀜#

text
[Quant] Methylparaben: RT 7.69 min (expected 7.73 +/- 0.05) - identified
[Quant] Phenoxyethanol: RT 7.73 min - identified   (area ratio PE/MP = 0.12, expected 3.1)
  • 원인: 조성 · 온도에 따라 용출 순서가 바뀌는 쌍(PE · MP)을 RT 창만으로 이름 붙였습니다. 면적 비가 예상과 크게 다른 것이 신호입니다.
  • 해결: 조건을 바꿀 때마다 단일 표준을 한 번씩 주입하거나, DAD 스펙트럼(<b>Data › Spectrum</b>)으로 피크를 확인합니다. 검량 표의 기준 RT 를 새 조건에서 다시 정합니다(ch07 오류 2번).

4) 온도를 올렸는데 피크가 넓어지거나 갈라짐#

text
[Column] Warning: mobile phase pre-heating OFF - inlet 25.0 C, column 50.0 C (delta 25.0 C)
[Data] peak width w1/2 +38 % vs. previous run, fronting
  • 원인: 컬럼 앞 이동상 예열(열교환기)이 꺼져 있어 차가운 이동상이 뜨거운 컬럼에 들어갔습니다. 컬럼 가운데와 벽의 온도가 달라 띠가 휘어집니다.
  • 해결: <b>모드 › 컬럼 · 온도</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>H</kbd>)에서 이동상 예열을 켜고 컬럼 입구를 열교환기 출구에 연결합니다(ch02). 온도를 바꾼 뒤에는 안정 표시까지 기다립니다.

5) 그래디언트 후반에 압력이 계속 오름 (완충액 사용)#

text
[Solvent] Warning: buffer precipitation risk - channel A (20 mM KH2PO4) at 85 %B (limit 70 %B)
[Pump] Pressure rising 3.2 bar/min at constant composition
  • 원인: 인산염 완충액 채널과 메탄올을 높은 %B 로 섞어 염이 석출되고 있습니다. 스카우팅 그래디언트(95 %B)를 완충액으로 그대로 돌려도 생깁니다.
  • 해결: 즉시 %B 를 낮추고 물(염 없음)로 라인과 컬럼을 씻습니다(ch03 오류 6번). 완충액으로 스카우팅할 때는 끝 %B 를 석출 기준 아래로 정하고, 필요하면 완충액 농도를 낮춥니다. 막힘이 남으면 다음 차시의 문제 해결 절차를 따릅니다.

6) 아스피린 함량이 낮고 살리실산 피크가 큼#

text
[Quant] ASA 91.8 % of label (limit 95 - 105 %)   SA/ASA area ratio 6.4 % (typical 1.2 %)
[Sample] SMP-APC-1 prepared 2026-10-10 16:20, injected 2026-10-11 09:05 (16.7 h)
  • 원인: 시료 용액을 만든 지 오래되어 아스피린이 살리실산으로 분해되었습니다. 중성 · 물이 많은 희석액, 따뜻한 트레이도 분해를 빠르게 합니다.
  • 해결: 시료와 표준을 같은 날 새로 만들고 바로 분석합니다. 희석액은 산성 완충액을 포함한 조성으로 하고, 샘플러 트레이 냉각이 있으면 켭니다. 보고서에 조제 시각 · 주입 시각을 함께 적습니다.

7) Python 그래디언트 계산의 용출 %B 가 시뮬레이터보다 크게 나옴#

text
CAF  tR   9.04 min -> 용출 %B  38.4
  • 원인: 지연 시간 t_D 를 빼지 않았습니다(5 + 4.5 × (9.04 − 1.62) = 38.4). 지연 부피를 모르면 모든 용출 %B 가 기울기 × t_D 만큼 높게 나옵니다.
  • 해결: 용출 %B = 시작 %B + 기울기 × (tR − t_D − t₀) 로 계산하고, t_D 는 <b>도구 › 지연 부피 측정</b>으로 잰 값(÷ 유속)을 씁니다.

과제 / 팀 미션#

실습 과제 (객관식) — 실무 실험: 조건 최적화와 방법 개발

아래 다섯 문제를 풀고, 각 답의 근거를 한 줄씩 적어 제출합니다. 실습 B 의 통과 조건 목록과 실습 D 의 보고서 출력도 함께 냅니다.

  1. 스카우팅 그래디언트에서 Δt / t_G = 0.47 이 나왔습니다. 알맞은 해석은? ① 등용매로 충분하다 ② 그래디언트가 필요하다 ③ 컬럼이 고장 났다 ④ 유속을 낮춰야 한다
  2. 기울기를 절반으로 줄여도 임계 쌍의 Rs 가 0.3 → 0.8 정도로만 늘었습니다. 다음에 바꿔 볼 변수로 가장 알맞은 것은? ① 주입량 ② 선택성(α)을 바꾸는 온도 · 유기 용매 종류 ③ 검출 파장 ④ 정지 시간
  3. 반 딤터 식에서 유속이 빠를수록 커지는 항은? ① A ② B/u ③ C·u ④ 모두 일정
  4. 그래디언트 메서드의 유속을 1.0 → 2.0 mL/min 로 올리며 같은 분리를 유지하려면 그래디언트 시간 8 min 은? ① 16 min ② 8 min 그대로 ③ 4 min ④ 2 min
  5. 복합 진통제 분말 701.4 mg(평균 정제 무게 700.0 mg)을 250 mL 에 녹이고 10배 희석한 바이알의 카페인이 26.10 mg/L 입니다. 1정당 카페인은? ① 약 26.1 mg ② 약 65.1 mg ③ 약 261 mg ④ 약 6.5 mg
정답 보기1-② 0.40 보다 크면 피크 사이 머무름 폭이 넓어 그래디언트가 필요합니다. 2-② 기울기는 주로 k 를 바꾸고, α 가 1 에 가까운 쌍은 온도 · 용매 종류 · pH 처럼 α 를 바꾸는 변수가 필요합니다. 3-③ 물질 전달 항은 유속에 비례해 커집니다(B/u 는 작아짐). 4-③ 그래디언트 시간 × 유속을 일정하게: 8 × 1.0 = 4 × 2.0. 5-② 26.10 × 10 × 0.250 × (700.0 ÷ 701.4) ≈ 65.1 mg.
팀 미션 — 10분 안에 진통제 세 성분 분리 · 정량하기 (3 ~ 4인 1조)

목표: 시뮬레이터 정제 TAB-APC 의 아세트아미노펜 · 카페인 · 아스피린을 정지 시간 10 min 이내, 모든 이웃 피크 Rs ≥ 2.0(ASA–SA 포함)으로 분리하고, 세 성분의 함량(% 표시량)을 보고합니다.

역할(한 사람이 둘을 맡아도 됨)

  • 조건 담당: 조건 비교 화면에서 시험 계획을 세우고 실행합니다. 한 번에 변수 하나만 바꿉니다.
  • 시료 담당: 완충액 · 표준 · 시료를 조제하고 조제 기록(무게 · 부피 · 시각)을 남깁니다.
  • 데이터 담당: SST · 검량 · 함량을 계산하고(실습 D 코드 활용), 시뮬레이터 결과와 대조합니다.
  • 보고 담당: 보고서 ① ~ ⑥ 칸을 채우고 발표를 준비합니다.

제출물

  1. 메서드 파일(APC_TAB_GRD_v<번호>)과 시험한 조건 표 — 버린 조건과 그 이유 포함 (보고서 ⑥).
  2. SST 판정표(6회), 세 성분 검량 결과, 시료 2회 함량과 평균.
  3. 한 장 보고서(PDF, <b>Report › Export PDF</b>)와 발표 3분.

평가 기준: 목표 달성(40 %) · 조건 선택 근거의 논리(30 %) · 데이터 무결성(조제 기록, 원자료 보존, 감사 추적 — 20 %) · 발표(10 %).

도전: 본문 조건(정지 10.0 min)보다 짧게 만든 팀은, 컬럼 온도 ± 2 °C 와 완충액 pH ± 0.1 을 바꾼 줄을 실행해 ASA–SA Rs 가 여전히 2.0 이상인지(견고성) 함께 보여 줍니다. 빠르기만 하고 흔들리는 메서드는 감점입니다.

참고자료#

  • L. R. Snyder, J. J. Kirkland, J. W. Dolan, Introduction to Modern Liquid Chromatography, 3rd ed., Wiley (2010) — 그래디언트 용출 · 스카우팅 그래디언트 · 25/40 % 규칙 · 지연 부피 · 온도와 선택성 · 반 딤터 식
  • L. R. Snyder, J. J. Kirkland, J. L. Glajch, Practical HPLC Method Development, 2nd ed., Wiley (1997) — 방법 개발 순서, 이온성 분석물과 이동상 pH · 완충액 선택
  • Agilent, The LC Handbook — Guide to LC Columns and Method Development (그래디언트 · 재평형 · 지연 부피 · 온도 · 완충액): https://www.agilent.com/cs/library/primers/public/LC-Handbook-Complete-2.pdf
  • Agilent 1260 Infinity II Quaternary Pump (G7111B) · Multicolumn Thermostat (G7116A) User Manual — 지연 부피, 이동상 예열(열교환기), 온도 범위. Agilent 문헌 라이브러리에서 모델 번호로 검색: https://www.agilent.com/en/support
  • ICH Q2(R2) Validation of Analytical Procedures · ICH Q14 Analytical Procedure Development — 방법 개발과 견고성, 밸리데이션 항목: https://www.ich.org/page/quality-guidelines
  • USP 일반 시험법 〈621〉 Chromatography — 시스템 적합성, 그래디언트 메서드 조정 허용 범위 (최신판은 USP-NF 에서 확인)
  • 대한민국약전 · 식품의약품안전처 「의약품 등 시험방법 밸리데이션 가이드라인」 — 함량 시험 판정 기준 확인용 (최신판은 식약처 누리집에서 확인)
  • PubChem: 아세트아미노펜 https://pubchem.ncbi.nlm.nih.gov/compound/Acetaminophen · 아스피린 https://pubchem.ncbi.nlm.nih.gov/compound/Aspirin · 살리실산 https://pubchem.ncbi.nlm.nih.gov/compound/Salicylic-Acid · 카페인 https://pubchem.ncbi.nlm.nih.gov/compound/Caffeine (pKa · UV · 안전 정보)
  • NumPy polyfit: https://numpy.org/doc/stable/reference/generated/numpy.polyfit.html · Python itertools.product: https://docs.python.org/3/library/itertools.html#itertools.product
  • 이 사이트의 도구: Python Playground · 3D 뷰어 · 3D 시뮬레이터
  • 이전 차시: ch07 정량 분석: 검량선과 시스템 적합성 · 다음 차시: ch09 문제 해결과 유지보수