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. 함수형 언어 적용기
현재까지는 함수형으로 따라가는 중
한번에 변화하려 하지 않고, 조금씩 천천히 장점 파악 및 실제 적용 여부 검토중
다른 사람들에게 변화를 강요하지 않고 스스로 받아들일 수 있도록 시도