과거에는 동일한 메인프레임 또는 서로 다른 메인프레임 간의 챔버 구성 설정을 비교하는 데 하루가 걸리는 수동 작업이 필요했습니다. 최근 JMP 17의 워크플로 빌더를 사용하여 자동화된 프로세스가 개발되었습니다. 비교 대상 챔버 수에 따라 개별 워크플로 파일을 생성하여 프로세스 효율성을 높였습니다. 각 워크플로는 구성 설정 파일을 입력받아 기준 챔버와 비교 대상 챔버를 비교합니다. 이 프로세스는 구성 불일치의 중요도를 기반으로 그래프와 표가 포함된 보고서를 생성합니다.
본 프레젠테이션에서는 JMP 18의 워크플로 빌더에 새롭게 추가된 조건부 기능의 효과를 소개합니다. 이 기능을 통해 모든 비교 워크플로를 하나의 워크플로로 통합할 수 있으며, 비교 대상 챔버 수에 따라 워크플로의 적절한 섹션이 결정됩니다. 비교 대상 챔버 수는 조건부 프롬프트에 사용자가 입력하며, 해당 입력값을 기반으로 관련 워크플로가 선택됩니다. 최종 결과는 이전과 동일하지만, 워크플로 파일을 수동으로 선택하는 과정이 없어져 여러 플랫폼 유형에 걸친 비교 보고서를 단 1~2분 만에 생성할 수 있습니다.
안녕하세요 여러분. 저는 게리 오드리스콜입니다. 저는 어플라이드 머티리얼즈라는 회사에서 근무하고 있으며, 오늘은 워크플로우 빌더와 조건부 프롬프트를 사용하여 원자층 증착(ALD) 가스 라인 온도 제한을 모니터링하는 방법에 대해 발표하려고 합니다. 특히, 애플리케이션이 진입한 지점과 JMP 중단 지점에 대한 프롬프트를 설정하는 데 워크플로우 빌더를 어떻게 활용할 수 있는지 자세히 설명드리겠습니다.
제 소개를 간단히 드리겠습니다. 말씀드렸다시피 저는 더블린에 있는 Applied Materials에서 근무하고 있습니다. 공정 엔지니어로서 다양한 공정을 담당하고 있으며, 반도체 분야에서 30년 가까이 경력을 쌓았습니다. 취미로는 사이클링, 골프를 즐기고, 아일랜드 전통 스포츠인 카모기(camogie) 코치도 하고 있습니다. 카모기는 아일랜드의 성인 여자팀 스포츠이고, 남자팀은 헐링(hurling)이라고 합니다. 아일랜드에 가보신 적이 있다면 막대기로 하는 거친 경기에 대해 들어보셨을 텐데, 바로 제가 코치하는 카모기입니다.
JSL을 사용하는 사람이 얼마나 될지 간단한 설문조사를 해볼까요? JSL 사용자들을 모두 고려해 볼 때, 실제로 JSL을 사용하는 사람은 얼마나 될까요? 크게 두 부류로 나눌 수 있습니다. 첫째는 '예'입니다. JSL이 업무의 일부이고, JSL을 매우 좋아하는 사람들이죠. 예를 들어, 저는 코드 전문가라서 매일 JSL을 사용합니다. 둘째는 '아니오'입니다. JSL은 제 업무와 관련이 없고, 코드를 이해하지 못하며, 사용해 본 적도 없습니다. 저 개인적으로는 '아니오'에 속합니다. 코드를 잘 이해하지 못하지만, 가끔씩 조금씩 배우려고 노력합니다. 하지만 '아니오'에서 '예'로 넘어가는 방법이 있습니다. 오늘 그 방법의 일부를 보여드리겠습니다.
JMP 17 출시 당시, 노스캐롤라이나주 캐리에서 열린 디스커버리 서밋에서 워크플로 빌더가 소개되었습니다. 워크플로는 말 그대로 데이터 조작에 대한 계획을 기록하는 공간인데, 코드와 출력 간의 관계를 완전히 바꿔놓습니다. JSL 관점에서 우리는 필요한 출력을 얻기 위해 코드를 개발합니다. 하지만 워크플로 빌더를 사용하면 원하는 출력을 얻고, 데이터를 조작하는 동안 백그라운드에서 코드가 자동으로 생성됩니다. 워크플로를 통해 사용자는 JSL 코드를 사전 지식 없이도 경험하고 학습할 수 있습니다.
워크플로 빌더 자체를 살펴보면, 빌더에서 원하는 작업을 직접 생성할 수 있습니다. 워크플로 빌더의 단계 설정에서, 각 작업에 필요한 코드가 백그라운드에서 생성되는 것을 확인할 수 있습니다. 워크플로는 반복적인 작업에 사용되며, 동일한 작업을 반복하지 않도록 하여 효율성을 크게 향상시켜 줍니다. 워크플로 코드는 보고 편집할 수 있습니다.
제가 직접 이 작업을 하려고 했을 때, 특히 워크플로 빌더를 처음 사용했을 때, 원하는 파일을 선택하려면 필요한 파일을 직접 지정해야 했고, 파일 이름은 여기에 표시되었습니다. 하지만 매번 그 파일을 사용하고 싶은 건 아니죠. 코드를 수정해야 할 때도 있고요. 그런데 일반적인 파일을 선택하는 방법에 대한 많은 정보는 JMP 커뮤니티에서 얻을 수 있었습니다. 코드를 처음 접할 때 겪는 문제는 사실 처음 겪는 문제가 아닙니다. JMP 커뮤니티의 누군가는 이미 그 문제를 해결하고 코드를 공유했을 겁니다.
JMP 18 출시를 생각해 보면, JMP 18은 유럽 맨체스터에서 열린 디스커버리 서밋에서 출시되었습니다. 그 자리에서 우리는 6P에 대해 들었습니다. 그리고 서밋 이후에 JMP 18에 추가된 7번째 P가 있다는 것을 알게 되었습니다. 그것은 바로 프롬프트, 더 정확히 말하면 워크플로 빌더의 조건부 프롬프트였습니다.
제 업무에서 프롬프트와 조건부 프롬프트를 어떻게 활용하는지 설명드리겠습니다. 무엇을, 왜, 어떻게 하는지 자세히 설명드리겠습니다. 제가 하는 일은 무엇일까요? 원자층 증착(ALD) 챔버 가스 라인의 온도 설정을 확인하여 고장 경보 및 경보 경고를 확인하는 것입니다. 이는 예방 정비 작업의 일환으로 이루어지는 경우가 많습니다. 왜 이 작업을 할까요? 경보가 감지되지 않은 온도 변화는 제품 불량으로 이어질 수 있기 때문입니다. 구체적으로는, 조건부 프롬프트를 사용하는 향상된 워크플로 빌더를 통해 설정을 확인하고 있습니다.
ALD(원자층 증착)는 생소한 분들을 위해 설명드리자면, 모든 산업 분야에서 다양한 용도로 사용되는 공정입니다. ALD는 표면에 재료를 직접, 한 번에 한 층씩 증착하는 기술입니다. 이 공정을 통해 자기 제한적인 특성으로 가능한 한 가장 얇고 균일한 박막을 만들 수 있습니다. 산업 분야에서 ALD가 사용되는 예로는 실험실의 화학 및 생물 의학 분야 바이알 코팅, 의료 기기 코팅, 그리고 반도체 소자 제조 과정에서 칩 내부의 여러 층 등이 있습니다. 이처럼 ALD는 모든 산업 분야에서 폭넓게 활용되고 있습니다.
반도체 산업에서 어떻게 사용되나요? 아마 다른 산업과 비슷할 겁니다. 액체 화학 물질이 담긴 용기가 있고, 그 화학 물질이 공정에 사용됩니다. 공정에는 화학 물질이 사용되지만, 액체 형태가 아니라 기체 형태로 용기에서 칩 표면의 진공 챔버를 통해 가스 라인으로 운반됩니다. 이 그림은 전체 화학 물질 흐름을 간단하게 나타낸 것이지만, 개념을 더 쉽게 설명하자면, 용기에서 칩 표면의 챔버까지 전체에 걸쳐 여러 개의 온도 조절용 히팅 패드가 설치되어 있을 겁니다.
제가 여기서 보여드리는 것은 칩 표면의 일부이지만, 반도체 제조에서는 챔버 내 하나의 기판 또는 웨이퍼 위에 여러 개의 칩이 있습니다. 그 위에 재료를 증착하는 것이죠. 히트 패드의 한계 설정은 용기를 교체할 때마다 확인해야 합니다. 앞서 말씀드린 것처럼, 냉각된 부분에서는 기체가 응축되어 칩에 결함을 일으킬 수 있습니다. 기체가 냉각되면 액체 상태로 응축되었다가 건조되면서 다시 고체 상태로 변해 칩에 침착되어 문제를 일으킬 수 있기 때문입니다.
기존 방식은 설정에서 여러 챔버를 확인하는 방식이었습니다. 예를 들어, 하나의 챔버로 볼 때는 워크플로 빌더를 하나 사용하고, 두 개의 챔버를 볼 때는 또 다른 워크플로 빌더를 사용했습니다. 마찬가지로, 위 다이어그램에는 최대 6개의 챔버만 나와 있지만, 실제로는 그보다 더 많은 챔버를 추가할 수 있습니다. 기존 방식은 사용할 챔버 수에 따라 파일을 선택하고 실행하는 방식이었습니다.
프롬프트 기능으로 돌아가서, 워크플로 빌더에는 이제 단순히 하나를 선택하는 것뿐만 아니라, "여섯 개의 개별 단계를 모두 하나로 결합하세요"와 같이 프롬프트를 지정할 수 있는 기능이 있습니다. JMP 18의 워크플로 빌더에서 고급 섹션을 보면, 그 안에 또 다른 메뉴가 있습니다. 이 메뉴 안에는 조건 추가, 그렇지 않으면 추가, 반환 값 추가, 각 단계에 대한 추가, 이렇게 네 가지 옵션이 있습니다. 이 옵션들을 사용하면 단계가 여러 갈래로 분기될 수 있습니다. 즉, 하나의 경로만 있는 것이 아니라 입력값에 따라 여러 경로로 진행할 수 있습니다. 이것이 바로 JMP 18에 새로 추가된 기능이며, 제가 여기서 사용하고 있는 기능입니다.
새로운 방식에 대해 간략하게 설명드리겠습니다. 순서도 관점에서 보면, 먼저 프롬프트가 표시됩니다. "챔버를 하나만 사용하고 있습니까?"라고 묻습니다. 만약 그렇다면 워크플로를 실행하고 보고서를 받아 완료합니다. 프롬프트에서 "하나"가 아니면 다음으로 넘어갑니다. "두 개"를 사용한다면 워크플로를 실행하고 보고서를 받습니다. 그렇지 않다면 다음으로 넘어갑니다. 이런 식으로 각 챔버를 계속 확인하고, 개수에 따라 프롬프트에 입력한 값과 일치하는 항목을 확인합니다. 일치하는 항목에 대해 보고서를 실행합니다. 새로운 방식은 더 큰 워크플로 내에 if-else 조건문이나 if-else 문을 사용하여 구현됩니다. 이것이 제가 사용하는 방식입니다.
저는 사무 엔지니어라서 JSL을 알지 못합니다. 제가 이 개념을 생각해낸 방식과 제게 효과가 있었던 방식을 설명드리겠습니다. 다른 방법들도 있을 수 있지만, 이것이 제가 사용하는 방법입니다. 이제 데모를 통해 보여드리겠습니다.
예전 방식을 따른다면 아마 4단계 점검을 할 것 같습니다. 점검 단계에서는 먼저 파일을 확인하고, 해당 파일에서 데이터 테이블을 생성하여 JMP 파일로 저장합니다. 그런 다음 기준 파일(골든 파일)을 열고 기준값과 비교하여 점검합니다. 예방 정비를 할 때는 기준값을 넓히는 경우가 있기 때문입니다. 예를 들어, 어떤 부품의 온도가 200도라면 20도까지 낮추는 경우 기준값을 설정하는 식입니다.
제 설정값은 200도에 매우 가깝게 설정되어 있지만, 온도를 낮춘 후에는 허용 오차 범위를 벗어나 계속 경보가 울리는 겁니다. 많은 사람들이 예방 정비 작업을 하면서 설정값을 넓히곤 하죠. 그리고 정비가 끝나면 다시 설정값을 좁힙니다. 이 기능은 바로 그런 과정을 찾는 겁니다. 골든 파일에 저장된 설정값을 확인하고, 실제 필요한 값으로 되돌리는 거죠. 저는 골든 파일을 만들어서 표 형식으로 저장하고, 그 안에 여러 열을 조인합니다. 그리고 각 열을 기준으로 값이 일치하는지 확인하는 거죠. 예를 들어, 이 경우에는 챔버가 네 개라고 가정해 봅시다. 일치하지 않는 부분이 있으면 부분 테이블을 생성합니다.
그다음, 대규모 유통 환경에서는 어떤 히팅 패드, 어떤 컨트롤러, 어떤 카테고리를 선택해야 할지 고민하게 되죠. 1챔버, 2챔버, 3챔버, 4챔버, 5챔버, 6챔버 등 챔버 크기에 따라 각각 다른 워크플로우를 만들어야 했을 겁니다. 하지만 저는 이 모든 워크플로우를 통합해서 더 이상 개별적으로 선택할 필요가 없도록 했습니다.
제가 프롬프트에서 했던 작업, 그리고 여기에서 보시는 내용을 보여드리기 전에, 먼저 이 프로그램을 실행해 보겠습니다. JMP 18에서 제 파일로 이동하여, 예를 들어 '4'라는 파일을 확인하고 싶다고 가정해 보겠습니다. '열기'를 클릭하면 모든 과정이 실행됩니다. '4 chamber'로 저장하고, 기존 파일을 덮어쓰는 저장을 선택합니다. 그러면 원하는 위치에 골든 파일을 저장하고, 폴더 위치에도 저장할 수 있습니다. 이렇게 하면 필요한 모든 파일이 생성됩니다.
보시다시피, 4번 항목에서는 히팅 패드 2에 두 가지 문제가 있다고 표시됩니다. 모든 문제는 컨트롤러 2에서 발생하며, 하나는 경고 한계이고 다른 하나는 오류 한계입니다. 그러면 문제가 무엇인지, 현재 값은 무엇인지, 목표 값은 무엇인지 등을 표로 정리하여 보고서를 생성합니다. 6챔버 점검에서도 비슷한 방식으로 진행합니다. 그런 다음 조건부 프롬프트를 모두 사용합니다. 보시다시피, 동일한 파일을 사용합니다. 점검 파일을 열고 저장하는 방식으로 구성되어 있습니다. CSV 형식의 기준 파일을 JMP 테이블로 저장합니다. 이제 프롬프트를 설정하는 부분입니다.
보시다시피, 프롬프트 안에 메시지를 입력하도록 요청할 겁니다. 메시지에는 어떤 챔버를 선택할지 물어볼 거예요. 답이 4개면 이 워크플로가 실행되고, 4개가 아니면 다음 단계로 넘어갑니다. 그리고 '그 외' 칸에는 챔버 하나에 대한 워크플로가 또 하나 포함되어 있고, 그 안에도 또 다른 워크플로가 포함되어 있는 식이죠. 이런 식으로 계속 진행됩니다. 각 워크플로가 전체 과정을 탭으로 연결하는 것처럼 보입니다. 마지막에는 차트와 보고서가 생성됩니다. 제가 이 기능을 사용하는 방식이 바로 이겁니다. 다시 이 화면으로 돌아가려면, 체크 파일을 다시 열고 이번에는 6개를 선택하면 됩니다.
그러면 "어디에 저장하시겠습니까?"라고 물어볼 겁니다. 저는 "여기에 체크 6을 저장하겠습니다."라고 말할 수 있겠죠. 파일을 저장하는 방식에 따라 도구 ID, 기계 ID 또는 프로세스 ID를 입력할 수도 있습니다. 만약 테이블이 없어서 나중에 저장하려고 할 때 바로 저장할 수 있는 옵션이 항상 있다면, 다시 6이 표시될 테니 "네, 이 파일을 골든 파일로 저장하겠습니다."라고 말할 수 있을 겁니다.
이제 여기서 "비교할 챔버가 몇 개입니까?"라고 묻습니다. 이 경우에는 6개라고 하겠습니다. 그러면 "이 프로그램을 몇 번 실행해 봤는데, 어떤 파일을 사용하시겠습니까?"라고 묻습니다. "6개를 선택하세요."라고 하겠습니다. 백그라운드에서 작업이 진행됩니다. 보시다시피, 전체 과정에서 프롬프트에 따라 특정 섹션을 건너뛰고, 건너뛴 섹션을 실행한 후 "건너뛰었습니다."라고 표시합니다. 이제 여기에 파일들이 표시됩니다. 불일치하는 부분은 여기에서 확인할 수 있습니다.
보시다시피, 여기 제 표에 모든 제한값이 나와 있습니다. 기본적으로 모든 행을 합산한 값인데, 불일치 값은 이 기기에서 두 개입니다. 다른 기기들의 불일치 값은 다른 곳에서 확인했습니다. 제 데이터 종류에 따라 전체 보고서를 제공해 드릴 수 있습니다. 예를 들어, 네 개의 기기에서 불일치가 발생한 경우를 보면, 이 기기에서는 히팅 패드가 제대로 작동하지 않는 문제가 두 건 있었습니다. 두 건이 발생했는데, 히팅 패드 2번과 컨트롤러 2번에 각각 하나씩 있습니다. 하나는 오류 제한값이고 다른 하나는 경고 제한값입니다. 다시 돌아가서 보면, 경고 제한값과 오류 제한값이 더 낮게 설정되어 있었습니다. 설정값을 확인할 수 있는데, 예를 들어 100과 -80으로 설정되어 있지만 실제로는 -10과 -80이어야 합니다.
제가 그때로 돌아가서 그 제한 사항들을 해결하면 모든 게 괜찮아질 겁니다.
이건 제가 단순히 한계치가 제대로 설정되었는지 확인하는 절차일 뿐입니다. 모니터링이 안 되고 있는 건 아니에요. 아마 많은 고객들이 한계치 모니터링을 원하지 않을 겁니다. 온도가 어떻게 유지되는지에 대한 설정값이 충분하니까 괜찮을 거라고 생각하는 거죠. 그래서 한계치를 모니터링하지 않는 겁니다. 이건 제가 스스로 확인하는 또 다른 절차일 뿐입니다.
이게 제 시연입니다. 요약하자면, 워크플로 조건은 프롬프트를 사용하여 여러 워크플로를 하나의 더 큰 흐름으로 결합하는 데 매우 유용할 수 있습니다. 프롬프트는 저의 경우 숫자였지만, 문자 기반 프롬프트도 있습니다. 예를 들어, 제가 화학 업계에 종사하고 있고 두 개의 워크플로가 있다고 가정해 보겠습니다. 하나는 산성 화학 물질을 다루는 워크플로이고 다른 하나는 염기성 화학 물질을 다루는 워크플로입니다. 이때 프롬프트에 "지금 산성 워크플로를 작업하고 있습니까, 아니면 염기성 워크플로를 작업하고 있습니까?"라고 입력할 수 있습니다.
다른 문자를 사용할 수도 있고, 저는 특정 작업을 수행할 때 "이 일이 발생했습니까? 예 또는 아니오?"라고 묻습니다. 이에 따라 특정 결과에 따라 보고서를 생성할 수도 있습니다. 말씀드렸다시피, 이것은 제가 사용하는 방식입니다. 제 워크플로에 대한 다른 해결책도 고려해 볼 수 있습니다. 이 JSL 코드를 생성한 후에는 이를 복습하는 것이 좋으며, 훌륭한 교육 자료가 될 수 있습니다.
앞서 말씀드렸듯이, 지금 제 실제 워크플로로 돌아가서 찾아보면, 제가 만든 작업 목록이 각각 있을 겁니다. 워크플로에서 만든 작업들을 바탕으로 JSL을 배우기 시작할 수 있겠죠. 다음 단계로는 워크플로 끝에 프롬프트를 추가하는 것도 좋을 것 같습니다. 예를 들어, 특정 개수의 챔버가 있는 특정 장비에 대한 작업이라고 가정해 보겠습니다. 두 번째, 세 번째 장비도 작업해야 할 수도 있죠. 그럴 때 "아직 다른 장비를 작업해야 합니까? 예/아니요?"와 같은 프롬프트를 추가할 수 있습니다. "아니요, 그럼 끝인가요?"라고 묻고, "예"라고 답하면 워크플로의 시작 부분으로 다시 돌아가는 식으로요. 이런 식으로 워크플로를 생각해 볼 수도 있겠습니다.
그럼, 궁금한 점이 있으시면 언제든지 커뮤니티에서 저에게 질문을 보내주세요. 제 이름은 게리 오드리스콜이고, JMP 커뮤니티 ID는 godriscoll입니다. 질문을 보내주시면 기꺼이 답변해 드리겠습니다. 감사합니다.