본문 바로가기메뉴 바로가기


Generative Adversarial Networks를 이용한 Nickface 개발

카카오 사내 기술 세미나 Techtalk 여섯 번째 이야기입니다.
본 내용은 AI 기술 개발 및 연구를 위함으로 상업적 활동이 아니라는 것을 말씀드립니다. 

안녕하세요, 카카오브레인에서 AI 기반 이미지 생성 모델을 연구하고 있는 Orca.na라고 합니다. 

유튜브 내에서 활동하는 사람이 늘어나고, 메타버스의 개념이 대두되는 등 가상세계는 점점 우리의 삶에 스며들고 있습니다. 현실 세계에서는 어렵겠지만, 가상 세계에서는 곧 남들에게 보여지는 스스로의 얼굴을 마음껏 만들 수 있을 것입니다. 이를 위해, 카카오브레인은 가상 세계 속에서 사용자가 원하는 얼굴을 만들어 주기 위한 AI 기술을 개발하고 있습니다. 본 발표를 통해 해당 기술의 개발 과정과 앞으로의 계획에 대해 소개 드리고자 합니다.


Nickface 프로젝트 소개

가상세계 혹은 온라인 세계에서 우리는 실제 이름(real name) 대신에 nick name(별명)을 사용합니다. 저희는 이와 비슷하지만 새로운 목표를 제안하고자 합니다. 온라인에서 실제 얼굴(real face) 대신에 Nickface(별안)를 사용하는 새로운 문화를 만들어 보려고 합니다. 

Nickface란, 온라인 세계에서 real face 대신 사용하는 가상의 얼굴입니다. 방금 말씀드린 목표는 터무니없는 목표는 아니라고 생각합니다. 실제로 이미 본인의 얼굴이 아닌 가상의 얼굴을 사용하고 있는 유튜버들을 쉽게 찾아볼 수 있습니다. 그러나, 대부분 얼굴을 무언가로 가린 모습으로 가상의 얼굴을 사용하는 모습을 볼 수 있는데요, 이러한 방식은 생동감 넘치는 표정이 영상에 담기지 않고, 영상과 어울리는 얼굴을 마음껏 만들어서 사용하기 어렵다는 아쉬운 점이 있습니다.

그래서 저희는 이런 아쉬움 점들을 기술을 통해 해결하여 가상 세계에서 가상 얼굴을 사용하는 새로운 문화를 선도하는 역할을 해보고자 Nickface 프로젝트를 시작하게 되었습니다.

Nickface 프로젝트란?

Nickface 프로젝트의 목표는 AI를 이용해 사용자가 원하는 바를 반영한 Nickface를 생성하고 이를 분양하는 서비스를 만드는 것입니다.

Nickface 프로젝트를 통해서 기대하는 점은, 분양된 Nickface 중 유명해지는 Nickface가 생길 텐데, 유명해진 얼굴 그 자체로 큰 상업적 가치가 있을 것이고, Nickface 서비스가 성행한다면 가상 세계에서 많은 사람들이 Nickface로 활동하는 새로운 문화를 만들 수 있을 것이라고 기대하고 있습니다. 

Nickface를 만들기 위해 필요한 기술

페이스 스와핑(Face swapping)

Face swapping은 다음의 이미지처럼 원본 영상을 원하는 얼굴로 바꿔주는 기술입니다.

출처
https://www.youtube.com/watch?v=on4bHNdUm-I&t=655s
https://www.pinterest.de/pin/581245895637197949/?send=true

Face swapping 기술에 사용되는 몇 가지 용어들이 있습니다.

  • ID image: 사용자가 원하는 얼굴
    • 눈 모양, 얼굴형 등 Identity에 관련된 정보(ID 정보) 제공
  • Reference image / video: 사용자 본인 얼굴의 원본 영상
    • 표정, 배경, 머리 스타일 등 Identity를 제외한 나머지 정보 (Reference 정보) 제공
  • Generated image / video: Nickface의 영상
    • 주어진 Reference, ID 정보를 합성해서 새로운 영상 생성

