어느 날 한 개발자분께 메시지가 왔습니다. 배치가 실행되지 않아 확인해 보니 Jenkins의 디스크가 가득 차 멈춰 있었습니다. 빌드 이력 보존 설정(logRotator)이 빠진 잡들의 이력이 정리되지 않고 계속 쌓인 것이 원인이었습니다. 그 사이 큐에는 실행을 기다리는 배치가 3,00…
여러분들은 예상치 못한 먼 타지의 영상에서 의외의 아이디어를 얻어본 적, 있으신가요? 인프런은 언어의 장벽을 넘어 폭 넓은 지식을 전달해드리기 위해 자막, 더빙에 이어 영상 화면에 있는 글자까지 번역하는 영상 화면 번역 기능을 준비하고 있습니다. 최근에 인프런에서 공개한 DeNA × A…
안녕하세요, 데브옵스 엔지니어 포카입니다. 인프랩에서는 자막 번역, 강의 상세 생성, 학습 에이전트, 커뮤니티 답변 등 꽤 많은 곳에서 LLM API를 쓰고 있습니다. 처음에는 각 서비스가 필요한 제공 업체에서 API 키를 발급받아 직접 호출하는 방식이었는데요. 사용처가 서른 곳을 넘어…
안녕하세요. 인프랩의 BE 개발자 약풍, 로켓입니다. 지난 글에서는 학습 에이전트가 왜 필요했는지, 어떤 기능이 있는지, 제품 측면에서 어떤 고민을 했는지 살펴보았습니다. 이번 글부터는 학습 에이전트의 각각의 영역을 구체적으로 살펴보려 합니다. 첫 번째로, 학습 에이전트의 백엔드 시스템…
약 7만 년 전, 호모 사피엔스에게 ‘인지 혁명’이라 불리는 도약이 일어났습니다. 인류가 다른 동물과 갈라선 첫 분기점이었습니다. 눈앞에 없는 것, 추상적인 개념, 아직 일어나지 않은 일까지 표현하는 상징적 언어가 등장한 것입니다. 그 언어가 구체적으로 어떤 모습이었는지는 기록이 없어…
안녕하세요. 인프랩 백엔드 개발자 후니입니다. 최근 공급망 공격(Supply-Chain-Attack)에 대한 보안 사고가 연이어 발생하고 있습니다. 올해 초 가장 논란이 되었던 LiteLLM 공급망 공격 사건, 자바스크립트 생태계에서 가장 널리 사용되는 HTTP 클라이언트 라이브러리인…
안녕하세요. 인프랩 프론트엔드 개발자 고슈입니다. 현재 인프랩 프론트엔드 팀은 20여 개의 애플리케이션에서 사용하고 있는 디자인시스템을 최신 버전으로 마이그레이션하는 작업을 진행하고 있습니다. 정확히는 인프랩의 디자인시스템은 오픈 소스 Mantine v6를 래핑해서 사용하는 방식이기 때…
안녕하세요. 인프랩 프론트엔드 개발자 고슈입니다. 작년 8월, 인프런의 헤더(GNB)가 새롭게 단장했습니다! 🎉 인프런의 헤더는 여러 프론트엔드 환경에서 동작해야 하는 복잡한 구조로 이루어져 있어, 기존에도 여러 문제가 있었는데요. 이번 글에서는 인프런의 헤더가 어떻게 동작하고 있는지,…
안녕하세요? 인프랩 DevOps 엔지니어 구피입니다. 최근, 로그만으론 도무지 원인을 알 수 없는 오류를 만났는데요. 이때 strace로 파일 관련 시스템콜을 추적하면서 동시 실행 시 드러나는 에러 처리 버그를 찾아 해결할 수 있었습니다. 추적하는 과정이 꽤 재미있었기에 그 디버깅 과정…
안녕하세요. 인프랩 데브옵스 엔지니어 선비입니다. 올해 저희 팀은 2023년 Pulumi IaC 시스템 정착, 2024년 AWS ECS 환경의 고도화를 지나 Kubernetes로의 인프라 마이그레이션이라는 큰 산을 넘었습니다. 단순히 운영 플랫폼을 옮긴 것이 아니라, 많은 시행착오를 바…
안녕하세요, 인프랩의 프론트엔드 개발자 럭끼입니다. 인프런 강의실에서는 특정 시점에 다양한 함수 및 모달 노출 로직이 실행됩니다. 예를 들어, 강의 수강 중 특정 진도율을 달성하면 수업 영상 일시정지, 수강평 작성 모달 노출, 축하 메시지 모달 노출 로직이 순서대로 실행됩니다. 하지만…
안녕하세요, 데브옵스 엔지니어 포카입니다. 최근 인프런의 ”클린 코더스: 실전 객체 지향 프로그래밍과 TDD 마스터 클래스” 강의 영상 업스케일링 작업을 위해 GPU 클러스터를 운영하던 중, 예상치 못한 문제에 직면했습니다. GPU 노드가 정상적으로 생성되었음에도 불구하고 약 10-11…
안녕하세요, 인프랩 프론트엔드 개발자 빠삐코입니다. 데이터 기반 의사결정에서 정확한 사용자 행동 데이터 수집은 무엇보다 중요합니다. 저희 팀도 Google Tag Manager(GTM) 를 통해 Google Analytics, Mixpanel 등 다양한 분석 도구로 이벤트를 전송하며 사…
안녕하세요. 인프랩 데브옵스 엔지니어 구피입니다! 인프랩에서는 ML, 데이터 처리 목적으로 몇 파이프라인에서 GB 단위의 큰 용량 이미지를 사용하고 있는데요. 이런 작업의 컨테이너를 띄우기 위해선 이미지 pull 및 압축 해제에 수분이 소요되기도 합니다. 특히 노드 재생성이 빈번한 Sp…
안녕하세요. 인프랩의 백엔드 개발자 약풍입니다. 코드 리뷰는 버그를 예방하고, 팀의 코드 품질을 유지시키는 중요한 장치입니다. 많은 개발자들이 서로의 코드에 대해 리뷰하고 피드백하는 시간은 꼭 필요하지만, 팀의 규모나 상황에 따라 코드 리뷰가 꼼꼼하게 이루어지지 않는 경우들도 종종 생깁…
안녕하세요. 인프랩의 랠릿 셀 프론트엔드 개발자 고슈, 도니, 루시입니다. 2024년 초, 연간 플래닝에서 CTO인 향로에게서 예상치 못한 발표를 듣게 됩니다. 올해 인프런 글로벌 서비스를 출시할 예정이에요. 랠릿 셀도 함께 투입됩니다. 네? 저희도요? 이렇게 랠릿을 포함한 인프랩 개발…
안녕하세요, 인프랩 데브옵스 엔지니어 포카입니다. 어느덧 저의 첫 회사인 인프랩에 합류한 지 3개월이 지나가는데요! 오늘은 전문 직군 (AI/ML) 없는 저희 같은 스타트업에서 머신러닝/AI를 활용하여 자동화된 스팸 필터링 시스템 도입과 개선 과정을 소개해보려고 합니다. 인프런이 성장하…
안녕하세요. 인프랩 데브옵스 엔지니어 구피입니다! 다들 많이 사용하시다시피, 인프랩에서도 사설망 내부 자원에 대한 접근 관리를 위해 VPN을 쓰고 있습니다. VPN 구축을 위해 AWS Client VPN, Firezone을 사용하다 현재는 Tailscale을 선택하여 사용하고 있는데요.…
안녕하세요. 인프랩 백엔드 개발자 인트, 제이입니다. 인프랩의 백엔드 서버는 대부분 Node.JS로 구성되어 있지만 일부 JVM 서버도 함께 운영됩니다. JVM 서버의 경우 모니터링으로 핀포인트를 활용하고 있습니다. 최근에 핀포인트를 통해 간헐적으로 원인을 파악하기 어려운 에러 알림이…
안녕하세요. 인프랩의 향로입니다. 저희 인프랩 개발팀은 현재 백엔드, 프론트엔드, 모바일 앱, 데브옵스 파트로 나뉘어져 있습니다. 각각의 개발 파트가 어떻게 일 하는지, 어떤 사람과 함께 하고 싶어하는지 등을 소개드리려 합니다. 세 번째로 모바일 앱 개발 파트를 소개드리겠습니다. 인프랩…
안녕하세요. 인프랩의 향로입니다. 저희 인프랩 개발팀은 현재 백엔드, 프론트엔드, 모바일, 데브옵스 파트로 나뉘어져 있습니다. 각각의 개발 파트가 어떻게 일 하는지, 어떤 사람과 함께 하고 싶어하는지 등을 소개드리려 합니다. 두 번째로 웹프론트엔드 파트를 소개드리겠습니다. 지원하고자 하…
안녕하세요. 인프랩의 향로입니다. 저희 인프랩 개발팀은 현재 백엔드, 프론트엔드, 모바일, 데브옵스 파트로 나뉘어져 있습니다. 각각의 개발 파트가 어떻게 일 하는지, 어떤 사람과 함께 하고 싶어하는지 등을 소개드리려 합니다. 첫 번째로 백엔드 파트를 소개드리겠습니다. 지원하고자 하는 회…
안녕하세요 👋🏻 인프랩 프론트엔드 개발자 홍시입니다. 24년 3월 현재 인프랩은 프론트엔드 개발자 10명, 프로덕트 디자이너 5명이 있는 작은 제품 조직입니다. 그래서 플랫폼 팀은 따로 없지만, 가지고 있는 자원으로 생산성과 제품의 완성도를 높이는 것을 목적으로 22년 4월부터 약 2년…
안녕하세요, 인프랩 프런트엔드 개발자 융디입니다. 최근 인프런 유저분들이 정성스럽게 작성해 주신 수강평과 질문&답변 페이지를 SNS에 공유 했을 때, 가장 먼저 보이는 링크 미리보기 이미지에 변화가 생겼다는 것을 눈치채신 분들이 계실까요? 혹시 눈치채지 못하셨다면 이 글을 읽기 전, 본…
안녕하세요. 인프랩 데브옵스 인턴 포카입니다. 6주 동안 인프랩 데브옵스 팀으로써 일하면서 배운 것들 또는 경험한 것들에 대해 적어볼까 합니다. 인턴십을 시작하면서 가장 중요하게 생각했던 것은 ‘학교에서는 경험할 수 없는 것들을 경험하자‘와 ’내가 어떻게 해야 이 회사에 도움이 될 수…
안녕하세요. 인프랩 데브옵스 인턴 구피입니다! 여러분들은 개발하시는 프로젝트에서 기능이 개발 후 배포되기까지 평균 얼마의 시간이 걸리는지 아시나요? 또는, 운영 중인 서비스에서 발생한 장애가 해결되기까지 평균적으로 몇 시간이 걸리는지 아시나요? 이러한 통계는 서비스가 얼마나 효율적으로…
안녕하세요. 인프랩 백엔드 개발자 인트입니다. 인프랩에서는 대부분의 서버 애플리케이션을 Node.js을 사용해 개발하고 있습니다. 하지만 검색엔진과 같은 Spring Boot 기반의 서비스도 존재합니다. 검색엔진 서비스는 MongoDB Atlas Search를 메인 기술로 사용하고 있는…
안녕하세요 인프랩의 향로입니다. 최근 인프랩 팀은 적극적으로 개발자 채용을 하고 있습니다. 지원하시는 분들 입장에서는 인프랩 개발팀은 어떤 것을 추구할까, 나와 가치관이 비슷할까 등등의 고민이 있을 수 있습니다. 그래서 저희 개발팀이 추구하는 미션과 가치를 소개합니다. 저희팀의 미션과…
안녕하세요, 인프랩 DevOps 엔지니어 제이크입니다. 여러분은 혹시 CI 파이프라인이 너무 오래 동작해서 PR 리뷰에 영향을 받은 적 있으신가요? 프로젝트 규모가 커질수록 늘어나는 CI/CD 파이프라인의 소요시간으로 고민한 적이 있으신가요? 이번 글에서 소요시간을 최대 4.6배 까지…
안녕하세요. 인프랩 데브옵스 엔지니어 선비입니다. 2023년 9월, 인프런에 자막 및 스크립트 기능이 추가되었습니다. 다들 잘 사용하고 계신가요? 이번에 추가된 자막 기능은 크게 영상의 음성 데이터를 기반으로 자동으로 자막을 생성하는 부분과 이렇게 생성된 자막을 강의실에서 출력하는 부분…
안녕하세요. 인프랩 프런트엔드 개발자 고슈입니다. 랠릿은 인프랩에서 인프런과 함께 개발하고 있는 채용 서비스입니다. 랠릿 B2C는 Next.js 기반으로 Docker image 파일을 배포하여 서비스를 운영하고 있는데요. 랠릿의 기존 배포용 Docker image 의 사이즈는 꽤 무거웠…
안녕하세요. 인프랩 백엔드 개발자 인트입니다. 현대의 웹 애플리케이션은 API를 통해 다양한 데이터와 서비스를 연동하는 것이 일상이 되었습니다. 이러한 API를 사용하기 위해 다양한 통신방법이 존재하는데, HTTP를 가장 보편적으로 사용합니다. 우리는 이러한 HTTP 통신을 위해 다양한…
안녕하세요. 인프랩 프런트엔드 개발자 루카스입니다. 이전 글에서는 code generator의 필요성과 직접 구현하기까지의 고민을 공유했습니다. 이번 포스트에서는 code generator를 비롯하여 schema validator, type guard를 어떻게 구현했는지 간단히 소개해…
안녕하세요. 인프랩 프런트엔드 개발자 루카스입니다. 아마 프런트엔드 개발을 하다 보면 code generator라는 단어를 들어보셨을 거로 생각합니다. Code generator는 서버에서 선언한 약속한 데이터 타입을 이용해 클라이언트에서 사용할 수 있는 코드를 자동으로 만들어 주는 프…
안녕하세요. 인프랩 백엔드 개발자 하루입니다. 아마 좋은 소프트웨어 설계, 좋은 코드를 위해 테스트 코드를 작성해야 된다는 글을 많이 보셨을 겁니다. 하지만 몇몇 개발자분들은 테스트 코드를 작성하는 것에 공감을 못하기도 하면서 테스트를 막상 작성한다고 하더라도 효과를 보지 못하는 경우들…
안녕하세요. 인프랩 백엔드 개발자 하루입니다. 최근 커뮤니티와 강의 페이지의 검색 기능을 개선하는 작업을 진행하였는데요. 이번 포스트에서는 해당 프로젝트를 하면서 경험한 페어 프로그래밍에 대한 이야기를 공유하고자 합니다. 본격적인 내용을 소개하기 전에 우선 페어 프로그래밍에 대한 정의를…
안녕하세요. 인프런의 백엔드 개발자 인트입니다. 최근 인프런 사이트의 커뮤니티, 강의, 로드맵 검색 품질을 높이기 위한 검색엔진 프로젝트를 진행하였는데요. 이번 포스트에서는 해당 프로젝트를 하면서 겪은 정렬 관련 이슈와 해결 과정을 공유하고자 합니다. 우선 검색엔진으로 사용한 기술에 대…
안녕하세요, 인프랩의 프론트엔드 개발자 홍시입니다. 최근 저희 팀은 기존 기술 스택으로 인프런 서비스를 유지, 발전시킴과 동시에 미래를 위해 한 페이지씩 모던한 기술 스택으로 개선하는 일에 집중하고 있는데요. 모던한 기술 스택으로 새롭게 만드는 웹앱들은 결국 기존 인프런 서비스 위에 올…
안녕하세요, 인프랩의 프론트엔드 개발자 홍시입니다. 이번 글에서는 팀원들과 함께 IT 채용 플랫폼 랠릿의 프로필·지원서 기능을 react-hook-form으로 리팩토링한 경험을 공유하려고 합니다 :) 앞서 보셨던 글에서처럼 인프랩 프론트엔드 팀은 몇 백개의 form이 한 페이지에 있어…
안녕하세요 인프랩 프론트엔드 개발자 라비입니다:) 온라인 강의 플랫폼 인프런을 서비스하고 있는 저희는 올해 초 채용 서비스인 랠릿을 런칭했는데요. Vanilla JS로 개발한 인프런과 달리 React를 사용하여 웹 페이지를 개발하면서, 특히 이력서라는 특성상 복잡한 폼을 다루면서 렌더링…
올해 저희 개발팀에서 기존 인프런 서비스 코드를 신규 스택으로 개편하는 프로젝트를 진행하였습니다. 여러 서비스 중 강의실 페이지 개선이 첫 번째 목표였고 최근 작업이 완료되었습니다. 이번 포스트에서는 프로젝트 진행에서 겪은 경험을 공유하고자 합니다. 기존 인프런 프로젝트는 다음과 같은…
인프런의 컨퍼런스 ‘INFCON 2022’가 8월 26일 코엑스 그랜드볼룸에서 열립니다! 🎊 티져페이지 확인하러 가기 → 안녕하세요. 프론트엔드 개발파트 리온, 록입니다. 🙂 올해 8월, 인프랩의 첫 컨퍼런스를 개최하게되었는데요. 이를 위해서 발표연사자 모집 및 개최 소식을을 알리기 위…
안녕하세요. 인프랩 DevOps Engineer 선비입니다! 오늘은 Docker를 다루며 발견하게 된 Alpine 기반 이미지의 cp 명령과 Debian 또는 Ubuntu 기반 이미지의 cp 명령의 동작 차이점을 소개해드리겠습니다. Docker에서는 Image를 이용하여 Containe…
안녕하세요. 인프랩 DevOps Engineer 선비입니다! 인프랩에 합류한 후 매일 다양하고 즐거운 경험을 하고 있습니다. 오늘은 그 중에서도 코드형 인프라(Infrastructure as Code, IaC)와 관련된 이야기를 해보려고 합니다. 작년 11월까지만 해도 IaC 도구로 A…
안녕하세요. 인프랩에서 백엔드 개발을 담당하고 있는 인트라고합니다. 저는 최근 오픈한 채용 서비스 랠릿 프로젝트에 참여하였습니다. 기존 인프런 서비스와는 다른 스택과 환경에서 개발되었고 그 과정에서 여러 시행착오와 고민을 하게 되었습니다. 이번 포스팅에서는 그중에서 AWS 서비스를 사용…
안녕하세요 인프랩의 향로입니다. 인프런 서비스는 2022년 1월 3일 ~ 17일까지 지속적으로 서비스를 사용할 수 없는, 역대급 장애가 발생했습니다. 이번 장애 기간동안 정말 많은 분들의 질책을 들으면서 반성을 했습니다. 특히 퇴근 후 1~2시간 공부밖에 못하시는 분들께서는 그날의 학습…