
코드 리뷰할 시간이 어딨어요? 모닥불 | EP.12
빠르게 쌓이는 PR, 느리게 달리는 리뷰. 결국 남는 건 LGTM(Looks Good To Me)뿐이라면?이번 모닥불에서는 토스 프론트엔드 챕터가 어떻게 코드 리뷰 문화를 활성화했는지 알려드릴게요. ‘고맥락자 코드 리뷰’ 부터 ‘코드스멜 워킹그룹’, ‘가독성 위원회’ 그리고 ‘코드 리뷰 배틀’ 까지 실전에 적용해 볼 수 있는 다양한 코드 리뷰 꿀팁들, 지금 바로 공개합니다!• None 01:40 코드 리뷰, 왜 필요한가요?• None 11:20 좋은 코드의 4가지 기준!Frontend Fundamentals ; 변경하기 쉬운 프론트엔드 코드를 위한 지침서 👉바로가기: https://frontend-fundamentals.com다른 모닥불 회차 보러가기 EP.10 캠프파이어 특집 상편 | 무엇이든 물어보세요 (feat. 프론트엔드 코드, 디렉토리 관리) EP.10 캠프파이어 특집 하편 | 무엇이든 물어보세요 (feat. 테스트 코드, ESLint Rule) EP.11 토스의 디자인 편집기 ‘데우스’, 이렇게 만들었어요!
5/21/2025

코드 리뷰할 시간이 어딨어요? 모닥불 | EP.12
빠르게 쌓이는 PR, 느리게 달리는 리뷰. 결국 남는 건 LGTM(Looks Good To Me)뿐이라면?이번 모닥불에서는 토스 프론트엔드 챕터가 어떻게 코드 리뷰 문화를 활성화했는지 알려드릴게요. ‘고맥락자 코드 리뷰’ 부터 ‘코드스멜 워킹그룹’, ‘가독성 위원회’ 그리고 ‘코드 리뷰 배틀’ 까지 실전에 적용해 볼 수 있는 다양한 코드 리뷰 꿀팁들, 지금 바로 공개합니다!• None 01:40 코드 리뷰, 왜 필요한가요?• None 11:20 좋은 코드의 4가지 기준!Frontend Fundamentals ; 변경하기 쉬운 프론트엔드 코드를 위한 지침서 👉바로가기: https://frontend-fundamentals.com다른 모닥불 회차 보러가기 EP.10 캠프파이어 특집 상편 | 무엇이든 물어보세요 (feat. 프론트엔드 코드, 디렉토리 관리) EP.10 캠프파이어 특집 하편 | 무엇이든 물어보세요 (feat. 테스트 코드, ESLint Rule) EP.11 토스의 디자인 편집기 ‘데우스’, 이렇게 만들었어요!
2025.05.21

좋아요

별로에요

Apache Airflow DAG Versioning 기능 알아보기
"이 Task는 예전 코드로 실행됐던 거였나?"Airflow를 운영하다 보면 한 번쯤은 이런 고민을 해보신 경험이 있으실 겁니다.지난 달 말에 출시된 Airflow 3.0 버전에서 DAG Versioning 기능이 도입되었습니다 ㅎㅎ 🎉이제 Airflow UI 상에서 DAG의 변경 이력을 추적하고, 각 task가 어떤 DAG 버전으로 실행되었는지 확인할 수 있게 되었습니다.이 글에서는 DAG Versioning이 무엇인지, 왜 중요한지, 그리고 어떻게 사용하는지를 정리해 보려고 합니다.앞으로 DAG 관리를 훨씬 체계적으로 관리할 수 있으실 거예요!Airflow 2.x까지는 DAG 실행과 UI 모두 항상 로컬의 최신 DAG 코드를 기준으로 작동했습니다.이로 인해 다음과 같은 두 가지 문제점이 발생하곤 했습니다:• None DAG 수정 시, 삭제된 태스크가 Airflow UI에서 사라짐• None DAG 실행 중 코드가 바뀌면, 일부 태스크는 이전 코드, 나머지는 수정된 코드로 실행됨이러한 문제를 해결하기 위해, Airflow 3.x 버전에서는 DAG Bundles와 DAG Versioning 이 도입되었습니다.Airflow 3.x 에서는 기존의 폴더에 파일을 두는 구조 대신, DAG 코드를 하나의 단위로 묶는 이라는 개념이 도입되었습니다.DAG Bundle에는 두가지 종류가 있습니다.DAG Bundle 구조 덕분에 Airflow는 DAG 실행 시 해당 시점의 DAG 코드 상태를 버전(v1, v2, ...)으로 고정할 수 있게 되었습니다.실습으로 알아보는 DAG Versioning이제 직접 실습을 통해 DAG Versioning을 어떻게 사용하는지 알아보겠습니다.Airflow 3.x 환경이 이미 구성되어 있다면 바로 사용해보실 수 있지만, 이 글에서는 더 간편한 방법으로 Astro CLI를 활용하겠습니다.Astro CLI 설치와 사용법은 아래의 공식 문서와 글을 통해서 알아보실 수 있습니다.Astro CLI의 버전이 이라면 Airflow 3 버전을 지원하므로 이 글의 내용을 그대로 따라 하실 수 있습니다.만약 버전이 더 낮다면, 최신 버전으로 업그레이드해 주세요.이제 실습을 위한 예제 프로젝트를 포크하고 클론해줍니다.간단한 라는 이름의 DAG를 작성해보았습니다.이 상태에서 명령어로 Airflow를 실행하면에서 Airflow 3의 새 UI를 볼 수 있어요.왼쪽 사이드바의 Dags를 통해서 현재 DAG들을 볼 수 있는데요.저희가 만든 DAG가 있는 것을 확인할 수 있습니다.DAG를 선택해서 보면, 자세한 DAG에 대한 정보를 볼 수 있습니다.DAG의 버전과 관련된 내용은 우측 상단의 Latest Dag Version을 통해서 확인할 수 있습니다.현재 버전은 v1버전으로 되어있는 것을 볼 수 있습니다.DAG버전은 Trigger를 기점으로 지정이 되므로 Trigger를 해봅시다.이렇게 DAG가 한 번 실행되면 v1으로 고정됩니다.그럼 DAG를 수정을 해봅시다. 아래의 코드 처럼 task_3을 추가했습니다.변경 후 저장하고 UI에서 다시 DAG를 Trigger하면,이제 새로운 실행은 v2로 관리됩니다.그래프 뷰에서 각 버전별로 task가 어떻게 구성되어있는지도 확인가능합니다.앞선 설명에서 LocalDagBundle은 버전관리가 안된다고 했었는데, v1, v2로 잘되는 것으로 보입니다.하지만 이는 UI상에서만 DAG가 수정되었다는 사실만 확인이 가능한 것입니다.간단하게 이 사실을 확인가능 한 것이 v1으로 실행된 DAG를 재실행하면 아래와 같이 최신 DAG코드로 실행이 된 것을 확인할 수 있습니다.LocalDagBundle와 GitDagBundle을 비교하면 아래와 같습니다.그래서 LocalDagBundle은 개발환경에서는 적합하지만, DAG의 버전 관리가 되지 않는다고 볼 수 있습니다.예를 들어 v1 실행을 다시 Run하면 v2 코드가 사용되는 등, 버전 고정이 되지 않습니다.앞서 설명한 LocalDagBundle은 버전을 만들 수는 있지만, 관리할 수는 없습니다.버전을 관리하기 위해서는 GitDagBundle을 사용해야하는데요.• None 에 를 추가해줍니다.provider의 최신버전은 아래의 링크에서 확인하실 수 있습니다.• None 에도 git을 추가해줍니다.• None GitHub에서 Personal Access Token을 발급받고, 에 host부분에는 저장소의 레포지토리 주소와 password부분에는 발급받은 토큰을 설정해줍니다.깔끔하게 정리하고 싶다면, 아래의 명령어로 컨테이너를 지우고 다시 시작해줍니다.그럼 아래와 같이 Git 저장소에서 DAG를 불러오고, DAG를 트리거하면 버전으로 실행되는 것을 확인할 수 있습니다.그럼 DAG를 수정해봅시다. 이번에는 이전에 추가했던 task_3를 삭제해보겠습니다.수정하고 trigger를 해봅니다.task_3를 삭제했는데 task_3가 실행되는 것을 확인해볼 수 있습니다.이는 DAG를 깃허브 저장소에서 가져오기 때문입니다. 반드시 Git에 커밋되어야 새로운 버전이 적용됩니다.커밋을 하고 다시 trigger해줍니다.task_3가 사라지고 버전이 v2로 고정된 것을 확인할 수 있습니다.그리드 뷰에서도 버전을 잘 확인할 수 있습니다.그리고 task_3를 다시 돌려놓고 다시 커밋을 하면 v3로 정상적으로 버전이 잘 올라가는 것을 확인할 수 있습니다.그럼 지금 task_3가 없었던 v2 DAG를 트리거 할 수 있는지 볼까요?DAG를 Clear Run을 해봅시다.정상적으로 잘 되는 것을 확인할 수 있습니다.정상적으로 잘 실행되는 것을 확인 할 수 있습니다.DAG Versioning의 진가를 느낄 수 있는 부분은 바로 각 DAG run에서 정확히 어떤 코드가 사용되었는지 확인할 수 있다는 점입니다.각 DAG run의 Detail 을 확인해보면 DAG의 버전에 어떤 Bundle에 대한 자세한 설명과 어떤 코드가 사용되었는지 확인해볼 수 있습니다.Airflow 3.x에 도입된 DAG Versioning 기능은 정말 반가운 변화입니다.이제는 “어..? 이거 코드 바뀌기 전이었나?” 같은 고민 없이,정확히 어떤 DAG 코드로 실행되었는지 추적할 수
airflow
5/21/2025