사용자가 원하는 얼굴을 ID image라고 부르며, ID image로부터 눈 모양, 얼굴형 등 Identity에 관련된 정보(ID 정보)를 추출합니다. 원본 영상은 Reference image 또는 Reference video이며 표정, 배경, 머리 스타일 등 Identity를 제외한 나머지 정보(Reference 정보)를 추출합니다. 

ID image와 Reference image / video를 AI에 넣어서 합성을 하면 Face swapping이 된 영상을 생성할 수 있습니다.

출처
https://www.youtube.com/watch?v=on4bHNdUm-I&t=655s
https://www.pinterest.de/pin/581245895637197949/?send=true

그렇다면 ID image와 Reference image를 합성해 주는 AI의 정체는 무엇일까요?

Generative Adversarial Networks (GAN) 

이 AI는 Generative Adversarial Networks, GAN이라 불리는 진짜 같은 가짜 이미지를 생성해 내는 AI 모델입니다. 

GAN은 두 가지의 요소를 가지고 있습니다.

  • Generator: 가짜 이미지를 생성
  • Discriminator: 진짜 이미지와 가짜 이미지를 구별

GAN이란 모델을 학습시켜서 최종적으로 얻고자 하는 것은 가짜 이미지를 생성해 주는 Generator이며, Discriminator는 Generator의 학습을 도와주는 요소로 이해하시면 됩니다.

학습 알고리즘

다음은 학습 알고리즘에 대해 간략하게 설명드리도록 하겠습니다. 학습 알고리즘을 직관적으로 설명드리고자 원 논문에서 사용하고 있는 비유를 그대로 가지고 왔습니다.

  • Generator: 가짜 이미지를 생성(지폐 위조범)
  • Discriminator: 진짜 이미지와 가짜 이미지를 구별(경찰)

Discriminator를 학습시키는 방법

출처
https://wegonnamakeit.tistory.com/54

Discriminator는 경찰에 비유됩니다. 경찰이 해야 하는 역할을 실제 세계에서 생각을 해본다면 진짜 지폐와 지폐 위조범이 만든 위조 지폐가 있을 때, 두 지폐를 보고 진짜 지폐를 ‘진짜’라고 판단하고 위조 지폐를 보고 ‘위조’라고 판단하는 것이 경찰의 역할입니다. GAN에서도 Discriminator가 이러한 역할을 수행할 수 있도록 학습시킵니다. 

Generator를 학습시키는 방법

출처
https://wegonnamakeit.tistory.com/54

Generator는 지폐 위조범에 비유됩니다. 지폐 위조범의 목적은 정교한 위조지폐를 만드는 것인데요, 이를 위해선 지폐 위조범은 경찰을 속일 수 있는 위조 지폐를 만드는 방법을 학습해야 할 것입니다. GAN에서도 Generator가 이러한 능력을 가질 수 있도록 학습시킵니다. 

학습 알고리즘 (Adversarial loss) 정리

이 두 요소를 이미지 관점에서 적용해 보면, Discriminator는 진짜, 가짜 이미지를 최대한 잘 구별하도록 학습을 하고, Generator는 그러한 Discriminator를 최대한 잘 속이도록 학습합니다. 

이미지 출처
Karras, T., Aittala, M., Laine, S., Härkönen, E., Hellsten, J., Lehtinen, J., & Aila, T. (2021). Alias-Free Generative Adversarial Networks. arXiv preprint arXiv:2106.12423. 

Generator의 학습 방식에 대해 조금 더 설명드리면, 우선 Generator는 어떤 정보를 사용해서 가짜 이미지를 생성합니다. 그리고 이 가짜 이미지를 Discriminator에게 입력으로 넣어, Discriminator가 가짜 이미지를 보고 ‘진짜 이미지다’라고 잘못 판단하는 방향으로Generator를 학습시키게 됩니다. 이 과정을 통해 학습 종료 후 Generator를 이용하여 진짜 같은 가짜 이미지를 생성할 수 있습니다.

