[루닛Job담 #1] 10만 개 세포 이미지를 구현?! | 루닛 스코프 프론트엔드 팀

루닛 채용팀
Lunit Team Blog
Published in
10 min readOct 6, 2022

Conquer Cancer through AI.
인류가 그동안 풀지 못한 문제인 ‘암’을 해결하겠다는 일념으로 불철주야하는 루닛. 하지만 의료와 AI의 만남이 다소 어렵게 느껴질 수 있을 것 같아, 루니션이 직접 각 팀을 소개하려고 해요.
루닛이 하는 일 그리고 루니션이 의료 AI 회사에서 무슨 일을 하는지 궁금했다면 앞으로 ‘루닛JOB담’을 통해 루닛과 좀 더 친해져요!

첫 번째로 소개할 팀은 루닛 스코프 제품을 개발 중인 프론트엔드 팀입니다.

삼행시의 [정석]

🗨️ 안녕하세요 정석님. 정석님은 루닛에서 ‘삼행시 장인’으로 유명하신데요.
‘루닛JOB담’ 대망의 첫 인터뷰, 삼행시로 시작해 주세요.

루: 루닛은 AI 기반 기술과 사람을 연결하여 생명을 구합니다.
니: 니가 개발하는 그 소프트웨어가 사람의 한 생명을 구할 수 있습니다.
잇: 잇츠 유얼 턴!!!

아 재미가 없었죠? 너무 완성도가 높으면 재미가 없어요~ 개발자분들 한 번 웃으시라고 해봤습니다. 웃으셨다면 함께 하시죠! 잇츠 유얼 턴!!!😉

생명에 일조하는 소프트웨어를 만드는 일

🗨️ 감사합니다(웃음) 간략한 자기소개를 부탁드려요.

안녕하세요, 루닛 스코프 제품을 만드는 Product Development의 강정석입니다. 반갑습니다! 루닛에 조인하기 이전에는 뇌파 분석과 뇌 자극과 관련된 소프트웨어를 개발했고 팀 리딩도 했었어요.

저는 ‘커리어적으로 나만의 특별한 한 가지는 가지고 싶다’라는 생각을 많이 했는데요. 생명에 직·간접적으로 닿아 있는 소프트웨어를 개발하면 내 생명에도 영향을 준다고 생각해서 지금까지 의료 소프트웨어의 길을 걷고 있습니다.

VP of Product Development in Oncology Group, 강정석님

암 세포의 특성을 분석해 암 치료에 도움을 주는, 루닛 스코프

🗨️ 루닛 제품들이 주로 B2B이다 보니 생소한 분들도 많으실 것 같아요.
현재 개발 중이신 루닛 스코프에 대해 간단히 설명해주실 수 있을까요?

루닛은 ‘AI로 암을 정복한다’라는 비전을 가지고 있는데요. 제가 속한 온콜로지(종양학) 그룹은 ‘어떻게 하면 인공지능으로 암을 더 효율적으로 치료할 수 있을까?’를 고민하고 관련된 제품을 만들고 있어요.

그리고 저희가 만들고 있는 루닛 스코프는 암 조직 슬라이드를 분석해서 암 세포의 위치, 종류, 특성을 파악해 주는 역할을 합니다. 암 치료에서 가장 중요한 것이 환자에게 효과가 있을 항암제를 찾는 일인데요. 항암제 a, b, c가 있다면 이 중에서 어떤 약이 환자에게 반응할지 미리 확인한 후에 투여해야 해요. 그래야 치료 기간과 비용을 줄일 수 있고 각종 부작용도 막을 수 있거든요.

이를 위해 암 조직을 조금 떼어서 암의 특징을 알아보는 조직 검사를 하게 되는데요. 이때 분석을 정확하게 할 수 있도록 도움을 주고, 면역항암치료에 적합한 환자를 찾아 주는 AI가 루닛 스코프라고 보시면 될 것 같아요. AI로 분석 정확도를 높여 결국 암 환자의 치료 성공률을 높일 수 있게 되는 거죠. 루닛 스코프는 신약 개발에도 활용될 수 있어요. 💊

신약 개발에도 활용될 수 있는 루닛 스코프

대용량 이미지의 Visualization : OpenSeadragon, WebGL

🗨️ 암 세포의 이미지가 해상도도 높고 용량이 크다고 들었어요. 프론트엔드에서 구현하기가 쉽지 않을 것 같아요.

네 맞아요. 저희 온콜로지(종양학) 쪽에서 다루는 ‘세포 조직 슬라이드 이미지’의 용량이 최소 1GB에서 최대 8~10GB라서 용량이 굉장히 커요. 그래서 이 이미지를 웹에서 끊기지 않게 시각화하고, 그 이미지 위에 AI가 분석한 결과도 잘 보여줘야 하는데요. 이 부분이 기술적인 챌린지죠. 하지만 다른 회사에서 경험할 수 없는 것 중의 하나랍니다! ☝️

🗨️ 구체적으로 어떤 것들을 시각화하는지 궁금해요.

첫 번째는 암세포가 어디 있는지 ‘세포의 위치 정보’를 시각화해야 하고요. 두 번째는 어디에서부터 어디까지가 암 조직이고 나머지는 어떤 조직 세포인지 ‘세포의 종류’를 시각화해야 합니다. 이를 Tissue segmentation라고 해요.

조직 슬라이드에서 AI 모델을 돌리면 세포가 많으면 10만 개 이상이 나오는데, 세포의 위치를 한 번에 다 그린다면 과부하가 생기겠죠. 그래서 OpenSeadragon을 활용해서 슬라이드를 확대할 때에 보이는 영역의 세포만 따로 빼서 보여주는 방식으로 시각화하고 있어요. 전체가 아닌 일부만 보여주는 형식으로 과부하를 방지하고 있죠.

Tissue segmentation라고 불리는 작업은 이미지에 있는 픽셀 하나하나를 다른 색깔로 바꿔야 하다 보니 시간이 오래 걸려요. 그래서 프로세스를 빨리할 수 있는 방법을 여러 가지 찾아보다가 WebGL을 써서 CPU보다는 GPU를 활용하도록 업데이트를 했어요.

암세포의 위치와 종류를 시각화한 ‘루닛 SCOPE’ 제품

OpenSeadragon React Renderer 프로젝트와 Monorepo의 도입

🗨️ Openseadragon React Renderer, Monorepo를 왜 도입했는지 더 자세히 알려주세요.

OpenSeadragon React Renderer 프로젝트와 Monorepo 도입은 궁극적으로 업무 효율성을 높이는 작업이었어요.
먼저 OpenSeadragon React Renderer 프로젝트는 OpenSeadragon에서 이미지를 열고 줌 인, 줌 아웃을 하고 리포트가 바뀜에 따라서 그 위에 올려놓은 이미지 오버레이도 그에 맞게 바뀌어야 해요. 그런데 이 모든 동작들이 React Lifecycle이 아니라서 React에서 Side Effect로 여러 이벤트가 동시에 일어나도록 코드를 짤 수밖에 없었거든요. Side Effect가 많아지면 많아질수록 한 개, 한 개의 Side Effect를 관리하기가 힘들어져요. 개발자 경험 측면에서 안 좋은 점이 많아서 Side Effect로 관리되던 것을 React Lifecycle로 오게 해결했어요.

Monorepo라는 건 Repository가 한 개라는 뜻이에요. 루닛 스코프를 만들기 위해 정말 다양한 애플리케이션을 사용하고 있는데다, 얼마 전까지만 해도 애플리케이션마다 Repository가 다 나뉘어져 있었거든요. 그러다 보니 한 가지 문제를 한 애플리케이션에서 고치면, 그걸 또 다른 애플리케이션에서 똑같이 개발해야 하는 문제가 있었죠. 그래서 한 개의 Repository에 모든 애플리케이션을 다 넣어놓고 거기에 공통으로 쓰이는 컴포넌트를 따로 빼서 한 개의 변경 사항은 한 번의 개발 만으로 모두 적용할 수 있도록 했어요.

새로운 기술 도입을 위해 다양한 측면을 점검하는 정석님

🗨️ 듣기만 해도 쉽지 않은 작업일 것 같아요. 새로운 기술을 도입하는 데에 두려움이 없는 프론트엔드 팀이네요.
제품 릴리즈가 끝나면 팀에서 생각한 프로젝트를 진행하며 정비하는 시간을 갖기도 한다고요.

새로운 기술을 도입을 제안하는 것이 자유로운 편이에요. 다만 새로운 기술을 너무 신봉하는 건 꼭 좋은 일은 아니라고 생각해요. 반대로 너무 경직되는 것도 경계해야 하고요. 그래서 신기술을 도입할 땐 정확한 근거를 바탕으로 신중하게 하고 있어요. ‘정말 필요한가?’, ‘개발과 운영에 드는 비용이 증가하진 않는가?’, ‘기존 기술에 비해 더 안전한가?’ 등 다양한 측면을 검토합니다. OpenSeadragon React Renderer 프로젝트와 Monorepo 도입 또한 팀 내부적으로 논의한 끝에 진행했었어요.

로드맵을 그릴 줄 아는 개발자라면, It’s your turn!

🗨️ 루니션으로서 느끼는 루닛의 매력이 있나요?

자유, 존중, 배려가 루닛의 매력이에요. 특히 리더십분들이 직원들을 대하는 태도에서 존중이 느껴지고, 직원들의 입장을 많이 생각하고 있다는 것을 항상 느끼구요. 그리고 배울 점이 많은 똑똑한 사람들이 많아요. 최고의 복지는 좋은 동료라는 말도 있잖아요? 제 주위 분들은 배울 점들이 다들 있으셔서 매일매일 배우고 함께 성장하고 있어요. 💪

🗨️ 프론트엔드 팀의 회의를 슬쩍 봤는데, 회의를 영어로 진행하시더라고요.

루닛의 다른 팀들처럼 프론트엔드 팀에도 외국 국적의 팀원들이 있어서 영어로 회의를 해요. 프론트엔드 팀은 매 주 위클리 미팅을 진행하는데요. 화기애애한 분위기를 만들기 위해 간단하게 게임을 한 후에 회의 하죠. 게임이라는 게 별 거 아닌 것 같지만, 언어 때문에 겪게 되는 어색함이나 부담감을 줄이고 서로 가까워지게 하더라고요. 그렇게 소통하다 보니 저를 포함한 팀원들의 영어 실력이 자연스럽게 늘고 있고요. 글로벌 팀원들도 한국어를 열심히 공부하고 있어서 조만간 한국어로 게임할 수 있을 것 같아요. 서로 서로 공부하자! 아이 캔 두잇, 유캔 두잇!

화기애애한 분위기 속에서 미팅 중인 정석님과 Benjamin님

🗨️ 채용을 하게 된다면 프론트엔드 팀이 함께 하고 싶은 동료는 어떤 분일까요?

기술과 제품 모두를 고려하는 개발자인 것 같아요. 내가 무엇을 개발하고 있는지, 무엇을 위해서 개발하는 것인지 관심을 갖는 게 중요해요. 그래야 단순히 개발만 하는 게 아니라, 이게 왜 필요하고 어떻게 개선이 돼야 하며 어떻게 도움을 줄 수 있는지 로드맵을 그릴 수 있으니까요.

그리고 새로운 기술에 대한 거부감이 없으신 분이면 좋을 것 같아요. 새로운 기술을 배워야 제품 구현이 가능하니까요. 새로운 기술을 습득하는 것을 좋아하거나 빠르게 배울 수 있는 분이면 환영입니다!

🗨️ 마지막으로 미래의 루니션을 위한 채용 팁 부탁드려요!

과제를 바탕으로 실무 면접을 하는데요. 과제는 대부분 구현할 수 있는 수준의 난이도라서 중요한 건 ‘어떻게’ 구현했는지를 중점적으로 봐요. 또 협업 능력도 중요하게 고려하고요. 임원 면접은 Culture-fit, 말 그대로 ‘루닛에 어울리는 분인지’, ‘루닛에 오래 다닐 수 있는 분인지’를 중점적으로 살펴봅니다.

👉 루닛의 코어 밸류

개발자의 정석, 부드러운 정석처럼 🍃

--

--