No Image

모빌(MoBiL) – kakao의 모바일앱 CI/CD 플랫폼

2016-04-21 KENNETH 0

모빌(MoBiL) – kakao의 모바일앱 CI/CD 플랫폼 하나의 모바일 앱이 마켓에 출시되기까지는 수많은 빌드와 배포 과정을 거치게 됩니다. 더 자주, 더 빠르게, 더 높은 품질의 서비스를 출시하기 위해서는 효율적인 빌드와 배포는 필수적입니다. 카카오에는 모바일 앱을 지속적으로 통합(Continuous Integration)하고 지속적으로 배포(Continuous Delivery)하기 위해 자체 개발한 플랫폼 모빌(MobiL)이 있습니다. 이 글에서는 모빌이 어떻게 개발되었고, 어떻게 활용되고 있는지를 소개합니다. 모빌의 시작 모빌의 초기 버전은 2013년에 개발이 시작되었습니다. 당시 서버 애플리케이션의 빌드와 배포는 자동화가 많이 적용된 상황이었지만 모바일 앱은 그렇지 않았습니다. 일부 조직에서는 Jenkins를 이용해 CI 환경을 구축했지만, 대부분은 로컬 빌드 후 수동 배포하는 경우가 많았습니다. 사내 배포 방식 또한 메일, 메신저, JIRA, 리모트 저장소 등 다양했습니다. 이렇게 빌드부터 배포까지 전체 릴리스 과정이 통합되어 있지 않다 보니 비효율적인 부분들이 많았고, 개발자와 QA담당자 사이의 커뮤니케이션 비용이 많이 발생하고 있었습니다. “빌드와 배포 과정에서 비효율적인 부분들을 제거하고 자동화를 통해 전체 릴리스 과정이 매끄럽게 진행될 수 있다면 높은 품질의 [ more… ]

MySQL InnoDB의 Adaptive Hash Index 활용

2016-04-08 KENNETH 0

MySQL InnoDB의 Adaptive Hash Index 활용 개요 MySQL의 InnoDB에는 Adaptive Hash Index 기능이 있는데, 어떤 상황에서 효과가 있고 사용 시 반드시 주의를 해야할 점에 대해서 정리하도록 하겠습니다. InnoDB B-Tree 인덱스 MySQL의 InnoDB의 대표적인 인덱스는 B-Tree입니다. 데이터는 Primary Key 순으로 정렬되어 관리되고, Secondrary Key는 인덱스키+PK를 조합으로 정렬이 되어 있습니다. 즉, 특정 데이터를 찾기 위해서는 Secondrary Key에서 PK를 찾고, 그 PK를 통해 다시 원하는 데이터로 찾아가는 형태로 데이터가 처리 됩니다. 트리의 가장 큰 강점은 데이터 접근 퍼포먼스가 데이터 증가량에 따라서도 결코 선형적으로 증가하지 않다는 점에 있습니다. 참고로, PK 접근 시 데이터 접근에 소요되는 비용은 O(logN)이고,두번 트리에 접근하는 Secondrary Key에 소요되는 비용은 2 * O(logN)입니다. 데이터가 아무리 많아져도, 데이터 접근에 소요되는 비용이 크게 증가되지 않음에도, 상황에 따라 효율이 좋지 않습니다. 자주 사용되는 데이터 탐색에도 매번 트리의 경로를 쫓아가야 한다는 것이죠. 게다가 Mutex Lock이 과도하게 잡히게 되면, 적은 데이터 셋에도 불구하고 DB 자원 사용 [ more… ]

No Image

Weekly Links #1 – 2016년 4월 첫째주

2016-04-08 KENNETH 0