Face swapping with GAN

GAN은 단순하게 가짜 이미지를 생성해 주는 AI 모델이었는데요, GAN을 이용해서 어떻게 Face swapping이라는 태스크를 수행할 수 있는지를 다음의 이미지로 설명드리겠습니다. 

 

출처
https://www.youtube.com/watch?v=on4bHNdUm-I&t=655s
https://www.pinterest.de/pin/581245895637197949/?send=true

Generator에게 총 세 가지의 학습 알고리즘을 이용해서 학습을 시키게 됩니다. 

(1) Adversarial loss
(2) ID reconstruction loss
(3) Reference reconstruction loss


(1) Adversarial loss는 Generator로 하여금 진짜처럼 보일 정도로 사실적인 가짜 이미지를 생성하도록 학습 알고리즘입니다. 
(2) ID reconstruction loss는 Generator가 이미지를 생성할 때 ID image의 ID 정보(눈 모양, 얼굴형)를 최대한 반영해서 이미지를 생성하도록 학습시키는 알고리즘입니다. 
(3) Reference reconstruction loss는 Generator가 이미지를 생성할 때 Reference image의 Reference 정보(표정, 배경, 머리 스타일 등)를 최대한 반영해서 이미지를 생성하도록 학습시키는 알고리즘입니다. 

이 세 가지 학습 알고리즘을 동시에 사용함으로써 Generator로 하여금 Face swapping을 수행할 수 있도록 하는 것입니다. 

즉, Generated image는 Adversarial loss에 의해 진짜처럼 사실적이고, ID reconstruction loss에 의해 ID image처럼 생겼으며, Reference reconstruction loss에 의해 표정이나 배경 등은 원본 영상 (Reference image)과 똑같은 이미지가 됩니다.

Nickface 기술을 위한 세 가지 필수 조건

Nickface 기술을 위해서 Face swapping 모델이 가져야 할 세 가지 필수 조건은 다음과 같습니다. 

  • 이미 학습이 완료된 하나의 모델만으로 다양한 ID를 갖는 Nickface를 생성할 수 있어야 합니다. 새로운 ID 하나 만드는 데 추가적인 학습이 필요하다면, 큰 비용을 야기하게 됩니다.

출처
https://github.com/NVlabs/ffhq-dataset

  • 유니크한 ID를 갖는 Nickface를 생성할 수 있어야 합니다. 서로 다른 ID image가 주어졌을 때, 생성된 이미지의 ID는 충분히 달라 보여야 합니다. 이를 위해선, 얼굴형이 잘 바뀌는 것이 매우 중요합니다.

출처
https://github.com/NVlabs/ffhq-dataset

  • 최종 목적은 실존 인물의 ID가 아니라, 실존하지 않는 가상의 인물의 ID로 바꾸는 것입니다. 실존 인물의 ID는 서비스에 활용하기 어렵습니다. 

기본 모델의 한계와 현재 우리의 모델

지금부터는 기존 모델이 가지고 있는 한계를 알아보고, 이를 극복한 저희의 모델과 비교해 보겠습니다.

크게 다음의 3가지 포인트에서 비교했습니다. 이는, 세 가지 필수 조건에 해당하는 각각의 요소들이기도 합니다.

  • 추가 학습 없이 다양한 ID로 Swapping이 가능한가?
  • Unique 한 ID를 만들 수 있는가?(얼굴형이 잘 변하는지를 기준으로 판단)
  • 실존하지 않는 인물의 ID로 Swapping이 가능한가?

비교를 위한 베이스라인 모델 선정

GitHub 등에서 검색하면 딥페이크 관련 많은 오픈소스들이 나옵니다. 이러한 오픈소스들은 추가 학습 없이 다양한 ID로는 Swapping이 어렵다는 한계가 있습니다. 이러한 한계가 있는 모델들은 Nickface 프로젝트에는 사용이 불가능합니다. 따라서 이러한 모델들은 베이스라인에서 제외했습니다.  

