Software Development
-
[데이터 중심 애플리케이션] 복제(분산 데이터)Software Development/Database 2021. 10. 16. 19:19
여러 장비 간 분산된 데이터베이스를 필요로 하는 이유 확장성: 데이터 볼륨, 읽기 부하. 쓰기 부하가 단일 장비에서 다룰 수 있는 양보다 커지면 부하를 여러 장비로 분배할 수 있다. 내결함성/고가용성: 장비 하나가 죽더라도 애플리케이션이 계속 동작해야 한다면 여러 장비를 사용해 중복성을 제공할 수 있다. 장비 하나가 실패하면 다른 하나가 이어받는다. 지연 시간: 사용자와 지리적으로 가까운 곳의 데이터센터에서 서비스를 제공하기 위해 전 세계 다양한 곳에 서버를 두고 싶을 것이다. 고부하로 확장 더 강력한 장비를 구매하는 것이 가장 간단한 방법. 많은 CPU, 많은 메모리 팁, 많은 디스크를 하나의 운영체제로 함께 결합할 수 있다. 빠른 상호 연결로 모든 CPU가 메모리나 디스크의 모든 부분에 접근할 수 있..
-
[데이터 중심 애플리케이션] 저장소와 검색Software Development/Database 2021. 9. 5. 21:05
해시 색인 프로그래밍 언어에서 볼 수 있는 사전 타입과 유사. 파일에 추가만 한다면 디스크 공간이 부족. 해결: 세그먼트로 로그를 나누는 방식. 세그먼트 파일들에 대해 컴팩션을 수행 컴팩션은 로그에서 중복된 키를 버리고 각 키의 최신 갱신 값만 유지. 추가와 세그먼트 병합은 순차적인 작업이기 때무에 무작위 쓰기보다 훨씬 빠르다. 세그먼트 파일이 추가 전용이나 불변이면 동시성과 고장 복구는 훨씬 간단하다. 오래된 세그먼트 병합은 시간이 지남에 따라 조각화되는 데이터 파일 문제를 피할 수 있다. 해시 테이블은 메모리에 저장해야 하므로 키가 너무 많으면 문제가 된다. 디스크에 해시 맵을 유지할 수 있지만 불행하게도 디스크 상의 해시 맵에 좋은 성능을 기대할 수 없다. 해시 충돌 해결을 위한 복잡한 로직도 필요..
-
[MongoDB] 몽고디비 정리Software Development/Database 2021. 7. 7. 19:27
'몽고디비 인 액션 '의 내용을 바탕으로 정리하였습니다. 코어 서버 MongoDB를 상용에서 구동할 때는 복제가 권장사항이며, 두 개의 복제 노드와 아비터 모드로 구동하는 mongod로 이루어진 복제 세트가 일반적이다. 자바스크립트 셸 MongoDB 명령어 셸은 자바스크립트에 기반한 툴인데, 데이터베이스를 관리하고 데이터를 조작하는 데 사용. 데이터베이스 드라이버 모든 드라이버는 애플리케이션상에서 MongoDB 서버와 통신하기 위해 사용된다. 모든 드라이버는 질의, 결과 검색, 데이터 쓰기, 데이터베이스 명령어를 실행하기 위한 기능을 가지고 있다. 커맨드라인 툴 MongoDB는 여러 가지 커맨드 라인 유틸리티가 번들로 제공된다. mongodump, mongorestore: 데이터베이스 백업과 복구를 위한..
-
[FP In Scala] 지역 효과와 변이 가능 상태Software Development/Scala 2021. 6. 16. 13:21
참조 투명성 개념을 다룬다. 효과가 한 표현식 안에서 지역적으로 발생할 수 있다는, 그리고 그런 효과가 발생했음을 더 큰 프로그램의 다른 부분이 전혀 관측하지 못함을 보장할 수 있다는 착안을 살펴본다. 1. 순수 함수적 변이 가능 상태 순수 함수형 프로그래밍에서 mutable 상태를 사용할 수 없을 것 같지만 그렇지 않다. 참조 투명성과 순수성의 정의를 자세히 보면 지역(local) 상태의 변이를 금지하는 사항은 전혀 없음을 알 수 있다. 참조 투명성과 순수성의 정의를 다시 살펴보면.. 참조 투명성과 순수성의 정의 만일 모든 프로그램 p에 대해 표현식 e의 모든 출현을 e의 평가 결과로 치환해도 p의 의미에 아무런 영향을 미치지 않는다면, 그 표현식 e는 참조에 투명하다. 표현식을 해당 표현식의 평가(e..
-
[FP In Scala] 외부 효과와 입출력Software Development/Scala 2021. 6. 6. 19:33
모나드와 대수적 자료 형식으로 데이터베이스 조회나 파일 기록 같은 외부 효과를 처리하는 방법에 대해 알아본다. 핵심은 효과와 부수 효과의 구분이다. IO 모나드는 I/O효과를 수반한 명령식 프로그램을 참조 투명성(함수 외부의 영향을 받지 않는 것)을 어기지 않고 순수 함수적 프로그램에 내장하는 방법을 제공한다. 이 모나드는 효과 있는(effectful) 코드, 즉 외부 세계에 일정한 영향을 미쳐야 하는 코드를 프로그램의 나머지 부분과 명확히 분리한다. 또한 효과 있는 계산의 서술(description)을 순수 함수를 이용해서 계산하고, 그 서술을 개별적인 해석기를 이용해서 실행함으로써 실제로 효과를 수행한다는 것. 이는 명령식 프로그래밍을 위한 내장 영역 국한 언어(embedded domain-speci..
-
[FP In Scala] 모나드Software Development/Scala 2021. 5. 23. 15:53
모노이드: 완전히 추상적이고 순수한 대수적인(결합법칙 + 항등법칙) 인터페이스 -> 다형적 함수 작성 가능 -> 문제를 여러 조각으로 나눠 병렬 계산 용이 -> 복잡한 계산 생성 가능 모노이드와 비슷한 사고방식을 이어나가며 중복된 코드를 추출하는 문제에 적용해 그 과정에서 새로운 추상 인터페이스 Functor와 Monad를 알아본다. 1. Functor: map 함수의 일반화 Gen 형식, Parser 형식, Option 형식에 대한 map 함수의 서명 def map[A,B](ga: Gen[A])(f: A => B): Gen[B] def map[A,B](pa: Parser[A])(f: A => B): Parser[B] def map[A,B](oa: Option[A])(f: A => B): Option[B..
-
[FP In Scala] 순수 함수적 병렬성Software Development/Scala 2021. 5. 2. 15:52
병렬 및 비동기 계산의 생성을 위한 순수 함수적 라이브러리 하나를 구축한다. 병렬적 프로그램에 내재하는 복잡성을, 오직 순수 함수만으로 프로그램을 서술함으로써 통제해 볼 것이다. 이를 통해 치환 모형을 이용해서 추론을 단순화할 수 있으며, 그러다 보면 바라건대 동시적 계산을 쉽고 즐겁게 다룰 수 있게 될 것이다. 순수 함수적 병렬성을 위한 라이브러리의 작성 방법. 순수 함수적 라이브러리의 설계 문제에 대한 접근방식. 주제: 계산의 서술이라는 관심사 -> 계산의 실제 실행이라는 관심사와 분리 프로그램의 구체적인 실행 방식에 관한 세부사항과는 격리된 수준에서 프로그램을 작성할 수 있어야 한다. parMap이라는 조합기를 개발할 것인데, 이를 이용하면 함수 f를 한 컬렉션의 모든 요소에 동시에 적용할 수 있다..
-
[FP In Scala] 함수적 자료구조Software Development/Scala 2021. 4. 11. 18:39
함수적 프로그램은 변수를 갱신하거나 mutable(변이 가능)한 자료구조를 수정하는 일이 없다. 함수형 프로그래밍에서 사용할 수 있는 자료구조는 어떤 것일까? 함수적 자료구조가 무엇이고 그것을 다루는 방법에 대해 알아보자. 이를 통해 함수형 프로그래밍에서 자료구조를 정의하는 방법을 소개하고 관련 기법인 패턴 부합도 설명한다. 1. 함수적 자료구조의 정의 함수적 자료구조: 오직 순수 함수만으로 조작되는 자료구조 순수 함수: 자료를 변경하거나 부수 효과를 수행하는 일이 없어야 한다. 함수적 자료구조는 정의에 의해 불변이(immutable). ex) 빈 목록(List()나 Nil), 정수 3이나 4 3 + 4를 평가하면 3이나 4가 수정되는 일이 없다. 마찬가지로 두 목록을 연결하면 목록은 변하지 않고 새로운..