Weekly Links #1 – 2016년 4월 첫째주 Weekly Links에서는 지난 한 주, 카카오의 기술 블로그 담당자가 구독하는 기술 뉴스레터들에서 “인간의 눈”으로 선별한 링크들을 짧은 코멘트와 함께 공유합니다. 포함된 뉴스레터 목록은 awesome-tech-newsletters에서 확인하실 수 있습니다. 2016년 4월 첫째주 추천 링크 Why we chose Akka for our Cloud Device solution – 사탕깨는 모바일 게임으로 유명한 King이 “Cloud Device Solution”을 만들기 위해 Akka를 도입한 과정. 스프링 부트에서 넷플릭스 오픈소스 활용하기 1부 eureka 2부 hystrix 3부 feign 분위기로 봐선 몇 편 더 나올 듯~ Building a lexer and parser with Scala’s Parser Combinators – 스칼라의 표준 라이브러리 Parser Combinators를 활용해서 DSL 인터프리터 만들기. 표준 라이브러리가 이 정도라니… 스칼라 좀 짱인 듯~ The decorator pattern in JavaScript using closures, monkey patching, prototypes, proxies and middleware – 자바스크립트의 클로저를 사용하는 데코레이터 패턴 5가지: 래퍼, 몽키 패치, 프로토타입 상속, 프록시, 미들웨어. 패턴도 공부하고 클로저도 공부하고~ 글이 꽤 [ more… ]

kakao의 오픈소스 Ep4 – HBase Tools

2016-03-24 KENNETH 0

kakao의 오픈소스 Ep4 – HBase Tools “카카오의 오픈소스를 소개합니다” 네번째는 terence.yoo와 동료들이 개발한 HBase Tools입니다. [HBase Tools]는 카카오에서 대규모 HBase 클러스터를 운영하면서 만들어진 도구들을 하나로 묶은 것입니다.​ HBase 주요 버전별 빌드를 제공하고 있어서 가져도 쓰기도 좋지만, HBase의 부실한 도구들 때문에 고생하셨던 분들에겐 나만의 HBase 도구를 만드는 좋은 시작점이 될 것입니다. 1. hbase-tools 소개 툴을 사용하면 HBase 운영 작업의 효율성이 좋아집니다. 카카오에서 사용하는 대표적인 툴 세 가지는 HBase Shell, HBase Web UI, Cloudera Manager Express Edition(이하 CM)입니다. 이 툴들은 매우 우수하지만, 꼭 필요한 기본적인 기능들만 제공합니다. 그래서 그런 기본적인 기능들을 코딩을 통해 이리저리 조합해서 사용해야 하는 경우가 많습니다. 심지어 어떤 기능들은 유료 버전에서만 사용가능 한 것들도 있습니다. 이런 부족한 부분을 채우기 위해서 툴을 하나, 둘 만들었습니다. 툴들이 여럿 쌓이다 보니 관리가 불편하게 되었고, 관리를 편하게 하기 위해서 하나로 모은 것이 hbase-tools입니다. hbase-tools는 세 가지 모듈로 이루어져 있고, 각 모듈 별 주요 [ more… ]

DNS 기반의 Redis HA 구현

2016-03-18 KENNETH 0

DNS 기반의 Redis HA 구현 이번 글에서는 DNS 기반의 Redis HA에 대한 이야기를 해보려고 합니다. DNS TTL이 무엇인지 그리고 그것을 어떻게 이용해서 Redis HA를 구현했는지 살펴보겠습니다. 도메인의 TTL 먼저 도메인의 TTL에 대해 이야기해 보겠습니다. TTL은 Time To Live의 약자로 도메인을 캐싱하고 있는 시간을 의미합니다. 누군가 A라는 도메인에 대해 질의를 했다면 응답을 준 DNS 서버에서 해당 도메인에 대해 TTL 시간 동안 캐싱을 하고 있게 됩니다. 이렇게 동작하는 이유는 같은 도메인을 여러 사람이 질의할 수 있기 때문에 한 번 질의한 내용을 캐싱하고 있는 게 불필요한 동작을 방지할 수 있기 때문입니다. 리눅스에서는 간단하게 dig 명령으로 TTL 시간을 알 수 있습니다. 위 스크린샷은 www.kakao.com에 대한 도메인 질의 결과입니다. 1번 항목은 TTL 시간을 의미합니다. 질의한 도메인에 대해 DNS 서버가 해당 도메인을 캐싱하는 시간입니다. 531초 동안 캐싱하고 있을 거라는 것을 알 수 있습니다. 2번 항목은 www.kakao.com에 대한 도메인 질의 결과를 내려준 서버를 의미합니다. 모든 DNS 서버가 모든 도메인에 대해 [ more… ]