Apache Airflow DAG Versioning 기능 알아보기
"이 Task는 예전 코드로 실행됐던 거였나?"Airflow를 운영하다 보면 한 번쯤은 이런 고민을 해보신 경험이 있으실 겁니다.지난 달 말에 출시된 Airflow 3.0 버전에서 DAG Versioning 기능이 도입되었습니다 ㅎㅎ 🎉이제 Airflow UI 상에서 DAG의 변경 이력을 추적하고, 각 task가 어떤 DAG 버전으로 실행되었는지 확인할 수 있게 되었습니다.이 글에서는 DAG Versioning이 무엇인지, 왜 중요한지, 그리고 어떻게 사용하는지를 정리해 보려고 합니다.앞으로 DAG 관리를 훨씬 체계적으로 관리할 수 있으실 거예요!Airflow 2.x까지는 DAG 실행과 UI 모두 항상 로컬의 최신 DAG 코드를 기준으로 작동했습니다.이로 인해 다음과 같은 두 가지 문제점이 발생하곤 했습니다:• None DAG 수정 시, 삭제된 태스크가 Airflow UI에서 사라짐• None DAG 실행 중 코드가 바뀌면, 일부 태스크는 이전 코드, 나머지는 수정된 코드로 실행됨이러한 문제를 해결하기 위해, Airflow 3.x 버전에서는 DAG Bundles와 DAG Versioning 이 도입되었습니다.Airflow 3.x 에서는 기존의 폴더에 파일을 두는 구조 대신, DAG 코드를 하나의 단위로 묶는 이라는 개념이 도입되었습니다.DAG Bundle에는 두가지 종류가 있습니다.DAG Bundle 구조 덕분에 Airflow는 DAG 실행 시 해당 시점의 DAG 코드 상태를 버전(v1, v2, ...)으로 고정할 수 있게 되었습니다.실습으로 알아보는 DAG Versioning이제 직접 실습을 통해 DAG Versioning을 어떻게 사용하는지 알아보겠습니다.Airflow 3.x 환경이 이미 구성되어 있다면 바로 사용해보실 수 있지만, 이 글에서는 더 간편한 방법으로 Astro CLI를 활용하겠습니다.Astro CLI 설치와 사용법은 아래의 공식 문서와 글을 통해서 알아보실 수 있습니다.Astro CLI의 버전이 이라면 Airflow 3 버전을 지원하므로 이 글의 내용을 그대로 따라 하실 수 있습니다.만약 버전이 더 낮다면, 최신 버전으로 업그레이드해 주세요.이제 실습을 위한 예제 프로젝트를 포크하고 클론해줍니다.간단한 라는 이름의 DAG를 작성해보았습니다.이 상태에서 명령어로 Airflow를 실행하면에서 Airflow 3의 새 UI를 볼 수 있어요.왼쪽 사이드바의 Dags를 통해서 현재 DAG들을 볼 수 있는데요.저희가 만든 DAG가 있는 것을 확인할 수 있습니다.DAG를 선택해서 보면, 자세한 DAG에 대한 정보를 볼 수 있습니다.DAG의 버전과 관련된 내용은 우측 상단의 Latest Dag Version을 통해서 확인할 수 있습니다.현재 버전은 v1버전으로 되어있는 것을 볼 수 있습니다.DAG버전은 Trigger를 기점으로 지정이 되므로 Trigger를 해봅시다.이렇게 DAG가 한 번 실행되면 v1으로 고정됩니다.그럼 DAG를 수정을 해봅시다. 아래의 코드 처럼 task_3을 추가했습니다.변경 후 저장하고 UI에서 다시 DAG를 Trigger하면,이제 새로운 실행은 v2로 관리됩니다.그래프 뷰에서 각 버전별로 task가 어떻게 구성되어있는지도 확인가능합니다.앞선 설명에서 LocalDagBundle은 버전관리가 안된다고 했었는데, v1, v2로 잘되는 것으로 보입니다.하지만 이는 UI상에서만 DAG가 수정되었다는 사실만 확인이 가능한 것입니다.간단하게 이 사실을 확인가능 한 것이 v1으로 실행된 DAG를 재실행하면 아래와 같이 최신 DAG코드로 실행이 된 것을 확인할 수 있습니다.LocalDagBundle와 GitDagBundle을 비교하면 아래와 같습니다.그래서 LocalDagBundle은 개발환경에서는 적합하지만, DAG의 버전 관리가 되지 않는다고 볼 수 있습니다.예를 들어 v1 실행을 다시 Run하면 v2 코드가 사용되는 등, 버전 고정이 되지 않습니다.앞서 설명한 LocalDagBundle은 버전을 만들 수는 있지만, 관리할 수는 없습니다.버전을 관리하기 위해서는 GitDagBundle을 사용해야하는데요.• None 에 를 추가해줍니다.provider의 최신버전은 아래의 링크에서 확인하실 수 있습니다.• None 에도 git을 추가해줍니다.• None GitHub에서 Personal Access Token을 발급받고, 에 host부분에는 저장소의 레포지토리 주소와 password부분에는 발급받은 토큰을 설정해줍니다.깔끔하게 정리하고 싶다면, 아래의 명령어로 컨테이너를 지우고 다시 시작해줍니다.그럼 아래와 같이 Git 저장소에서 DAG를 불러오고, DAG를 트리거하면 버전으로 실행되는 것을 확인할 수 있습니다.그럼 DAG를 수정해봅시다. 이번에는 이전에 추가했던 task_3를 삭제해보겠습니다.수정하고 trigger를 해봅니다.task_3를 삭제했는데 task_3가 실행되는 것을 확인해볼 수 있습니다.이는 DAG를 깃허브 저장소에서 가져오기 때문입니다. 반드시 Git에 커밋되어야 새로운 버전이 적용됩니다.커밋을 하고 다시 trigger해줍니다.task_3가 사라지고 버전이 v2로 고정된 것을 확인할 수 있습니다.그리드 뷰에서도 버전을 잘 확인할 수 있습니다.그리고 task_3를 다시 돌려놓고 다시 커밋을 하면 v3로 정상적으로 버전이 잘 올라가는 것을 확인할 수 있습니다.그럼 지금 task_3가 없었던 v2 DAG를 트리거 할 수 있는지 볼까요?DAG를 Clear Run을 해봅시다.정상적으로 잘 되는 것을 확인할 수 있습니다.정상적으로 잘 실행되는 것을 확인 할 수 있습니다.DAG Versioning의 진가를 느낄 수 있는 부분은 바로 각 DAG run에서 정확히 어떤 코드가 사용되었는지 확인할 수 있다는 점입니다.각 DAG run의 Detail 을 확인해보면 DAG의 버전에 어떤 Bundle에 대한 자세한 설명과 어떤 코드가 사용되었는지 확인해볼 수 있습니다.Airflow 3.x에 도입된 DAG Versioning 기능은 정말 반가운 변화입니다.이제는 “어..? 이거 코드 바뀌기 전이었나?” 같은 고민 없이,정확히 어떤 DAG 코드로 실행되었는지 추적할 수
2025.05.21
airflow

좋아요

별로에요

일일 Tech News & Blog (25.05.21)
Bloter 구글, AI 구독 서비스 도입 최신 기능 사용할 수 있는 VIP패스
5/21/2025

일일 Tech News & Blog (25.05.21)
Bloter 구글, AI 구독 서비스 도입 최신 기능 사용할 수 있는 VIP패스
2025.05.21

좋아요

별로에요

AI로 생성한 이미지는 어떻게 평가할까요? (인페인팅 적용편)
안녕하세요. 저희 AMD(Applied ML Dev) 팀에서는 생성형 AI를 포함한 다양한 AI/ML 모델을 개발하고 서비스에 적용하고 있습니다.앞서 발행한 AI로 생성한 이미지는 어떻게 평가할까요? (기본편)에서는 생성형 AI 모델의 성능을 평가하는 다양한 방법론을 살펴봤는데요. 이번에는 생성형 AI을 활용한 몇 가지 애플리케이션을 소개하면서, 이와 같은 애플리케이션의 성능을 향상시키기 위해 생성형 AI 평가 방법을 어떻게 활용하고 있는지 공유하고자 합니다.사진 속에서 주인공을 제외한 배경 인물을 AI로 제거하는 방법여행지에서 멋진 풍경을 배경으로 사진을 찍었는데 예상치 못한 인물들이 같이 찍혀 있어서 사진을 여러 번 다시 찍어야 했던 경험이 있으신가요? 이런 불편함을 해소하는 데 생성형 이미지 AI 기술을 활용할 수 있습니다.다음은 생성형 이미지 AI 기술을 활용해 배경 인물을 제거한 결과입니다.* 이미지를 우클릭해서 새로운 탭이나 창에서 열면 이미지를 원본 크기로 확인하실 수 있습니다.배경 인물 제거(background person removal, 이하 BPR)는 다음과 같은 과정으로 진행됩니다.위 과정은 크게 세 단계로 나눌 수 있습니다.• 인스턴스 분할(instance segmentation)• 입력 이미지 내 각 픽셀이 어떤 객체에 속하는지 식별하는 과정으로, 인스턴스 분할 모델을 활용해 사람이나 건물, 나무 등 다양한 객체를 구분하고 개별적으로 인식합니다.• 주요 객체 탐지(saliency object detection)• 이미지에서 가장 눈에 띄는 주요 객체를 식별하는 과정으로, 주요 객체 탐지 모델을 이용해 시선이 집중되는 영역을 픽셀 단위로 추출함으로써 메인 피사체와 배경 인물을 구분할 수 있습니다.• 인페인팅(inpainting) 수행• 주요 영역에 속하지 않는 배경 인물들이 포함된 영역을 인페인팅 기술을 사용해 자연스럽게 제거하고 복원하는 과정입니다.• 여기서 '인페인팅'이란 이미지의 특정 부분을 삭제한 후 주변 환경과 조화를 이루도록 재구성하는 기술입니다.여기서 마지막 단계인 인페인팅 수행 단계는 배경 인물 제거 결과에 가장 큰 영향을 주는 단계이기 때문에 성능이 좋은 인페인팅 모델을 사용해야 합니다. 최근에는 생성형 이미지 모델을 이용한 인페인팅 기술이 많이 발표되고 있는데요. 인페이팅 기술에 대해서 조금 더 깊이 살펴보겠습니다.인페인팅 기술은 이미지의 특정 영역을 제거하고 그 빈자리를 자연스럽게 채워 넣는 기술입니다. 예를 들어 사진 속 인물이나 물체를 삭제한 후 그 공간을 주변 환경과 조화롭게 재구성해 채워 넣는 작업에 활용할 수 있습니다.인페인팅 모델은 생성형 AI의 한 종류로, 이미지의 결손 부분을 채우는 데 특화된 모델이라고 할 수 있습니다. 접근 방식에 따라서 크게 두 가지 주요 모델 로 나눌 수 있는데요. 디퓨전(diffusion) 계열 모델과 GAN(generative adversarial network) 계열 모델로 나뉩니다.이 두 가지 접근 방식은 각각 고유한 메커니즘과 장점을 가지고 있으며, 이미지 복원 작업에서 서로 다른 방식으로 활용됩니다. 하나씩 간략히 살펴보겠습니다.• 디퓨전 계열 모델• 이미지를 점진적으로 변화시켜 손상된 영역을 복원하는 방법입니다.• 보통 이미지의 노이즈를 제거하거나 점진적으로 이미지를 개선하는 방식으로 작동합니다. 예를 들어 랜덤 노이즈인 초기 상태에서 노이즈를 점차 줄여가며 원본 이미지의 형태를 찾아가는 과정으로 진행됩니다.• 복잡한 이미지의 세부 사항을 자연스럽게 복원하는 데 특히 유리합니다.• 다만, 좋은 결과가 나올 때도 있지만 가끔 이상한 물체가 생성되기도 합니다.• 이미지 생성을 위해 반복적으로 노이즈 제거 과정을 거치기 때문에 일반적으로 GAN 계열 모델에 비해 이미지 생성 속도가 느립니다.• 디퓨전 계열 모델에 대한 보다 자세한 설명은 먼저 발행된 AI로 생성한 이미지는 어떻게 평가할까요? (블랙박스 최적화 적용편)을 참고하시기 바랍니다.• GAN 계열 모델• GAN 모델은 생성자(generator)와 판별자(discriminator)라는 두 개의 신경망이 경쟁하면서 학습하는 구조입니다.• 생성자는 결손된 이미지를 복원하려 시도하고, 판별자는 생성된 이미지가 실제 이미지와 얼마나 유사한지를 평가합니다. 이 과정을 반복하면서 점점 더 정교하고 사실적인 이미지를 생성합니다.저희는 BPR 애플리케이션에 다 음과 같은 다양한 인페인팅 모델을 적용해 봤는데요. 원본 이미지의 해상도가 낮거나 인페인팅해야 하는 영역이 작은 경우에는 대부분의 모델에서 좋은 결과가 나왔지만, 원본 이미지의 해상도가 높고 인페인팅해야 하는 영역이 큰 경우에는 모델에 따라 큰 차이가 발생했습니다.먼저 다음은 어떤 인페인팅 모델을 사용하든 좋은 결과가 나온 경우입니다.* 이미지를 우클릭해서 새로운 탭이나 창에서 열면 이미지를 원본 크기로 확인하실 수 있습니다.다음은 사용한 인페인팅 모델에 따라 결과에 큰 차이가 발생한 경우입니다.* 이미지를 우클릭해서 새로운 탭이나 창에서 열면 이미지를 원본 크기로 확인하실 수 있습니다.위 테스트 결과로 알 수 있듯 사용할 모델을 선정할 때 논문에서 제시하는 성능 지표만 보고 판단하는 것은 어렵습니다. 각 모델이 실제 응용 사례에서 어떤 성능을 보여줄지 명확히 파악하기 어렵기 때문입니다.일반적으로 논문에서는 정해진 해상도(예: 256x256)에서 평가를 진행합니다. 이는 실제 사용 환경과는 다를 수 있습니다. 또한 논문마다 평가에 사용한 인페인팅 영역이 다르며, 대부분 실제로 우리가 직면하는 현장과는 다른 상황에서 평가가 진행됩니다. 게다가 인페인팅은 이미지 생성 모델의 일종이므로 어떤 정답이란 것이 존재하지 않습니다. 다양한 형태로 생성된 이미지 모두가 정답이 될 수 있으며, 이는 평가를 더욱 복잡하게 만듭니다.따라서 모델의 실제 성능을 평가할 때는 다양한 요소를 고려해야 합니다. 논문에 제시된 지표들이 어느 정도 대략적인 성능의 경향을 보여줄 수는 있지만, BPR 작업에서 발현될 정확한 인페인팅 성능을 대변하지는 못합니다. 예를 들어 어떤 테스트에서는 좋은 결과를 보여준 모델이 다른
5/21/2025

