Tag Archives: AdventCalendar

V8의 히든 클래스 이야기

자바스크립트가 되어 그 기분을 헤아릴 수 있다면

안녕하세요? LINE Fukuoka의 프론트엔드 엔지니어 Yonehara입니다.

저는 프론트엔드 개발자로서 아직 웹 브라우저나 자바스크립트의 기분을 헤아려줄 만큼의 경지에는 올라가지 못했다고 생각합니다. 이로 인해 저희 서비스 사용자에게 원하는 만큼의 쾌적한 UX를 제공해 드리지 못할 때가 있어 괴로울 때가 있습니다. 그나마 다행인 것은, 우리가 이 자바스크립트의 속마음을 상당 부분 분석적으로 들여다볼 수 있다는 점입니다. Google이나 Mozilla가 그들의 자바스크립트 엔진 코드를 공개하고 있고, 여러 곳에서 엔진 설계에 대해 풀어 설명하고 있고, 또 트레이싱이나 프로파일링을 할 수 있는 수단도 넉넉히 준비되어 있기 때문이지요. 이번 포스팅에서는 여러분도 잘 아시는 Chrome의 자바스크립트 엔진인 V8에서 최적화를 위한 장치로 도입한 히든 클래스에 대해 살펴볼까 합니다.

웹 브라우저와 함께 하는 애니메이션 스티커 체커

안녕하세요, LINE Fukuoka의 ha1f입니다. 현재 후쿠오카에서 iOS 앱 개발을 담당하고 있습니다. 저는 LINE에 정식으로 입사하기 전, 채용이 확정된 아르바이트생으로서 LINE의 사내 도구를 개발해 왔습니다. 오늘은 당시 개발한 도구 중 하나인 애니메이션 스티커 체커*에 대해 소개할까 합니다.

APNG란?

APNG(Animated Portable Network Graphics)란 일련 번호가 매겨진 애니메이션용 이미지 파일 형식으로, LINE 애니메이션 스티커에서도 이 형식을 사용하고 있습니다. APNG는 GIF와 달리 풀컬러를 사용할 수 있고 알파 채널을 가질 수도 있으며, 압축율이 높다는 장점이 있습니다. 또한 PNG와 호환되며, APNG를 지원하지 않는 환경에서는 일반적인 정지 화면으로 표시됩니다. 도구를 사용하면 여러 PNG 파일에 일련 번호를 부여하여 APNG 파일을 만들 수도 있습니다.

apng

엑셀로 관리하던 자리 배치도, Leaflet을 통해 웹 시스템으로 탈바꿈하다

LINE 일본 오피스에서는 늘어나는 인원을 감당하기 위해 2017년 4월, 사무실을 JR 신주쿠 미라이나타워로 이전했습니다. 사무실 이전과 함께 IT 지원실은 몇 가지 새로운 사내 시스템을 도입했는데요, 오늘은 그 중 하나인 ‘자리 배치도’를 소개할까 합니다.

개발 동기

예전 사무실에서는 아래에 보시는 것처럼 엑셀을 이용하여 자리를 관리하였습니다(자리에 배치된 직원의 이름은 지워진 상태입니다).

LINE LIVE 서비스의 인코더 레이어 구조

안녕하세요, LINE에서 글로벌 인프라 시스템을 운영하는 조직에서 개발자로 일하고 있는 김수혁입니다. 2017년 12월 10일은 LINE LIVE 서비스가 공개된 지 2년이 되는 날이었습니다. 서비스 출시 후 수많은 개발자들의 노력으로 지금까지 큰 장애없이 원활하게 운영되고 있습니다. 이번 블로그에서는, 라이브 미디어 서비스를 구축하거나 운영해 본 경험이 없는 상태에서 초기 설계와 구축을 진행하면서 개인적으로 고민했던 내용을 정리해 보았습니다.

Code splitting을 쉽게 하기 위해 만든 grow-loader

