| 스피커 |
성적 증명서 |
| 존 무어 |
안녕하세요. 함께해 주셔서 감사합니다. 저는 존 무어입니다. 오늘은 제가 개발한 JMP 애드인 생성, 게시, 관리 및 모니터링 프레임워크인 Lupine에 대해 이야기해 보겠습니다. |
| |
그럼 먼저 저에 대해 간략하게 소개해 드리겠습니다. 제 이름은 존 무어이고, 공학과 경영학을 전공했지만, 사실 저는 데이터 마니아입니다. 지난 19년간 Elanco Animal Health에서 분석가로 일해 왔습니다. |
| |
저는 아들 한 명, 남편 한 명, 개 한 마리를 키우고 있으며, 현재 약 8만 마리의 벌을 키우고 있습니다. |
| |
그래서, 어떻게 여기까지 오게 되었을까요? Elanco에는 전 세계에 흩어져 있는 수의사나 영양사처럼 기술 컨설턴트인 TC가 있는데, 그들에게 JMP와 JMP 스크립팅을 사용하도록 했습니다. |
| |
그리고 이러한 TC 중 다수는 너무 멀리 떨어져 있기 때문에 인터넷에 간헐적으로만 접속할 수 있습니다. |
| |
그래서 우리는 임시 스크립팅을 사람끼리 주고받는 상황이었습니다. 버전 관리도 없었고, 누가 어떤 스크립트를 사용하는지도 알 수 없었습니다. |
| |
스크립트를 배포하는 것도 어려웠고, 업데이트하는 것도 어려웠습니다. 그래서 표준화된 스크립트와 버전 관리 시스템을 구축하고, 누가 무엇을 하고 있는지, 누가 어떤 스크립트를 사용하고 있는지 쉽게 파악할 수 있는 환경을 만들기 위해 Lupine을 개발했습니다. |
| |
업데이트를 쉽게 배포할 수 있었고, 추가 보너스로 수식 편집기에 몇 가지 수식을 추가했습니다. |
| |
자, 여기서 Lupine을 잠깐 살펴보죠. Lupine을 설치하고 나면 별다른 기능이 없다는 걸 알게 될 겁니다. JMP에는 Lupine 메뉴가 하나밖에 없고, 업데이트 확인만 할 수 있습니다. |
| |
업데이트 확인을 보면 Lupine에서 제어하는 모든 추가 기능이 나열되어 있습니다. |
| |
최신 버전이 아니면 "최신"이라고 표시되고, 최신 버전이라면 "알겠습니다."라고 표시될 겁니다. 아주 간단하죠. "사용 가능한 추가 기능은 다음과 같습니다."라고만 표시될 겁니다. 최신 버전을 사용하고 계신가요? |
| |
또한 수식 편집기에서 우리가 특정 수식을 많이 사용했기 때문에, 예를 들어 월/년과 같이 첫 번째 날짜를 반환하는 수식을 사용했기 때문입니다. |
| |
날짜가 지나고 월이 되었습니다. 연도, 분기, 계절이 있습니다. 또한 주 시작, 주 종료와 같은 작업을 할 수 있는 카운터 주도 있습니다. |
| |
Lupine에는 사용 기록 기능도 있습니다. 사용자가 Lupine에서 관리하는 스크립트를 사용할 때마다 로그 파일을 생성합니다. 이를 통해 누가 어떤 스크립트를 사용했고 어떤 애드온을 어떤 타임스탬프에 사용했는지 파악할 수 있습니다. 이를 통해 어떤 스크립트가 유용하고 어떤 스크립트가 유용하지 않은지 파악하는 데 큰 도움이 됩니다. |
| |
그러면 조직에 루핀을 설치하고 싶다고 가정해 보겠습니다. |
| |
좋아요, 첫 번째 단계로 zip 파일을 다운로드하겠습니다. Lupine zip 파일, Lupine 관리자, 그리고 Lupine 템플릿이 있습니다. |
| |
그리고 루핀 예제도 있습니다. 어딘가에서 폴더 하나를 찾아서 그 폴더 세 개를 다운로드하는 걸 추천합니다. |
| |
관리자로서 설정 시 다음으로 결정해야 할 사항은 네트워크 폴더를 어디에 둘 것인가입니다. Lupine에 정말 중요한 네트워크 폴더가 두 개 있습니다. |
| |
첫 번째는 추가 기능 저장소 폴더입니다. 이 폴더에는 모든 추가 기능과 해당 추가 기능에 대한 메타데이터가 포함된 PublishedAddins.jmp 파일이 포함됩니다. |
| |
고려해야 할 또 다른 하나는 중앙 로그 폴더입니다. 이 폴더에는 사람들이 Lupine 관리 스크립트를 실행할 때마다 생성하는 모든 업로드 로그 파일이 저장됩니다. |
| |
보시다시피, 게시된 추가 기능 파일에 있는 모든 추가 기능의 예가 여기에 있습니다. 그리고 다음은 그 중 일부입니다. |
| |
로그 파일입니다. 모든 로그 파일에는 고유한 ID가 있습니다. 이 부분에 대해서는 나중에 설명하겠지만, 저희가 로그 파일을 가져올 때마다 새 파일만 가져오므로 매번 모든 파일을 다운로드할 필요가 없습니다. |
| |
그러니 어디에 넣을지 정했으면 Lupine에 그 위치를 알려줘야 합니다. Lupine 폴더로 가서 압축을 풀면 됩니다. |
| |
그리고 추가 기능 관리 하위 폴더에서 setup이라는 파일을 볼 수 있는데, 이 부분이 setup에서 찾아야 할 부분입니다. |
| |
여기서 추가 저장소 경로와 중앙 로그 경로를 정의합니다. 이제 운영 환경에서는 이 네트워크 위치가 필요하지만, 이 간단한 예시를 위해 제 컴퓨터에서 직접 생성했습니다. 하지만 여기서 네트워크 경로를 정의해야 합니다. |
| |
여기까지 마쳤다면 이제 조직에 맞게 Lupine을 빌드할 차례입니다. Lupine 폴더에서 gitattributes 파일을 제외한 모든 파일을 가져오세요. 저는 GitHub Desktop을 사용하여 관리합니다. |
| |
스크립트입니다. 강력 추천합니다. 덕분에 제 삶이 훨씬 더 좋아졌습니다. 하지만 스크립트에 이런 것들을 넣고 싶지 않으시다면, gitattributes 파일만 빼고 나머지는 모두 가져오세요. gitattributes 파일들을 마우스 오른쪽 버튼으로 클릭하고 '보내기'를 클릭한 다음 |
| |
압축된 zip 폴더로 보내세요. 그러면 모든 파일이 zip 파일로 생성됩니다. JMP 추가 기능 파일은 사실 zip 파일입니다. 따라서 Lupine.jmpaddin으로 이름을 바꾸겠습니다. |
| |
이름을 정하고 나면, 그걸 더블클릭하기만 하면 설치됩니다. 그러면 컴퓨터에 Lupine이 설치됩니다. 아직은 아무것도 할 수 없지만, 이미 설치되어 있습니다. 메뉴 막대를 보시면 Lupine이 보일 겁니다. |
| |
다음으로, 루핀 매니저에 대해 이야기해 보겠습니다. 루핀 매니저는 관리자를 위해 설계된 별도의 추가 기능입니다. |
| |
조직 내의 모든 추가 기능을 추적하고 업데이트합니다. 따라서 이 기능은 일반 사용자의 컴퓨터에는 적용되지 않을 가능성이 높습니다. |
| |
유용하지 않아요. 그래서 관리자로서 추가 기능을 관리하는 데 도움이 되는 도구 모음이 있는 거죠. |
| |
Lupine Manager를 열면 가장 먼저 해야 할 일은 설정으로 내려가는 것입니다. |
| |
조직의 모든 고유 사용자와 로그 데이터가 담긴 고유 사용자 파일입니다. |
| |
알겠습니다. 고유 사용자 테이블은 사용자 ID를 연결합니다. 즉, 컴퓨터의 |
| |
정체성을 나타내는 것 같지만, 보통은 그다지 의미 있는 내용을 담고 있지는 않아요. 예를 들어 제 아이덴티티는 00126545예요. |
| |
John Moore라고 적힌 것을 링크하고 싶습니다. 사용자 고유 사용자 수가 이렇게 됩니다. 로그 데이터 파일에는 각 로그에 대한 행이 있습니다. 이는 이전에 생성한 모든 로그 파일의 요약입니다. 따라서 마음껏 분석할 수 있습니다. |
| |
좋아요, Lupine Manager를 사용하고 싶다고 가정해 보겠습니다. |
| |
가장 먼저 해야 할 일은 관리할 추가 기능을 지정하는 것입니다. 그러려면 추가 기능 빌드로 이동한 다음, 사용 가능한 추가 기능 관리로 이동합니다. |
| |
그러면 이 부분이 비어 있을 겁니다. 여기에 도달하면 '추가 기능 추가'를 클릭하고, 제어할 추가 기능 파일이 있는 폴더를 선택할 수 있습니다. |
| |
그러면 사용 가능한 추가 기능 목록에 해당 추가 기능이 나열됩니다. '추가 기능 빌드'를 클릭하세요. 네, 여기에는 두 가지 옵션이 있습니다. '추가 기능 빌드'는 |
| |
스크립트가 있는 폴더에 추가 파일이 있어서 테스트용으로 아주 좋습니다. 제대로 작동하는지 테스트할 수 있도록 빠르게 빌드하고 싶습니다. |
| |
빌드 및 게시는 동일한 작업을 수행하지만, 해당 애드인을 가져와 애드인 저장소 폴더에 복사하고 게시된 애드인 파일을 업데이트합니다. 즉, 이제 회사에 배포하고 테스트를 완료한 후 사용할 준비가 된 것입니다. |
| |
이제 모든 로그 데이터를 가져오려면 '로그 데이터 가져오기 및 처리'로 이동하기만 하면 모든 새 로그 파일이 가져와서 로그 데이터 파일에 추가됩니다. |
| |
여기에는 사용자 요약이 있는데, 이는 누가 어떤 추가 기능을 사용하고 있는지 알려주는 간단한 표입니다. 이를 통해 매우 빠르게 볼 수 있습니다. |
| |
제가 가장 많이 사용하는 추가 기능은 누구인가요? 이 예에서 볼 수 있듯이 Lupine과 LupineManager는 많이 사용되었고 LupineExample1은 약간 사용되었으며 LupinExample은 그렇지 않았습니다. |
| |
좋아요, Lupine과 Lupine Manager를 설치했다고 가정해 보겠습니다. 이제 Lupine에서 관리하고 싶은 추가 기능이 몇 가지 있습니다. 이제 단계별로 설명해 드리겠습니다. |
| |
먼저 해야 할 일은 애드인 템플릿인 Lupine 템플릿 파일을 찾아서 복사하는 것입니다. Lupine을 애드인과 연동하는 데 필요한 모든 스크립트와 기능이 포함되어 있습니다. 복사해 두세요. |
| |
다음으로 몇 가지 단계를 진행해 보겠습니다. 첫 번째는 addin.def 파일을 편집하는 것입니다. |
| |
귀하의 추가 기능에 포함될 모든 스크립트를 새로 만들거나, 이미 스크립트가 있는 경우 업데이트할 것입니다. |
| |
추가 기능을 빌드하면 메뉴가 제대로 표시되도록 사용자 지정됩니다. 클릭했을 때 원하는 대로 표시됩니다. 메뉴가 수정되면 추가 기능을 다시 빌드하여 테스트하고 제대로 작동하는지 확인할 예정입니다. 테스트가 완료되면 게시할 수 있습니다. |
| |
이제 addin.def 파일에 대해 이야기해 보겠습니다. addin.def는 실제로 아주 작은 텍스트 파일이지만 모든 추가 기능에 필수적입니다. 여기에는 추가 기능에 대한 핵심적인 중요 정보가 포함되어 있습니다. |
| |
ID와 이름이 무엇인가요? 해당 ID와 이름을 편집해서 추가 기능의 이름으로 변경해야 합니다. |
| |
이건 한 번만 하면 됩니다. 한 번 설정해 놓으면 앞으로는 추가 기능에서 변경할 필요가 없습니다. 그러니까 한 번만 하면 됩니다... 설정할 때 한 번만 하면 됩니다. |
| |
다음으로, 이 추가 기능에 어떤 스크립트를 넣을지 결정해야 합니다. 이제 스크립트를 만들었습니다. |
| |
루핀이 로그 파일을 만듭니다. |
| |
그리고 이것이 Lupine을 사용하는 모든 추가 기능에 대한 로그 파일을 생성하는 것입니다. 즉, 이것이 실제로 로그를 생성하고 버전 모니터링을 할 수 있게 해줍니다. |
| |
그러니 이 헤더를 모든 파일의 맨 끝... 맨 앞에 넣는 걸 추천합니다. 스크립트를 사용하게 될 텐데, 그게 모니터링을 가능하게 해 줄 테니까요. |
| |
이제 모든 스크립트를 입력했으니, 다음으로 해야 할 일은 메뉴 파일을 원하는 모양으로 만드는 것입니다. 지금은 "templates"라고만 되어 있을 겁니다. |
| |
이걸 먼저 빌드할 겁니다. 이전에 Lupine을 빌드했던 것처럼요. gitattributes 파일을 제외한 모든 파일을 선택하고 마우스 오른쪽 버튼을 클릭한 다음, 압축하고 이름을 변경했죠. |
| |
같은 작업을 할 겁니다. 그러면 잘못된 메뉴가 생길 겁니다. 지금은 템플릿 메뉴가 그대로 남아 있으니까요. 그래서 원하는 대로 하려면 템플릿 메뉴를 업데이트해야 합니다. |
| |
좋아요, 설치가 완료되면, 아시다시피, 여기에 새 스크립트, 새 추가 기능, 템플릿이 보일 겁니다. 마우스 오른쪽 버튼을 클릭하고 |
| |
메뉴 위쪽으로 올라가면 이렇게 긴 목록이 보일 거예요. 그리고 맨 아래에는 사용자 지정이 있는데, 여기서 메뉴와 도구 모음으로 가면 됩니다. 네, 거기 가면 이런 화면이 보일 거예요. |
| |
가장 먼저 해야 할 일은 JMP에 무엇을 편집하고 싶은지 알려주는 것입니다. 특정 애드인에 맞는 메뉴를 편집하려고 하는데, 지금은 템플릿이라고 부릅니다. |
| |
그럼 이 변경 버튼으로 가보겠습니다. 클릭하면 다양한 옵션이 나옵니다. 하지만 여기서 JMP 추가 기능 라디오 버튼을 클릭하고 아래로 내려가는 게 좋습니다. |
| |
우리가 관심 있는 추가 기능입니다. 좋아요. 저는 이걸 템플릿으로 남겨두었지만, addin.def 파일에서 이미 변경했으므로 그대로 적용됩니다. |
| |
그렇게 하면 당신이 보게 될 것은 조각조각입니다. |
| |
추가 기능에 속한 항목은 여기 왼쪽에 파란색으로 표시됩니다. |
| |
이것이 우리가 원하는 새로운 추가 기능에 맞게 편집하고 변경할 내용입니다. |
| |
그럼 이것을 살펴보죠. 저는 이것 안에 표준 스크립트로 새로운 소식에 대한 정보를 포함시켰지만, 여러분이 그것을 얻었을 때, 여러분이 볼 수 있는 것은 그것이 가리키는 것입니다. |
| |
이 템플릿 추가 기능은 원하는 기능이 아닙니다. 원하는 추가 기능 이름을 직접 지정해 주셔야 합니다. 따라서 이 파일에서 '실행 추가'를 클릭해 보겠습니다. |
| |
이 추가 기능 폴더를 클릭하고 원하는 추가 기능을 선택하세요. 그러면 JMP가 방금 만든 새 스크립트를 가리키게 됩니다. 그런 다음 찾아보기를 클릭하세요. |
| |
그러면 탐색하고 탐색해서 원하는 특정 스크립트로 가서 "아니요, 아니요, 템플릿 스크립트에서는 사용하고 싶지 않아요. 새로운 추가 기능에서 사용하세요."라고 말할 수 있습니다. |
| |
마찬가지로, 메뉴의 '새로운 기능' 항목에도 같은 작업을 할 수 있습니다. |
| |
그리고 일단 이것들을 다 하고 나면, 나머지 원하는 것들을 넣기만 하면 됩니다. |
| |
파란색 영역을 마우스 오른쪽 버튼으로 클릭하면 '삽입 전', '삽입 후' 옵션이 표시되며, 메뉴에서 항목을 추가하거나 삭제할 수 있습니다. |
| |
그래서 여러 항목을 추가할 수 있는데, 대부분은 명령입니다. 하위 메뉴를 만들어서 더 깊이 있게 만들 수도 있고, 구분선을 넣어서 보기 좋게 나눌 수도 있습니다. |
| |
그러면 메뉴를 만들고, 방금 만든 스크립트에 필요한 모든 항목을 넣으세요. |
| |
그리고 우리는 그것을 저장할 것입니다. 하지만 우리는 그것을 두 번 저장할 것입니다. |
| |
여기에 저장하면 컴퓨터에 설치된 추가 기능 버전에서 변경 사항이 적용됩니다. |
| |
좋습니다. 하지만 추가 기능을 빌드하는 폴더에 저장해야 합니다. 즉, 다음에 추가 기능을 빌드할 때 올바른 메뉴 파일을 사용할 수 있도록 해당 폴더에 저장해야 합니다. |
| |
그러니 '저장'을 클릭한 후, '다른 이름으로 저장'을 클릭하고 추가 기능 파일이 있는 폴더로 이동합니다. |
| |
좋아요, 스크립트도 다 됐고, addin.def도 정의했고, 메뉴도 만들어 놨어요. |
| |
다음으로 해야 할 일은 실제로 이걸 만들어서 테스트하는 겁니다. 그래서 보통은 사용자들에게 보내서 무엇이 잘 되고 무엇이 잘 안 되는지 알려줄 수 있죠. |
| |
그 후에는 실제로 게시할 수 있습니다. 게시를 시작하면 정보를 업데이트하라는 메시지가 표시됩니다. |
| |
가장 중요한 건, 루핀 매니저에서 가장 중요한 건 출시일을 변경하는 거예요. 이렇게 하면 사람들에게 더 최신 버전이 있다는 걸 알릴 수 있죠. |
| |
사용 가능한 버전이 있죠. 그러니까... 이게 게시된 날짜와 비교되는 거죠. 루팡이 그걸 이용해서 "업로드할 수 있는 최신 버전이 있어요"라고 알려주는 거죠. |
| |
수정 노트처럼 메모를 추가할 수도 있습니다. 이번에 변경한 내용입니다. 추가 기능에 적용한 훌륭한 업데이트와 변경 사항입니다. 이렇게 한 후 "게시"를 클릭하면 |
| |
그러면 Lupine Manager가 해당 추가 기능의 사본을 가져와서 추가 기능을 만든 폴더(소스 코드가 있는 폴더)에 넣습니다. |
| |
또한 추가 기능 저장소에 게시하고 게시된 추가 기능 파일을 최신 버전으로 업데이트합니다. |
| |
가장 중요한 건, 출시일이 적혀 있다는 겁니다. 그리고 사용자가 업데이트 확인을 클릭하면, "이 추가 기능에 새 버전이 있습니다. 다운로드하시겠습니까?"라는 메시지가 표시됩니다. 클릭하면 설치가 완료되고, 사용자 컴퓨터에 설치됩니다. |
| |
네, 정말 간략한 소개였습니다. |
| |
직접 해보실 수 있도록 충분한 자료가 여기에 있기를 바랍니다. 만약 없다면 john_moore@elanco.com으로 연락 주세요. 설정을 도와드리겠습니다. |
| |
정말 고맙고, 다시 한번 감사드립니다. 안녕히 계세요. |