본문 바로가기

전체 글36

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 2~3장 🔖 2~3장 : 개략적인 규모 추정 ~ 시스템 설계 면접 공략법읽은 날짜 : 2024.08.19지은이 : 알렉스 쉬출판사 : 인사이트 기억하고 싶은 내용개략적인 규모 추정(back-of-the-envelope estimatation)보편적으로 통용되는 성능 수치상에서 사고 실험을 행하여 추정치를 계산하는 행위어떤 설계가 요구사항에 부합할 것인지 보기 위한 것2의 제곱수, 응답지연 값, 가용성과 관련된 수치를 이해해야 한다. 2의 제곱수최소 단위는 1바이트(=8비트). ASCII 문자 하나가 1바이트.1 byte(바이트) - 1KB(킬로바이트) - 1MB(메가바이트) - 1GB(기가바이트) - 1TB(테라바이트) - 1PB(페타바이트)단위가 바뀔 때마다 2의 10제곱씩 곱해진다. 응답지연 값메모리는 빠르.. 2024. 8. 19.
클린코드 - 1장 🔖 1장 : 깨끗한 코드읽은 날짜 : 2024.08.14지은이 : 로버트 C. 마틴출판사 : 인사이트 기억하고 싶은 내용나쁜 코드로 치르는 대가나쁜 코드가 쌓일수록 팀의 생산성은 떨어진다.나쁜 코드는 프로젝트 초반에는 빠르게 진도를 나가다가 점차 느려진다.생산성이 떨어지면 관리자는 새 인력을 투입하고, 새 인력과 팀은 생산성을 높여야 한다는 압박에 더욱 시달린다.결과적으로 나쁜 코드를 더 많이 양산한다.전문가 답지 못한 태도다.관리자가 일정에 쫓기게 만들고 고객과 마케팅 부서가 무리한 요구사항을 내놓았다고 해도, 결국 프로젝트 실패는 전문가답지 못한 프로그래머의 책임이 크다.그들에게 그들의 책임이 있듯이, 프로그래머에게는 좋은 코드를 사수할 책임이 있다.빨리 가는 유일한 방법은, 언제나 코드를 최대한 .. 2024. 8. 14.
가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 1장 🔖 1장 : 사용자 수에 따른 규모 확장성읽은 날짜 : 2024.08.13지은이 : 알렉스 쉬출판사 : 인사이트 기억하고 싶은 내용✔️ 시스템 규모 확장 방법 정리웹 계층은 무상태 계층으로모든 계층에 다중화 도입가능한 한 많은 데이터를 캐시할 것여러 데이터 센터를 지원할 것정적 콘텐츠는 CDN을 통해 서비스할 것데이터 계층은 샤딩을 통해 그 규모를 확장할 것각 계층은 독립적 서비스로 분할할 것시스템을 지속적으로 모니터링하고, 자동화 도구들을 활용할 것 단일 서버 아키텍처사용자 단말(웹/앱)에서 도메인으로 접속DNS에 도메인을 조회하여 IP 주소로 변환IP 주소로 HTTP 요청HTML이나 JSON 응답데이터베이스웹/모바일의 트래픽을 처리하는 서버와 데이터베이스 서버를 독립적으로 확장해 나갑니다.데이터베이.. 2024. 8. 14.
무중단 배포 전략 무중단 배포란?무중단 배포(Zero-Downtime Deployment)는 애플리케이션을 배포할 때 서비스 중단 없이 새로운 버전을 배포하는 방식입니다.사용자에게는 지속적인 서비스를 제공하면서, 새로운 버전의 안정성을 점진적으로 확인할 수 있는 방법입니다. 무중단 배포 주요 전략 3가지1. 블루-그린 배포 (Blue-Green Deployment)과정두 개의 동등한 환경(블루/그린)을 환경을 이용합니다. 블루는 현재 운영 중인 프로덕션 환경이고, 그린은 새로운 버전을 배포할 환경입니다. 블루 환경이 실행되고 있는 상황에서, 그린 환경에 새로운 버전의 애플리케이션을 배포합니다.배포가 완료되고 나면, 로드 밸런서나 웹서버를 통해 트래픽을 블루 환경에서 그린 환경으로 전환합니다.이후 블루 환경은 필요에 따라 .. 2024. 8. 13.
[TypeScript] Class vs Interface vs Type 차이점 정리 JavaScript Class vs TypeScript Class1. 속성 초기화 코드를 생략할 수 있다.TS Class는 생성자의 매개변수 타입 선언과 동시에 접근 제어자(+readonly)만 사용하면 속성 초기화를 할 수 있습니다.이때는 속성이 public이어도 명시해야 합니다.// JSclass User { constructor(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; }}// TS// 컴파일하면 위 JS 코드와 동일합니다.class User { constructor(private firstName: string, private lastName: string) {}} 2. 접근 제한자(a.. 2024. 8. 7.
[TypeScript] Declaration File & JSDoc Declaration FileTypeScript 선언 파일은 주로 JavaScript로 작성된 라이브러리나 모듈을 TypeScript에서 사용할 때 필요합니다.선언 파일은 .d.ts 확장자를 가지며 동일한 이름의 라이브러리나 모듈의 타입을 정의합니다. Visual Studio Code와 같은 통합개발환경(IDE)에서는 선언 파일을 불러와서 보여주기 때문에 바로 타입을 확인할 수 있습니다.TypeScript는 JavaScript 코드도 같이 쓸 수 있도록 허용하지만, 타입 정의가 없다면 사실 TypeScript를 쓰는 의미가 없습니다. 따라서 TypeScript에서 선언 파일은 꼭 필요합니다.tsconfig.json에 "strict": true 를 설정하면 선언 파일이 없는 JavaScript 패키지에 대.. 2024. 8. 7.
[TypeScript] TypeScript 타입 정리 Object변수명: { key1: 타입, key2: 타입, ... }변수 선언문을 확장해 위와 같은 형태로 타입을 명시할 수 있습니다.타입 주석(type annotation)이라고 합니다.예시const player: { name: string; age: number } = { name: "kim",}; Optional변수/프로퍼티명?: 타입물음표를 붙여서 특정 프로퍼티나 함수의 매개변수를 옵셔널로 만들 수 있습니다.예시// 인터페이스 프로퍼티에 적용interface PaintOptions { shape: Shape; xPos?: number; yPos?: number;}// 객체 프로퍼티에 적용const player: { name: string, age?: number } = { name: 'k.. 2024. 8. 7.
[TypeScript] TypeScript 수동으로 설정하기 개요프레임워크를 쓰면 타입스크립트가 설정된 프로젝트를 자동으로 만들어주지만, 간혹 타입스크립트 설정을 건드려야 할 때가 있습니다.그때를 위해 타입스크립트를 수동으로 설정하는 방법을 기록해두기로 했습니다.NodeJS가 설치되어 있다고 가정합니다. 수동 설정 방법1. package.json 생성npm init -y 2. 타입스크립트 설치npm install -D typescript 3. tsconfig.json 생성tsc -init 4. tsconfig.json 작성{ "include": ["src"], // 컴파일 할 파일의 경로 "compilerOptions": { "outDir": "build", // 컴파일 한 파일을 저장할 위치 "target": "ES6", // 자바스크립트 어떤 버.. 2024. 8. 7.
[네트워크] HTTP Methods 차이점 정리 HTTP 메서드HTTP 프로토콜에서 사용되는 요청 메서드로, 자원에 대해 서버가 수행할 동작을 지정합니다.총 9가지가 있으며 REST API를 설계할 때 주로 사용되는 메서드는 5가지입니다. 주요 메서드 5가지GET : 서버로부터 자원을 요청하는 동작POST : 서버로 데이터를 전송하여 자원을 생성하거나 업데이트 하는 동작PUT : 서버에 자원을 생성하거나 기존 자원을 대체하는 동작PATCH : 서버 자원의 일부만 수정하는 동작DELETE : 서버에서 자원을 삭제하는 동작 GET vs POST1. GET목적서버로부터 자원을 요청하는 동작데이터 전송 방식요청 본문을 사용하지 않고, 요청 URI에 Path Variable 이나 Query String 을 사용할 것을 권장합니다.보안데이터가 URL에 포함되므로.. 2024. 8. 6.
[TypeORM] TypeORM에서 트랜잭션 다루는 방법 TypeORM 0.3 이상 버전을 기준으로 트랜잭션을 다루는 방법을 정리했습니다. Transaction트랜잭션은 데이터베이스에서 한꺼번에 수행되어야 하는 작업 단위를 말합니다.트랜잭션의 중요한 특징 중 하나는 트랜잭션이 데이터베이스에 모두 반영되든지, 아니면 전혀 반영되지 않아야 하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것입니다. (ACID 중 Atomicity, 원자성) DataSource & EntityManager / QueryRunnerTypeORM에서는 DataSource & EntityManager 또는 QueryRunner를 통해 트랜잭션을 생성하고 사용할 수 있습니다.두 가지 방법을 설명하기에 앞서, TypeORM에서의 DataSource, EntityManager, .. 2024. 8. 5.
[TypeScript] TypeScript 장점과 특징 TypeScript란?Microsoft에서 개발한 오픈 소스 프로그래밍 언어입니다.JavaScript의 확장으로, JavaScript의 모든 기능을 포함하면서도 정적 타입을 지원하고 있습니다. 왜 TypeScript를 쓰는가?1. 타입 안정성타입 안정성(Type Safety)은 변수나 함수 등이 정의된 타입과 일치하는지 여부를 보장하는 것을 의미합니다.타임 안정성을 통해 얻는 것컴파일 타임 타입 체크 : 컴파일 과정에서 타입 에러를 발견하고 경고나 오류를 통해 개발자에게 알려줍니다.강력한 타입 시스템 : 타입이 명확하게 지정되어야 하고, 타입에 대한 엄격한 규칙을 가집니다.타입 추론 : 타입을 명시적으로 지정하지 않아도 컴파일러가 타입을 추론해줍니다.타입 안정성 덕분에 버그와 런타임 에러를 줄일 수 있고.. 2024. 8. 5.
REST 원칙과 REST API 설계 방법 "그런 REST API로 괜찮은가"를 참고하여 정리한 내용입니다.   REST란?REpresentational State Transfer의 약자입니다.웹 서비스 아키텍처의 스타일 중 하나로, 네트워크를 통해 클라이언트와 서버가 상호작용하는 방식을 정의하는 방법입니다.인터넷에서 어떻게 정보를 공유할 것인지에 대한 해답으로 1991년 웹(Web)이 등장했습니다. 웹은 HTML이라는 형식으로 정보를 표현하고, 정보들에 대한 식별자로 URI를 선택하고, HTTP라는 프로토콜로 정보를 전송합니다.2000년 Roy T. Fielding은 기존의 웹을 망가트리지 않고 HTTP를 개선할 수 있을지에 대한 논문을 발표했고, 이것이 REST 였습니다.REST API란?REST API는 REST 아키텍처를 따르는 API로,.. 2024. 8. 3.