Atomic 처리와 cache stampede 대책을 위해 Redis Lua script를 활용한 이야기

안녕하세요? LINE에서 게임 플랫폼 개발을 맡고 있는 Kagaya입니다. 신입 사원 1년차였던 2016년에 마이크로 서비스용 프로젝트 생성 도구 Lazybones를 사용해 보니(일본어 글)를 포스팅한 데 이어 한번 더 기고하게 되었습니다. 반갑습니다. Redis와 LINE GAME Platform LINE GAME Platform은 주 데이터베이스의 하나로 인메모리(in-memory) NoSQL 데이터베이스인 Redis를 사용하고 있으며, 이를 주로 캐시로 이용합니다. 이를테면 LINE이나 Facebook 등의 계정으로 인증하는 …

MySQL Workbench의 VISUAL EXPLAIN으로 인덱스 동작 확인하기

안녕하세요. 저는 LINE 포인트 서버쪽 개발을 담당하고 있는 Ohara(@kory1202)입니다. 얼마 전 특정 테이블에서 데이터를 추출하는 코드를 작성했는데요. 함께 일하는 동료가 그 코드를 보더니 ‘이런 인덱스가 필요하겠다’고 조언해주었습니다. 이 일을 통해 제가 인덱스 관련 지식이 부족하다는 점을 깨닫게 되었는데요. 그래서 이번에 MySQL Workbench의 VISUAL EXPLAIN을 사용하면서 인덱스에 대해 스터디한 내용을 소개해볼까 합니다. VISUAL EXPLAIN은 SQL의 EXPLAIN을 …

세계 최대 IT 경진 대회인 ‘Imagine Cup 2018’ 3위를 차지했습니다

안녕하세요? LINE에서 광고 플랫폼을 개발하고 있는 Kunihiko Sato입니다. 저는 2018년 7월 23일부터 25일까지 미국 시애틀에서 열린 Microsoft 주최 IT 경진 대회 ‘Imagine Cup‘에 일본 대표로 참가해 3위에 입상했는데요. 오늘은 그 후기를 전해드릴까 합니다. 참고로 Imagine Cup은 학생들이 참가하는 IT 경진 대회인데요. 2018년도에는 2017년 9월부터 2018년 7월 사이에 하루라도 학생이었던 사람에게는 출전권이 주어졌습니다. 저는 2018년 3월에 …

안전한 SSL/TLS를 운영하기 위해 알아야 하는 것들

안녕하세요. LINE에서 Security Engineering을 담당하고 있는 이지훈입니다. 제가 속한 팀은 업무 환경과 서비스 환경에서 사용되는 인프라를 더욱 안전하게 만들어가는 업무를 담당합니다. 그 일환으로 SSL/TLS 인증서 관리나 관련 가이드를 제공하는 활동도 하고 있습니다. 대규모 환경에서는 보안은 물론 클라이언트와의 호환성이나 서비스 환경도 고려해야 하는데요. 오늘은 이와 관련된 경험 중 일부를 공유할까 합니다.

TLS는, 브라우저 같은 클라이언트가 공개된 인터넷 망을 통해 웹서버와 커뮤니케이션할 때, 여러 가지 보안 메커니즘을 제공하여 원하는 상대와 안전하게 연결될 수 있도록 도와주는 인터넷 프로토콜입니다. 현재 널리 이용되는 TLS 프로토콜의 기술적인 요건은 RFC 2246(TLS 1.0), RFC 4346(TLS 1.1), RFC 5246(TLS 1.2) 등 링크를 통해 확인하실 수 있는데요. 현재 지속적으로 보안 수준을 높여가고 있습니다. 최근(2018.3.21) Proposed Standard로 정해진 TLS 1.3의 경우 이미 알려진 보안 문제에 대한 대응이 설계에 추가로 반영되었습니다.

대표적으로 HTTP가 SSL/TLS를 이용하여 HTTPS(HTTP over TLS)를 제공하고 있으며, SNMP, FTP 등 다양한 인터넷 프로토콜에서도 SSL/TLS가 쓰이고 있습니다. 본 포스팅에서는 nginx와 같은 웹서버를 이용하여 웹서비스를 제공하는 경우를 가정하고 이에 대한 안전한 설정과 고려 사항에 대해 이야기하고자 합니다.

독자 여러분께서는 각자의 필요에 따라 다음과 같이 본 포스팅을 활용하실 수 있습니다.

  • 기술적인 이해 없이도 설명에 따라 안전한 설정을 하고 싶다. → 포스팅 앞 부분, 바로 이어지는 ‘Step by Step’을 읽어보시기 바랍니다.
  • 내용을 좀 더 이해하고 싶다. → 포스팅 뒷부분까지 전부 읽고, 인용되어 있는 외부 링크나 용어까지 추가로 확인해 볼 것을 권해드립니다.

Behavior Tree를 알아봅시다

안녕하세요. 저는 Clova를 구성하는 시스템 가운데 NLU(Natural Language Understanding,자연어 이해)파트의 서버쪽 개발을 담당하고 있는 @overlast입니다.

얼마전에 Youichiro Miyake(三宅陽一郎)씨와 대담(일본어)을 나눌 기회가 있었는데요. 이야기하다보니 게임 업계에서 캐릭터 AI 등을 만들 때 자주 사용되는 Behavior Tree(행동 트리) 모델을 저는 아직 한번도 다뤄본 적이 없다는 사실을 깨달았습니다. 이에 ‘좋은 기회다’ 싶어 이참에 Behavior Tree와 기존 구현체를 사용해 보고 이 내용을 정리하게 되었습니다.


