Bazel로 LINE의 iOS 앱 빌드 속도를 2배 빠르게!

최근 몇 년 동안 LINE 앱의 iOS 소스 트리는 지속적으로 성장해 수백 개의 모듈로 늘어났습니다. iOS 버전의 소스 코드는 2019년 말 기준으로 140만 줄을 넘어섰으며, 이러한 증가세는 멈출 기미가 보이지 않습니다. 그 결과 LINE iOS 버전의 빌드 시간이 크게 증가했습니다. 또한 프로젝트의 규모가 커지면서 로컬 환경에서는 문제 없이 실행되는 빌드가 CI에서는 실행되지 않거나 혹은 그 반대의 경우가 발생하는 것과 같은 재현 불가능한 문제점도 늘어났습니다. 그래서 저희는 잠시 한 발자국 뒤로 물러나 빌드 성능을 개선하고 문제의 재현 가능성을 높일 수 있는 방법에 대해 고민해 보았습니다.

개선된 페이지 스택으로 LINE 증권의 웹 페이지 전환 처리하기

안녕하세요! sunderls입니다. 저는 2년 전에 페이지 스택을 주제로 ‘LINE MANGA: Page Stack을 이용해서 페이지 전환 처리하기’라는 글을 썼고, 현재 LINE 증권에서도 같은 방식으로 프로젝트를 진행하고 있습니다. 그래서 이번 글에서는 페이지 스택이 어떻게 진화했는지, 어떤 과제를 안고 있는지 함께 알아보겠습니다.

누가 Kubernetes 클러스터에 있는 나의 사랑스러운 Prometheus 컨테이너를 죽였나!

안녕하세요. 이번 글에서는 CrashLoopBackoff 상태에 있는 Prometheus 컨테이너 이슈의 원인을 조사하고 해결하는 과정에서 겪은 흥미로운 경험을 공유하려고 합니다. 사실 이런 현상이 발생하는 원인과 해결책은 너무 뻔하고 간단해서 굳이 이런 주제를 다루는 데 시간을 투자할 가치가 있나는 질문을 던질 수도 있습니다. 하지만 저와 마찬가지로, 이 문제를 조사하는 과정의 각 단계를 자세히 이해하고자 하는 독자가 있을 거라고 생각하며 시작하겠습니다. 이 글을 읽으면서 얻을 수 있는 것들을 아래와 같이 정리해 봤습니다.

LINE 머신 러닝 엔지니어 임준석 님을 만나보았습니다

준석 님은 2019년에 머신 러닝(machine learning) 엔지니어로 LINE에 합류했습니다. 서비스 개발 부서와 긴밀하게 협력하며 LINE 서비스 곳곳에 머신 러닝 기술을 적용하고 계신데요. 온라인에 흔적을 남기는 것을 즐기지는 않지만 LINE의 머신 러닝 개발 환경을 널리 홍보하고 싶은 마음에 인터뷰를 수락했다는 준석 님. LINE에서 어떤 새롭고 즐거운 경험을 하고 있는지 함께 만나보시죠!

LINE 통화: 최고의 품질을 위한 8년간의 여정

요즘엔 대부분의 사람들이 기존의 유료 통화 대신에 메신저에서 대화하다가 클릭 한 번으로 통화할 수 있는 인터넷 전화를 사용합니다. 인터넷 전화는 통화 품질도 좋고, 무엇보다 전 세계 누구와 통화해도 무료라는 점이 매력적이죠. 이런 장점 덕분에 인터넷 전화 서비스는 본격적으로 시작된 지 채 10년도 지나지 않아 기존의 유료 통화를 빠른 속도로 대체해 나갔습니다. 하지만 인터넷 전화는 그 특성상 통화 중에 음성이 끊기거나 통화 자체가 안되는 경우가 가끔씩 발생합니다. 유료 서비스라면 해당 통신사에 불만을 접수해서 통화 품질을 개선하도록 만들 수 있겠지만, 인터넷 전화는 무료 서비스이기 때문에 통화 음질이 좋지 않다면 사용자들은 통화 품질을 개선하기보다는 다른 서비스로 발길을 돌리는 쪽을 선택하게 됩니다. 따라서 사용자가 무료 통화 서비스를 계속 사용하길 원한다면 좋은 통화 품질을 유지하는 것이 매우 중요합니다. 이번 글에서는 LINE 무료 통화 서비스가 최고의 품질을 유지하기 위해 얼마나 많은 노력을 기울이고 있는지 공유하겠습니다.

