본문 바로가기

개발이야기

(27)
객체 지향의 사실과 오해 3장 일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 것이라는 것을 깨닫고 나면 훌륭한 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다. - Keith Devlin 추상화를 통한 복잡성 극복 추상화란 현실에서 출발하되 불필요한 부분을 제거하면서 사물의 본질을 드러나게 하는 과정이다. 추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 것이다. 어떤 양상, 세부사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법. 복잡성을 다루기 위해 추상화는 두 차원에서 이루어진다. 첫 번째 차원은 구체적인 사물들 간의 공통점은 취하고 차이점은 버리..
객체지향의 사실과 오해 2장 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제이다. - Rebecca Wirfs-Brock 객체지향과 인지 능력 객체지향은 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지능력에 기반을 둔다. 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계 지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있게 한다. 세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림이다. 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 객체란 식별가능한..
객체지향의 사실과 오해 1장 시너지를 생각하라. 전체는 부분의 합보다 크다. - Stephen R. Covey 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. 역할, 책임, 협력 애플리케이션의 기능은 더 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행도니다. 객체는 자신의 책임을 수행하는 도중에 다른 객체에 도움을 요청하기도 한다. 결론적으로 시스템은 역할과 책임을 수행하는 객체로 분할되고 시스템의 기능은 객체간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다. 객체 지향 설계라는 예술은 적절한 객체에 적절한..
LAMP 웹 서버 및 Application Load Balancer 구성 이번 시간에서는 클라우드 네트워크 환경에 Linux 기반의 가상 서버에 Apache 웹 서버, MySQL 데이터 베이스, PHP 어플리케이션을 구성(LAMP)하고 Application Load Balancer를 이용하여 이중화된 네트워크를 구성합니다. 사용하는 AWS 서비스는 다음과 같습니다. Amzaon VPC(VPC, Subnet, Internet Gateway, Route Table, NAT Gateway) Amazon EC2 Amazon EBS Amazon EFS Elastic Load Balancer - Application Load Balancer 웹서버와 웹서버를 운영하기 위한 네트워크 환경까지 모두 구성하므로 사용하는 서비스가 많습니다. 최종적으로 구축해야할 아키텍처는 위와 같습니다. 실습..
서버리스 정적 웹 사이트 호스팅 및 성능 가속화 소프트웨어 마에스트로에서 진행하는 AWS 기술 교육이 시작되었다. (6월 13일 ~ 7월 10일 기초, 7월 20일 ~ 7월 22일 심화 교육) 기초교육으로는 인프런의 온라인 강의를 제공해주셨는데 목차를 보니, 생각보다 양이 많고 다양한 서비스를 다뤄보는 것 같았다. AWS의 유명한 서비스(EC2, S3, Route53등) 밖에 써보지 못했던 나는 이 기회에 제대로된 클라우드 아키텍처 설계를 배우고 정리해보고자 한다. 우선 첫 번째 주제로는 서버리스 정적 웹 사이트 호스팅 및 성능 가속화에 대한 주제이다. 서버가 없어도 구성이 가능한 정적 웹 사이트를 호스팅하고, CDN을 이용하여 웹사이트의 성능을 향상시키는게 이번 챕터의 목표이다. Serverless 서버리스(serverless)란 개발자가 서버를 관..
Agile Development Principle 안녕하세요. 이현진입니다. 저희 팀은 지금 기획 초기 단계에 있고, 프로젝트 진행 전체에 있어서 팀원 모두가 같은 생각을 공유하면 좋을 것 같아서 ‘애자일 방법론’에 대한 글을 작성하게 되었습니다. 소프트웨어 마에스트로라는 과정 자체가 6개월이라는 시간안에 완성된 결과물을 만들어야 하기에 체계가 중요하다고 생각합니다. 스타트업은 실행 속도에 회사의 존폐여부가 달려있다고 합니다. 즉 스타트업에게는 지금 뛰지 않는 것이 가장 큰 리스크입니다. 결국 ‘어떻게 뛸 것인가’에 대한 체계가 없다면 망할 수 밖에 없습니다. 반면 대기업은 어떨까요? 대기업은 리스크를 최대한 줄이고 명확한 책임 소재를 가지고 일을 진행하기 위한 체계를 가지고 있습니다. 이는 우리에게 맞지 않습니다.속도가 필요한 조직과, 리스크 관리가 ..
Component Driven Development (CDD) 컴포넌트 주도 개발, CDD 컴포넌트를 모듈 단위로 개발하여 사용자 인터페이스(UI) 구축에 도달하는 개발 및 설계 방법론입니다. 즉, 컴포넌트 수준에서 시작해 페이지나 화면 수준에서 끝나며, 점진적으로 결합해가는 상향적(bottom up) 방식으로 UI를 구축하는 과정을 말합니다. 지난 몇년 동안 Airbnb, IBM, Hubspot과 같은 회사에서 이와 같은 접근법으로 개발 프로세스를 크게 가속화하고 개발자와 디자이너의 커뮤니케이션을 개선하며 지속적으로 높은 수준의 제품 품질을 달성할 수 있었다고 합니다. 컴포넌트란? 상호 교환 가능하고 표준화된 UI 구성 요소입니다. UI조각의 모양, 기능을 캡슐화합니다. CDD의 장점 1. Focus Development: 특정 상태에 집중해서 개발을 할 수 있습..
qwzd에 eslint, prettier 적용하기 피파온라인 전적 검색사이트 https://qwzd.kr/ 에 참여하게되었습니다. 프로젝트에 eslint와 prettier 설정이 되어있지 않아서 이슈를 등록하고 프로젝트에 적용하기로 했습니다. 누군가가 해놓은 프로젝트에 손을 대보는일은 처음이었습니다. eslint init 위 명령어를 통해 초기화를 진행하였고 airbnb 스타일 가이드를 선택했습니다. 그 후 프로젝트를 시작시켰고 엄청나게 많은 lint에러를 확인하였습니다. 이 글을 쓰게된 계기 또한 이 많은 린트에러들을 조금씩 해결해나가는 과정을 기록하고자 쓰게되었구요. 해결한 것들 1. 컴포넌트 파일이름을 JSX로 바꿨습니다. 2. 컴포넌트를 export 로 뺀 경우 export default로 수정하였습니다. 3. react/one-expressio..