AI로 생성한 이미지는 어떻게 평가할까요? (인페인팅 적용편)
안녕하세요. 저희 AMD(Applied ML Dev) 팀에서는 생성형 AI를 포함한 다양한 AI/ML 모델을 개발하고 서비스에 적용하고 있습니다.앞서 발행한 AI로 생성한 이미지는 어떻게 평가할까요? (기본편)에서는 생성형 AI 모델의 성능을 평가하는 다양한 방법론을 살펴봤는데요. 이번에는 생성형 AI을 활용한 몇 가지 애플리케이션을 소개하면서, 이와 같은 애플리케이션의 성능을 향상시키기 위해 생성형 AI 평가 방법을 어떻게 활용하고 있는지 공유하고자 합니다.사진 속에서 주인공을 제외한 배경 인물을 AI로 제거하는 방법여행지에서 멋진 풍경을 배경으로 사진을 찍었는데 예상치 못한 인물들이 같이 찍혀 있어서 사진을 여러 번 다시 찍어야 했던 경험이 있으신가요? 이런 불편함을 해소하는 데 생성형 이미지 AI 기술을 활용할 수 있습니다.다음은 생성형 이미지 AI 기술을 활용해 배경 인물을 제거한 결과입니다.* 이미지를 우클릭해서 새로운 탭이나 창에서 열면 이미지를 원본 크기로 확인하실 수 있습니다.배경 인물 제거(background person removal, 이하 BPR)는 다음과 같은 과정으로 진행됩니다.위 과정은 크게 세 단계로 나눌 수 있습니다.• 인스턴스 분할(instance segmentation)• 입력 이미지 내 각 픽셀이 어떤 객체에 속하는지 식별하는 과정으로, 인스턴스 분할 모델을 활용해 사람이나 건물, 나무 등 다양한 객체를 구분하고 개별적으로 인식합니다.• 주요 객체 탐지(saliency object detection)• 이미지에서 가장 눈에 띄는 주요 객체를 식별하는 과정으로, 주요 객체 탐지 모델을 이용해 시선이 집중되는 영역을 픽셀 단위로 추출함으로써 메인 피사체와 배경 인물을 구분할 수 있습니다.• 인페인팅(inpainting) 수행• 주요 영역에 속하지 않는 배경 인물들이 포함된 영역을 인페인팅 기술을 사용해 자연스럽게 제거하고 복원하는 과정입니다.• 여기서 '인페인팅'이란 이미지의 특정 부분을 삭제한 후 주변 환경과 조화를 이루도록 재구성하는 기술입니다.여기서 마지막 단계인 인페인팅 수행 단계는 배경 인물 제거 결과에 가장 큰 영향을 주는 단계이기 때문에 성능이 좋은 인페인팅 모델을 사용해야 합니다. 최근에는 생성형 이미지 모델을 이용한 인페인팅 기술이 많이 발표되고 있는데요. 인페이팅 기술에 대해서 조금 더 깊이 살펴보겠습니다.인페인팅 기술은 이미지의 특정 영역을 제거하고 그 빈자리를 자연스럽게 채워 넣는 기술입니다. 예를 들어 사진 속 인물이나 물체를 삭제한 후 그 공간을 주변 환경과 조화롭게 재구성해 채워 넣는 작업에 활용할 수 있습니다.인페인팅 모델은 생성형 AI의 한 종류로, 이미지의 결손 부분을 채우는 데 특화된 모델이라고 할 수 있습니다. 접근 방식에 따라서 크게 두 가지 주요 모델 로 나눌 수 있는데요. 디퓨전(diffusion) 계열 모델과 GAN(generative adversarial network) 계열 모델로 나뉩니다.이 두 가지 접근 방식은 각각 고유한 메커니즘과 장점을 가지고 있으며, 이미지 복원 작업에서 서로 다른 방식으로 활용됩니다. 하나씩 간략히 살펴보겠습니다.• 디퓨전 계열 모델• 이미지를 점진적으로 변화시켜 손상된 영역을 복원하는 방법입니다.• 보통 이미지의 노이즈를 제거하거나 점진적으로 이미지를 개선하는 방식으로 작동합니다. 예를 들어 랜덤 노이즈인 초기 상태에서 노이즈를 점차 줄여가며 원본 이미지의 형태를 찾아가는 과정으로 진행됩니다.• 복잡한 이미지의 세부 사항을 자연스럽게 복원하는 데 특히 유리합니다.• 다만, 좋은 결과가 나올 때도 있지만 가끔 이상한 물체가 생성되기도 합니다.• 이미지 생성을 위해 반복적으로 노이즈 제거 과정을 거치기 때문에 일반적으로 GAN 계열 모델에 비해 이미지 생성 속도가 느립니다.• 디퓨전 계열 모델에 대한 보다 자세한 설명은 먼저 발행된 AI로 생성한 이미지는 어떻게 평가할까요? (블랙박스 최적화 적용편)을 참고하시기 바랍니다.• GAN 계열 모델• GAN 모델은 생성자(generator)와 판별자(discriminator)라는 두 개의 신경망이 경쟁하면서 학습하는 구조입니다.• 생성자는 결손된 이미지를 복원하려 시도하고, 판별자는 생성된 이미지가 실제 이미지와 얼마나 유사한지를 평가합니다. 이 과정을 반복하면서 점점 더 정교하고 사실적인 이미지를 생성합니다.저희는 BPR 애플리케이션에 다 음과 같은 다양한 인페인팅 모델을 적용해 봤는데요. 원본 이미지의 해상도가 낮거나 인페인팅해야 하는 영역이 작은 경우에는 대부분의 모델에서 좋은 결과가 나왔지만, 원본 이미지의 해상도가 높고 인페인팅해야 하는 영역이 큰 경우에는 모델에 따라 큰 차이가 발생했습니다.먼저 다음은 어떤 인페인팅 모델을 사용하든 좋은 결과가 나온 경우입니다.* 이미지를 우클릭해서 새로운 탭이나 창에서 열면 이미지를 원본 크기로 확인하실 수 있습니다.다음은 사용한 인페인팅 모델에 따라 결과에 큰 차이가 발생한 경우입니다.* 이미지를 우클릭해서 새로운 탭이나 창에서 열면 이미지를 원본 크기로 확인하실 수 있습니다.위 테스트 결과로 알 수 있듯 사용할 모델을 선정할 때 논문에서 제시하는 성능 지표만 보고 판단하는 것은 어렵습니다. 각 모델이 실제 응용 사례에서 어떤 성능을 보여줄지 명확히 파악하기 어렵기 때문입니다.일반적으로 논문에서는 정해진 해상도(예: 256x256)에서 평가를 진행합니다. 이는 실제 사용 환경과는 다를 수 있습니다. 또한 논문마다 평가에 사용한 인페인팅 영역이 다르며, 대부분 실제로 우리가 직면하는 현장과는 다른 상황에서 평가가 진행됩니다. 게다가 인페인팅은 이미지 생성 모델의 일종이므로 어떤 정답이란 것이 존재하지 않습니다. 다양한 형태로 생성된 이미지 모두가 정답이 될 수 있으며, 이는 평가를 더욱 복잡하게 만듭니다.따라서 모델의 실제 성능을 평가할 때는 다양한 요소를 고려해야 합니다. 논문에 제시된 지표들이 어느 정도 대략적인 성능의 경향을 보여줄 수는 있지만, BPR 작업에서 발현될 정확한 인페인팅 성능을 대변하지는 못합니다. 예를 들어 어떤 테스트에서는 좋은 결과를 보여준 모델이 다른
2025.05.21

좋아요

별로에요

