About Arcus Arcus에 대한 기본적인 이해가 필요하여 작성한다. Arcus Cache Cloud Arcus는 Naver Corp에서 개발한 Memcached 기반의 캐시 클라우드다. Arcus-Memcached는 Naver 서비스들의 기능 및 성능 요구 사항을 지원하도록 크게 수정되었다. Arcus는 Memcached의 기본 Key-Value 데이터 모델 외에도 구조화된 형태로 복수의 Value를 저장 및 탐색하기 위해 Collection Data Structure(List, Set, B+tree)를 지원한다. Arcus는 ZooKeeper를 사용하여 다수의 Memcached node의 cluster를 관리한다. 각 Cluster 또는 Cloud는 각각 자신의 Service Code로 식별된다. Service Code를 Cloud의 이름이라고 생각하면 편하다. 사용자는 즉석에서 Memcached Nodes 또는 Clouds를 추가 및 제거할 수 있다. 그리고 Arcus는 자동으로 실패한 Node를 제거한다. Arcus의 아키텍쳐는 아래 이미지에 나와있다. Memcached Node는 그들의 이름(IP...…
Kotlin 시작하기
INDEX Starting Kotlin Overview Kotlin for Server-Side Kotlin for Android Kotlin for JavaScript Install IDE IntelliJ IDEA Eclipse END Starting Kotlin Google이 채택한 Kotlin을 공부해보고자 한다. Overview Kotlin for Server-Side Kotlin은 Server-Side 어플리케이션을 개발하기에 가장 적절하다. 매우 부드러운 학습 곡선을 가지고 있고 기존에 Java로 개발된 기술 스택에 100% 호환성을 가지면서 정확하고 간결한 코드 작성을 지원한다. 표현성(Expressiveness) Kotlin의 혁신적인 특징들(Type-Safe Builders, Delegated Properties 등)은 강력하고 사용하기 쉬운 추상화를 구현하는데 도움이 된다. 확장성(Scalability) Kotlin의 Coroutines 지원은 적절한 하드웨어 요구사항을 가지고 많은 클라이언트를 다룰 수 있도록 확장하는 Server-Side Application을 구축하는데 도움이 된다. 상호 운용성(Interoperability) Kotlin은 모든 Java Framework들과 완벽하게 호환되므로 친숙한 기술 스택들을...…
함수형 프로그래밍?(Functional Programming)
Functional Programming(함수형 프로그래밍) 지난 토요일에 T 회사 인턴 면접을 보고 왔다. 해당 회사 모바일 개발 직군에 인턴으로 지원하기도 했고, 전 회사에서 하던 것이 Android라서 최근에 구글이 선택한 Kotlin을 공부하기 시작했다. 면접에서 요즘에 공부하는 것이 무엇이냐는 질문에, Kotlin을 막 공부하기 시작했다고 대답했다. 그러자 면접관께서 Kotlin, Swift 등 최근 함수형 언어(Functional Language)가 뜨고 있는데 그 이유를 알고 있느냐고 질문하셨다. Kotlin 공부를 하게 된 이유는 함수형 언어이기 때문이 아니라, 단순히 구글이 Android 언어로 Kotlin을 선택했기 때문이다. 그래서 질문에 대답하지 못했다. 하지만 아는 것이 힘이니 오늘 그 이유에 대해 알아보고자 한다. 함수형 프로그래밍이란(About Functional Programming) 함수형 프로그래밍 은 자료 처리를 수학적 함수의 계산으로 취급하고...…
운영체제 정리 및 복습
Operating System Implementing File Systems Introduction BLOCK 디스크와 메모리 사이를 오가는 데이터의 단위 각 Block은 하나 이상의 섹터(Sector)를 가지는데, 보통 512bytes다. Virtual File Systems UNIX 계열과 non-UNIX 계열 파일 시스템을 동시에 지원한다. 하나의 System Call Interface로 다른 타입의 파일 시스템을 이용할 수 있다. VFS serves two important functions 깔끔한 VFS Interface를 정의함으로써 구현(Implemetation)과 각각의 동작(Operations)을 분리한다. File을 나타내는 독자적인 매커니즘을 제공한다. VFS는 vnode라고 불리는 구조체에 기반한다. Allocation Methods 정의 파일을 위해 disk space를 어떻게 할당할 것인가? Efficient Utilization과 Fast Access는 할당 방법에 의존한다. Contiguous Allocation 각각의 파일은 인접한 block들의 집합으로 디스크에 점유한다. 첫 block에 파일의 길이가 저장되어있다. 문제점 파일이 할당되었다가...…
디자인패턴 복습 및 정리
Design Pattern SOLID Principle SRP(Single Resposibility Principle) 소프트웨어의 설계 부품(클래스, 함수 등)은 단 하나의 책임만을 가져야 한다. 여기서 책임이란 ‘기능’으로 볼 수 있다. 만약 한 클래스가 여러 기능을 수행한다면 해당 클래스는 책임이 많아진다. 책임이 많을 수록 클래스 내부의 함수끼리 강한 결합이 발생할 가능성이 높아진다. OCP(Open-Closed Principle) 기존의 코드를 변경하지 않고(Closed) 기능을 수정하거나 추가할 수 있도록(Open) 설계해야 한다. OCP를 만족하는 설계의 핵심은 변경되는 것이 무엇인지에 초점을 맞추는 것이다. 자주 변경되는 내용은 수정하기 쉽게 설계하고, 변경되지 않아야 하는 것은 수정되는 내용에 영향을 받지 않게 하는 것이 포인트다. OCP를 만족하기 위해 주로 사용되는 문법이 인터페이스(Interface)이다. LSP(Liskov Substitution Principle) 자식 클래스는 부모 클래스에서 가능한...…
데이터베이스 복습 및 정리
Database ACID ACID는 1970년대 말에 짐 그레이에 의해 정의되었으며, Database Transaction이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. Atomicity(원자성) Transaction과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 속성. ex) 자금 이체는 선공할 수도 실패할 수도 있지만, 보내는 쪽에서 돈을 빼오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. Consistency(일관성) Transaction이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 Transaction은 중단된다. Isolation(고립성) Transaction을 수행 시, 다른 Transaction의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 Transaction 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을...…