과거 IT 시스템에서는 하드웨어가 중심이었기 때문에 시스템을 확장하기 위해서는 추가적인 하드웨어 구매가 필요했고 비용적인 측면에서 부담으로 다가왔다. 그렇기에 소프트웨어 변화가 어려웠고 깨지기 쉬운 시스템이 많이 존재했다. 기술의 발전으로 인해 하드웨어의 가격은 안정화되었고 초점을 소프트웨어로 돌리기 시작했다. 이로 따라 안정적이고 성능 높은 서비스를 개발하기 위해 큰 노력을 하게 되었고 시스템 분산화가 등장하게 된다. 최근에는 시스템을 로컬 환경에서 운영하는 것이 아닌 클라우드로 이전하게 되었고 탄력적인 시스템을 구축할 수 있게 되었다. 그렇다고 비용이 증가한 것인가? 비용 또한 직접 저렴하게 사용할 수 있다. 이러한 시스템 아키텍처를 클라우드 네이티브 아키텍처라고 한다. 앞으로도 지속해서 발전하고 상..
추상화를 통한 복잡성 극복 초기 지하철 노선도는 실제 지형을 반영하여 구불구불한 노선과 불규칙한 역간의 거리를 사실적으로 표현하였다. 하지만 지하철 노선도에서 중요한 정보는 얼마나 사실적으로 지형을 묘사했는지가 아닌 출발지, 도착지, 최단경로, 환승 등과 같은 직관적인 정보이다. 이후 해리 백이라는 사람이 지하철 노선도의 핵심은 지도가 당연히 가져야 하는 정확성이 아닌 목적에 집중해야 함을 깨닫고 혁신적인 지하철 노선도를 개발하게 된다. 이는 지하철 노선도를 추상화한 것이다. 현실 세계는 매우 복잡하고 예측이 불가능하다. 따라서 이해하기 쉽고 예측할 수 있도록 분해하고 단순화하는 전략을 사용한다. 따라서 진정한 추상화란 불필요한 부분을 제거하며 사물의 본질을 드러나게 하는 것으로 시작한다. 불필요한 부분..
네트워크 통신 Network 컴퓨터 간의 데이터를 주고받기 위해서는 즉, 통신을 하기 위해서는 네트워크가 필요하다. 네트워크란 컴퓨터 노드들이 자원을 공유할 수 있도록 링크로 연결하여 하나의 망을 만든 것을 의미한다. 이러한 연결이 존재하기 때문에 노드(컴퓨터) 간의 데이터 교환이 가능하다. 다양한 컴퓨터 시스템 간의 통신을 위해서는 표준 프로토콜이 필요하게 되었고, 국제 표준화 기구(ISO)에서는 OSI Model을 정의하게 되었다. 최초로 정의된 모델은 7계층을 가지고 있었는데 표준이 지속적으로 갱신되면서 현재는 5계층 모델이 전 세계 표준으로 적용되고 있다. HTTP 5계층 모델은 네트워크상의 프로토콜을 정의한 모델이고 인터넷상에서의 주요 프로토콜은 HTTP이다. HTTP는 하이퍼텍스트 전송 프로토..
객체 지향과 인지 능력 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라보기 때문에 객체 지향 패러다임은 직관적이고 이해하기 쉽다. 이러한 객체 지향은 실존하고 구체적인 개념뿐만 아니라 추상적인 개념도 포함되게 된다. 예를 들어 과거의 결제 내역과 지금 진행 중인 결제 내역을 구분하는 것은 어렵지 않은 일이다. 객체를 세분화시키는 행위는 복잡성을 줄여 이해를 높이고자 하는 것이다. 객체, 그리고 이상한 나라 작가는 객체를 설명하기 위해 이상한 나라의 앨리스 이야기를 예를 들어 설명하고 있다. 앨리스는 아름다운 정원에 들어가기 위해 자신의 키를 변화시켜야 하는데 변화는 앨리스의 행동 때문에 발생한다. 글을 읽으며 나도 모르게 앨리스의 키는 멤버변수가 될 수 있을 것이고, 키를 변화시키는..
객체 지향? 객체 지향이라는 말을 보거나 들었을 때 처음 드는 생각은 클래스이다. 관련 있는 데이터를 한 곳에 모아둔 것, 데이터를 다루기 위한 기능을 정의한 것 이를 객체 지향의 용어로 바꾼다면 추상화, 캡슐화, 다형성으로 표현 가능하다. 하지만 서문을 보자마자 객체를 잘못 이해하고 있다는 생각이 들었다. 작가님이 이 책을 통해 전하고자 하는 내용은 객체의 특징을 얼마나 잘 이해하고 있느냐가 아닌 객체를 객체답게 바라보고자 하는 것이다. 이 책을 읽고 다음의 목표를 천천히 달성해 나가야한다. 클래스가 아닌 객체를 바라보는 것 객체를 협력하는 공동체로 바라보는 것 객체에게 적절한 역할과 책임을 부여하는 것 앞선 개념을 프로그래밍 언어에 적용하는 것 객체 지향의 배경 실세계의 정보를 프로그램으로 구현하기 ..