슈퍼브에이아이, 한화시스템즈 AI 챌린지 2년 연속 우승- 적외선 영상 분석 기술력의 비밀
슈퍼브에이아이가 한화시스템즈 AI 챌린지에서 2년 연속 우승했습니다. 적외선 영상의 데이터 부족 문제를 생성형 AI로 해결하여 정확도 13% 향상을 달성했습니다. 방산, 자율주행, 보안 분야에서 적외선 객체 인식의 한계를 극복한 데이터 중심 접근법을 소개합니다.슈퍼브에이아이가 ' '에서 2년 연속 정상에 올랐습니다. 2024년 임은수 연구원의 우승에 이어, 2025년에는 김승현, 고경렬 연구원 팀이 다시 한번 1위를 차지하는 쾌거를 이루었습니다.적외선 카메라에서 사물을 정확하게 탐지하는 AI 모델 개발을 겨루는 이 대회는 단순히 AI의 탐지 정확도뿐 아니라 실제 산업 현장에서 중요한 모델의 추론 속도를 종합적으로 평가합니다. 특히 방산, 자율주행, 보안과 같은 첨단 산업 분야에서 중요시되는 적외선 영상 처리 기술력을 검증하는 자리입니다.연구 성과는 세계적인 로봇 및 자동화 분야 학회인 'IEEE International Conference on Robotics and Automation (ICRA) 2025'의 ' ' 워크숍에서도 발표되었으며, 글로벌 AI 기술력을 인정받는 계기가 되었습니다.적외선(IR) 영상 분석은 왜 어려울까요? 일반 RGB 이미지와 달리 적외선 학습 데이터는 다음과 같은 본질적인 어려움이 있습니다.: 고품질의 적외선 이미지 데이터셋은 매우 제한적이며, 라이센스 제약이 많습니다.• 특수 장비 필요성: 적외선 이미지 촬영을 위해서는 일반 카메라가 아닌 열화상 카메라(써모그래피 카메라)가 필요하며, 이러한 장비는 고가(수백만 원에서 수천만 원)이고 운용 전문성이 요구됩니다.• 제한된 산업 활용: 적외선 영상은 군사/방위, 산업 검사, 의료 진단, 경계/보안 시스템과 같은 특수 산업 분야에서 주로 사용되어 일반 RGB 영상과 달리 대중적인 데이터 확보가 어렵습니다.• 환경적 제약: 적외선 이미지는 기상 조건, 주변 온도, 대상 물체의 열 특성 등에 민감하게 반응하여 일관된 품질의 데이터 확보가 기술적으로 까다롭습니다.• 공개 데이터셋 부족: ImageNet이나 COCO와 같은 RGB 이미지의 대규모 공개 데이터셋과 달리, 적외선 영상의 공개 데이터셋은 규모가 작고 특정 상황(예: 건물 열 손실 분석, 특정 도로 환경)에 제한되어 있습니다.• 보안 및 규제 이슈: 군사 및 보안 분야에서 촬영된 적외선 영상은 기밀 정보로 취급되어 공개나 공유가 엄격히 제한되는 경우가 많습니다.: 클래스 불균형 문제는 데이터 희소성과 결합되어 적외선 영상 분석의 핵심 난제가 됩니다. 충분한 데이터가 있는 RGB 영상에서도 클래스 불균형은 도전적인 문제인데, 데이터 자체가 희소한 적외선 영상에서는 이 문제를 단순히 '더 많은 데이터 수집'으로 해결하기가 현실적으로 불가능합니다.• 보편적 불균형 현상: 일반적으로 '사람'이나 '자동차'와 같이 흔한 객체는 충분한 데이터가 있지만, '트럭', '자전거', '특수 차량' 등 상대적으로 드문 객체의 데이터는 현저히 부족합니다.• 적외선 영상에서의 특수성: 적외선 영상에서는 불균형이 더욱 극심합니다. 예
5/21/2025

슈퍼브에이아이, 한화시스템즈 AI 챌린지 2년 연속 우승- 적외선 영상 분석 기술력의 비밀
슈퍼브에이아이가 한화시스템즈 AI 챌린지에서 2년 연속 우승했습니다. 적외선 영상의 데이터 부족 문제를 생성형 AI로 해결하여 정확도 13% 향상을 달성했습니다. 방산, 자율주행, 보안 분야에서 적외선 객체 인식의 한계를 극복한 데이터 중심 접근법을 소개합니다.슈퍼브에이아이가 ' '에서 2년 연속 정상에 올랐습니다. 2024년 임은수 연구원의 우승에 이어, 2025년에는 김승현, 고경렬 연구원 팀이 다시 한번 1위를 차지하는 쾌거를 이루었습니다.적외선 카메라에서 사물을 정확하게 탐지하는 AI 모델 개발을 겨루는 이 대회는 단순히 AI의 탐지 정확도뿐 아니라 실제 산업 현장에서 중요한 모델의 추론 속도를 종합적으로 평가합니다. 특히 방산, 자율주행, 보안과 같은 첨단 산업 분야에서 중요시되는 적외선 영상 처리 기술력을 검증하는 자리입니다.연구 성과는 세계적인 로봇 및 자동화 분야 학회인 'IEEE International Conference on Robotics and Automation (ICRA) 2025'의 ' ' 워크숍에서도 발표되었으며, 글로벌 AI 기술력을 인정받는 계기가 되었습니다.적외선(IR) 영상 분석은 왜 어려울까요? 일반 RGB 이미지와 달리 적외선 학습 데이터는 다음과 같은 본질적인 어려움이 있습니다.: 고품질의 적외선 이미지 데이터셋은 매우 제한적이며, 라이센스 제약이 많습니다.• 특수 장비 필요성: 적외선 이미지 촬영을 위해서는 일반 카메라가 아닌 열화상 카메라(써모그래피 카메라)가 필요하며, 이러한 장비는 고가(수백만 원에서 수천만 원)이고 운용 전문성이 요구됩니다.• 제한된 산업 활용: 적외선 영상은 군사/방위, 산업 검사, 의료 진단, 경계/보안 시스템과 같은 특수 산업 분야에서 주로 사용되어 일반 RGB 영상과 달리 대중적인 데이터 확보가 어렵습니다.• 환경적 제약: 적외선 이미지는 기상 조건, 주변 온도, 대상 물체의 열 특성 등에 민감하게 반응하여 일관된 품질의 데이터 확보가 기술적으로 까다롭습니다.• 공개 데이터셋 부족: ImageNet이나 COCO와 같은 RGB 이미지의 대규모 공개 데이터셋과 달리, 적외선 영상의 공개 데이터셋은 규모가 작고 특정 상황(예: 건물 열 손실 분석, 특정 도로 환경)에 제한되어 있습니다.• 보안 및 규제 이슈: 군사 및 보안 분야에서 촬영된 적외선 영상은 기밀 정보로 취급되어 공개나 공유가 엄격히 제한되는 경우가 많습니다.: 클래스 불균형 문제는 데이터 희소성과 결합되어 적외선 영상 분석의 핵심 난제가 됩니다. 충분한 데이터가 있는 RGB 영상에서도 클래스 불균형은 도전적인 문제인데, 데이터 자체가 희소한 적외선 영상에서는 이 문제를 단순히 '더 많은 데이터 수집'으로 해결하기가 현실적으로 불가능합니다.• 보편적 불균형 현상: 일반적으로 '사람'이나 '자동차'와 같이 흔한 객체는 충분한 데이터가 있지만, '트럭', '자전거', '특수 차량' 등 상대적으로 드문 객체의 데이터는 현저히 부족합니다.• 적외선 영상에서의 특수성: 적외선 영상에서는 불균형이 더욱 극심합니다. 예
2025.05.21

좋아요

별로에요

왓챠파티@무비랜드: 팀 크리에이티브
낯설지만 의미 있는 선택, 〈퀸 크랩〉과 〈후 아 유〉로 본 왓챠의 감각 Part 2왓챠파티@무비랜드 회고 두 번째 편입니다. 이번 편에서는 낯설지만 그래서 더 특별했던 기획 아이디어와 왓챠팀의 비주얼 역량이 유난히 빛났던 두 개의 테마를 소개합니다. 왓챠와의 만남이 ‘운명’처럼 느껴졌던 〈퀸 크랩〉은 제인이, 가장 오랜 시간 준비해 다각적인 기획이 빛을 발한 〈후 아 유〉는 세로가 글을 맡았습니다. 이 두 테마를 통해 왓챠팀의 감각과 실행력이 어떻게 오프라인 파티로 구현되었는지 이야기해 볼게요.왓챠파티@무비랜드 프로젝트를 진행하면서 돌을 주문해 ‘눈알 스티커’를 붙이는가 하면, 폐조명과 연출할 ‘설탕 유리’를 만들기도 했는데요. 도움이 되는 일이라면, 모두가 자진해서 작은 것 하나라도 도전해 보곤 했습니다. 결과물을 만들기 위해 다양한 방법을 동원했고, 팀의 시너지를 가장 큰 원동력 삼아 때로는 우리가 판 무덤이다 탄식하면서도, 그 고통스러운 방식으로도 창작을 멈추지 않았습니다. 그중에서도 팀원들의 활발한 상상력과 실행력으로 완성된 6월의 테마, 〈퀸 크랩〉을 먼저 소개해 볼게요.1회차 〈에브리씽 에브리웨어 올 앳 원스〉 돌과 2회차 〈트루먼 쇼〉 무대조명은 무비랜드에 기증되었다.-영화를 보는 취향은 다양하다. 세상이 몰라줘도, 때로는 용기 내어 용감하게 추천하고 싶은 영화가 있다. 가끔은 이야기가 허무맹랑하고 무모할수록 만족스럽다. 조금이라도 그런 마이너 한 취향을 가지고 있다면, 당신의 DNA 깊숙한 곳에는 B의 의지가 흐르고 있다! B 필름은 용기(BRAVE) 있게 도전하고, 상식을 깨는(BREAK) 사람의 향유물. 〈퀸 크랩〉이 당신에게 B의 의지를 이어받을 수 있는 등용문이자 시험대가 되기를! — 〈퀸 크랩〉 테마 소개 중6월, B필름 좋아하세요? 〈퀸 크랩〉2022년 연말, 온라인을 뜨겁게 달군 ‘게’가 있었습니다. 왓챠 유저들의 입소문을 타고 바이럴이 된 영화 〈퀸 크랩〉. 왓챠도 조금 늦게 발견한 것이 아쉬울 만큼, 화제가 되었던 작품입니다. 해당 콘텐츠는 서비스 종료 직전, 왓챠 스트리밍 실시간 순위 1위를 기록하며 큰 주목을 받았고, 유저들의 요청에 힘입어 다시 왓챠에서 감상할 수 있게 되었어요. 유저들이 기억하는 이 대단한 ‘게’는 에너지 넘치는 6월의 테마로 더없이 어울리는 콘텐츠였습니다.왓챠와의 인연도 특별했지만, 영화 자체가 가진 매력 역시 강렬합니다. 〈퀸 크랩〉은 모두가 아는 유명한 작품은 아니었지만, 한 번 보면 절대적인 재미를 선사하는 B 필름의 전형이자, 왓챠 유저들이 특히 애정하는 장르이기도 했습니다. 이런 남다른 콘텐츠로 오프라인 파티를 구현해 보고 싶다는 바람은 팀 내에서 오래전부터 있었고, 〈퀸 크랩〉은 그 바람을 실현해 줄 완벽한 선택이었죠. 다양한 취향과 장르를 아우르는 사람들이 모여 있는 곳, 왓챠이기에 가능했던 기획이기도 했습니다.왓챠 비디오 가게 운영합니다!우리는 〈퀸 크랩〉을 둘러싼 상상력을 하나의 설정으로 구체화했습니다. “이 영화를 빌릴 수 있는 가상의 비디오 가게가 있다면 어떨까
5/20/2025

