summer homework

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

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

안전한 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 지원 기능을 구현하면서 얻은 노하우를 공유할까 합니다.

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

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

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

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

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

음원 분리에 적용된 딥 러닝

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

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

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

배경

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

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

Kotlin으로 서버사이드 개발과 Clova Skill Award 도전!

LINE Engineering Blog를 찾아주신 여러분, 안녕하세요? 오늘은 두 명이 공동으로 작성한 포스팅입니다. 저희 소개 먼저 드리겠습니다. LINE에서 게임 플랫폼 개발을 맡고 있는 Kagaya와 동영상 생중계 서비스 LINE LIVE의 Android 앱 개발을 맡고 있는 Akira입니다.

이번 포스팅에서는 아래 두 가지 이야기를 통해 서버사이드 Kotlin에 관한 노하우와 유스케이스를 공유할까 합니다.

  1. Kagaya가 담당하는 LINE GAME 플랫폼의 Kotlin 이용 현황 이야기
  2. ‘LINE 사내 Clova Skill Award’에 저희 둘이 팀으로 참가해서 Kotlin으로 영광의(?) 최우수상을 수상한 이야기

Promgen은 알림을 어떻게 전달할까요?

안녕하세요, Paul Traylor입니다. 저는 현재 LINE Fukuoka 개발팀에서 LINE 계열의 앱이 사용하는 수많은 서버를 모니터링하는 도구를 개발하고 기술 지원하는 업무를 맡고 있습니다. 제 주 업무 중 하나는 Promgen을 관리하는 일입니다. 참고로 Promgen은 Prometheus가 관련된 팀에게 알림을 제대로 전달할 수 있도록 관리하는 도구입니다. 오늘은 Promgen이 알림을 어떻게 전달하는지에 대한 내용을 다뤄보고자 합니다.

Webpack 같은 모듈 번들러를 만들어 보자

안녕하세요, LINE에서 프런트엔드 개발을 담당하고 있는 전현제입니다. 이번 포스팅에서는 JavaScript 생태계의 구성 요소 중 하나인 모듈 번들러(module bundler)에 대해 소개하려 합니다. 먼저 모듈 번들러의 개념을 간단하게 소개한 후 모듈 번들러가 실제로 어떻게 작동하는지에 대해 직접 모듈 번들러를 만들어 본 경험담을 함께 나누고자 합니다.

모듈 번들러란?

모듈 시스템이란 규모가 큰 코드 베이스를 모듈이라는 단위로 분할할 수 있게 만드는 구조를 말합니다. 자바스크립트에는 오랫동안 모듈 시스템이 없는 상태였는데, 2009년 Node.js가 CommonJS라는 모듈 시스템을 사용하기 시작한 이후 모듈화된 코딩을 하는 것이 보편화되었습니다. 또, ECMAScript 2015에서 자바스크립트 언어 사양에 신규 모듈 시스템인 ES Module이 포함되어 이제는 모듈 없이 자바스크립트로 코딩하기 힘들어졌다고 할 수 있을 정도입니다.

Clova에서 사용하는 머신 러닝 모듈 관리 플랫폼, Rekcurd를 소개합니다

안녕하세요? LINE에서 Clova의 자연어 이해(NLU, Natural Language Understanding) 유닛을 개발하고 있는 Hattori(keigohtr)입니다. 바야흐로 머신 러닝 붐이 일고 있습니다. 여러분도 이미 머신 러닝을 활용하고 있거나, 상사나 주위 동료로부터 적용해보라는 권유를 받고 있지 않으신가요? 다행히 요 몇 년 머신 러닝이 유행하면서 관련 툴이나 프레임워크가 굉장히 다양해졌습니다. 덕분에 선형 회귀나 로지스틱 회귀, Perceptron, Adaboost, Random Forest, Support Vector Machine, XGBoost 등 기타 여러 가지 딥러닝 알고리즘을 누구나 손쉽게 접할 수 있게 되었습니다. ‘학습(learning)’ 관련 도구나 프레임워크는 풍부해진 반면, 구축한 머신 러닝 모듈의 ‘운영’에 관한 도구나 프레임워크는 아직 많지 않은 편입니다. 그래서 오늘은 여러분께 LINE의 AI 플랫폼 Clova에서 사용하는 머신 러닝 모듈 관리 플랫폼인 Drucker를 소개해 드릴까 합니다.