반도체 공장 생산능력 모델링은 수천 개의 공정 레시피에 대한 처리량 값(시간당 부품 수[PPH])을 유지 관리하는 것을 포함합니다. 각 실행에 대한 처리 데이터가 저장되어 PPH 값을 결정하는 데 사용할 수 있는 풍부한 이력 데이터를 제공합니다. 생산능력 모델링에서 생산능력을 저하시키는 비효율성은 처리량과 분리되므로 모델링된 PPH는 연속 운전 시 달성 가능한 최고 성능을 나타내야 합니다. 이러한 요구 사항으로 인해 이력 데이터를 분석하는 과정이 복잡해지며, 공정 전문가들은 분석에서 제외해야 하는 비정상 상태 실행을 식별하는 데 특별한 주의를 기울여야 합니다.
JSL을 사용하여 과거 처리량 데이터를 분석하고, 용량 모델링에 사용할 레시피별 PPH(생산 시간당 비용)를 평가, 선택 및 문서화하는 데 도움이 되는 대화형 도구를 개발했습니다. 이 스크립트는 JSL 기반 플랫폼과 사용자 정의 컨트롤을 활용하여 변동 요인을 탐색하고 정상 상태 실행을 분리하는 데 도움이 되는 완전한 대화형 독립형 대시보드 애플리케이션을 구축합니다. PPH 값 선택 및 문서화는 대시보드에서 직접 수행되며, 최종적으로 선택된 값과 분포에 대한 요약을 PowerPoint로 내보내어 전체 분석 보고서를 생성할 수 있습니다.
본 프레젠테이션에는 대시보드 도구 시연과 스크립트의 일부 내용에 대한 설명이 포함되어 있습니다.
안녕하세요, 저는 미셸 터윌리거입니다. 텍사스 인스트루먼트의 메인주 사우스 포틀랜드 지사에서 산업 엔지니어로 근무하고 있습니다. 오늘은 JSL 스크립트를 사용하여 만든 과거 처리량 데이터를 탐색할 수 있는 대화형 도구에 대해 이야기하겠습니다.
스크립트에 대해 이야기하기 전에, 먼저 공장 생산능력 모델링에 대해 간략하게 설명드리겠습니다. JMP를 어떻게 활용하는지 배경을 이해하기 쉽게 설명하기 위함입니다. 먼저, 생산능력을 모델링하려는 툴셋에 대한 정보를 준비합니다. 여기에는 레시피별 처리량과 해당 툴셋의 총 작업 시간이 포함됩니다.
그런 다음 공장에서 실행할 시작 프로파일을 적용하고 레시피별 패스 횟수를 확인한 후, 레시피별 처리량을 통해 해당 재료를 가동하는 데 필요한 생산 시간을 계산합니다.
다음으로, 장비 세트에서 예상되는 비효율성을 고려하여 전체 장비 세트 가동 시간을 조정하고, 이를 통해 계획된 실제 생산 시간을 산출합니다. 그런 다음 이 두 값의 비율을 계산하여 부하율을 구합니다. 이 비율을 통해 계획된 프로파일을 실행할 수 있는지, 아니면 웨이퍼를 추가하거나 제거해야 하는지 판단할 수 있습니다.
이번 발표에서는 레시피별 처리량에 대해 이야기하겠습니다. 처리량은 시간당 생산량(PPH)으로 측정합니다. 앞으로 몇 번 더 이 용어를 사용하게 될 겁니다. 처리량 값은 공장에서 사용하는 거의 모든 레시피에 대해 저장되어 있습니다. 수천 개의 개별 레시피가 있죠. 짐작하시겠지만, 이렇게 많은 데이터를 저장하고 관리하며 시간이 지남에 따라 최신 상태로 유지하는 것은 상당한 작업입니다.
또한 비효율성은 처리량과 완전히 분리되어 있다는 점을 강조하고 싶습니다. 모델의 처리량 값을 고려할 때, 해당 레시피가 유지할 수 있는 최고 성능을 나타내는 값을 포착하려고 노력해야 하므로, 비효율성을 배제하고 모델링해야 합니다.
모델 값을 선택할 때 몇 가지 조건을 염두에 두어야 합니다. 최고의 성능을 내고 비효율이 없도록 해야 하며, 연속 운전 시의 정상 상태 조건을 나타내야 합니다. 비효율성은 모델의 다른 부분에 반영되어 있으므로 무시하는 것은 아니라는 점을 다시 한번 말씀드립니다.
하지만 이러한 상황을 실제 제조 환경에서 재현하는 것은 매우 어렵거나 불가능합니다. 따라서 이러한 시나리오를 재현하는 테스트를 실행하는 대신, 과거 생산 데이터를 활용하여 해당 시나리오에서 실행했을 때 어떤 값이 나올지 예측하는 데 도움을 받습니다. 바로 이 부분에서 JMP가 유용하게 사용됩니다.
우리는 JMP를 사용하여 변동 요인을 시각화하고 분석합니다. 이를 통해 비효율성이 알려진 실행 결과를 제외하고, 정상 상태 조건을 대표하는 실행 결과를 선별한 후, 그 결과를 기록합니다.
검토할 데이터 세트에 접근할 때, 특정 레시피에 대한 처리량 측정 샘플을 갖게 되는데, 이 샘플에는 장비 차이, 레시피 간의 차이 등 다양한 원인으로 인한 손실이 포함될 수 있습니다. 이전 실행의 영향은 다음 실행에 큰 영향을 미칠 수 있으며, 로딩 시간, 사용된 챔버 수 등이 그 예입니다.
그렇다면 손실이 0에 가까워지는 측정값도 있어야 합니다. 그렇게 되면 모든 손실이 0에 최대한 가까워질 때 관찰된 처리량의 상한값이 나타날 것입니다. 실제로 그렇습니다. 데이터에서 상한값 부근에 상당히 뚜렷한 평탄 구간이 나타납니다. 이것이 바로 모델링 목적상 우리가 원하는 최상의 성능을 나타내는 지점입니다.
PPH를 선택하는 과정이 있습니다. 먼저 안정적인 상태의 실행 결과를 분리해낼 텐데, 일부 실행 결과는 더 빠르게 보일 수 있지만, 여러 번의 실행에 걸쳐 일정한 속도를 유지할 수 없는 상황에서 발생한 것이므로 안정적인 상태의 실행 결과가 아니라는 점을 명심해야 합니다.
다음으로, 처리량 손실의 원인이 명확하게 확인된 실행 결과를 제거하려고 합니다. 예를 들어 위에 보이는 항목들이 이에 해당합니다. 관찰된 상한값을 기준으로 모델의 PPH 값을 선택해야 합니다. 일반적으로 98번째 백분위수를 권장값으로 사용하지만, 물론 어느 정도 조정이 가능합니다.
그런 다음 모든 레시피에 대해 이 과정을 반복하고 결과를 보고서로 내보냅니다. 이제 데모를 보여드리겠습니다. 이 표는 도구 세트에서 실행한 데이터를 내보낼 때 사용하는 예시입니다. 각 행은 다양한 도구를 사용하여 여러 레시피를 한 번씩 실행한 결과를 나타냅니다. 여기에는 몇 가지 다른 방법을 사용하여 측정한 PPH 값이 있습니다. 그리고 이쪽에는 변동성에 영향을 미치는 몇 가지 요인이 있습니다.
PPH 툴을 실행하고 이 컬럼 선택기부터 시작하겠습니다. 이 툴 세트에는 Takt PPH를 사용하고, 변동 요인은 여기에 그룹화되어 있습니다. 툴, 총 웨이퍼 수, 챔버 수, 이전 레시피 사양을 살펴보겠습니다.
제가 실행해 보겠습니다. 이것이 저희 대시보드의 메인 화면입니다. 위쪽에는 몇 가지 전역 제어 기능이 있습니다. 이 패널에는 각 레시피 사양의 분포가 표시되고, 각 분포 아래에는 해당 레시피 사양에 직접 적용되는 사용자 지정 제어 기능이 있습니다. 아래쪽에는 각 레시피에 대한 정보가 담긴 요약 표가 있으며, 검토를 진행하면서 이 표가 채워집니다.
이 패널은 분석용입니다. 지금은 거의 비어 있지만, 여기 있는 옵션들을 클릭하면 내용이 채워질 겁니다. 각 레시피별 시간 경과 그래프가 있고, 마지막으로 데이터 필터가 여기에 있습니다. 첫 번째 레시피부터 시작해 보겠습니다.
먼저 필터링을 해볼게요. 필터링 후 예측 변수 선별 결과가 바뀐 걸 보실 수 있을 거예요. 이제 이 레시피의 경우, 변동성에 가장 큰 영향을 미치는 요인이 무엇인지 알 수 있죠. 해당 항목을 클릭하고 변동성 그래프를 클릭하면 선택 항목별로 색상을 지정할 수 있어요.
이제 이 데이터 세트 내에서 도구별로 어떻게 다른지 확인할 수 있습니다. 여기서 눈에 띄는 점은 거의 모든 도구가 우리가 확인한 상한선에 도달할 수 있다는 것입니다. 따라서 제 모델의 PPH 값을 이 상한선에 두어도 무방할 것 같습니다.
이 예시에서 PPH 모델 값을 나타내는 줄이 있는데, 이는 이전에 해당 툴 세트에 대해 모델링했던 값입니다. 이 경우, 우리는 이 툴의 성능을 과소평가하고 있습니다. 35.1에서 작동할 수 있다고 말하지만, 실제로는 37.48까지 가능합니다.
이 부분이 제대로 설정되지 않으면 공장의 생산 능력을 제대로 파악하는 데 큰 어려움이 있습니다. 공장의 정확한 생산 능력을 모델링하려면 이 값을 정확하게 찾는 것이 중요합니다.
이 값을 선택할 때 고려해야 할 또 다른 옵션이 있습니다. 데이터에서 제거하고 싶은 이상치가 있다면, '트림'이라는 버튼을 눌러 상위 1%와 하위 1%의 데이터를 제거할 수 있습니다.
모델 PPH 또는 권장 값인 98% PPH 중에서 선택할 수 있으며, 직접 값을 입력할 수도 있습니다. 이 버튼을 사용하여 값을 위아래로 이동할 수 있습니다. 원하는 값을 찾았으면 아래에서 해당 값을 클릭하고 '선택'을 누르세요. 선택한 값이 요약 표에 표시되는 것을 확인할 수 있습니다. 필요에 따라 메모를 추가할 수도 있으며, 메모 내용도 여기에 표시됩니다.
이제 좀 더 복잡한 레시피 사양을 예로 들어 이런 데이터를 분석하는 것이 실제로 어떤지 보여드리겠습니다. 먼저 필터링부터 시작할게요. 이 패널이 업데이트된 것을 보실 수 있습니다. 이 데이터 세트의 변동성에 가장 큰 영향을 미치는 요인은 이전 레시피 사양입니다. 제가 이 웨이퍼 로트를 로드하기 전에 어떤 레시피 사양이 사용되었었나요?
변동성 그래프를 살펴보고 색을 입혀 보겠습니다. 제 생각에는 이 그래프가 상당히 눈에 띄네요. 레시피 B 다음에 실행될 때 더 빠르게 실행됩니다. 실제로 레시피 B를 보고 있다는 것을 알 수 있습니다. 이것이 바로 정상 상태 조건을 만족합니다. 동일한 레시피를 하나씩 순차적으로 실행하는 것이죠. 이것이 이 레시피를 실행하는 가장 효율적인 방법입니다. 우리가 모델에서 포착하고자 하는 것이 바로 이것입니다.
저는 나머지 항목들을 모두 선택한 다음, 이 버튼을 사용하여 숨기고 제외하겠습니다. 이렇게 하면 이미 알려지고 확인된 변동 요인을 제거할 수 있습니다. 이제 예측 변수 선별 도구를 살펴보면, 다시 한번 가장 큰 영향을 미치는 요인이 드러납니다.
제가 한번 살펴보겠습니다. 제 생각에는 대부분의 도구가 높은 값을 낼 수 있을 것 같습니다. 다시 한번 말씀드리지만, 98% 권장값을 선택해도 괜찮을 것 같습니다. 다만 도구 6번의 경우 다른 도구들에 비해 꼬리 부분이 상당히 큰 것을 발견했습니다. 이 부분은 기록해 두었다가 장비 엔지니어링 담당자에게 문의하여 확인해 봐야겠습니다. 해당 내용을 기록해 두고 98% 값을 선택하겠습니다.
자, 이제 여러분이 이 검토 작업을 진행 중인데, 이전에 완료했거나 완료하지 못한 검토 작업을 다시 살펴보고 싶거나, 부분적으로 완료된 요약을 가져오고 싶다고 가정해 보겠습니다. 이 버튼을 클릭하면 저장된 요약 테이블이 가져와지고, 이전에 입력한 모든 값으로 테이블이 다시 채워지며, 분포에서 선택한 모든 값도 업데이트됩니다. 이전에 완료했던 검토 작업을 간편하게 다시 시작할 수 있습니다.
마지막으로, 모든 작업이 완료되어 결과를 내보낼 준비가 되면, 여기 있는 버튼을 클릭하여 선택한 모든 값, 메모, 출처, 그리고 각 레시피 사양의 축소 이미지가 포함된 표 형태의 PowerPoint 파일을 생성할 수 있습니다. 이 표는 다른 가져오기 작업에 활용할 수 있으며, 모델로 바로 가져올 수도 있습니다.
다시 슬라이드쇼로 돌아가겠습니다. 이 도구의 전체 스크립트를 하나하나 설명하기보다는, 모든 것을 하나로 묶어주고 가능하게 만드는 세 가지 핵심 기능에 집중해서 설명드리겠습니다.
첫째, 변수를 사용하여 생성된 디스플레이 요소를 다룰 때, 그룹 내의 특정 요소와 상호 작용하려고 하면 작업이 복잡해질 수 있습니다. 예를 들어 레시피별 배포 목록이 있다고 가정해 보겠습니다. 어떤 배포 요소와 상호 작용할지 어떻게 선택할 수 있을까요?
제 해결책은 배포판을 생성할 때 이름을 지정하는 것입니다. 그러면 개별 디스플레이 요소에 대한 참조 목록을 얻을 수 있습니다. 이 목록을 루프를 사용하거나 인덱스를 통해 직접 참조할 수 있습니다.
두 번째는 데이터 관리입니다. 레시피 사양이나 보고서 내의 다양한 측면과 관련된 여러 값들이 있는데, 이러한 값들을 유지하고 표시 요소와 다른 곳들 사이에서 전달해야 합니다. 이를 위한 해결책은 레시피 이름으로 된 또 다른 인덱스 목록을 만들어서, 앞서 만든 인덱스 목록과 직접 연결하고 연관 배열을 사용하여 이름으로 데이터를 저장하는 것입니다.
세 번째는 상호작용 요소의 경우, 클릭하거나 상호작용할 때 어떤 배포판의 어떤 부분과 상호작용할지 식별해야 한다는 점입니다. 이러한 요소들은 특정 레시피 사양과 연결되어야 합니다. 루프 내에서 상호작용 요소를 생성할 경우, 생성 시 사용된 인덱스 값이 유지되지 않습니다.
해결책은 부모 요소에 대한 참조를 저장하고 X 경로 명령을 사용하여 해당 요소의 인덱스 값을 추출함으로써 요소들이 스스로 자신의 컨텍스트를 식별할 수 있도록 하는 것입니다. 이러한 모든 과정을 예시를 통해 단계별로 설명하여 이해를 돕겠습니다.
여기 제 변수, 즉 레시피 사양별로 생성된 배포 목록이 있습니다. 보시다시피, 저는 이 목록의 이름을 dist_right_here로 지정했습니다. 이 목록에는 이 화면을 구성하는 모든 배포 요소가 담겨 있습니다. 그리고 레시피 이름도 목록에 저장되어 있는데, 이 목록은 해당 배포 요소와 직접적으로 연결됩니다.
반복문을 사용할 수 있습니다. 이 배포 목록을 순회하면서 레시피 사양별로 데이터를 채우는 등의 작업을 수행할 것입니다. 여기에는 연관 배열이 있는데, 요약 데이터 테이블의 네 번째 열을 사용하여 이 배열을 채우고 있습니다.
이것은 제 분위수를 보여주는 것이고, 각 레시피 이름이 값을 가리키는 것을 볼 수 있습니다. 같은 루프 내에서 그래프 요소와 상호 작용할 수도 있습니다. 여기서는 접근 방식을 변경하고 있는데, 이 경우에는 참조선을 추가하고 있습니다.
이를 위해 저는 중첩된 명명 규칙을 사용하고 있습니다. 레시피 목록에는 이름이 저장되고, 이 이름은 연관 배열 안에 중첩됩니다. 연관 배열은 이름을 참조하고, 연관 배열은 값을 반환합니다. 이러한 중첩 기법은 해당 값에 접근해야 하는 여러 곳 사이에서 값을 주고받을 수 있도록 하는 핵심적인 기능입니다.
다음으로 상호작용 요소들은 방금 설명한 것과 동일한 루프 내에서 생성됩니다. 이 요소들은 각각의 개별 배포 요소들의 형제 요소로 추가되며, 여기서는 인덱스를 사용하여 해당 요소들을 참조합니다.
다음은 선택 버튼의 예입니다. 여기에는 많은 코드가 있지만, 시작 부분은 배포 상자로 이어지는 표시 경로를 확인하는 것입니다. 배포 상자가 생성될 때 해당 배포 상자를 담고 있는 상위 컨테이너에 대한 참조가 저장되어 있으므로, 이 함수는 해당 위치로 되돌아갈 수 있으며, 표시 요소가 존재하는 인덱스 번호와 동일한 숫자가 포함된 텍스트를 반환합니다.
'선택' 버튼을 클릭하면 현재 위치를 확인하고, 해당 위치에 매핑되는 인덱스를 제공하여 "레시피 A에 해당하는 항목을 선택하겠습니다."라고 알려줍니다. 그러면 해당 레시피(인덱스 또는 이름)는 내부 함수로 전달될 수 있습니다. 레시피 이름을 사용하여 요약 테이블의 특정 행과 상호 작용하거나, 표시 요소를 변경하거나, 데이터 값에 접근하는 등, 레시피 이름을 사용하여 필요한 모든 작업을 다른 함수에서 수행할 수 있습니다.
사실 제가 보여드릴 또 다른 데모가 있습니다. 이 데모는 JMP 샘플 데이터를 사용하여 만든 더 작고 간단한 예제로, 더 큰 스크립트에서 하는 것과 동일한 기능을 수행하는 간단한 예시입니다. 이 데모는 겉보기보다 훨씬 간단하다는 점을 강조하고 싶습니다. 주석의 공백을 제외하면 코드가 단 73줄밖에 되지 않습니다. 이 데모는 단계별로 설명드리겠습니다.
먼저 스크립트를 실행해 보겠습니다. 그러면 소비자 가격 표본 데이터가 열립니다. 각 품목별 평균 가격과 선택된 가격이 표시된 요약표가 있고, 각 분포 아래에는 간단한 인터랙티브 요소가 있습니다.
평균값을 기본값으로 사용할 수도 있고, 이 값을 위아래로 조정할 수도 있습니다. 또는 값을 선택한 다음 가격을 입력하면 해당 값이 여기에 자동으로 채워집니다. 이는 제가 더 큰 스크립트에서 구현한 기능과 유사한 방식을 보여주는 간단한 예시입니다.
이 스크립트를 단계별로 살펴보겠습니다. 먼저 기본부터 시작해 보죠. 여기에는 항목 목록, 평균 가격을 저장하는 연관 배열, 임시 가격 변수(이 값에 무엇이 들어 있는지 추적하기 위한 자리 표시자), 그리고 선택한 가격을 가져와 요약 테이블에 표시하는 데 사용되는 선택 가격 변수가 있습니다.
먼저 요약 테이블을 만들고 서식을 변경하고 새 열을 추가합니다. 그런 다음 표시 창을 만들고, 이 H-스플리터 상자 안에 방금 만든 요약 테이블을 참조하여 그 안에 분포를 생성합니다. 다시 한번, 여기에 참조로 지정된 분포를 표시하는 스크롤 상자에 대한 상위 참조를 확인할 수 있습니다. 이것이 바로 지금 보고 있는 표시 상자를 만드는 데 사용된 전체 과정입니다.
자, 이제 바로 이어서 항목 목록을 만들겠습니다. 이 목록은 분포 목록 내의 개별 표시 요소에 매핑됩니다. 이제 이전에 설명했던 것과 동일한 반복문을 실행하겠습니다. 먼저 요약 테이블에서 가져온 평균 가격을 채우고, 임시 가격도 동일하게 설정합니다.
이제 각각의 접근 형식을 변경하고, 앞서 이야기했던 중첩 기법을 사용하여 평균값에 참조선을 추가하겠습니다. 이제 각 분포 옆에 형제 요소로 추가하겠습니다. 여기에는 간격 조정을 위한 컨테이너 몇 개와 실제로 입력하고 이동할 수 있는 숫자 편집 상자가 있습니다.
해당 요소와 상호작용하면 그 안에 있는 함수가 실행됩니다. 함수는 가장 먼저 해당 요소의 경로를 확인합니다. 저는 경로 값을 표시하도록 설정해 두었습니다. 만약 아무 요소나 하나 선택해서 변경해 보면, 아래 로그에서 볼 수 있듯이 X 경로가 출력됩니다. 인덱스와 요소 이름도 함께 표시됩니다.
보시다시피, 여러 항목을 클릭하면 각 항목에 따라 다른 이름이 표시됩니다. 그 후에는 액세스 상자에 접근하여 상호 작용합니다. 이전 참조선을 모두 제거하여 매번 참조선이 중복되지 않도록 하고, 혹시라도 선이 겹치는 부분이 있다면 이전 선에 의해 제거되었던 참조선을 다시 추가합니다. 지금 여기서 일어나는 과정이 바로 그것입니다.
그러면 임시 가격은 해당 숫자 입력란에 있는 값으로 품목 이름별로 업데이트됩니다. 그런 다음 선택한 값에 대한 참조 행을 추가합니다. 이제 선택 버튼에 대한 코드를 살펴보겠습니다. 숫자 입력란과 마찬가지로, 품목 이름과 인덱스를 추출하기 위해 경로를 확인합니다.
이전에 선택했던 액세스 라인을 모두 제거하고, 삭제되었던 라인이 있다면 다시 추가합니다. 그런 다음 선택된 가격을 방금 전에 생성한 임시 가격으로 업데이트합니다. 마지막으로 요약 테이블에 방금 선택한 가격을 표시하고, 선택된 값을 나타내는 굵은 녹색 선을 추가합니다.
이게 전부입니다. 너무 복잡해 보이지 않았으면 좋겠네요. 사실 대부분은 접근 제어와 상호 작용하고 참조선을 추가하는 것뿐이고, 인터랙티브 요소의 기능을 구현하는 부분은 실제로 꽤 간단합니다.
이 스크립트와 샘플 데이터, 그리고 더 큰 규모의 PPH 도구 스크립트는 모두 제 발표 자료와 함께 업로드될 예정입니다. 원하시면 해당 자료들을 이용해 직접 실행해 보거나, 구현 방식에 대해 더 자세히 알아보실 수 있습니다.
PPH 도구를 만들고 사용하는 과정에서 얻은 몇 가지 교훈을 말씀드리면서 마무리하겠습니다. 첫째, JMP 플랫폼에 인터랙티브 요소를 추가하면 분석 기능이 크게 확장된다는 점입니다.
예를 들어, 값을 선택하여 다른 곳에 자동으로 입력하거나, PPH 도구에서 예측 변수 선별을 통해 값을 선택하고 변동성 그래프를 통해 더 자세히 분석할 수 있는 기능 같은 것입니다.
다음으로 중요한 것은 내보내기 결과를 문서화할 수 있는 기능입니다. 이는 커뮤니케이션 프로세스를 간소화하는 데 큰 도움이 됩니다. 원시 데이터에서 시작하여 누군가가 분석을 수행하고, 그 결과를 표 형식으로 내보내 모델 유지 관리 담당자에게 보낼 수 있습니다.
프로세스 또는 장비 엔지니어가 장비에서 확인해야 할 다양한 사항에 대해 메모를 작성하여 보낼 수 있습니다. 다음으로, 스크립팅 측면에서 순서가 지정된 목록과 이를 연관 배열의 인덱스 키로 사용하여 데이터를 저장, 조회 및 다양한 표시 요소 간에 전달하는 것이 대규모 데이터 세트를 처리하는 데 매우 중요했습니다.
다음으로, 변수를 사용하여 루프를 통해 표시되는 요소를 포함하는 대화형 컨트롤을 생성합니다. 변수를 사용하여 무언가를 만들 때 얻게 되는 표시 요소 목록을 루프를 통해 순회하는 것만으로도 할 수 있는 일이 많습니다.
마지막으로 가장 강조하고 싶은 점은 스크립팅이 생각만큼 어렵지 않다는 것입니다. PPH 도구는 규모가 큰 스크립트라서 처음에는 부담스러워 보일 수 있지만, 실제로 사용해 보면 생각보다 어렵지 않게 만들 수 있습니다.
스크립트를 작성할 때는 항상 스크립팅 인덱스를 사용합니다. JMP 도움말 페이지와 로그 파일도 항상 열어두고 JMP에서 작업을 진행하면서 어떤 일이 발생하는지 확인합니다.
아직 사용해 보지 않았거나 사용하기가 부담스러운 분들께 꼭 한번 사용해 보시라고 권해드리고 싶습니다. JMP로 할 수 있는 일이 정말 훨씬 넓어지거든요. 제가 드릴 말씀은 여기까지입니다. 시간 내주셔서 감사합니다.