왓챠파티@무비랜드: 팀 크리에이티브
낯설지만 의미 있는 선택, 〈퀸 크랩〉과 〈후 아 유〉로 본 왓챠의 감각 Part 2왓챠파티@무비랜드 회고 두 번째 편입니다. 이번 편에서는 낯설지만 그래서 더 특별했던 기획 아이디어와 왓챠팀의 비주얼 역량이 유난히 빛났던 두 개의 테마를 소개합니다. 왓챠와의 만남이 ‘운명’처럼 느껴졌던 〈퀸 크랩〉은 제인이, 가장 오랜 시간 준비해 다각적인 기획이 빛을 발한 〈후 아 유〉는 세로가 글을 맡았습니다. 이 두 테마를 통해 왓챠팀의 감각과 실행력이 어떻게 오프라인 파티로 구현되었는지 이야기해 볼게요.왓챠파티@무비랜드 프로젝트를 진행하면서 돌을 주문해 ‘눈알 스티커’를 붙이는가 하면, 폐조명과 연출할 ‘설탕 유리’를 만들기도 했는데요. 도움이 되는 일이라면, 모두가 자진해서 작은 것 하나라도 도전해 보곤 했습니다. 결과물을 만들기 위해 다양한 방법을 동원했고, 팀의 시너지를 가장 큰 원동력 삼아 때로는 우리가 판 무덤이다 탄식하면서도, 그 고통스러운 방식으로도 창작을 멈추지 않았습니다. 그중에서도 팀원들의 활발한 상상력과 실행력으로 완성된 6월의 테마, 〈퀸 크랩〉을 먼저 소개해 볼게요.1회차 〈에브리씽 에브리웨어 올 앳 원스〉 돌과 2회차 〈트루먼 쇼〉 무대조명은 무비랜드에 기증되었다.-영화를 보는 취향은 다양하다. 세상이 몰라줘도, 때로는 용기 내어 용감하게 추천하고 싶은 영화가 있다. 가끔은 이야기가 허무맹랑하고 무모할수록 만족스럽다. 조금이라도 그런 마이너 한 취향을 가지고 있다면, 당신의 DNA 깊숙한 곳에는 B의 의지가 흐르고 있다! B 필름은 용기(BRAVE) 있게 도전하고, 상식을 깨는(BREAK) 사람의 향유물. 〈퀸 크랩〉이 당신에게 B의 의지를 이어받을 수 있는 등용문이자 시험대가 되기를! — 〈퀸 크랩〉 테마 소개 중6월, B필름 좋아하세요? 〈퀸 크랩〉2022년 연말, 온라인을 뜨겁게 달군 ‘게’가 있었습니다. 왓챠 유저들의 입소문을 타고 바이럴이 된 영화 〈퀸 크랩〉. 왓챠도 조금 늦게 발견한 것이 아쉬울 만큼, 화제가 되었던 작품입니다. 해당 콘텐츠는 서비스 종료 직전, 왓챠 스트리밍 실시간 순위 1위를 기록하며 큰 주목을 받았고, 유저들의 요청에 힘입어 다시 왓챠에서 감상할 수 있게 되었어요. 유저들이 기억하는 이 대단한 ‘게’는 에너지 넘치는 6월의 테마로 더없이 어울리는 콘텐츠였습니다.왓챠와의 인연도 특별했지만, 영화 자체가 가진 매력 역시 강렬합니다. 〈퀸 크랩〉은 모두가 아는 유명한 작품은 아니었지만, 한 번 보면 절대적인 재미를 선사하는 B 필름의 전형이자, 왓챠 유저들이 특히 애정하는 장르이기도 했습니다. 이런 남다른 콘텐츠로 오프라인 파티를 구현해 보고 싶다는 바람은 팀 내에서 오래전부터 있었고, 〈퀸 크랩〉은 그 바람을 실현해 줄 완벽한 선택이었죠. 다양한 취향과 장르를 아우르는 사람들이 모여 있는 곳, 왓챠이기에 가능했던 기획이기도 했습니다.왓챠 비디오 가게 운영합니다!우리는 〈퀸 크랩〉을 둘러싼 상상력을 하나의 설정으로 구체화했습니다. “이 영화를 빌릴 수 있는 가상의 비디오 가게가 있다면 어떨까
2025.05.20

좋아요

별로에요

쉽게이해하는 GPT. 2편(어떻게 GPT는 Chat을 하는가, instruct모델)
지난번 포스팅을 통해서, GPT의 구조가 대략적으로 어떻게 생겼고해당하는 구조를 통해서 다음단어 예측기(Decoder Only Transformer)가 대략적으로 어떻게 동작하는지 확인했습니다.이번 포스팅에서는 해당하는 다음단어 예측기를 통해서어떻게 GPT가 이 가능한지 알아봅니다.GPT는 이 주어졌을 때, 앞에있던 단어들을 가지고 다음에 올 단어을 예측합니다.이러한 문장의 경우 대부분 위키피디아 등에 존재하는 문서 형태이기 때문에인터넷의 수많은 문서를 학습한 상태의 LLM에게(이를 상태라고 합니다)라고 물어본다면이처럼 정상적이지 못한 다음단어만 예측을 하면서, LLM이 예상치 못한 결과만을 줄 뿐 입니다.이때 조금 책과 비슷한 형태의 텍스트를 입력하면, 아래와 같이 됩니다.서울의 날씨는 맑음. 부산은 아래지방 이므로이처럼 GPT는 Text를 받고, 해당하는 Text의 다음 단어를 예측할 뿐입니다.때문에 이런 GPT한테 어떻게 유저와 을 할지를 알려줘야하고이 과정을 이라고 합니다.이제 유저와의 이 가능하게 만드는 의 일종입니다.LLM의 경우 문장을 집어넣으면, 해당 문장 다음에 올 단어를 예측했었죠?이점을 동일하게 이용 합니다.일단 설명에 앞서, ChatGPT가 받아들이는 문자가 어떤 형태인지 볼 필요가 있습니다.유저가 chatGPT한테 너의 이름은 뭐야? 라고 입력할 경우아래와 같은 형태로 입력이 됩니다.우리는 단순하게 너의 이름은 뭐야? 라고 입력했다고 생각하지만실제로는 , 과 같은 특수 문자들이 삽입되어 있는 것을 확인할 수 있습니다.해당 문자들의 경우 과정에서 chatGPT가 학습을 했고,첫 다음에는 이라는 글자가 나와야하고, 그 다음은 이 나오게 학습된것 이라고 볼 수가 있습니다.그럼 도대체 어떻게 학습했길래 이게 가능 했을까요?ChatGPT의 instruction tuning 과정을 알 수는 없지만llama를 가지고 Alpaca를 만든 과정이 완벽하게 오픈소스로 공개되어서,어떤 과정으로 학습을 했을지 대략적으로 추측을 할 수가 있습니다.Alpaca의 경우, Meta의 llama를 사용해서 이 가능하게 만든 오픈소스 모델 입니다.Alpaca가 단순한 를 어떻게 이 가능하게 했는지는, 아래 형태를 통해서 알 수 있습니다.학습에 사용된 실제 데이터 입니다.보면 알 수 있듯, 때와는 다르게 세트로 구성되어있는것을 확인할 수 있습니다.이런 수많은 데이터를 학습한 이후에Alpaca와 Chat을 하기 위해서는 아래와같이 text를 만들 뒤 다음 단어를 예측하게 만들면 됩니다.상태의 LLM의 경우 평문에 대한 다음 단어 예측만 학습했기 때문에 Chat이란게 불가하지만위처럼 instrunction과 input이 주어지고, 그 다음 다음에는 어떤 식으로 단어를 예측 해야할지를 과정에서 배웠기 때문에단순한 다음단어 예측기 상태에서, Chat이 가능한 LLM으로서 활용이 가능하게 됩니다.huggingface에서 상태의 모델을 이라고 하고, 이 완료된 모델은 로 표기되는것을 볼 수 있습니다.이제 ChatGPT로 돌아가 볼까요?형태로 유저의 질문이 ChatGPT한테 입력되고, 그 뒷부분에 올 단어를 예측하게 되어있습니다.그러므로, ChatGPT의 경우 아래형태의 데이터를 사용해서 instruction tuning을 진행했을 것이란걸 예상해 볼 수 있습니다.
5/20/2025

