개발 5

대규모 서비스를 지탱하는 기술 1장

대용량 서비스? 서비스의 규모는 서버 대수 등으로 개략적으로 파악되는 경우가 많은데, 이런 관점에서 볼 때 백 대에서 수천 대 정도가 대규모 서비스라고 할 수 있다. 구글과 페이스북의 서버 대수는 수백만 대 규모이고, 처리하는 데이터는 테라바이트 ~ 페타바이트 급의 초대규모 서비스이다. 소규모 서비스와 대규모 서비스의 차이 확장성 확보, 부하분산 필요 Scale-out: 서버를 횡으로 전개, 즉 서버의 역할을 분담하거나 대수를 늘림으로써 시스템의 전체적인 처리능력을 높여서 부하를 분산하는 방법이다. 반면 Scale-up은 하드웨어의 성능을 높여 처리능력을 끌어올리는 방법이다. (하드웨어의 성능과 가격은 비례하지 않는다) 저가의 하드웨어를 횡으로 나열해서 확장성을 확보하는 것이 스케일 아웃 전략이다. 스케..

개발 2022.03.16

예제로 짧게 알아보는 SOLID

SOLID란 로버트 C. 마틴이 2000년대 초반 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙으로 제시한 것을 마이클 페더스가 두문자어로 소개한 것이다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Principle): 개방 폐쇄 원칙 LSP(Liskov Substitution Principle): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 응집도는 높이고 (High Cohension), 결합도는 낮추라는(Loose Coupling) 고전원칙을 객체 지향의 관점에서 재정의한 것 결합..

개발 2022.02.20

객체지향의 사실과 오해 2장 요약

인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 인간이 직접적으로 지각할 수 있는 대부분의 객체는 물리적인 경계를 지닌 구체적인 사물이다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계 지을 수 있는 추상적인 사물까지도 객체로 인식할 수 있게 한다. (ex. 오늘의 주문 내역, 어제의 주문 내역) 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 현실 세계의 전등은 사람의 손길 없이는 스스로 불을 밝힐 수 없지만 소프..

개발 2021.11.29

객체지향의 사실과 오해 1장 요약

객체지향을 처음 접하는 사람들은 “객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임” 이라는 설명을 많이 듣는다. 하지만 실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. 애플리케이션을 개발하면서 객체에 직접적으로 대응되는 실세계의 사물을 발견할 확률은 높지 않다. 존재하더라도 객체와 사물간의 개념적 거리는 유사성을 찾기 어려울 정도로 매우 먼 것이 일반적이다. 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 그럼 왜 실세계의 모방이라는 개념을 얘기할까? 그 이유는 실세계에 대한 비유가 객체지향의 다양한 측면을 이해하고 학습..

개발 2021.11.29

GCP에 Signed Url로 이미지 업로드하기

Signed URL 이란? - 권한을 포함한 URL 구글 드라이브나, 노션 같은 클라우드 저장 서비스를 사용하면 자료나 파일을 일시적으로 외부에 공유할 수 있는 기능이 있습니다. 클라우드에 저장된 파일의 링크(URL) 주소를 생성해 이를 다른 사람에게 전달하면 다른 사람은 링크 주소를 통해 파일을 확인하거나, 수정하거나, 내려받을 수 있죠. 위의 사진은 구글 스프레드 시트 화면인데요, 오른쪽 끝의 공유 버튼을 눌러보면 링크보기 창에서 뷰어, 댓글 작성자, 편집자 권한을 선택하여 권한을 가진 url을 만들 수 있습니다. 구글 스프레드 시트를 예로 설명했지만 AWS나 GCP 같은 클라우드에서도 Signed URL로 파일을 읽고 쓸 수 있습니다. 그럼 이제 실제 예시를 들어 Signed URL을 사용해보도록 ..

개발 2021.11.29