그다음으로 FaceShifter라는 모델입니다. 이 모델의 경우, 추가 학습 없이 다양한 ID로 Swapping이 가능한 모델입니다. 이게 가능한 모델이 몇 가지 있는데, 그중에서도 FacsShiter의 경우, 2020년에 공개된 최신의 Swapping 모델 중 하나이고, CVPR이라는 권위 있는 학회에 등재된 모델이기도 하여, 저희의 모델과 비교하기 위한 베이스라인으로 사용했습니다.

FaceShiter 모델은 추가 학습 없이 다양한 ID로 Swapping이 가능하지만, Unique한 ID를 만들 수 있는가와 실존하지 않는 인물의 ID로 Swapping이 가능한가의 측면에서는 아쉬운 부분이 있습니다. 

반면, 저희 모델은 세 가지 비교 포인트에서 전부 다 다른 모델들에 비해서 우위를 보이고 있습니다. 

추가 학습 없이 다양한 ID로 Swapping 가능한가?Unique한 ID를 만들 수 있는가?(얼굴형이 잘 변하는가?)실존하지 않는 인물의 ID로 Swapping 가능한가?
Deepfake open sources[1, 2, 3] X
FaceShifter[4] OXX
우리의 모델OOO

[1] https://github.com/deepfakes/faceswap 
[2] https://github.com/joshua-wu/deepfakes_faceswap 
[3] https://github.com/llSourcell/deepfakes 
[4] Li, L., Bao, J., Yang, H., Chen, . D., & Wen, F. (2020). Faceshifter: Towards high fidelity and occlusion aware face swappingn CVPR. (https://github.com/mindslab-ai/faceshifter)

정성적 비교 결과

다음의 그림은 FaceShifter 모델이 만들어낸 이미지입니다. 

출처
https://github.com/NVlabs/ffhq-dataset

먼저, 연두색 박스의 1행의 이미지들은 Reference image입니다. 즉, 변환의 대상이 되는 이미지입니다. 

1열에 있는 파란색 박스의 이미지들은 ID image입니다. 1열에 존재하는 ID로 얼굴형을 변환하고자 합니다. 이렇게 변환했을 때 Face swapping된 이미지가 빨간색 박스 안의 이미지들입니다.

FaceShifter 모델의 경우, 아기의 얼굴을 가지고 보면, 아기들은 얼굴형이 동그란 반면에 생성된 이미지들은 아기의 동글동글한 얼굴형보다는 Reference image가 가지고 있는 얼굴형을 그대로 따라가고 있다는 아쉬운 점이 있습니다. 따라서, 변환된 이미지들이 정말로 아기의 Ideitity를 살리는 방향으로 변환이 된 것인가에 대해 의문이 남는 아쉬운 결과입니다.

그렇다면, 이제 저희의 모델로 변환해 본 결과입니다.

출처
https://github.com/NVlabs/ffhq-dataset

동일하게 1행이 Reference image, 1열이 ID image이며, 나머지 붉은색 박스가 Face swapping된 이미지입니다.

먼저 아기의 ID image로 변환했을 때, 얼굴형이 굉장히 동글동글하게 바뀌고 있음을 확인할 수 있습니다. 또한, 젊은 여성의 ID로 변환했을 때에는 갸름한 얼굴형을 만들어 주며, 남성의 ID로 이미지로 변환했을 때에는 다부진 턱을 생성하고 있습니다.

조금 더 직접적으로 비교하기 위해 다음과 같이 각 이미지들을 뽑아 보았습니다.

출처
https://github.com/NVlabs/ffhq-dataset

상단 1행이 Reference image이고, 왼쪽 1열이 ID image입니다. 그리고, FaceShifter와 저희 모델에 대해 각각 아기의 ID image를 사용해 Swapping한 결과를 빨간색 박스에 표시했습니다. FaceShifter에 비해 저희 모델이 아기의 동글동글한 얼굴형을 더 자연스럽게 생성해 주고 있다는 것을 확인할 수 있을 것입니다.

정량적 비교 결과

수치를 기반으로 정량적으로도 비교를 해보겠습니다. 평가 종목은 얼굴형이 얼마나 잘 바뀌고 있는가에 대해서 평가했습니다. 이에 대한 평가 지표는 다음의 2가지를 사용했습니다.

  • Reference shape difference: 생성된 이미지와 Reference image의 얼굴형 차이를 계산 
  • ID shape difference: 생성된 이미지와 ID image의 얼굴형 차이를 계산

출처
https://github.com/NVlabs/ffhq-dataset

Reference shape difference의 차이

생성된 이미지는 ID image의 얼굴형을 따라가야 하기 때문에, 학습이 잘 된 모델이라면 자연스럽게 Reference image의 얼굴형과는 차이가 많이 날 수밖에 없습니다. 따라서, 표의 비교 방식 칼럼의 위쪽 화살표의 경우, 차이가 크면 클수록 학습이 잘 된 모델임을 의미하고 있습니다.

FaceShifter는 Reference shape difference가 0.031이고, 저희 모델은 0.037이 나왔습니다. 즉, 19.3%의 성능 개선율을 보였습니다.

ID shape difference의 차이 

생성된 이미지는 ID image의 얼굴형을 따라가야 하기 때문에, 둘 사이의 얼굴형 차이는 적을수록 더 잘 학습된 것이라고 할 수 있습니다. 따라서, 표의 비교 방식 칼럼의 화살표를 아래쪽으로 나타냈습니다. 값을 비교해 보니, FaceShifter가 0.039, 저희 모델이 0.03이었습니다. 여기에서는 23.0%의 성능 개선율을 보여주고 있습니다.

이 외에도, 한 가지 더 의미 있는 분석이 가능합니다.

생성된 이미지는 ID image의 얼굴형과는 가까워야 하고 Reference image의 얼굴형과는 멀어야 합니다. FaceShifter의 결과를 보면, ID image와의 얼굴형과 더 멀고 Reference image의 얼굴형과는 더 가까운 결과를 보여줍니다. 즉, 생성된 이미지가 ID image가 아닌 Reference image의 얼굴형을 따라가고 있다는 결론을 내릴 수 있습니다. 반면, 저희 모델은 Reference image와의 거리보다 ID image와의 거리가 가깝게 나오고 있어, 생성된 이미지가 ID image의 얼굴형을 따라가고 있다는 것을 확인할 수 있습니다. 

즉, FaceShifter 대비 저희 모델이 얼굴형 변화에 있어 더 큰 성능 개선을 보여주고 있습니다.

저희의 주 목적은 ‘얼굴형을 잘 바꾸는 모델을 만들어보자’였습니다. 하지만, 그 외에도 Face swapping 모델에서 사용이 되는 평가 종목들이 다음과 같이 몇 가지 더 있습니다. 

  • ID 반영의 정도: 생성된 이미지가 얼마나 ID image와 비슷하게 생겼는가를 측정
  • Reference 반영의 정도: 배경 등이 얼마나 Reference image를 잘 따라가고 있는가를 측정
  • 이미지 퀄리티: 생성된 이미지가 얼마나 사실적인가를 측정 

이러한 평가 종목에 대해 다음과 같이 4가지 평가 지표를 이용해서 측정해 보았습니다.

성능 개선율을 보면, ID 반영의 정도, Reference 반영의 정도, 그리고 이미지 퀄리티에서 모두 개선된 결과를 보였습니다. 즉, 얼굴형 변화 외의 다른 평가 지표에서도 의미 있는 성능 개선을 보여주고 있습니다. 

성능 개선의 핵심 요소

여기에서는 저희 모델과 베이스라인 모델인 FaceShifter 모델이 어떤 차이가 있어서 성능 개선이 가능했는지, 그 핵심요소에 대해서 말씀드리려고 합니다.

먼저, 얼굴 부분을 생성할 때 FaceShifter의 경우에는, Reference image에서 ID와 관련된 국소적인 부분(예: 눈, 아래 턱)만을 수정합니다. 반면, 저희 모델의 경우, Reference image에서 일부러 많은 정보를 손실시킵니다. 즉, 이미지를 생성하는 데 있어 필수적인 최소한의 정보만을 남기고 일부러 많은 정보를 손실시킨 다음에, 손실된 곳을 ID 정보를 사용해서 다시 생성하는 방식을 택하고 있습니다. 이 때문에, 얼굴형 변화에 있어서 저희 모델의 경우에는 Reference image에 존재하는 얼굴형을 지우고 ID image에 존재하는 얼굴형 정보로 다시 그리는 방식으로 진행되기 때문에, FaceShifter 대비 얼굴형 변화에서 성능 개선을 달성할 수 있었습니다. ID 반영의 정도에 있어서도 동일합니다. 

두 번째로 배경 부분을 생성할 때 FaceShifter의 경우에는 Generator가 생성합니다. 저희는 배경이라는 요소의 경우 결국 Reference image에 존재하는 배경을 그대로 재현하는 것이 Face swapping의 목적이므로, 굳이 배경을 Generator가 생성하게 할 필요가 있는가라는 의문이 있었습니다. 따라서, Generator가 생성하게 하지 말고 Reference image에 있는 것을 그대로 재현하는 것이 목적인 만큼, Reference image의 배경을 그대로 복사 및 붙여넣기할 수 있는 방법을 고안해서 사용하고 있습니다. 이 때문에, Reference 반영의 정도에서 성능을 개선할 수 있었습니다. 

이미지 퀄리티의 경우에도, Generator가 생성을 하도록 하는 것이 아니라 아예 Real image에 해당하는 Reference image에서 복사해 오기 때문에, 성능 개선이 가능했습니다.

우리 모델의 동영상 변환 결과

이제부터는 저희 모델이 어느 정도까지 성능을 낼 수 있는지에 대해 공유드리겠습니다. 

동영상 이미지

테일러 스위프트의 원본 동영상과 엠마 왓슨 및 아기의 얼굴로 Face swapping을 한 동영상 이미지를 비교해서 보여 드리겠습니다.

출처
https://www.youtube.com/watch?v=on4bHNdUm-I&t=655s 

출처
https://www.pinterest.de/pin/581245895637197949/?send=true

출처
https://github.com/NVlabs/ffhq-dataset

실존하지 않는 얼굴로 Face swapping

Nickface 기술을 위한 세 가지 필수 조건 중 마지막 조건은 실존하지 않는 인물의 ID로 Swapping이 가능한가였습니다. 

왼쪽 위의 녹색 박스의 이미지가 Reference image입니다. 그 외의 나머지 이미지들은 모두 실존하지 않는 ID로 얼굴을 새롭게 바꾼 이미지입니다. 

앞으로의 발전 방향

앞으로는, 크게 Face swapping 모델 연구 측면과 Nickface 서비스 측면에서 발전시켜 가고자 합니다.

Face swapping 모델 연구 측면에서는 정면이 아닌 옆으로 돌아가 있는 얼굴처럼 생성하기 어려운 이미지 역시 효과적으로 생성할 수 있는 Generator를 만드는 것을 목표로 하고 있습니다. 그리고, Occlusion(오클루전)을 효과적으로 처리하는 것도 중요합니다. Occlusion은 얼굴을 손 등으로 가리고 있는 현상을 의미하는데, 그러한 상황에서도 실제 같은 자연스러운 이미지를 생성할 수 있어야 한다는 것이 저희의 목표 중 하나입니다.

Nickface 서비스 측면에서는, 실존하지 않는 ID로 Swapping하는 태스크의 성능 향상을 목표로 하고 있습니다. 또한, 실존하지 않는 ID로 Swapping을 할 경우, 현재는 무작위로 추출된 ID로만 Swapping이 가능합니다. 하지만 무작위가 아닌 사용자가 원하는 바를 반영한 ID로 Face swapping이 가능해야 하므로 이를 향후 과제로 생각하고 있습니다.

감사합니다.

orca.na
orca.na 카카오브레인에서 AI 기반 이미지 생성모델을 연구하고 있습니다.
Top Tag
2021
2021-new-krew
Ad Platform
Ad tech
adaptive-hash-index
adt
adtech
agile
agilecoach
ai
algorithm
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
Analyzer
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
binary
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
canvasapi
Caver
cch
cd
CDR
ceph
certificate
certification
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
coding test
competition
Compliance
component
conference
consul
container
contents
contest
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
Data
data-engineering
DB
deep-learning
Dependency
dependency-graph
desktop
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
Electron
employeecard
emscripten
eslint
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
globalpollution
go
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
javascript web-assembly
JCMM
JIRA
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-Career-Boost-Program
kakao-commerce
kakao-games
kakaoarena
kakaobrain
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaopage
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
kubernetes
l3dsr
l4
License
links
Linux
load-balancing
MAB
Machine Learning
machine-learning
map
marathon
meetup
melon
mesos
message
Messaging
microservice
Microsoft TypeScript
mm
mobil
monad
monorepo
ms-office
MSA
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
Nickface
nomad
ocp
olive
onboarding
open
open source
opensource
openstack
OpenWork
OSS
page
parallel
PBA
performance
planning poker
Platform
polyfill
programming-contest
project-structure
pycon
python
quagga
react
reactive-programming
reactor
recap
recommendation
recommendation system
recruitment
redis
redis-keys
redis-scan
related-blind
Renderer
rest
Rome
rubics
ruby
rxjs
s2graph
scala
scalaz
seminar
Serve
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
summer internship
support
System
talk
talkchannel
tcp
tech
Techtalk
test
thread
Thread-Debugging
time-wait
tmux
Topic Modeling
typescript
Untact
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
WASM
web-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업
All Tag
2021
2021-new-krew
Ad Platform
Ad tech
adaptive-hash-index
adt
adtech
agile
agilecoach
ai
algorithm
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
Analyzer
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
binary
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
canvasapi
Caver
cch
cd
CDR
ceph
certificate
certification
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codereview
coding
coding test
competition
Compliance
component
conference
consul
container
contents
contest
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
Data
data-engineering
DB
deep-learning
Dependency
dependency-graph
desktop
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
Electron
employeecard
emscripten
eslint
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
github
globalpollution
go
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
javascript web-assembly
JCMM
JIRA
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-Career-Boost-Program
kakao-commerce
kakao-games
kakaoarena
kakaobrain
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaopage
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
kubernetes
l3dsr
l4
License
links
Linux
load-balancing
MAB
Machine Learning
machine-learning
map
marathon
meetup
melon
mesos
message
Messaging
microservice
Microsoft TypeScript
mm
mobil
monad
monorepo
ms-office
MSA
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
Nickface
nomad
ocp
olive
onboarding
open
open source
opensource
openstack
OpenWork
OSS
page
parallel
PBA
performance
planning poker
Platform
polyfill
programming-contest
project-structure
pycon
python
quagga
react
reactive-programming
reactor
recap
recommendation
recommendation system
recruitment
redis
redis-keys
redis-scan
related-blind
Renderer
rest
Rome
rubics
ruby
rxjs
s2graph
scala
scalaz
seminar
Serve
server
service
sharding
shopping
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
summer internship
support
System
talk
talkchannel
tcp
tech
Techtalk
test
thread
Thread-Debugging
time-wait
tmux
Topic Modeling
typescript
Untact
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
WASM
web-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업

위로