본문 바로가기

Design

(8)
Atomic 원자(Atom)는 물질의 화학반응을 통해 더 쪼갤 수 없는 단위를 말한다. 현대 물리학의 관점에서 볼 때 원자는 원자핵과 전자로 이루어져 있으며, 원자핵은 중성자와 양성자로 구성된다. 또 핵반응을 통해서는 더 작은 단위로 나뉜다. 원자의 정의에 따라 원자의 특성(Atomic)은 더 이상 나누어 질 수 없는 최소 단위라는 의미를 갖는다. 갑작스럽게 원자 이야기를 꺼낸 이유는 객체지향의 원리를 설명하기에 효과적이기 때문이다. 간단한 원자의 원리를 생각해 보면 좋겠다. 우리는 물을 구성하는 화학물질이 산소와 수소라는 것을 잘 알고 있다. 그리고 화학식으로는 H2O라고 표현하는 것을 잘 알고 있다. 이 것은 2개의 수소 원자와 1개의 산소 원자의 화학적 결합을 의미한다. 그래서 물을 전기분해하면 산소와 수소를 ..
Jikji Code 클라우드(Cloud Computing) 환경을 기반한 서비스의 안정적이고 효율적인 운영을 위한 데브옵스(DevOps) 사례를 소개하는 발표를 했었다. 당시에 발표자료를 준비하면서 문득 떠오른 생각이 있었다. 클라우드 환경의 시스템을 코드로 관리하는 방법에 대한 개념과 실천 방법에 대한 소개였다. 이 것을 잘 설명하는 비유를 생각하다가 우리나라 사람이라면 한 번쯤은 들어봤을 법한 '직지'가 떠올랐다. 우리가 자랑스럽게 생각하는 현존하는 세계 최고(最古, 가장 오래된)의 금속활자와 그 활자로 출판한 책이다. 직지와 인프라스트럭처 코드(Infrastructure as Code)는 닮은 점이 있다. 반복적인 작업을 피하고 대량의 결과물을 효율적으로 생산한다는 같은 목적을 갖는다. 그리고 틀을 만드는 초기 비용이..
Polymorphism 지난 번에 은닉화(Encapsulatioin)에 대해 이야기 했다. 인터페이스가 가지는 특징 중 가장 큰 것이 바로 상대를 배려하는 은닉화라고 말했다. 객체기반프로그래밍(Object Oriented Programming)이 가지는 유지보수의 유연함은 바로 이 특징에서 나온다는 이야기를 했다. 그렇다면 그 개념을 확장해서 다형성(Polymorphism)에 대해 생각해 보자. 무엇인가를 요청했을 때 실제로 어떻게 동작하는 지 간섭하지 않는 것이 은닉화의 특징이라고 했다. 그렇다면 요청을 받는 쪽에서 어떻게 실행 할 지 스스로 결정할 수 있으며 그 방법은 매우 다양하게 나타날 수 있다. 예를 들어 아이스크림 2개를 구매해 달라고 부탁했다고 생각해보자. 아이스크림 가격을 지불하고 작업 수행을 요청하면 요청을 받..
Circuit Breaker 마이크로서비스(Microservices)를 기반으로 운영하다보면 간혹 인기가 많은 특정 서비스에 요청이 집중되는 현상이 나타난다. 보통 어카운트(Account) 또는 프로파일(Profile) 서비스에 부하가 많이 몰린다. 하지만 대부분 성능 검증(Load Test, Stress Test, Aging Test)을 통해서 서버(Server) 한 대당 어느 정도를 처리할 수 있을 지 미리 가늠할 수 있고, 그 결과를 기준삼아 스케일 아웃(Scale-out) 정책을 펼쳐서 몰려드는 요청을 처리할 수 있다. 대부분은 이러한 방식으로 처리가 가능하지만, 특수한 예외상황도 존재한다. 이를테면 인증 서비스(Authentication, i.g., sign-in/log-in)에서 문제가 발생했을 경우가 있다. 사용자들이 ..
Microservices, and Hangul(한글) 2016년, 마이크로서비스(Micro-services) 또는 마이크로서비스 아키텍처(MSA, Microservices Architecture)에 대해 회사 내부에서 세미나를 했었다. 세미나의 시작은 스핀에커(Spinnaker)를 소개하는 것이었지만, 스핀에커를 잘 소개하기 위해서는 많은 배경지식을 먼저 소개해야 했고 그래서 마이크로서비스, 이뮤터블 인프라스트럭처(Immutable Infrastructure), 지속적 전달(Continuous Delivery) 등의 개념과 특징, 장점, 사례 등을 설명하는 것이 필요했다. 그 중 중요한 한 가지 주제는 마이크로서비스였다. 마이크로서비스를 설명하면서, 청중의 이해를 돕기 위해 키보드를 예시로 들었다. 대부분의 사람들이 컴퓨터에는 익숙했기 떄문에, 그 들에게 ..
Netflix Frigga AWS(Amazon Web Services)를 사용하다보면 몇가지 제약사항을 만나게 된다. 가장 먼저 만나게 되는 제약사항은 S3 버켓(Bucket) 이름이다. S3 버켓은 domain을 만드는 기준이 되기 때문에 세계에서 유일해야 한다. 이러한 제약사항을 미리 알고 있었으나, 클라우드 포메이션(CloudFormation)으로 S3의 버켓 이름을 자동으로 생성하면서 버켓이름이 충돌했던 경험이 있었다. Music Radio 를 설계하던 시절이었는데, 애플리케이션(Application) 배포를 위한 deploy, 그리고 로그 보관을 위한 log 버켓을 만들도록 클라우드 포메이션을 작성했었고, 처음에는 문제가 없었다. 그러나 곧 개발, 검증, 운영환경을 복사해서 만들다 보니 문제가 생겼다. 같은 이름으로 버켓..
Encapsulation 객체 지향 설계법, 또는 객체 지향 프로그래밍(OOP: Object Oriented Programming)은 이제 너무 흔한 말이 되었다. 객체지향방법을 적용하면 유지보수가 쉽기 때문에 소프트웨어의 품질이 올라간다는 이야기도 이제는 고전이 되었다. 하지만, 왜 유지보수가 편한지 쉽게 납득시켜주는 경우는 별로 없었다. 완전히 추상적이고 철학적이거나 아니면 '그냥 그런 것'이라고 단정짓는 경우가 대부분이었다. 많은 학생들의 사정도 비슷했을 것이다. 회사 과제를 하면서 만나게 된 많은 개발자들이 자바(Java)를 사용하고 있었으나, 그 사람들이 만든 결과물의 품질은 높지 않았다. 기능을 변경하는 것에 유연하지 못했으며, 기능변경에 대한 부작용이 너무 컸다. 검증 기간 중에는 자신이 만든 코드(Source Co..
Cloud-Native Update: 클라우드 네이티브(Cloud-Native)의 지향점이 안정성과 효율성, 빠른 변화대응이라고 하지만, 정작 CNCF(Cloud Native Computing Foundation)의 페이지가 이렇게 빨리 변할 것이라고는 생각하지 못했다. 다음과 같이 클라우드 네이티브의 정의 (Cloud Native Definition v1.0)가 공식 문서로 재탄생했다. 가장 크게 바뀐 내용은 컨테이너가 필수조건이 아니라는 것이다.Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clo..