쉽게이해하는 GPT. 2편(어떻게 GPT는 Chat을 하는가, instruct모델)
지난번 포스팅을 통해서, GPT의 구조가 대략적으로 어떻게 생겼고해당하는 구조를 통해서 다음단어 예측기(Decoder Only Transformer)가 대략적으로 어떻게 동작하는지 확인했습니다.이번 포스팅에서는 해당하는 다음단어 예측기를 통해서어떻게 GPT가 이 가능한지 알아봅니다.GPT는 이 주어졌을 때, 앞에있던 단어들을 가지고 다음에 올 단어을 예측합니다.이러한 문장의 경우 대부분 위키피디아 등에 존재하는 문서 형태이기 때문에인터넷의 수많은 문서를 학습한 상태의 LLM에게(이를 상태라고 합니다)라고 물어본다면이처럼 정상적이지 못한 다음단어만 예측을 하면서, LLM이 예상치 못한 결과만을 줄 뿐 입니다.이때 조금 책과 비슷한 형태의 텍스트를 입력하면, 아래와 같이 됩니다.서울의 날씨는 맑음. 부산은 아래지방 이므로이처럼 GPT는 Text를 받고, 해당하는 Text의 다음 단어를 예측할 뿐입니다.때문에 이런 GPT한테 어떻게 유저와 을 할지를 알려줘야하고이 과정을 이라고 합니다.이제 유저와의 이 가능하게 만드는 의 일종입니다.LLM의 경우 문장을 집어넣으면, 해당 문장 다음에 올 단어를 예측했었죠?이점을 동일하게 이용 합니다.일단 설명에 앞서, ChatGPT가 받아들이는 문자가 어떤 형태인지 볼 필요가 있습니다.유저가 chatGPT한테 너의 이름은 뭐야? 라고 입력할 경우아래와 같은 형태로 입력이 됩니다.우리는 단순하게 너의 이름은 뭐야? 라고 입력했다고 생각하지만실제로는 , 과 같은 특수 문자들이 삽입되어 있는 것을 확인할 수 있습니다.해당 문자들의 경우 과정에서 chatGPT가 학습을 했고,첫 다음에는 이라는 글자가 나와야하고, 그 다음은 이 나오게 학습된것 이라고 볼 수가 있습니다.그럼 도대체 어떻게 학습했길래 이게 가능 했을까요?ChatGPT의 instruction tuning 과정을 알 수는 없지만llama를 가지고 Alpaca를 만든 과정이 완벽하게 오픈소스로 공개되어서,어떤 과정으로 학습을 했을지 대략적으로 추측을 할 수가 있습니다.Alpaca의 경우, Meta의 llama를 사용해서 이 가능하게 만든 오픈소스 모델 입니다.Alpaca가 단순한 를 어떻게 이 가능하게 했는지는, 아래 형태를 통해서 알 수 있습니다.학습에 사용된 실제 데이터 입니다.보면 알 수 있듯, 때와는 다르게 세트로 구성되어있는것을 확인할 수 있습니다.이런 수많은 데이터를 학습한 이후에Alpaca와 Chat을 하기 위해서는 아래와같이 text를 만들 뒤 다음 단어를 예측하게 만들면 됩니다.상태의 LLM의 경우 평문에 대한 다음 단어 예측만 학습했기 때문에 Chat이란게 불가하지만위처럼 instrunction과 input이 주어지고, 그 다음 다음에는 어떤 식으로 단어를 예측 해야할지를 과정에서 배웠기 때문에단순한 다음단어 예측기 상태에서, Chat이 가능한 LLM으로서 활용이 가능하게 됩니다.huggingface에서 상태의 모델을 이라고 하고, 이 완료된 모델은 로 표기되는것을 볼 수 있습니다.이제 ChatGPT로 돌아가 볼까요?형태로 유저의 질문이 ChatGPT한테 입력되고, 그 뒷부분에 올 단어를 예측하게 되어있습니다.그러므로, ChatGPT의 경우 아래형태의 데이터를 사용해서 instruction tuning을 진행했을 것이란걸 예상해 볼 수 있습니다.
2025.05.20

좋아요

별로에요

일일 Tech News & Blog (25.05.20)
Bloter 애플 최대 협력업체 폭스콘, 인도 생산 확대 추진 2조원 투자
5/20/2025

일일 Tech News & Blog (25.05.20)
Bloter 애플 최대 협력업체 폭스콘, 인도 생산 확대 추진 2조원 투자
2025.05.20

좋아요

별로에요

지적 호기심이 이끄는 커리어 여정 | 콴다 Legal Division Head
단순한 법률 검토를 넘어, 빠르게 변화하는 비즈니스 환경 속에서 실질적인 해결책을 제시하는 법무팀은 어떤 모습일까요?실제 콴다 팀에서 그 역할을 수행하고 있는 구성원, Kilian의 인터뷰 내용을 통해 법무 전문가로서의 커리어 여정, 업무에 대한 철학, 그리고 콴다에서의 일하는 방식에 대한 생생한 이야기를 전해드립니다.사람들은 어디까지 자신의 인생을 계획하고 꾸려갈 수 있을까요. LA다저스의 슈퍼스타 오타니는 고등학교 1학년 때 만다라트를 만들어서 실천한 것으로 아직도 회자되고 있다면, 다른 쪽에는 수많은 도전과 경험을 통해 귀납적으로 스스로를 깨달아 나가는 사람들도 있습니다. 하루하루는 성실하게, 인생 전체는 되는 대로 사는 것이, 어쩌면 불확실성이 점점 커지고, 점점 빠르게 변하고 있는 지금의 시기를 현명하게 나는 방법이 아닐까요.국내 최대 로펌의 변호사에서 AI 교육 스타트업의 법무팀장으로 커리어를 전환한 변호사님의 여정은 급변하는 시대에 전문가가 어떻게 자신의 역할을 재정의하는지 보여줍니다. 법무팀을 단순히 안된다 고 말하는 부서가 아닌, 혁신을 가능하게 하는 파트너로 만들어가는 팀장님의 이야기는 법조계를 꿈꾸는 이들뿐 아니라, 조직 내 전문가 역할의 변화를 고민하는 사람들에게 해당될 수 있습니다.변호사의 삶은 성공적인 커리어와 개인적 만족 사이에서 균형을 찾는 과정이기도 합니다. 오동훈 팀장님은 소속감과 일의 의미, 전문성과 다양성, 그리고 스트레스와 책임감 사이의 균형점을 찾아가는 과정을 솔직하게 들려주셨습니다. 사내 변호사가 어떻게 일하는지에 대한 소개를 넘어, 변화하는 세상에서 전문가로서 의미 있는 커리어를 설계하는 데 도움이 되었으면 합니다.콴다의 글로벌 사업을 든든히 받치는 법무팀Q. 콴다라는 회사와, 법무팀장으로서의 역할에 대해 소개해 주세요.콴다라는 서비스로 잘 알려진 콴다 팀의 법무팀장으로 일하고 있습니다. 콴다 팀은 AI 기반 문제 풀이 검색 서비스인 콴다, 콴다 태블릿 앱을 통해 화상수업을 진행하는 콴다과외 등 다양한 서비스를 여러 국가에서 제공하고 있습니다.콴다의 법무팀은 지금은 저와 다른 변호사님 한 분, 2인 체제로 일하고 있습니다. 한국 본사에 100명 정도의 직원이 있고, 약 800만 MAU 정도의 글로벌 서비스를 두 명의 변호사가 관리하다 보니 업무량이 많은 편이기는 합니다. 새로운 기능 추가, 결제 방식 변경, 약관, 전자상거래, 저작권, 개인정보 등 모든 것들이 각 국가에 맞게 맞춤화가 되어야 해서 품이 많이 들기는 하죠.김앤장에서 스타트업으로: 변화라는 하나의 큰 줄기Q. 김앤장을 포함하여 두 개의 로펌을 더 거쳐 콴다에 합류하시게 되셨습니다. 콴다에 합류하시게 된 계기가 궁금합니다.군법무관 시절에 어떤 직역을 택할지에 대한 고민을 많이 했습니다. 당시 이코노미스트 라는 주간지를 구독하며 블록체인, AI, 자율주행, 유전자편집 같은 기술 트렌드를 접했어요. 세상이 이렇게 빨리 변하는데, 수백 년 전부터 존재해왔던 판사, 검사와 같은 직업을 택해 10 20년 정도 일하다 보면 세상이 얼마나 변해 있을까? 내가 그 변화된 세상에 적응할 수 있을까? 라는 생각이 들었습니다.그래서 그나마 다른 조직에 비해 변화에 좀 더 가까이 있다고 생각되는 것이 로펌이었고, 그 중에서도 김앤장을 선택하게 됐습니다. 김앤장에서 근무하는 선배들을 통해서 당시 핀테크 와 같은 새로 출현한 기존의 규제 에서 예상하지 못했던 기술의 등장으로 인해 의뢰인들이 느끼는 어려움들을 해결해 주는 것의 보람에 대해 듣게 되었어요.김앤장에서 근무하면서 장점도 많고 보람도 많이 느꼈습니다. 김앤장은 매우 큰 조직이지만 또 매우 수평적이고, 탈권위적이기도 합니다. 연차 높은 변호사님의 의견대로 방향이 정해지는 게 아니라 가장 합리적인 의견에 따라 방향이 정해지죠.그럼에도 불구하고 김앤장 소속 이라는 소속감으로는 가질 수 없는, 의뢰인 의 일을 대리인 으로서 하는 구조적 특성 속에서 완전한 소속감 을 가지고 일하고 싶다는 갈증이 있었습니다. 그러다가 또래의 지인들이 설립한 청출에 합류하게 되었습니다. 청출에서의 여정은 매우 즐겁고 행복했습니다. 또래 친구들과 머리를 맞대고 문제들을 해결해 나가고, 과거에 비해 많이 힘들어진 법률시장 속에서 어떻게 생존할 것인가에 대해 고민하는 건 정말 어렵고 힘들기도 하지만 즐겁기도 했어요.법무법인 청출에서 근무 중일 때의 프로필 사진(좌)와 현재 일상 생활에서의 사진(우)그러다가 김앤장에서 알고 지내던 선배께서 연락이 왔습니다. 그분이 콴다 법무팀장으로서 제 전임자이신데요, 이 포지션을 이어받을 생각이 없냐고 하셨죠. 그 당시 업무를 하며, ChatGPT를 꽤 쓰고 있었던 시절이었고, 청출 회사 홈페이지도 제가 워드프레스 라는 툴을 공부해서 디자인도 바꿔보고, 새로운 기능도 추가해보는 등 한창 tech에도 관심이 많을 때였습니다. 콴다라는 곳이 우리나라에서도 활발히 시장을 개척해 나가고 있음과 동시에 여러 나라에 진출해 있는 상황이라는 점에서 큰 매력을 느꼈습니다. 꼭 구성원이 되어 저 배를 함께 타보고 싶다는 강한 이끌림을 느껴서 오게 된 것 같네요.전임자와 콴다에서 함께 찍은 스냅 사진, 조금 더 부드러워진 분위기를 느낄 수 있다Q. 김앤장과 청출에서 맡으셨던 기업 법무에 대한 전문성이 콴다에서는 어떻게 도움이 되시나요?태도의 측면에서는 큰 도움이 됩니다. 지식의 측면에서는 한계가 있고요. 콴다에서는 정말 다양한 영역에 대해 접하게 됩니다. 개인정보, 약관, 전자상거래, 학원법, 조세 등등 정말 많은 영역을 접하는 것이 콴다 업무의 특징입니다.변호사라는 업무가 지식을 쌓고 나서 그 지식을 계속 써먹는 직업은 아니라고 생각해요. 결론을 찾아나가는 훌륭한 방법을 체화해 나가는 직업이라고 생각합니다. 변호사의 업무는 매 이슈, 케이스마다 항상 다르다는 점이 큰 특징이라고 생각합니다. 추상적으로 볼 때는 같은 질문인 것 같다고 해도 사실관계, 배경이 다르면 다른 질문이 될 수 있죠. 답도 달라질 수 있고요. 그러다 보니 매 이슈마다 처음부터 공부한다는 생각으로 관련 법령과 법리를 연구하고 지금 상황에 적용해 보려는 자세가 요구된다고 생각해요.
5/20/2025