안녕하세요, 저는 LINE MANGA팀의 자바 스크립트 개발자, @sunderls입니다. 일본에서는 LINE으로 만화를 볼 수 있다는 것, 알고 계셨나요? 혹시 여러분은 LINE MANGA1) 서비스를 이용해 보셨나요? 예전에 블로그를 통해서도 나누었듯이(LINE MANGA: Page Stack을 이용해서 페이지 전환 처리하기), LINE MANGA는 웹 기반으로 구현되어 있습니다. 이 서비스는 LINE 앱 안에서 구동되는 서비스이기 때문에, LINE 앱을 이용할 때와 마찬가지로 편안하고 매끄러운 UX를 제공하고자 저희는 많은 노력을 쏟았습니다. 우리는 우리의 목표를 달성하고자 code-splitting을 도입하였는데, 이 글을 통해 code-splitting을 손쉽게 적용할 수 있도록 개발한, LINE의 오픈 소스 프로젝트인 grow-loader를 여러분께 소개하고자 합니다.

VoIP 오픈 소스 라이브러리인 PJSIP에서의 버퍼 오버플로우

안녕하세요. 보안실(애플리케이션 보안팀)에서 LINE 서비스의 보안 평가를 담당하고 있는 김영성(Facebook, Twitter)입니다.

이번 포스팅에서는 VoIP 오픈 소스 라이브러리인 PJSIP의 취약점(CVE-2017-16872, AST-2017-009)에 대해 다루고자 합니다. PJSIP는 표준 프로토콜인 SIP, SDP, RTP, STUN, TURN 및 ICE를 구현한 멀티미디어 통신 라이브러리입니다. IP-PBX, VoIP 게이트웨이 등에서 널리 사용되는 Asterisk 프레임워크에서도 PJSIP 기반으로 SIP 스택을 구현했습니다.

이번에 발견한 취약점은 64-bit 환경에서 클라이언트로부터 받은 SIP 요청을 처리할 때, signed int형을 unsigned long 형으로 변환하는 과정 중에, 정수의 부호 확장을 고려하지 않은 것이 원인이며, 결과적으로 이 취약점은 버퍼 오버플로우를 발생시킬 수 있습니다. 취약점을 확인한 후 PJSIP 개발팀에 문의했지만 보안 이슈를 제보할 수 있는 창구가 없어, Asterisk security 대응 창구제보했습니다. 이후 Asterisk의 개발자인 George Joseph씨와 패치에 대해 논의했고, pjproject 2.7.1 버전에 패치(PJSIP 패치, Asterisk 패치)가 적용되었습니다. 이 기회를 빌어 패치 작업을 진행해 주신 George씨께 감사드립니다.

Prometheus를 서비스로 제공하기

안녕하세요, LINE 후쿠오카 개발 부서에서 근무하고 있는 폴 트레일러입니다. 저는 LINE Family App을 위한 다수의 서버를 모니터링하는 업무를 담당하고 있습니다.

대부분의 개발자들은 코딩과 신규 기능 개발에 더 큰 흥미를 느끼겠지만 기능이 제대로 동작하지 않을 때 그 원인을 파악하는 것 또한 매력적이며, 매우 유용하기도 합니다. 모니터링은 문제의 원인을 파악하는 데 큰 도움이 될 수 있는데, 개발자가 모니터링 환경을 직접 구축하고 설정하는 것은 까다로울 수 있습니다. 여기서 바로 제가 등장합니다. 저는 개발자들이 쉽게 서비스별 임계치를 모니터할 수 있도록 돕는 역할을 담당하고 있습니다. 개발자들이 쉽게 모니터링 대상을 등록하고, 담당 서비스에 대한 알림 요청을 설정할 수 있도록 Prometheus 설정 값들을 수월하게 관리하는 Promgen을 개발하여 여러분께 소개하고자 합니다.

모니터링 설정하기

대부분의 서비스는 간단하고 작은 규모로 시작하지만 시간이 지날수록 다양한 구성 요소들이 여럿 생겨나 수백 개의 서버들을 통해 제공되곤 합니다. 이런 환경에서 모니터링을 설정하는 것은 쉬운 일이 아닙니다. Promgen은 모든 모니터링 설정 항목들을 한 곳에서 한번에 볼 수 있도록 개발되었습니다.

targets