NapuCon 2016


1. Session 1 - Kevin Lee

1.1. Funtional Programming

  • 함수형 언어란

  • 수학의 함수와 같은 의미

  • 함수형 언어를 사용해야 하는 이유(함수형 언어의 장점)

  • 동시성 - 유휴자원을 최소화 하여 서버를 최대한 활용하기 위함

  • 간결 - 코드의 질과 가독성이 높아짐

  • 명확 - 기능별 분리 및 메소드의 관심사가 명확해짐

  • 테스트가 간결해진다 - 레거시 코드 양산 방지

  • Side Effect가 OOP보다 줄어든다

  • 재미가 있음?????????

1.2. ETC

  • Test Case 작성의 필수라고 생각되는 Mock을 사용하지 않고 Interpreter Pattern을 통해 Test Code 작성하는 방법이 있음

2. Session 2 - Rakuten 전민수 Lead Architect, Rakuten 심재민 Architect

2.1. Rakuten의 구조 및 업무 프로세스 - Rakuten 심재민 Architect

  • Application Layer Architect + System Layer Architect

  • 각 영역의 Architect가 설계

  • 누군가는 기술 검증 및 적용 여부 검토를 해서 적용

  • 잘 적용하고있는지, 바르게 사용하고 있는지 피드백 및 교육을 진행

  • 레거시 방지를 위해서 일정 부분에 대해서는 룰을 정해서 룰을 따라감

  • 업무 관련 Software

  • JIRA

  • Bitbucket

  • Confluence

  • HipChat

  • Integrated Development Environment Tool

  • Eclipse

  • IntelliJ

  • Persistence Middleware

  • MySQL

  • Oracle

  • MongoDB

  • Redis

  • Hadoop

  • Cassandra

  • Web (Application) Server

  • Apache

  • Apache Tomcat

  • Programming Language & Framework

  • Spring Framework

  • Laravel Framework

  • Angular JS

  • Software Development Methodology

  • Agile과 Waterfall을 혼용

2.2. Rakuten의 Realtime Search Platform 적용 사례 - Rakuten 전민수 Lead Architect

2.2.1. Verifications

  • Horizontal Scale Out

  • Low Latency

  • Trouble Shooting

  • Service Level Agreement 99.95%

  • Fault Tolerance

  • Cost Efficiency

  • Flexibility

  • Sync with Master Data

2.2.2. Target Middleware

  • MongoDB

  • 적합 판정으로 채택

  • MemSQL

  • 검증 결과 부적합 판정으로 제외

  • Cassandra

  • Java에서 Cassandra 사용에 대한 어려움이 존해

  • 특정 상황에서 퍼포먼스가 떨어지는 현상이 있음

  • Oracle Coherence

  • 비용 문제로 인하여 제외

  • ActiveMQ

  • 검증 결과 부적합 판정으로 제외

  • RabbitMQ

  • 적합 판정으로 채택

  • Redis

  • 당시 Clustering지원이 되지 않아 고민 후 자체 기술력으로 해결

2.2.3. How To

  • Front Response 2,000ms

  • Backend Response 500ms

  • Master - Slave Cache Memory DB

  • 지속적으로 Logging 및 Tracking

  • 지속적으로 Monitoring APM Management

  • Release Service include build CI / CD pipeline

2.2.4. Result

  • Provides reliable NoSQL-based search

  • 99.98% guarantee data Sync with Master DB

  • Removing repetitive tasks in Automation

  • Supports 11 languages

3. Session 3 - Kakao 서지연(Cheese)

3.1. 아름다운 코드 작성 습관

3.1.1. 룰을 정하자

  • 가독성이 좋아야 한다

  • 유지보수를 생각해야 된다

  • 코드확장을 고려해야 된다

  • style guide

3.1.2. 코드 리뷰

  • sonarqube

  • 정적 코드 분석 및 가시화

  • 잠재 위험 코드 파악

  • pull request로 진행

  • pull approve

3.1.3. Git Branch

  • 기본적인 Branch 구조는 지키자

  • master - 운영 환경 적용 및 버전 관리용

  • develop - 개발 서버 적용 및 테스트 진행용

  • hotfix - 긴급 수정 적용사항으로 master에서 파생하여 master와 develop에 바로 병합

  • feature - 신규 개발 진행용

3.2. 자동 검증 습관

  • CI / CD tool을 활용

  • 빌드 / 배포 자동화

  • 테스트 자동화

  • CI / CD tool

  • go

  • Travis CI

  • Jenkins

  • Code Coverage

  • CODACY

  • 레거시를 줄이자

3.3. 성장하는 습관

  • SNS Follow

  • Community 활동

  • 스스로 노력

  • 발표하기

4. Session 4 - Makeus 김호광(Dennis) CTO

4.1. Serverless Architecture

  • 경주 지진 시 국민안전처 홈페이지 다운

  • 동시접속자가 늘어나 Bandwith를 감당하지 못한 것으로 추측

  • 공기관 홈페이지가 클라우드로 이전하는 것은 거의 불가능

  • AWS는 SLA가 없음

  • 1,000건 중 2건정도 유실되는 것으로 확인

  • 결론은 Docker를 사용하자

5. Session 5 - I/O Inc 박미정 CTO

5.1. 스타트업 극복기

  • 스타트업 조인 시 이미 레거시로 가득

  • 걷어낼 목록 정리

  • 우선순위 결정

  • 점진적인 개선

5.2. 함수형 언어 적용기

  • 현재까지는 함수형으로 따라가는 중

  • 한번에 변화하려 하지 않고, 조금씩 천천히 장점 파악 및 실제 적용 여부 검토중

  • 다른 사람들에게 변화를 강요하지 않고 스스로 받아들일 수 있도록 시도