지적 호기심이 이끄는 커리어 여정 | 콴다 Legal Division Head
단순한 법률 검토를 넘어, 빠르게 변화하는 비즈니스 환경 속에서 실질적인 해결책을 제시하는 법무팀은 어떤 모습일까요?실제 콴다 팀에서 그 역할을 수행하고 있는 구성원, Kilian의 인터뷰 내용을 통해 법무 전문가로서의 커리어 여정, 업무에 대한 철학, 그리고 콴다에서의 일하는 방식에 대한 생생한 이야기를 전해드립니다.사람들은 어디까지 자신의 인생을 계획하고 꾸려갈 수 있을까요. LA다저스의 슈퍼스타 오타니는 고등학교 1학년 때 만다라트를 만들어서 실천한 것으로 아직도 회자되고 있다면, 다른 쪽에는 수많은 도전과 경험을 통해 귀납적으로 스스로를 깨달아 나가는 사람들도 있습니다. 하루하루는 성실하게, 인생 전체는 되는 대로 사는 것이, 어쩌면 불확실성이 점점 커지고, 점점 빠르게 변하고 있는 지금의 시기를 현명하게 나는 방법이 아닐까요.국내 최대 로펌의 변호사에서 AI 교육 스타트업의 법무팀장으로 커리어를 전환한 변호사님의 여정은 급변하는 시대에 전문가가 어떻게 자신의 역할을 재정의하는지 보여줍니다. 법무팀을 단순히 안된다 고 말하는 부서가 아닌, 혁신을 가능하게 하는 파트너로 만들어가는 팀장님의 이야기는 법조계를 꿈꾸는 이들뿐 아니라, 조직 내 전문가 역할의 변화를 고민하는 사람들에게 해당될 수 있습니다.변호사의 삶은 성공적인 커리어와 개인적 만족 사이에서 균형을 찾는 과정이기도 합니다. 오동훈 팀장님은 소속감과 일의 의미, 전문성과 다양성, 그리고 스트레스와 책임감 사이의 균형점을 찾아가는 과정을 솔직하게 들려주셨습니다. 사내 변호사가 어떻게 일하는지에 대한 소개를 넘어, 변화하는 세상에서 전문가로서 의미 있는 커리어를 설계하는 데 도움이 되었으면 합니다.콴다의 글로벌 사업을 든든히 받치는 법무팀Q. 콴다라는 회사와, 법무팀장으로서의 역할에 대해 소개해 주세요.콴다라는 서비스로 잘 알려진 콴다 팀의 법무팀장으로 일하고 있습니다. 콴다 팀은 AI 기반 문제 풀이 검색 서비스인 콴다, 콴다 태블릿 앱을 통해 화상수업을 진행하는 콴다과외 등 다양한 서비스를 여러 국가에서 제공하고 있습니다.콴다의 법무팀은 지금은 저와 다른 변호사님 한 분, 2인 체제로 일하고 있습니다. 한국 본사에 100명 정도의 직원이 있고, 약 800만 MAU 정도의 글로벌 서비스를 두 명의 변호사가 관리하다 보니 업무량이 많은 편이기는 합니다. 새로운 기능 추가, 결제 방식 변경, 약관, 전자상거래, 저작권, 개인정보 등 모든 것들이 각 국가에 맞게 맞춤화가 되어야 해서 품이 많이 들기는 하죠.김앤장에서 스타트업으로: 변화라는 하나의 큰 줄기Q. 김앤장을 포함하여 두 개의 로펌을 더 거쳐 콴다에 합류하시게 되셨습니다. 콴다에 합류하시게 된 계기가 궁금합니다.군법무관 시절에 어떤 직역을 택할지에 대한 고민을 많이 했습니다. 당시 이코노미스트 라는 주간지를 구독하며 블록체인, AI, 자율주행, 유전자편집 같은 기술 트렌드를 접했어요. 세상이 이렇게 빨리 변하는데, 수백 년 전부터 존재해왔던 판사, 검사와 같은 직업을 택해 10 20년 정도 일하다 보면 세상이 얼마나 변해 있을까? 내가 그 변화된 세상에 적응할 수 있을까? 라는 생각이 들었습니다.그래서 그나마 다른 조직에 비해 변화에 좀 더 가까이 있다고 생각되는 것이 로펌이었고, 그 중에서도 김앤장을 선택하게 됐습니다. 김앤장에서 근무하는 선배들을 통해서 당시 핀테크 와 같은 새로 출현한 기존의 규제 에서 예상하지 못했던 기술의 등장으로 인해 의뢰인들이 느끼는 어려움들을 해결해 주는 것의 보람에 대해 듣게 되었어요.김앤장에서 근무하면서 장점도 많고 보람도 많이 느꼈습니다. 김앤장은 매우 큰 조직이지만 또 매우 수평적이고, 탈권위적이기도 합니다. 연차 높은 변호사님의 의견대로 방향이 정해지는 게 아니라 가장 합리적인 의견에 따라 방향이 정해지죠.그럼에도 불구하고 김앤장 소속 이라는 소속감으로는 가질 수 없는, 의뢰인 의 일을 대리인 으로서 하는 구조적 특성 속에서 완전한 소속감 을 가지고 일하고 싶다는 갈증이 있었습니다. 그러다가 또래의 지인들이 설립한 청출에 합류하게 되었습니다. 청출에서의 여정은 매우 즐겁고 행복했습니다. 또래 친구들과 머리를 맞대고 문제들을 해결해 나가고, 과거에 비해 많이 힘들어진 법률시장 속에서 어떻게 생존할 것인가에 대해 고민하는 건 정말 어렵고 힘들기도 하지만 즐겁기도 했어요.법무법인 청출에서 근무 중일 때의 프로필 사진(좌)와 현재 일상 생활에서의 사진(우)그러다가 김앤장에서 알고 지내던 선배께서 연락이 왔습니다. 그분이 콴다 법무팀장으로서 제 전임자이신데요, 이 포지션을 이어받을 생각이 없냐고 하셨죠. 그 당시 업무를 하며, ChatGPT를 꽤 쓰고 있었던 시절이었고, 청출 회사 홈페이지도 제가 워드프레스 라는 툴을 공부해서 디자인도 바꿔보고, 새로운 기능도 추가해보는 등 한창 tech에도 관심이 많을 때였습니다. 콴다라는 곳이 우리나라에서도 활발히 시장을 개척해 나가고 있음과 동시에 여러 나라에 진출해 있는 상황이라는 점에서 큰 매력을 느꼈습니다. 꼭 구성원이 되어 저 배를 함께 타보고 싶다는 강한 이끌림을 느껴서 오게 된 것 같네요.전임자와 콴다에서 함께 찍은 스냅 사진, 조금 더 부드러워진 분위기를 느낄 수 있다Q. 김앤장과 청출에서 맡으셨던 기업 법무에 대한 전문성이 콴다에서는 어떻게 도움이 되시나요?태도의 측면에서는 큰 도움이 됩니다. 지식의 측면에서는 한계가 있고요. 콴다에서는 정말 다양한 영역에 대해 접하게 됩니다. 개인정보, 약관, 전자상거래, 학원법, 조세 등등 정말 많은 영역을 접하는 것이 콴다 업무의 특징입니다.변호사라는 업무가 지식을 쌓고 나서 그 지식을 계속 써먹는 직업은 아니라고 생각해요. 결론을 찾아나가는 훌륭한 방법을 체화해 나가는 직업이라고 생각합니다. 변호사의 업무는 매 이슈, 케이스마다 항상 다르다는 점이 큰 특징이라고 생각합니다. 추상적으로 볼 때는 같은 질문인 것 같다고 해도 사실관계, 배경이 다르면 다른 질문이 될 수 있죠. 답도 달라질 수 있고요. 그러다 보니 매 이슈마다 처음부터 공부한다는 생각으로 관련 법령과 법리를 연구하고 지금 상황에 적용해 보려는 자세가 요구된다고 생각해요.
2025.05.20

좋아요

별로에요