Kafka를 이용한 작업 큐 라이브러리 ‘Decaton’ 활용 사례

얼마 전, LINE에서 개발한 라이브러리 Decaton이 오픈소스로 공개됐습니다. Decaton은 Kafka를 이용한 비동기 처리 작업 큐(queue) 라이브러리로 LINE에서 널리 사용하고 있습니다. 

사실 Kafka에서 스트림을 다루는 공식 라이브러리로 Kafka Streams를 이미 제공하고 있습니다. 하지만, Kafka Streams가 당시 저희 요구 사항에 맞지 않아 별도로 Kafka를 이용한 라이브러리인 Decaton을 개발하게 되었습니다. Decaton은 Kafka Streams보다 효율적으로 메시지를 처리하면서 프로그램 자체도 간단하게 구성할 수 있습니다. 이번 글에서는 LINE에서 Decaton을 어떻게 활용하고 있는지 사례를 통해 공유하려고 합니다. 

주석 분석기를 이용한 간단한 API 문서화 방법

테크니컬 라이터로서 가장 재미있는 순간은 바로 새로운 프로젝트를 시작할 때입니다. 프로젝트를 시작하는 순간에는 모든 것이 열려 있어 자유로우며, 그 자유가 새로운 도메인에 대한 탐구심을 자극하기 때문입니다. 그런 점에서 짧지만 굵게 새로운 것을 시도하고 배울 수 있는 기술 문서 컨설팅은 제게 참 신나는 업무입니다. 이번 글에서는 몇 달 전에 진행했던 API 문서화 컨설팅에서 배운 내용을 공유하려 합니다. 주제는 새로운 언어를 위한 소스 코드 주석 기반 API 문서화 도구 만들기입니다. 정확히 말하면 ‘도구 만들기’라기보다 ‘도구 찾아 적용하기’이므로, 코딩이 많이 필요할 거라는 기대 혹은 염려는 가슴 한편에 고이 접어둬도 좋습니다.

고 처리량 분산 비율 제한기

보통 프로덕션 등급의 시스템은 서로 의존하는 여러 개의 컴포넌트로 구성됩니다. 최근 몇 년간 마이크로 서비스 아키텍처가 대중화되면서 컴포넌트의 수가 증가했고, 그에 따라 각 컴포넌트 사이의 연결 수도 증가했는데요. 이때 각 컴포넌트에 과부하가 걸리지 않도록 보호하면서 전체 시스템의 서비스 품질을 보장하기 위해 ‘비율 제한기(rate limiter)’를 사용할 수 있습니다.

이미 많은 글과 튜토리얼에서 단일 호스트에서 실행되는 서비스를 위한 서버 측 비율 제한기(rate limiter)를 다루고 있기 때문에 이번 글에선 고 처리량(high-throughput) 분산 시스템을 위한 클라이언트 측 비율 제한기에 대해 이야기하려고 합니다. 저는 2020 LINE New Year 캠페인 시스템을 개발하면서 클라이언트 측 비율 제한기에 대해 생각해 보게 되었습니다. 이 캠페인은 LINE 서비스 입장에서 연중 가장 많은 트래픽이 유입되는 1월 1일 자정에 시작했는데요. 당시 저희가 직면한 과제 중 하나가 사용자 경험을 저하시키지 않으면서 내부 서비스에 과부하가 걸리는 것을 막는 일이었습니다.

UICollectionView를 이용한 LINE iOS 대화방 리팩토링 – 2

지난 1편에서 UICollectionView의 커스텀 레이아웃 기능을 활용해 대화방 UI를 표시하는 방법에 대해 설명했습니다. 이번 글에서는 대화방에 뷰 모델을 적용한 방법과 비동기 콘텐츠 로딩을 처리한 방법을 설명한 뒤 리팩토링하면서 어려웠던 점과 개선된 점, 그리고 앞으로 더 개선해 나가야 할 점들에 대해서 이야기해 보겠습니다.