그림 1 : ‘수중에 지닌 돈과 기분에 따라 주변 자판기에서 음료 구입하기’의 Behavior Tree

Go SDK로 Flex Message 구현하기

안녕하세요? 교토 개발실에서 근무하는 @sugyan입니다. 교토의 여름은 이번에 처음 겪는데, 와 정~말 엄청난 더위네요.

2018년 6월, LINE Messaging API에서 사용할 수 있는 새로운 메시지 유형 ‘Flex Message’가 추가되었습니다. 복잡한 레이아웃이 가능해지면서 맞춤형 메시지를 보낼 수 있게 되었지요. 공식 SDK에서도 Flex Message를 지원하기 위해 즉각 구현에 착수했습니다. 이번 포스팅에서는 Go SDK 담당자로서 Flex Message 지원 기능을 구현하면서 얻은 노하우를 공유할까 합니다.

테크니컬 라이팅 컨퍼런스: Write the Docs Prague 2018 방문기

안녕하세요. Clova 기술 문서 작성 및 관리 업무를 맡고 있는 Technical Writing 팀 강정일입니다.

Write the Docs(이하 WTD)는 커뮤니케이션, 문서, 그리고 사용자를 연구한 경험을 서로 공유하는 커뮤니티입니다. WTD는 특히 소프트웨어 산업과 관련된 분야에 좀 더 집중하고 있습니다. 이 커뮤니티는 매년 정기적으로 봄에는 미국 포틀랜드에서, 가을에는 체코 프라하에서 WTD 컨퍼런스를 열고 있는데요. WTD 컨퍼런스에서 참석자들은 각자가 문서 및 프로젝트를 관리하면서 얻은 경험을 공유하고, 좀 더 관심있는 주제가 있으면 토론도 하면서 새로운 사람과 뉴스를 접할 수 있는 기회를 가집니다.

이번 글에서는 제가 들었던 세션 중 가장 기억에 남는 두 세션과 각 세션에 대한 제 소감을 공유해드리려고 합니다.


딥 러닝 음성 인식에 필요한 훈련 데이터를 직접 만들어보자

안녕하세요, LINE에서 광고 플랫폼 개발을 맡고 있는 1년차 신입사원 Kunihiko Sato입니다.

이번 블로그에서는 Python을 사용해서 임의의 Signal-to-Noise ratio(SN비)를 가진 음성 파형을 만드는 방법을 소개하겠습니다. 참고로 이 포스팅의 내용은 Clova 등 LINE의 음성 사업과는 관련이 없습니다.

음성 처리 분야에서의 딥 러닝

오래 전 딥 러닝이 이미지 처리 분야에서 기술 혁신을 일으켰는데, 음성 처리 분야에서도 비슷한 일이 벌어지고 있습니다. 딥 러닝으로 음석 인식의 정밀도가 크게 향상되면서, Amazon Echo나 Google Home, LINE Clova와 같은 AI 스피커가 개발되어 시장에 보급되었습니다. 또, 컴퓨터로 음성을 생성하는 문자 음성 변환(Text-to-Speech)의 정밀도도 높아져서 실제 사람의 목소리와 분간하기 힘들 정도의 음질이 되었습니다.

음원 분리에 적용된 딥 러닝

위에서 언급한 사례 외에도 딥 러닝을 통해 정밀도 측면에서 많은 발전을 이룬 음성 처리 분야들이 있는데요. 그 중 하나가 음원 분리입니다.

AIR GO를 소개합니다

AIR GO는 Android와 iOS의 패키지 파일(APK 파일과 IPA 파일)을 스캔하여 취약점을 찾아주는 서비스입니다. 오프소스 툴인 SandDroid를 사용해보신 분이라면 어떤 서비스인지 쉽게 떠올릴 수 있을 것 같습니다. 최근 LINE에서는 앱을 배포하기 전에 AIR GO를 활용하여 취약점을 발견하고 통지함으로써 앱에 포함된 위험을 미리 제거하고 있습니다. 또한 AIR GO는 누구나 간단한 이메일 계정 등록만으로 사용 가능한 서비스입니다. 보안 서비스 ‘AIR’는 이미 한 번 소개된 적이 있는데요. 이번에는 엔지니어의 관점에서 AIR를 구성하는 도구 중 하나인 AIR GO에 대해서 소개드리려고 합니다.

airgo_main

따로 놀던 슬랙봇, gRPC 통해 하나 되기

안녕하세요? LINE IT 전략실에서 사내 시스템의 개발 및 운영을 담당하고 있는 suzuki-shunsuke입니다. 오늘은 얼마 전 grpc를 이용해 여러 개의 슬랙봇(Slack Bot)을 하나로 통합했던 이야기를 해볼까 합니다.

배경

저는 사내 Slack을 관리하는 팀에서 슬랙봇을 개발하고 운영도 하고 있습니다. 어느 날 ‘봇을 하나로 합쳐줬으면 좋겠다’는 요청이 있었습니다. 다음과 같은 이유 때문이었습니다.

  • 대화창에 여러 봇을 초대하기 번거롭다.
  • 어떤 봇들이 있는지 다 알 수 없다
  • 여러 봇을 자꾸 추가하는 것보다는 하나의 봇에 기능을 추가하는 편이 사용자 입장에서 봇에 더 애착이 간다.