Raft 알고리즘을 이용해 고가용 프로그램을 만들어보자!!
검색인프라팀은 분산 시스템 구축과 운영에 대한 다양한 경험을 쌓아왔습니다.이전에는 SaaS형 Redis 클러스터 제공 서비스(RC)와 MinIO 및 Kubernetes를 활용한 사내 스토리지 서비스 구축 경험을 공유한 바 있습니다.이번에는 분산 시스템의 핵심 과제 중 하나인 ‘합의(Consensus)’ 문제를 해결하는 Raft 알고리즘과, 이를 활용한 고가용성 우선순위 큐 구현을 통해 실제 적용 방법을 살펴보고자 합니다.검색인프라팀의 주요 업무는 데이터 수집, 가공, 연동, 서비스 개발이며, 이 과정에서 데이터의 일관성과 고가용성을 보장하는 것은 필수적이지만 매우 까다로운 과제입니다.특히, 네트워크를 통해 수많은 데이터가 실시간으로 입·출력되고,마이크로서비스 아키텍처 기반의 여러 노드가 유기적으로 연결된 환경에서는 노드 장애가 발생하더라도 서비스가 중단되지 않고, 데이터 일관성을 유지하는 것이 핵심입니다.이러한 배경에서 Raft 알고리즘을 팀내 어플리케이션에 도입한 경험을 공유하고자 이 글을 작성하게 되었습니다.이번 글에서는 자바 기반 Raft 구현체인 sofa-jraft 라이브러리를 활용해 3노드 환경에서 운영되는 고가용성 우선순위 큐를 구현하고, 이를 통해 Raft 알고리즘의 개념과 실전 적용 방안을 살펴보겠습니다.분산 시스템과 합의 알고리즘의 필요성분산 시스템은 여러 개의 독립적인 컴퓨터가 네트워크를 통해 통신하며 하나의 시스템처럼 작동하는 구조를 말합니다.이러한 시스템에서는 노드 장애, 네트워크 지연, 메시지 손실 등 다양한 문제가 발생할 수 있으며, 이런 상황에서도 시스템은 일관된 상태를 유지해야 합니다.• None 일관성 유지: 모든 노드가 동일한 데이터와 상태를 가져야 함• None 장애 허용성: 일부 노드가 실패해도 시스템이 계속 작동해야 함• None 네트워크 파티션 대응: 네트워크 분할 상황에서도 안전성 보장 필요이러한 문제를 해결하기 위해 Paxos, Raft, PBFT 등 다양한 합의 알고리즘이 개발되었습니다.그 중에서도 Raft는 이해하기 쉽고 구현이 용이하다는 장점으로 많은 분산 시스템에서 채택되고 있습니다.Raft는 분산 시스템에서 노드 간 합의를 이루기 위한 알고리즘으로, 스탠포드 대학의 Diego Ongaro와 John Ousterhout에 의해 개발되었습니다.Raft는 "이해하기 쉬운 합의 알고리즘"을 목표로 설계되었으며, 복잡한 Paxos 알고리즘의 대안으로 등장했습니다.Raft(뗏목)라는 이름의 유래위키피디아에 따르면, Raft는 "Reliable, Replicated, Redundant, Fault-Tolerant"의 약어에서 유래했다고 하지만, 이는 일부 해석일 뿐입니다.이 알고리즘을 만든 Diego Ongaro는 Google Groups에 직접 이름을 짓게 된 과정에 대해 남긴 기록이 있는데, 요약하면 다음과 같습니다.• None 처음엔 특정한 줄임말을 염두에 두진 않았지만, "Reliable", "Replicated", "Redundant", "Fault-Tolerant" 같은 단어들을 떠올림• None 로그(logs)를 떠올리며 이들로 무엇을 만들 수 있을지 고민(log는 '통나무'라는 의미도 있음)• None 기존 합의 알고리즘인 Paxos라는 '섬'에서 벗어나는 방법을 고민하던 중 **‘뗏목(Raft)’**이라는 이름을 떠올리게 됨Raft는 세 가지 핵심 메커니즘으로 구성됩니다:모든 노드는 리더, 팔로워, 후보자 중 하나의 상태를 가집니다. 클러스터가 시작되면 모든 노드는 팔로워 상태로 시작하고, 일정 시간 동안 리더로부터 신호가 없으면 후보자가 되어 리더 선출 과정을 시작합니다.• None 리더: 클라이언트 요청 처리 및 로그 복제 담당• None 팔로워: 리더의 요청에 응답하고 로그를 복제• None 후보자: 리더 선출 과정 중 투표를 요청하는 노드리더 선출은 랜덤한 타임아웃과 투표 과정을 통해 이루어지며, 과반수의 노드로부터 투표를 받은 후보자가 새 리더가 됩니다.클라이언트의 모든 요청은 리더가 받아서 처리합니다. 리더는 요청을 로그 항목으로 변환하여 자신의 로그에 추가한 후, 모든 팔로워에게 로그를 복제하도록 요청합니다.과반수(Quorum)의 노드가 로그를 복제하면 해당 항목이 '커밋'되고 상태 머신에 적용됩니다.로그 항목은 다음 정보를 포함합니다:Raft는 다음과 같은 안전성 속성을 보장합니다:• None 리더 완전성(Leader Completeness): 커밋된 로그는 모든 미래 리더의 로그에도 포함됨• None 상태 머신 안전성(State Machine Safety): 모든 노드는 커밋된 로그를 동일한 순서로 적용• None 로그 일치 속성(Log Matching Property): 같은 인덱스와 텀을 가진 로그는 동일한 명령을 포함Raft 알고리즘은 다음과 같은 주요 장점을 가집니다:• None 이해하기 쉽고 구현이 간편함: 복잡한 Paxos에 비해 명확한 개념 구조• None 장애 허용성(CFT): 전체 노드의 과반수가 정상 작동하는 한 시스템은 계속 작동• None 즉각적인 블록 완결성: 합의가 이루어진 데이터는 즉시 확정되어 롤백되지 않음sofa-jraft는 알리바바에서 개발한 Java 기반 Raft 구현체로, Baidu의 Braft를 Java로 재구현하고 최적화한 라이브러리입니다.고성능 분산 시스템 구축에 적합하며, 다양한 기능과 최적화를 포함하고 있습니다.• None 고성능: 완전 동시 복제, 복제 파이프라인 최적화 등을 통한 성능 향상• None MULTI-RAFT-GROUP: 복잡한 애플리케이션을 위한 다중 Raft 그룹 지원sofa-jraft는 다음과 같은 주요 컴포넌트로 구성됩니다:• None Node: Raft 그룹의 구성원으로, 리더/팔로워/후보자 상태 관리• None StateMachine: 애플리케이션 로직을 구현하는 상태 머신우선순위 큐는 각 요소가 우선순위를 가지며, 높은 우선순위의 요소가 먼저 처리되는 자료구조입니다.이 자료구조는 작업 스케줄링, 이벤트 처리, 네트워크 패킷 관리 등 다양한 분야에서 활용됩니다. 팀내에서는 수집 스케쥴 관리에 적용했습니다.우선순위 큐는 일반적으로
java
nodejs
5/19/2025

Raft 알고리즘을 이용해 고가용 프로그램을 만들어보자!!
검색인프라팀은 분산 시스템 구축과 운영에 대한 다양한 경험을 쌓아왔습니다.이전에는 SaaS형 Redis 클러스터 제공 서비스(RC)와 MinIO 및 Kubernetes를 활용한 사내 스토리지 서비스 구축 경험을 공유한 바 있습니다.이번에는 분산 시스템의 핵심 과제 중 하나인 ‘합의(Consensus)’ 문제를 해결하는 Raft 알고리즘과, 이를 활용한 고가용성 우선순위 큐 구현을 통해 실제 적용 방법을 살펴보고자 합니다.검색인프라팀의 주요 업무는 데이터 수집, 가공, 연동, 서비스 개발이며, 이 과정에서 데이터의 일관성과 고가용성을 보장하는 것은 필수적이지만 매우 까다로운 과제입니다.특히, 네트워크를 통해 수많은 데이터가 실시간으로 입·출력되고,마이크로서비스 아키텍처 기반의 여러 노드가 유기적으로 연결된 환경에서는 노드 장애가 발생하더라도 서비스가 중단되지 않고, 데이터 일관성을 유지하는 것이 핵심입니다.이러한 배경에서 Raft 알고리즘을 팀내 어플리케이션에 도입한 경험을 공유하고자 이 글을 작성하게 되었습니다.이번 글에서는 자바 기반 Raft 구현체인 sofa-jraft 라이브러리를 활용해 3노드 환경에서 운영되는 고가용성 우선순위 큐를 구현하고, 이를 통해 Raft 알고리즘의 개념과 실전 적용 방안을 살펴보겠습니다.분산 시스템과 합의 알고리즘의 필요성분산 시스템은 여러 개의 독립적인 컴퓨터가 네트워크를 통해 통신하며 하나의 시스템처럼 작동하는 구조를 말합니다.이러한 시스템에서는 노드 장애, 네트워크 지연, 메시지 손실 등 다양한 문제가 발생할 수 있으며, 이런 상황에서도 시스템은 일관된 상태를 유지해야 합니다.• None 일관성 유지: 모든 노드가 동일한 데이터와 상태를 가져야 함• None 장애 허용성: 일부 노드가 실패해도 시스템이 계속 작동해야 함• None 네트워크 파티션 대응: 네트워크 분할 상황에서도 안전성 보장 필요이러한 문제를 해결하기 위해 Paxos, Raft, PBFT 등 다양한 합의 알고리즘이 개발되었습니다.그 중에서도 Raft는 이해하기 쉽고 구현이 용이하다는 장점으로 많은 분산 시스템에서 채택되고 있습니다.Raft는 분산 시스템에서 노드 간 합의를 이루기 위한 알고리즘으로, 스탠포드 대학의 Diego Ongaro와 John Ousterhout에 의해 개발되었습니다.Raft는 "이해하기 쉬운 합의 알고리즘"을 목표로 설계되었으며, 복잡한 Paxos 알고리즘의 대안으로 등장했습니다.Raft(뗏목)라는 이름의 유래위키피디아에 따르면, Raft는 "Reliable, Replicated, Redundant, Fault-Tolerant"의 약어에서 유래했다고 하지만, 이는 일부 해석일 뿐입니다.이 알고리즘을 만든 Diego Ongaro는 Google Groups에 직접 이름을 짓게 된 과정에 대해 남긴 기록이 있는데, 요약하면 다음과 같습니다.• None 처음엔 특정한 줄임말을 염두에 두진 않았지만, "Reliable", "Replicated", "Redundant", "Fault-Tolerant" 같은 단어들을 떠올림• None 로그(logs)를 떠올리며 이들로 무엇을 만들 수 있을지 고민(log는 '통나무'라는 의미도 있음)• None 기존 합의 알고리즘인 Paxos라는 '섬'에서 벗어나는 방법을 고민하던 중 **‘뗏목(Raft)’**이라는 이름을 떠올리게 됨Raft는 세 가지 핵심 메커니즘으로 구성됩니다:모든 노드는 리더, 팔로워, 후보자 중 하나의 상태를 가집니다. 클러스터가 시작되면 모든 노드는 팔로워 상태로 시작하고, 일정 시간 동안 리더로부터 신호가 없으면 후보자가 되어 리더 선출 과정을 시작합니다.• None 리더: 클라이언트 요청 처리 및 로그 복제 담당• None 팔로워: 리더의 요청에 응답하고 로그를 복제• None 후보자: 리더 선출 과정 중 투표를 요청하는 노드리더 선출은 랜덤한 타임아웃과 투표 과정을 통해 이루어지며, 과반수의 노드로부터 투표를 받은 후보자가 새 리더가 됩니다.클라이언트의 모든 요청은 리더가 받아서 처리합니다. 리더는 요청을 로그 항목으로 변환하여 자신의 로그에 추가한 후, 모든 팔로워에게 로그를 복제하도록 요청합니다.과반수(Quorum)의 노드가 로그를 복제하면 해당 항목이 '커밋'되고 상태 머신에 적용됩니다.로그 항목은 다음 정보를 포함합니다:Raft는 다음과 같은 안전성 속성을 보장합니다:• None 리더 완전성(Leader Completeness): 커밋된 로그는 모든 미래 리더의 로그에도 포함됨• None 상태 머신 안전성(State Machine Safety): 모든 노드는 커밋된 로그를 동일한 순서로 적용• None 로그 일치 속성(Log Matching Property): 같은 인덱스와 텀을 가진 로그는 동일한 명령을 포함Raft 알고리즘은 다음과 같은 주요 장점을 가집니다:• None 이해하기 쉽고 구현이 간편함: 복잡한 Paxos에 비해 명확한 개념 구조• None 장애 허용성(CFT): 전체 노드의 과반수가 정상 작동하는 한 시스템은 계속 작동• None 즉각적인 블록 완결성: 합의가 이루어진 데이터는 즉시 확정되어 롤백되지 않음sofa-jraft는 알리바바에서 개발한 Java 기반 Raft 구현체로, Baidu의 Braft를 Java로 재구현하고 최적화한 라이브러리입니다.고성능 분산 시스템 구축에 적합하며, 다양한 기능과 최적화를 포함하고 있습니다.• None 고성능: 완전 동시 복제, 복제 파이프라인 최적화 등을 통한 성능 향상• None MULTI-RAFT-GROUP: 복잡한 애플리케이션을 위한 다중 Raft 그룹 지원sofa-jraft는 다음과 같은 주요 컴포넌트로 구성됩니다:• None Node: Raft 그룹의 구성원으로, 리더/팔로워/후보자 상태 관리• None StateMachine: 애플리케이션 로직을 구현하는 상태 머신우선순위 큐는 각 요소가 우선순위를 가지며, 높은 우선순위의 요소가 먼저 처리되는 자료구조입니다.이 자료구조는 작업 스케줄링, 이벤트 처리, 네트워크 패킷 관리 등 다양한 분야에서 활용됩니다. 팀내에서는 수집 스케쥴 관리에 적용했습니다.우선순위 큐는 일반적으로
2025.05.19
java
nodejs

좋아요

별로에요