실트로닉 AG는 반도체 웨이퍼 산업 분야의 글로벌 기술 선도 기업 중 하나입니다. 실리콘 웨이퍼 생산에는 결정 성장부터 웨이퍼 패키징에 이르기까지 여러 공정 단계가 필요합니다.
복잡한 운영 환경에서는 방대한 양의 데이터가 생성되므로, 각기 다른 관점에서 중요한 세부 정보가 다릅니다. 데이터는 JMP에서 일반적으로 불러올 수 있는 데이터베이스 및 기타 리소스에 저장될 수 있습니다. 이러한 데이터는 하나의 데이터 테이블에 모두 담을 수 없습니다. 본 발표에서는 상황에 따라 마스터 데이터 테이블을 추가 데이터로 확장하는 방법을 보여드리겠습니다. 또한 마스터 데이터 테이블에 연결된, 더 자세한 정보를 담고 있는 추가 테이블을 쿼리하는 예제도 제공합니다.
마스터 데이터 테이블에는 설명된 기능을 구현하기 위한 테이블 스크립트 세트가 제공됩니다. 설명된 기능을 구현하기 위한 자세한 JSL 코드 조각이 설명되어 있습니다.
안녕하세요 여러분. 이 영상을 시청해 주셔서 감사합니다. 제 발표, "데이터 콕핏: 클릭 한 번으로 마스터 테이블에 추가 데이터를 확장하는 방법"에 오신 것을 환영합니다. 먼저 저희 회사인 실트로닉(Siltronic)에 대해 간략히 소개하겠습니다. 실트로닉은 세계적 수준의 생산 시설 4곳과 4,500명의 직원을 보유하고 있으며, 글로벌 규모와 영향력을 바탕으로 50년 이상의 실리콘 기술 역사를 자랑합니다. 실트로닉은 바커(Wacker)의 자회사로 설립되었으며, 1984년에 최초의 200mm 웨이퍼를, 1990년에는 최초의 300mm 웨이퍼를 생산했습니다. 보시다시피 웨이퍼 크기는 11나노미터에서 7나노미터, 8나노미터, 5나노미터, 3나노미터, 그리고 현재는 2나노미터까지 끊임없이 축소되고 있습니다.
2015년에 주식회사로 상장했으며, 현재 싱가포르의 새로운 FAB(공정 제조 시설)와 프라이부르크의 결정 인발 공장을 통해 사업을 확장하고 있습니다. 여기에서 초고순도 폴리실리콘에서 시작하여 반도체 실리콘 웨이퍼에 이르기까지 전자 제품 가치 사슬의 전체적인 흐름과 가치 증가 과정을 확인할 수 있습니다. 이는 반도체 및 전자 제품 생산의 핵심 단계이며, 그 가치는 1,000배 이상 증가합니다. 또한, 당사의 국제적인 제조 네트워크를 살펴볼 수 있습니다. 독일의 프라이부르크와 부르크하우젠에는 소구경 생산 라인과 결정 인발 및 웨이퍼 제조 시설이 있으며, 부르크하우젠은 당사의 핵심 R&D 허브입니다.
저희는 포틀랜드와 싱가포르에 200mm 웨이퍼 생산 시설을 보유하고 있습니다. 싱가포르에는 결정 성장 시설과 300mm 웨이퍼 생산 시설도 있습니다. 싱가포르의 FAP(Full Application Program)는 세계에서 가장 최신식이자 최대 규모의 시설 중 하나입니다. 최고의 기술력과 높은 품질 수준은 저희에게 똑같이 중요합니다. 현재 두 개의 나노미터 노드에서 연구를 진행하고 있으며, 웨이퍼에 대해 50개 이상의 파라미터를 동시에 최적화하고 단일 웨이퍼 추적 시스템을 구축하고 있습니다. 따라서 방대한 양의 데이터가 생성됩니다. 저희의 생산 워크플로는 원자재인 초고순도 실리콘에서 시작하여 초크랄스키법 또는 플로트존 풀링을 이용한 결정 성장, 잉곳 분쇄, 멀티와이어 슬라이싱, 에지 라운딩, 레이저 마킹, 래핑, 세척 및 에칭, 폴리싱, 그리고 최종적으로 에피택시 공정을 거칩니다. 제 소개를 간단히 드리자면, 저는 전기공학을 전공했고, 저희 회사에서 하는 것과 같은 전기열 공정 시뮬레이션 분야에서 박사 학위를 받았습니다. 통계학 교육도 받았으며, 실트로닉 프라이부르크에서 실리콘 결정 성장 공정 개발을 담당하고 있습니다. 이 자리를 빌어 디스커버리 서밋에 참석할 수 있도록 지원해주고, JMP와 함께 일할 수 있도록 해준 회사에 감사를 전하고 싶습니다. 정말 멋진 일입니다.
저는 Siltronic 내 약 500명의 사용자를 대상으로 JMP 소프트웨어 지원을 담당하고 있습니다. 이번 프로젝트는 '데이터 콕핏: 클릭 한 번으로 마스터 테이블에 추가 데이터를 확장하는 방법'이라는 애플리케이션에 관한 것입니다. 하나의 테이블에는 제품이나 배치 등에 대한 개요와 성능 및 기타 매개변수를 평가하는 그래프가 포함되어야 합니다. 메인 테이블의 내용 및 선택에 따라 생성되는 추가 테이블과 특정 값을 가진 추가 열을 만들고 싶었습니다. 또한, 더 자세한 데이터를 볼 수 있도록 드릴다운 링크를 제공하고 싶었습니다. JMP는 훌륭한 그래픽 사용자 인터페이스(GUI)를 제공하며, 특히 JMP 데이터 테이블은 이러한 기능을 구현하기에 매우 적합하다는 것을 알게 되었습니다. 이 문제를 해결하기 위해 데이터베이스 쿼리, 특히 새로운 SQL 쿼리 객체를 활용했습니다. 개요를 위한 JMP 데이터 테이블과 클릭 이벤트를 처리하는 이벤트 핸들러를 사용하고, 플랫폼 시작, 열 추가, 상세 테이블 생성, 또는 한 번의 클릭으로 모든 기능을 실행하는 테이블 스크립트를 작성했습니다. JSL은 이러한 모든 기능을 구현하는 데 매우 유용한 도구입니다. 실제 애플리케이션에서는 회사 데이터베이스에서 데이터를 가져옵니다.
이 프레젠테이션에서는 샘플 데이터 테이블인 '양극 접합'을 사용하여 이를 시뮬레이션합니다. 실제로는 여러 테이블에 대한 쿼리를 통해 조종석 요약 정보가 생성됩니다. 동일하거나 다른 테이블, 또는 다른 데이터베이스에서 추가 테이블을 가져올 수 있으며, JMP에서 사용 가능한 파일, 그림, 비디오 등의 다른 소스도 구현할 수 있습니다. 하지만 이 프레젠테이션에서는 회사 데이터베이스에 접근하는 방식과 유사한 데이터베이스 쿼리를 사용하기 때문에 '양극 접합' 테이블을 사용합니다. 이 '양극 접합' 데이터 테이블에는 여러 배치 정보가 있으며, 각 웨이퍼의 배치는 웨이퍼 ID입니다. 각 웨이퍼에는 전하, 유량, 위치, 피스톤 힘, 진공, 전압의 다섯 가지 변수와 같은 데이터가 순서대로 표시됩니다. 각 웨이퍼에 대해 양호 또는 불량과 같은 평가가 이루어집니다. 데이터와 스크립트를 사용한 조종석은 다음과 같습니다. 웨이퍼 ID, 평가, 그리고 여기에서 볼 수 있는 것처럼 집계된 데이터가 포함되어 있으며, 다양한 테이블 스크립트가 있습니다. 여기 링크를 클릭하면 더 자세히 살펴볼 수 있습니다. 여기에는 여러 열이 있으며, 추가 열은 열 그룹 세부 정보에서 그룹화됩니다. 이 부분은 나중에 자세히 살펴보겠습니다. 또한 표현식 유형의 그래프 열도 있습니다.
좀 더 자세히 보여드리겠습니다. 이제 JMP로 전환하겠습니다. 지금은 비어 있는 콕핏 화면이 보입니다. 여기에는 제 발표의 배경을 보여주는 요약본을 볼 수 있는 스크립트가 있습니다. 또한 이 표를 사용하는 방법에 대한 설명이 포함된 스크립트도 제공합니다. 자세히 설명해 드리겠습니다. 스크립트들을 그룹으로 묶어 놓았습니다. 스크립트 그룹을 열고 '콕핏 업데이트'를 누르면 콕핏의 주요 데이터를 확인할 수 있습니다. 여기에는 30개의 웨이퍼가 나열되어 있고, 집계된 데이터도 함께 표시됩니다.
여기 테이블을 비우고 다시 채우는 스크립트가 있습니다. 실제 애플리케이션에서는 불가능하지만, 여기서는 전체 데이터베이스를 살펴볼 수 있습니다. 이것은 JMP 샘플 데이터 테이블입니다. 122개의 행과 2,000개의 웨이퍼 ID가 있는 것을 볼 수 있습니다. 이 그래프에서는 양극 접합 샘플 테이블에 있는 전하량, 유량 등의 기능 데이터를 확인할 수 있습니다. 조종석에 들어가기 위해 몇 가지 흥미로운 세부 데이터를 찾아봤습니다. 이것은 전하량의 43번째 위치일 수 있습니다. 여기서 변동이 심한 것을 볼 수 있습니다. 또는 유량의 40번째 위치와 피스톤 힘도 볼 수 있는데, 이 위치에서 특징적인 값을 보입니다.
여기서 30번 위치는 특성 위치이고, 진공은 3번 위치입니다. 흥미로운 부분입니다. 그리고 전압의 경우 27번 위치가 중요합니다. 여기에는 변수들을 쉽게 전환할 수 있는 컬럼 스위처가 있습니다. 이것이 우리가 사용하는 데이터베이스입니다. 닫겠습니다. 다시 콕핏으로 돌아왔고, 어떻게 작동하는지 살펴볼 수 있습니다. 콕핏을 업데이트합니다. 스크립트를 편집합니다. 스크립트가 상당히 작고, 주로 새로운 SQL 쿼리를 사용합니다. 보시다시피 데이터베이스가 아닌 JMP 테이블에 접근합니다. 이것이 JMP 테이블과 데이터베이스에 접근하는 주요 차이점입니다. 쿼리를 정의하기 위해 사용자 지정 SQL도 사용합니다. 여기서는 콕핏에서 작업하기 쉽도록 웨이퍼 ID의 일부만 필터링했습니다. 보시다시피 최대값이나 평균과 같은 집계 데이터도 있습니다. 사용자 지정 SQL 문자열 안에서 큰따옴표를 이스케이프해야 하기 때문에 SQL이 조금 복잡해 보입니다.
나중에 이 작업을 더 효율적으로 수행하는 방법을 살펴보겠습니다. 쿼리가 실행되어 콕핏 테이블이 업데이트됩니다. JMP가 이 테이블을 열고 쿼리가 끝난 후에도 닫지 않기 때문에 여기서 JMP 데이터 테이블을 닫아야 합니다. 쿼리 실행 시 필요하지 않은 스크립트 몇 개를 삭제합니다. 이 스크립트는 크기가 작고 사용하기 편리하며 유지 관리도 용이합니다. 데이터 테이블을 지우는 방법은 다음과 같습니다. 모든 행을 삭제합니다. 나중에 볼 그래프 열을 삭제합니다. 나중에 여기에 나타날 열 그룹 세부 정보의 모든 열을 삭제하고 웨이퍼 ID 속성도 삭제합니다. 이제 모두 실행해 보겠습니다. 전체 콕핏이 어떻게 채워지는지 확인할 수 있습니다. 그래프가 포함된 추가 세부 정보 테이블이 표시되는 것을 볼 수 있습니다. 콕핏의 웨이퍼에 대해 제가 쿼리한 웨이퍼 ID 30개에 대한 세부 정보와 유량에 대한 세부 데이터가 표시됩니다. 테이블 안에는 상세 곡선을 볼 수 있는 그래프 빌더를 표시하는 스크립트를 넣었습니다. 이제 닫을 수 있습니다. 전하량에도 동일하게 적용됩니다.
여기 링크 참조와 링크 ID가 보이시죠? 이 그래프 빌더에서 제어판을 표시할 수 있고, 이 상세 테이블에서 사용할 수 있습니다. 이 상세 테이블에서는 조종석의 메인 테이블 데이터, 예를 들어 상태 데이터를 마치 같은 테이블에 있는 것처럼 링크로 연결하여 사용할 수 있습니다. 여기서는 오버레이 기능을 사용하여 양호 웨이퍼와 불량 웨이퍼를 서로 다른 색상으로 표시했습니다. 링크는 바로 이런 용도로 사용됩니다. 조종석으로 이동하여 상세 정보를 살펴보겠습니다. 그래프 아래에는 웨이퍼 ID별 최대 전하량과 같은 요약 그래프가 있습니다. 열 전환기를 사용하여 다양한 변수를 볼 수 있습니다. 특정 지점에 마우스를 올리면 상세 그래프가 나타납니다. 데이터 테이블에 그래프를 열로 추가하고, 이 열을 레이블로 지정했기 때문입니다. 그래서 그래프에서 상세 정보가 레이블로 표시되는 것입니다. 진공 평균값에 차이가 있는지, 양호 웨이퍼와 불량 웨이퍼의 차이가 있는지 여기서 확인할 수 있습니다.
예를 들어 단방향 분석을 할 수도 있습니다. 여기에서도 자세한 내용을 확인할 수 있습니다. 스크립트로는 어떻게 구현했을까요? 간단히 그래프 빌더를 사용하면 됩니다. 그래프 빌더를 만들고 스크립트를 추출하여 테이블 스크립트에 붙여넣었습니다. 여기서는 집계된 값과 세부 값을 모두 사용하여 예측 변수 스크리닝을 수행할 수 있습니다. 어떤 매개변수가 조건을 좋게 또는 나쁘게 만드는지 확인할 수 있습니다. 어떻게 작동하는지는 여기에서 볼 수 있습니다. 간단히 말해서, 세부 열과 그룹 세부 정보가 있는지 확인하고, 없으면 집계된 값으로 예측 변수 스크리닝을 실행합니다. 세부 열과 그룹 세부 정보가 있으면 해당 열도 예측 변수 스크리닝에 추가합니다. 이제 그래프 섹션에 있는 내용을 살펴보았습니다. 더 자세한 내용을 살펴보겠습니다. 웨이퍼 ID에 대한 세부 정보입니다. 여기 있는 웨이퍼 ID를 클릭해 보세요. 여기를 클릭하면 웨이퍼 ID가 1971 또는 1973인 상세 정보를 볼 수 있습니다.
새로운 테이블이 생성되고, 해당 테이블에는 이 그래프를 보여주는 스크립트가 함께 제공됩니다.
어떻게 가능할까요? 여기서는 이벤트 핸들러 기술을 사용했습니다. 열 정보에서 이벤트 핸들러를 확인할 수 있습니다. 이벤트 핸들러에서는 JMP가 스크립팅 프레임을 제공합니다. 저는 쿼리를 시작하는 스크립트를 작성했고, 이 쿼리에서 현재 열과 행을 사용할 수 있습니다. 웨이퍼 ID와 웨이퍼 ID 번호를 여기서 가져올 수 있습니다. 데이터베이스 연결이 필요합니다. 이 SQL 문에서 큰따옴표를 이스케이프 처리할 필요 없이 문자열을 입력하는 다른 방법을 볼 수 있습니다. 좀 더 깔끔해 보입니다. Eval Insert를 사용하여 쿼리 필터, 즉 쿼리 조건을 이 쿼리에 삽입합니다. 현재 열의 ID, 즉 웨이퍼 ID를 가져와서 쿼리에 필터를 적용하고, 완료되면 데이터 테이블을 닫고 일부 스크립트를 삭제한 다음, '주문 대비 청구' 스크립트를 테이블에 추가합니다. 제가 한 작업은 이렇습니다. 여기를 클릭하면 테이블을 볼 수 있고, 여기를 클릭하면 그래프를 볼 수 있습니다. 이 모든 과정을 한 단계로 처리할 수도 있습니다.
이제 더 이상 필요하지 않습니다. 다음 스크립트를 살펴보겠습니다. 모든 열과 행을 선택 해제합니다. 선택된 행에 대한 세부 정보를 봅니다. 이제 몇 개의 행만 선택해야 합니다. 한번 해보겠습니다. Ctrl 키를 누른 상태에서 1, 3, 5번 행을 선택하고 선택된 행에 대한 세부 정보를 봅니다. 이렇게 하면 그래프의 각 열에 양호/불량 상태가 표시된 세 개의 웨이퍼 ID에 대한 진공 곡선을 얻을 수 있습니다. 비교할 수 있습니다. 어떻게 가능한 걸까요? JMP 홈 창으로 이동하면 배경에서 양극 접합 테이블이 생성되지만 숨겨져 있고, 이 창에는 그래프만 표시됩니다. 이 테이블을 더블 클릭하면 테이블을 볼 수 있습니다. 그러면 더 이상 숨겨져 있지 않습니다. 어떻게 작동하는지 살펴보겠습니다. 그래프를 닫으면 테이블도 사라지는 기능도 있습니다. 테이블만 표시됩니다. 어떻게 작동하는지 살펴보겠습니다. 먼저, 아무것도 선택되지 않은 경우 팝업 창이 나타납니다. 무언가가 선택되면 웨이퍼 목록 문자열이 표시됩니다. 이것은 웨이퍼 ID 목록이 담긴 문자열인데, 저는 substitute 함수를 사용하여 대괄호를 여기 있는 중괄호로 바꿨습니다.
이 목록도 마찬가지입니다. JMP 데이터 테이블에 대한 새 SQL 쿼리를 실행하고, Eval Insert를 통해 이 웨이퍼 목록을 SQL 조건으로 추가합니다. 실행이 완료되면 동일한 작업이 수행되고 그래프 빌더가 스크립트로 추가됩니다. 여기서 그래프 빌더가 실행됩니다. 그래프 빌더 객체에 닫을 때 데이터 테이블(양극 접합 세부 정보)을 닫고 아무것도 저장하지 않도록 지정합니다. 이 스크립트는 간단하며, 선택된 웨이퍼 ID의 곡선을 제공하는 유용한 기능을 가지고 있습니다. 닫으면 모든 데이터가 사라집니다. 여기까지가 세부 설명입니다.
자, 이제 세부 정보를 업데이트해 보겠습니다. 보시다시피, 여기에 추가된 세부 정보 열들이 있습니다. 왜 이 정보들이 중요한지 이미 설명드렸고, 이 스크립트를 통해 추가됩니다. 다시 테이블을 지우고 메인 데이터만 표시되도록 화면을 업데이트하겠습니다. 세부 정보 열부터 스크립트를 시작해 보겠습니다. 여기에 세부 정보가 나타나는 것을 볼 수 있습니다. 어떻게 작동하는지 보여드리겠습니다. 먼저, 여기에 필요한 열 이름 목록과 쿼리에 필요한 이름 목록, 그리고 쿼리에 필요한 필터 값 목록을 만듭니다.
각 데이터 세트를 연관 배열로 컴파일하고 연관 배열 목록을 만듭니다. 상세 열이 없으면 보시는 것처럼 생성합니다. 그런 다음 모든 상세 목록을 순회하며... 다음 단계는 모든 상세 열에 대한 상세 열 그룹을 만드는 것입니다. 이제 모든 상세 열을 순회하며 각 상세 열에 대한 쿼리를 실행하는 루프가 나옵니다. 다시 한번, `Eval Insert`를 사용하여 쿼리에 필요한 이름과 값을 입력합니다. 이 루프는 각 상세 열에 대한 테이블을 생성합니다. 이 업데이트는 이전에 보았던 것처럼 상세 열에 값을 추가합니다. 마지막으로 루프 안에서 상세 테이블을 닫아야 합니다. 다시 한번 작동 방식을 살펴보겠습니다. 테이블을 비우고, 콕핏을 업데이트하고, 보시는 것처럼 상세 열을 추가합니다. 스크립트가 그리 크지 않아서 작동 방식을 이해한다면 유지 관리가 꽤 쉬울 거라고 생각합니다. 다음 상세 내용은 진공 청소기에 대한 그래프를 추가하는 것입니다.
작동 방식은 다음과 같습니다. 버튼을 누르면 그래프가 생성됩니다. 오른쪽으로 조금 스크롤하면 그래프가 나타납니다. 생성 과정은 다음과 같습니다. 먼저 열을 생성하고, 데이터 테이블 업데이트를 중지합니다. 그런 다음 각 행에 대해 이전과 같이 필요한 세부 정보에 대한 쿼리를 실행합니다. 그리고 해당 쿼리 결과를 그래프 생성기 객체로 만들어 열 그래프 영역에 이미지 파일로 저장합니다. 마지막으로 그래프 생성기와 데이터 테이블을 닫습니다. 그런 다음 그래프가 잘 보이도록 셀 높이를 조정합니다. 이렇게 하면 그래프를 볼 수 있습니다.
다음은 청구 내역 조회입니다. 보시는 것처럼 그래프 빌더가 포함된 추가 테이블이 여기에 나타납니다. 이 부분은 매우 간단합니다. 단순히 웨이퍼 목록을 조회하는 것입니다. 그런 다음 상세 테이블을 조회하고, 테이블에 속성을 추가하고, 그래프 빌더 스크립트를 추가하고, 스크립트를 실행합니다. 또한, 여기에서 링크 ID와 참조를 생성하여 사용할 수 있도록 했습니다. 이 웨이퍼 ID를 사용하기 위해 다시 실행합니다. 여기에는 평가 과정이 없습니다.
평가 정보는 여기 조종석 테이블의 조건 부분에만 있습니다. 덕분에 상세 정보에서 평가 결과를 그래프로 표시할 수 있습니다. 다시 닫아보겠습니다. 전체적인 흐름도 동일합니다. 만약 모든 창이 나타나는 것이 불편하고, 각 창마다 창이 너무 많다면, 다시 테이블을 비우고 여기에서처럼 모든 것을 프로젝트로 옮길 수 있습니다. 현재 데이터 테이블(조종석)을 프로젝트로 만들 수 있습니다. 그러면... 이 부분은 더 이상 필요하지 않습니다. 테이블을 독립적인 테이블처럼 사용할 수 있습니다. 여기처럼 왼쪽 패널을 닫아 전체 화면을 사용할 수도 있습니다. 모든 기능은 비슷하게 작동합니다. 조종석을 업데이트하는 등의 작업도 가능합니다. 청구 내역 조회와 같은 상세 정보를 생성할 때는 여기에서처럼 여러 창이 아닌 탭에 표시됩니다. 제 발표는 여기까지입니다. 경청해 주셔서 감사합니다. 질문이 있으시면 Discovery Summit이나 사용자 그룹, 또는 Scripters Club에서 뵙겠습니다. 다시 한번 감사드리고 좋은 하루 보내세요. 안녕히 계세요.