CH08실무 실험: 조건 최적화와 방법 개발
그래디언트 · 온도 · 유속을 바꿔 가며 다성분 시료의 분리 조건을 찾고, 작은 방법 개발 프로젝트를 끝까지 수행합니다.
학습 목표#
- 머무름 폭이 넓은 혼합물이 등용매로는 왜 안 되는지 설명하고, 스카우팅 그래디언트(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종, 시뮬레이터 가상 시료)를 분석합니다. 어떤 등용매 조성으로도 "빨리 + 모두 분리" 를 만족하지 못하는 시료입니다.
이번 단원에서는 다음 순서로 진행합니다.
- 등용매가 실패하는 것을 확인하고, 스카우팅 그래디언트로 다섯 피크의 위치를 한 번에 봅니다.
- 스카우팅 결과로 그래디언트 범위를 좁히고, 지연 부피 · 재평형을 계산해 메서드 시간을 정합니다.
- 기울기만으로 풀리지 않는 임계 쌍(critical pair) 을 온도로 분리합니다.
- 반 딤터 곡선으로 유속을 점검하고 메서드를 확정합니다.
3D 장비 모델(assets/robot/robot.json)은 강좌 진행에 맞춰 추가됩니다. 차시 머리에 3D 뷰어 버튼이 보이지 않으면 아직 준비 중입니다. 모델이 준비되면 펌프의 혼합점(멀티채널 밸브 · 믹서) → 펌프 헤드 → 퍼지 밸브 → 샘플러 → 컬럼 입구까지 이어지는 캐필러리를 3D 로 따라가며, 이 길의 부피가 곧 이번 차시의 지연 부피라는 것을 확인해 봅니다. 그 전에는 아래 Playground 계산 실습으로 같은 내용을 숫자로 확인합니다.
시료 — 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 % 등용매로 한 번씩 주입해 봅니다(시뮬레이터 결과).
| 조건 | 카페인 tR | PE · MP | 부틸파라벤 tR | 문제 |
|---|---|---|---|---|
| 메탄올 30 % | 5.16 | 29.77 · 38.74 | 120 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.00 | 95.0 | 5.0 | 1.000 | 거의 물 — 극성 성분을 붙잡음 |
| 20.00 | 5.0 | 95.0 | 1.000 | 분당 4.5 %p 로 직선 증가 |
| 25.00 | 5.0 | 95.0 | 1.000 | 95 % 유지 — 남은 성분 씻어 냄 |
정지 시간 25 min, 후처리 시간 10 min, 30 °C 입니다.
| 피크 | 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 %
스카우팅에서 첫 피크와 마지막 피크의 시간 차 Δt 를 그래디언트 시간 t_G 로 나눠 봅니다(Snyder · Dolan 의 경험 규칙).
- Δt / t_G < 0.25 → 등용매로도 충분할 가능성이 큽니다. 용출 %B 의 평균 근처 조성으로 등용매를 시험합니다.
- Δt / t_G > 0.40 → 그래디언트가 필요합니다.
- 그 사이 → 둘 다 시험해 봅니다.
이번 시료는 (18.46 − 9.04) ÷ 20 = 0.47 로 그래디언트가 필요합니다. 위의 등용매 실패 결과와 맞습니다.
결과로 조건 좁히기#
스카우팅 결과에서 다음 그래디언트를 정하는 순서입니다.
- 시작 %B ≈ 첫 피크의 용출 %B 근처(34 % → 35 %). 이보다 많이 낮으면 첫 피크 앞에 빈 시간이 생기고, 많이 높으면 첫 피크의 k 가 1 아래로 떨어져 t₀ 교란과 섞입니다.
- 끝 %B ≈ 마지막 피크의 용출 %B 근처(76 % → 75 %).
- 그래디언트 시간은 기울기를 비슷하게 두고 범위에 맞춰 줄입니다. (75 − 35) ÷ 4.5 ≈ 8.9 → 8 min(기울기 5 %p/min).
- 끝 %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_D | V_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 가 조금씩 흔들리면 "후처리 시간 부족" 을 의심합니다.
따라하기 — 지연 부피 측정과 스카우팅 실행#
- 시나리오 <b>파일 › 시나리오 불러오기</b>(<kbd>Ctrl</kbd>+<kbd>O</kbd>)에서
CH08_METHOD_DEV를 엽니다. C18 컬럼이 달려 있고 A = 물, B = 메탄올이 퍼지된 상태입니다. - <b>도구 › 지연 부피 측정</b>을 고릅니다. 시뮬레이터가 컬럼 자리를 영(0) 부피 유니언으로 바꾸고, 채널 B 를
물 + 0.1 % 아세톤(추적자)으로 임시 등록합니다. 3D 뷰에서 컬럼이 유니언으로 바뀌는 것을 확인합니다. - 시작을 누르면 1.0 mL/min, 265 nm 에서 0 → 100 %B 계단(step) 을 주고 신호를 기록합니다. 신호가 계단 높이의 50 % 에 닿는 시간 1.03 min × 1.0 mL/min = 1.03 mL 가 지연 부피로 표시됩니다.
- 결과를 장비 정보에 저장 → 컬럼 복원을 누릅니다. 측정이 끝나면 채널 B 는 다시 메탄올로 돌아갑니다. 실물에서는 아세톤이 든 병과 라인을 반드시 씻어 낸 뒤 원래 용매로 바꿉니다.
- <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을 만듭니다. - 펌프 탭(<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> 로 저장합니다.
- <b>편집 › 표준용액 조제</b> 혼합 희석 탭에서
MIX-COS5(용매물:메탄올 70:30)를 만들고, <b>편집 › 바이알 준비</b>에서 위치 12 에 놓습니다. - 시스템 준비(퍼지 → 평형 → Balance <kbd>Z</kbd>)를 마치고 <b>Run › Single Run</b>(<kbd>F5</kbd>) → 위치
12, 이름MIX-COS5-SCOUT로 주입합니다. 기다리기 길면 <b>보기 › 시간 배속</b>(<kbd>Ctrl</kbd>+<kbd>]</kbd>)을 씁니다.
조건 비교 화면#
조건을 여러 개 시험할 때는 메서드를 하나씩 열고 닫는 대신 조건 비교 화면을 씁니다. 이 시뮬레이터 전용 화면으로, 실물 소프트웨어에서는 메서드를 버전별로 저장하고 결과를 겹쳐 보는 작업에 해당합니다.
| 영역 | 하는 일 |
|---|---|
| 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 보다 더 크게 앞당겨져 순서 · 간격이 바뀜 |
| 메서드 | 그래디언트 | 온도 | PE · MP tR | 임계 쌍 Rs | 마지막 피크 | 최대 압력 |
|---|---|---|---|---|---|---|
| SCOUT | 5 → 95 / 20 min | 30 °C | 14.51 · 14.58 | 0.34 | 18.46 | 124 bar |
| v01 | 35 → 75 / 8 min | 30 °C | 7.73 · 7.69 (순서 바뀜) | 0.20 | 11.11 | 124 bar |
| v02 | 30 → 70 / 15 min | 30 °C | 11.43 · 11.67 | 0.83 | 18.51 | 124 bar |
| v03 | 35 → 75 / 8 min | 40 °C | 7.19 · 7.39 | 0.99 | 10.75 | 101 bar |
| v04 | 35 → 75 / 8 min | 45 °C | 6.94 · 7.25 | 1.58 | 10.60 | 92 bar |
| v05 | 35 → 75 / 8 min | 50 °C | 6.70 · 7.11 | 2.09 | 10.46 | 83 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)과 비슷합니다.
- 곡선의 최솟값은 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 ÷ 유속으로 함께 줄어든다는 것을 기억합니다.
따라하기 — 조건 비교로 기울기 · 온도 최적화#
- <b>모드 › 조건 비교</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>M</kbd>)를 엽니다. A 영역에 방금 돌린
SCOUT줄이 들어 있습니다. D 영역에서 빨간 줄(PE–MP, Rs 0.34)을 확인합니다. SCOUT줄을 고르고 <kbd>Ctrl</kbd>+<kbd>D</kbd> 로 복제한 뒤, B 영역에 시작35· 끝75· 시간8· 유지2를 넣어v01로 이름 붙입니다. <kbd>F5</kbd> 로 실행합니다.- C 영역에서
SCOUT와v01을 겹쳐 보고, 6.5 ~ 8.0 min 을 끌어 확대합니다. 피크가 두 개 겹쳐 있는데 어느 쪽이 PE 인지 모르겠으면, <b>편집 › 표준용액 조제</b>에서 PE · MP 단일 표준을 만들어 같은 조건으로 한 번씩 주입해 확인합니다(피크 추적). v01을 복제해 시작30· 끝70· 시간15로 바꾼v02를 실행합니다. E 영역의 최소 Rs 와 마지막 피크 시간을v01과 비교합니다.v01을 다시 복제해 온도만40으로 바꾼v03,45의v04,50의v05를 차례로 실행합니다. 온도가 바뀌는 줄은 시뮬레이터가 온도 안정까지 자동으로 기다린 뒤 주입합니다(B 영역● 온도 대기).- 위 표와 결과를 비교하고,
v05줄에서 오른쪽 클릭 → 메서드로 저장을 고릅니다. 이름PRAC_GRD_COS5_v05로 저장되고 메서드 편집기에 시간표가 그대로 들어갑니다. - 메서드 편집기에서 시간표 끝에
10.10 · 65.0 · 35.0 · 1.000(처음 조성으로 복귀) 줄을 넣고, 정지 시간11.50, 후처리 시간8.00min 으로 정한 뒤 <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 · 재평형 계산하기#
스카우팅 결과를 넣으면 다음 그래디언트의 범위와 후처리 시간을 제안하는 계산입니다.
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) | APAP | 250 mg | 페놀 OH, pKa 약 9.5 → 이번 pH 범위에서는 중성 |
| 카페인 (caffeine) | CAF | 65 mg | 매우 약한 염기(짝산 pKa 약 0.6) → 이번 pH 범위에서는 중성 |
| 아스피린 (acetylsalicylic acid) | ASA | 250 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, 세 성분 정량, 보고서 제출.
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), 스펙트럼 저장
모두로 스카우팅을 한 번 돌려 피크마다 스펙트럼을 봅니다.
| 파장 | APAP | CAF | ASA | SA | 판단 |
|---|---|---|---|---|---|
| 230 nm | 0.80 | 0.45 | 1.00 | 0.70 | 세 성분 모두 충분 → 선택 |
| 254 nm | 0.85 | 0.40 | 0.20 | 0.15 | ASA 감도가 낮음 |
| 275 nm | 0.35 | 1.00 | 0.15 | 0.25 | CAF 는 좋지만 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.5 | 91 % | 76 % | 두 산이 충분히 붙어 있고 서로 잘 떨어짐 |
| 3.0 | 76 % | 50 % | 아직 분리되지만 pH 가 조금만 흔들려도 RT 가 크게 움직임 |
| 3.5 | 50 % | 24 % | 두 산의 k 가 거의 같아져 겹침 |
| 7.0 (물만) | 0.03 % | 0.01 % | 두 산이 거의 다 이온 → t₀ 가까이 나오고 꼬리 · RT 흔들림 |
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 이 그대로인 것을 확인합니다.
20 mM 인산칼륨 완충액은 메탄올 비율이 높아지면 염이 석출될 수 있습니다. 이번 메서드는 %B 를 50 % 이하로만 쓰도록 설계합니다. 분석이 끝나면 완충액 → 물(또는 물 90 : 메탄올 10) 로 먼저 충분히 씻고 나서 보관 용매로 바꿉니다. 시뮬레이터는 완충액이 등록된 채널을 높은 유기 용매 비율로 돌리면 염 석출 위험 경고를 띄웁니다.
완충액과 시료 준비#
| 항목 | 내용 |
|---|---|
| 채널 A | 20 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 만 바꿔 봅니다.
| 채널 A | APAP | CAF | ASA | SA | 최소 Rs (쌍) | 판단 |
|---|---|---|---|---|---|---|
| 물 (완충 없음, pH 약 7) | 6.89 | 9.04 | 4.99 | 6.38 | 2.42 (SA–APAP) | 산이 맨 앞으로 와서 순서가 바뀌고, 실제로는 꼬리가 길고 RT 가 흔들림 |
| 인산 완충액 pH 3.0 | 6.89 | 9.04 | 11.57 | 12.15 | 2.58 (ASA–SA) | 분리는 되지만 pKa 에 가까워 견고성이 낮음 |
| 인산 완충액 pH 2.5 | 6.89 | 9.04 | 12.01 | 13.14 | 4.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) | APAP | CAF | ASA | SA | 최소 Rs | 정지 시간 10 min 안? |
|---|---|---|---|---|---|---|
| 30 °C | 4.90 | 6.47 | 8.70 | 9.81 | 4.86 (ASA–SA) | 마지막 피크가 9.81 min — 피크 꼬리가 10 min 에 걸림 |
| 40 °C | 4.68 | 6.22 | 8.40 | 9.33 | 4.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 항목 | 대상 | 이 프로젝트 기준 (예시) | 이유 |
|---|---|---|---|
| 분리도 Rs | ASA–SA (임계 쌍) | ≥ 2.0 | 아스피린 면적에 분해물이 섞이지 않게 |
| 대칭도 T | ASA | ≤ 1.5 | 산성 분석물은 pH 가 틀어지면 꼬리가 먼저 나빠짐 |
| 면적 반복성 | APAP · CAF · ASA, 6회 | RSD ≤ 2.0 % (각각) | 외부표준법의 전제 (ch07) |
| RT 반복성 | 세 성분 | RSD ≤ 1.0 % | 펌프 조성 · 온도 · 재평형 확인 |
| 이론단수 N | CAF | ≥ 5000 | 컬럼 상태 확인 |
- 그래디언트에서 계산한 N 은 피크가 압축되어 등용매보다 크게 나옵니다(이번 CAF 는 약 17 000). 그래서 N 기준은 같은 메서드에서 얻은 값끼리만 비교하고, 등용매 메서드의 기준을 그대로 가져오지 않습니다.
- 기준은 개발 중 얻은 값보다 조금 느슨하게 정합니다. 개발 때 Rs 가 4.4 라고 기준을 4.0 으로 잡으면, 컬럼이 조금만 늙어도 매번 부적합이 됩니다. 반대로 너무 느슨하면 문제를 잡지 못합니다. 이번에는 "분리 확실(2.0)" 을 기준으로 했습니다.
따라하기 — 방법 개발부터 보고서까지#
- <b>모드 › 용매 관리</b>(<kbd>Ctrl</kbd>+<kbd>M</kbd>)에서 채널 A 를
20 mM KH2PO4 pH 2.5로 새로 등록합니다(<b>편집 › 완충액 조제</b>에서 위 표대로 만들면 목록에 생김). 채널 A 를 퍼지합니다. 완충액이 등록되면 C 영역에 석출 경고 기준 %B 가 표시됩니다. - <b>설정 › 장비 구성 › 검출기</b>에서
DAD로 바꾸고, 검출기 설정(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>D</kbd>)에서 신호 A230 nm, 스펙트럼 저장모두로 둡니다. - <b>편집 › 표준용액 조제</b>에서 원액 3개와 혼합 표준 5수준
STD-APC-L1~L5, SST 용액SST-APC, 시료SMP-APC-1(시료 탭에서TAB-APC선택, 위 시료 준비대로)을 만듭니다. - 조건 비교(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>M</kbd>)에서
STD-APC-L3로 pH 스카우팅 3줄(물 / pH 3.0 / pH 2.5)을 만듭니다. 채널 A 를 바꾸는 줄은 시뮬레이터가 퍼지 → 10 컬럼 부피 평형을 자동으로 끼워 넣습니다. - pH 2.5 줄을 복제해 그래디언트
15 → 50 / 6, 온도30·40줄을 실행합니다. DAD 스펙트럼으로 피크 이름을 확인합니다(<b>Data › Spectrum</b> 창에서 피크 정점 스펙트럼을 라이브러리와 비교). - 40 °C 줄을 메서드로 저장 →
APC_TAB_GRD_v01. 메서드 편집기에서 8.10 min 복귀 줄, 정지 10.00 · 후처리 8.00 min 을 넣고 <kbd>Ctrl</kbd>+<kbd>S</kbd>. - <b>Sequence › New Sequence</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>N</kbd>)로
SEQ_APC_TEAM<번호>를 만듭니다: 블랭크 1 →SST-APC6회 → 블랭크 1 →STD-APC-L1~L5→ 블랭크 1 →SMP-APC-12회 →STD-APC-L3(확인 표준) 1회. 표준물 줄은 종류Standard, 수준 1 ~ 5, 세 성분 농도를 넣고, 시료 줄은 희석 배수 칸을 비워 둡니다(함량 계산은 실습 D 에서 한 번에 함). - <kbd>F6</kbd> 로 실행합니다. 끝나면 <b>Report › System Suitability</b>(<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>Y</kbd>)에서 위 SST 기준을 넣고 판정합니다. 모두 PASS 일 때만 다음으로 갑니다.
- <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> 로 저장합니다.
- 분석이 끝나면 ch03 순서대로 완충액을 물로 씻어 내고(<b>모드 › 용매 관리</b>에서 채널 A 를
물로 바꾼 뒤 퍼지 · 20 컬럼 부피 세척), 컬럼을 보관 용매로 바꿉니다.
검량 · 시료 정량 · 함량 계산#
검량은 ch07 과 같은 외부표준법이지만, 성분이 세 개라 검량식도 세 개입니다. 시료 결과는 "1정에 몇 mg" 과 "표시량의 몇 %" 로 냅니다.
1정당 함량(mg) = 바이알 농도(mg/L) × 희석 배수 × 플라스크 부피(L) × (평균 정제 무게 ÷ 취한 분말 무게)
함량(% 표시량) = 1정당 함량 ÷ 표시량 × 100
| 성분 | 검량식 (5수준) | 시료 면적 평균 | 바이알 (mg/L) | 1정당 (mg) | % 표시량 |
|---|---|---|---|---|---|
| APAP | y = 18.209x + 3.8 | 1803.4 | 98.8 | 246.6 | 98.6 % |
| CAF | y = 9.572x + 2.1 | 253.3 | 26.2 | 65.5 | 100.7 % |
| ASA | y = 21.411x + 8.1 | 2095.6 | 97.5 | 243.3 | 97.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 = 11, B = 9, C = 6.5)의 반 딤터 곡선을 표와 글자 막대로 출력합니다.
- 유속 0.2 ~ 3.0 mL/min(0.1 간격)마다 선속도 u, 단 높이 H, 이론단수 N 을 계산합니다.
- 같은 줄에 카페인 tR(1.0 mL/min 에서 5.16 min, 유속에 반비례)과 압력(1.0 mL/min 에서 118 bar, 유속에 비례)을 출력하고, 350 bar 를 넘는 줄에 표시를 붙입니다.
- H 가 가장 작은 유속과, 식 u_opt = √(B/C) 로 구한 최적 유속을 비교합니다.
- 1.0 mL/min 이 최적보다 N 을 몇 % 잃고, 분석 시간을 몇 % 줄이는지 출력합니다.
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)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 근처가 알맞습니다.
시뮬레이터의 머무름 모델을 줄여 옮긴 함수 run() 이 들어 있습니다. 시간표 · 온도를 넣으면 다섯 성분의 tR 과 반높이 폭을 돌려줍니다.
- 스카우팅(5 → 95 %B / 20 min, 30 °C)을 실행해 피크 표와 이웃 피크 Rs 를 출력하고, 임계 쌍을 찾습니다.
- 시작 %B(25 · 30 · 35 · 40), 끝 %B(70 · 75 · 80), 그래디언트 시간(6 · 8 · 10 · 12 min), 온도(30 · 40 · 45 · 50 °C)를 모두 조합해 계산합니다.
- 모든 이웃 피크 Rs ≥ 1.5 이고 마지막 피크가 11 min 이하인 조건만 남겨, 마지막 피크가 빠른 순으로 5개를 출력합니다.
- 30 °C 에서 가장 좋은 조건의 최소 Rs 도 출력해, 온도 없이 기울기만으로는 왜 안 되는지 확인합니다.
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 에서 가장 좋은 최소 Rsimport 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 여유" 와 "시간" 을 함께 보고 근거를 적어 봅니다.
스카우팅 그래디언트(5 → 95 %B / 20 min, 지연 시간 1.0 min, t₀ 1.6 min)에서 첫 피크가 6.6 min, 마지막 피크가 9.0 min 에 나왔습니다. 가장 알맞은 다음 단계는?
- 그래디언트가 꼭 필요하므로 범위를 0 → 100 %B 로 더 넓힌다
- Δt / t_G ≈ 0.12 로 작으므로, 용출 %B(약 23 ~ 34 %)의 가운데 근처 조성으로 등용매를 시험한다
- 유속을 2배로 올려 분석 시간을 절반으로 줄인다
- 컬럼 온도를 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 %)에서 시작합니다. ① 은 반대 방향이고, ③ · ④ 는 피크 위치를 보고 정하는 단계가 아닙니다.지연 부피 1.0 mL 인 장비에서 개발한 그래디언트 메서드(1.0 mL/min)를 지연 부피 0.4 mL 인 장비로 옮겼더니 앞쪽 피크들이 일찍 나오고 첫 두 피크의 분리가 나빠졌습니다. 가장 알맞은 조치는?
- 새 장비 시간표 맨 앞에 처음 조성 유지 0.6 min 을 넣는다
- 새 장비의 후처리 시간을 0 으로 줄인다
- 시작 %B 를 10 %p 올린다
- 컬럼을 더 긴 것으로 바꾼다
정답 보기
① — 지연 부피가 작으면 그래디언트가 컬럼에 더 빨리 닿아, 원래 장비에 있던 "숨은 등용매 구간" 이 (1.0 − 0.4) ÷ 1.0 = 0.6 min 줄어듭니다. 그만큼 처음 조성 유지 줄을 넣으면 컬럼이 받는 조성 변화가 원래와 같아집니다. ② 는 재평형 부족을, ③ 은 앞 피크를 더 빨리 나오게 해 반대 효과를 냅니다.아스피린(pKa 3.5)과 살리실산(pKa 3.0)의 머무름을 pH 별로 계산해 이동상 pH 를 고릅니다(메탄올 30 % 등용매, 30 °C 모델).
- pH 2.0 ~ 5.0(0.25 간격)마다 두 산의 중성 분율과 k 를 계산합니다. 이온형의 k 는 중성형의 1/20 로 둡니다.
- 이론단수 5584 로 두 피크의 반높이 폭을 구하고, 두 산 사이의 Rs 를 출력합니다.
- 아래 세 조건을 모두 만족하는 pH 만
후보로 표시합니다: (a) Rs ≥ 2.0, (b) 완충 범위 안(인산 pKa₁ 2.15 ± 1), (c) 견고성 — pH 가 ± 0.1 바뀌어도 아스피린 k 의 변화가 5 % 이하. - 후보 가운데 견고성이 가장 좋은 pH 를 고르고, 그 pH 에서 두 산의 tR 을 출력합니다.
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 와 두 산의 tRimport 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 안팎)에서 여유를 두기 위해서입니다 — 계산 결과에 컬럼 조건까지 더해 판단하는 연습입니다.
팀 시퀀스 SEQ_APC_TEAM 의 결과(시뮬레이터 예시 값)를 아래 코드 위쪽에 넣어 두었습니다.
- 세 성분마다 5수준 검량식(
np.polyfit)과 R², 수준별 잔차(%)를 구합니다. - 시료 2회 주입의 바이알 농도 → 1정당 mg → % 표시량을 구하고 평균을 냅니다. 희석 배수는 이 계산 한 곳에서만 곱합니다.
- SST 6회 결과로 면적 RSD(각 성분), ASA–SA 최소 Rs, ASA 최대 T, CAF 최소 N 을 판정합니다.
- 결과를 ①조건 · ③검량 · ④결과 · ⑤판정 칸을 갖춘 텍스트 보고서로 출력하고, 함량이 95 ~ 105 % 를 벗어나면
확인 필요를 붙입니다.
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())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 의 "범위 밖 값은 보고하지 않는다" 규칙을 코드로 강제한 것입니다.
아스피린(pKa 약 3.5)이 든 시료를 C18 · 메탄올 그래디언트로 분석하려 합니다. 이동상 수용액 쪽으로 가장 알맞은 것은?
- 정제수만 (pH 약 7, 완충 없음)
- 인산 완충액 pH 3.5
- 인산 완충액 pH 2.5
- 인산 완충액 pH 7.0
정답 보기
③ — pKa 보다 1 단위 낮은 pH 2.5 에서 아스피린은 약 91 % 가 중성이라 C18 에 잘 붙고, pH 가 조금 흔들려도 RT 가 크게 움직이지 않습니다. 인산(pKa₁ 약 2.15)의 완충 범위 안이기도 합니다. ② 는 pKa 와 같아 RT 가 매우 불안정하고, ① · ④ 는 거의 이온이 되어 t₀ 근처로 나오며 ① 은 완충 능력도 없습니다.방법 개발 중 ASA–SA 의 Rs 가 늘 4.3 ~ 4.5 로 나왔습니다. 이 메서드의 SST 분리도 기준으로 가장 알맞은 것은?
- Rs ≥ 4.5 — 개발 중 가장 좋았던 값
- Rs ≥ 2.0 — 분리가 확실한 수준으로, 컬럼 상태 변화에 여유를 둔 값
- Rs ≥ 0.5 — 피크 두 개가 보이기만 하면 됨
- 기준을 두지 않는다 — 정량 대상이 아닌 SA 와의 분리이므로
정답 보기
② — SST 기준은 "결과를 믿을 수 있는 최소 성능" 이어야 합니다. ① 처럼 최고값을 쓰면 정상 범위의 흔들림에도 부적합이 되고, ③ 은 아스피린 면적에 분해물이 섞이는 것을 막지 못합니다. ④ — SA 는 정량하지 않아도 ASA 바로 옆에 나오는 임계 쌍이라, ASA 면적의 정확도를 지키려면 반드시 기준을 둡니다.자주 나는 오류와 해결#
1) 마지막 피크가 다음 주입 크로마토그램에 나타남 (유령 피크)#
[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 가 주입마다 흔들림#
[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) 조건을 바꿨더니 피크 이름이 뒤바뀜#
[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) 온도를 올렸는데 피크가 넓어지거나 갈라짐#
[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) 그래디언트 후반에 압력이 계속 오름 (완충액 사용)#
[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) 아스피린 함량이 낮고 살리실산 피크가 큼#
[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 가 시뮬레이터보다 크게 나옴#
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 의 보고서 출력도 함께 냅니다.
- 스카우팅 그래디언트에서 Δt / t_G = 0.47 이 나왔습니다. 알맞은 해석은? ① 등용매로 충분하다 ② 그래디언트가 필요하다 ③ 컬럼이 고장 났다 ④ 유속을 낮춰야 한다
- 기울기를 절반으로 줄여도 임계 쌍의 Rs 가 0.3 → 0.8 정도로만 늘었습니다. 다음에 바꿔 볼 변수로 가장 알맞은 것은? ① 주입량 ② 선택성(α)을 바꾸는 온도 · 유기 용매 종류 ③ 검출 파장 ④ 정지 시간
- 반 딤터 식에서 유속이 빠를수록 커지는 항은? ① A ② B/u ③ C·u ④ 모두 일정
- 그래디언트 메서드의 유속을 1.0 → 2.0 mL/min 로 올리며 같은 분리를 유지하려면 그래디언트 시간 8 min 은? ① 16 min ② 8 min 그대로 ③ 4 min ④ 2 min
- 복합 진통제 분말 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.목표: 시뮬레이터 정제 TAB-APC 의 아세트아미노펜 · 카페인 · 아스피린을 정지 시간 10 min 이내, 모든 이웃 피크 Rs ≥ 2.0(ASA–SA 포함)으로 분리하고, 세 성분의 함량(% 표시량)을 보고합니다.
역할(한 사람이 둘을 맡아도 됨)
- 조건 담당: 조건 비교 화면에서 시험 계획을 세우고 실행합니다. 한 번에 변수 하나만 바꿉니다.
- 시료 담당: 완충액 · 표준 · 시료를 조제하고 조제 기록(무게 · 부피 · 시각)을 남깁니다.
- 데이터 담당: SST · 검량 · 함량을 계산하고(실습 D 코드 활용), 시뮬레이터 결과와 대조합니다.
- 보고 담당: 보고서 ① ~ ⑥ 칸을 채우고 발표를 준비합니다.
제출물
- 메서드 파일(
APC_TAB_GRD_v<번호>)과 시험한 조건 표 — 버린 조건과 그 이유 포함 (보고서 ⑥). - SST 판정표(6회), 세 성분 검량 결과, 시료 2회 함량과 평균.
- 한 장 보고서(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 · Pythonitertools.product: https://docs.python.org/3/library/itertools.html#itertools.product - 이 사이트의 도구: Python Playground · 3D 뷰어 · 3D 시뮬레이터
- 이전 차시: ch07 정량 분석: 검량선과 시스템 적합성 · 다음 차시: ch09 문제 해결과 유지보수