Essential Developer
/
학습 일지
Search
Share
학습 일지
RPC란?
Remote Procedure Call(원격 프로시저 호출)
통신이나 call 방식에 신경쓰지 않고 원격지의 자원을 내 것처럼 사용할 수 있다.
•
별도의 원격 제어를 위한 코딩 없이
다른 주소 공간의 함수나 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술
이다.
•
RPC에서 클라이언트-서버 통신은
클라이언트의 API 요청이 로컬 작업이거나 요청이 내부 서버 코드인 것처럼 작동
한다.
•
RPC에서 클라이언트는 서버의 프로세스로 요청을 전송한다. 이 프로세스는
항상 원격 호출을 수신 대기 중인 상태로 유지
된다.
요청에는 직접적으로 호출할 서버 함수와 전달할 파라미터가 포함
된다.
•
RPC API는 HTTP, TCP 또는 UDP와 같은 프로토콜을 기본 데이터 교환 메커니즘으로 사용
한다.
•
IDL(Interface Definication Language) 기반으로 다양한 언어를 가진 환경에서도 쉽게 확장이 가능하며, 인터페이스 협업에도 용이하다는 장점이 있다.
함수 vs 프로시저
등장배경
Server-Client Model
네트워크 통신이 중요해지며 발전하게된 이유 → 소형 컴퓨터의 발전으로 인한 컴퓨터 분산
•
PC(Personal Computer)의 개념이 없던 시절,
프로그램은 하나의 메인 프레임에서 동작하는 Monolothic 구조로 설계
되었다.
•
기술 발전에 따라 소형 컴퓨터(PC, 워크스테이션 서버 등)이 등장하게 되고, 기업 입장에선
매우 고가인 메인 프레임워크를 비교적 저가의 워크스테이션 서버로 대체
하고 싶어했다.
gRPC에 대한 모든 것
Backend
2024/04/14
Asynchronous Messaging Pattern
•
비동기 메세징은 확장성과 안정성, 성능 향상을 목적으로 발행자(producer)의 메세지 생성이 구독자(consumer)의 작업과 분리되는 방식이다.
•
메세징 시스템을 다룰 때, 일반적으로 Message Queue, Event Stream, Publish/Subscribe 3가지로 나뉜다.
•
대표적인 Message Queue 서비스
•
대표적인 Event Stream 서비스
Message Queue 특징
•
점대점(Point-to-Point) 통신
•
메시지 저장
•
순차적 처리
•
확실한 전달
•
비동기 통신
•
분산 처리
Message Queue, Event Stream, Pub/Sub의 차이
Backend
2023/11/01
Kafka란?
Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션에 사용되는 오픈 소스
분산 이벤트 스트리밍 플랫폼
입니다.
https://kafka.apache.org/
Apache Kafka는 전통적인 엔터프라이즈 메시징 시스템의 대안이다.
용어 정리
기본 명령어
카프카를 사용할 때 주로 사용하는 기본 명령어
Kafka는 어떻게 작동하는가 (Replication, Partition, Sement)
Database
2023/10/28
입력값 제한에 따른 문제 유형
•
입력이 100 이하인 경우
•
입력이 10,000 이하인 경우
•
입력이 1,000,000 이하인 경우
•
입력이 100,000,000 이하인 경우
•
그 이상인 경우
문제 유형
100%는 아니지만 높은 확률이라고 봐주시면 좋습니다. :)
코딩 테스트에서 많이 나오는 유형을 추렸습니다.
입력값이 작은 문제
위에서 적었듯 높은 확률로 완전 탐색 혹은 백트래킹 문제입니다.
구현력이 중요한 문제로 출제될 가능성이 높습니다.
지도가 주어지고 채워진 영역을 찾아야하는 경우
알고리즘 문제 유형 파악하기
Algorithm
2023/09/08
코드 리뷰
코드 리뷰가 끼치는 효과 5가지
•
동작 오류 제거 (Reduce behavioral erros)
•
구조 결함 제거 (Reduce structural errors)
•
팀 이해도 향상 (Improve team understanding)
•
학습 촉진 (Accelerate learning)
•
팀 위험 제거 (Reduce team risk)
구글
100% 코드 리뷰, 모든 코드를 리뷰하는 Google
•
Google은 코드 리뷰 개발자 가이드(
Introduction
)를 통해 코딩 스타일을 비롯한 주요 원칙을 공개하고 있습니다. (한글 번역본 :
Review · Soojin Ro
)
•
Google은
코드 리뷰가 요청되고 나서 1영업일 이내에 반드시 코드 리뷰가 완료되어야 하는 것을 원칙
으로 합니다.
코드 리뷰의 필요성과 Branch 전략
etc.
2023/09/06
Go는 객체 지향 언어일까?
Is Go an object-oriented language?
•
공식 문서에 따르면
객체 지향 프로그래밍(OOP)이란?
Go가 객체 지향인지 아닌지를 논하기전에 먼저 객체 지향 언어에 대해 정의해야한다.
위키피디아
를 기준으로 아래와 같이 OOP에 대해 정의해봤다.
•
"객체 지향 프로그래밍"은 “객체”라는 개념을 기반으로 하는 프로그래밍 패러다임이다. 이 객체는 종종 속성(attribute)이라고 알려진 필드의 형태로 데이터를 포함할 수 있으며, 종종 메소드라고 알려진 procedure의 형태로 코드를 포함할 수 있다.
•
객체의 procedure는 연관된 객체의 속성(attribute)에 접근하고, 종종 해당 속성(attribute)을 수정할 수 있다.
•
객체의 내부 상태는 속성(attribute)과 메소드의
private/protected/public
을 활용하여 외부로부터 보호(캡슐화)된다.
•
객체는 종종 객체 지향 언어에서 클래스의 인스턴스로 정의된다.
OOP 메커니즘
위의 개념 특성들은 가장 일반적인 객체 지향 언어인 Java와 C++에서 다음과 같은 메커니즘으로 구현된다.
•
Encapsulation
Go는 OOP일까?
Backend
2023/08/21
대량 데이터 처리, 저장 방법
Data Partitioning
•
큰 Table이나 인덱스를 관리하기 쉬운 단위로 분리하는 방법을 의미한다.
•
대량의 데이터를 처리하기 위해 DBMS 안에서 분할하는 방식이다.
•
한 대의 DBMS만 설치하면 된다.
•
Scale Up → 1 Machine → 1 DBMS → Data Partitioning
장점
•
가용성
(Availability)
•
관리용이성
(Manageability)
•
성능
(Performance)
단점
•
Table간의 Join에 대한 비용이 증가한다.
•
테이블과 인덱스를 별도로 파티션 할수는 없다. 테이블과 인덱스를 같이 Partitioning 하여야 한다.
대용량 데이터 처리 방법 (Sharding, Clustering, Topology)
Database
2023/03/13
Redis란?
RE
mote
DI
ctionary
S
erver
개요
•
인메모리 기반 key-value 구조의 저장소이다.
•
key-value 구조이기 때문에 쿼리를 사용할 필요가 없다.
•
Single Threaded이다.
•
최적화된 C 코드로 작성되었다.
•
주요 Redis 사용 사례
장점
빠른 성능
•
데이터를 디스크 또는 SSD에 저장하는 대부분의 데이터베이스와는 달리 모든 Redis 데이터는 서버의 주 메모리(RAM)에 저장된다.
•
Redis와 같은 인메모리 데이터베이스는
디스크에 액세스해야 할 필요를 없앰으로써 검색 시간으로 인한 지연을 방지
하고
CPU 명령을 적게 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스
할 수 있다.
•
일반적으로 작업을 실행하는 데 1밀초 미만이 소요
된다.
Redis (Replication, Cluster, Sentinel)
Database
2023/03/09
Index에 대해
[Table #1] - Index(id, age)
where id = 3;
where age = 10;
•
테이블을 생성할때, INDEX(id, age) 라고 했는데 이것은
id
를 첫번째 index로, 그리고 두번째 index 로
age
컬럼을 쓰겠다는 것이다.
•
의도한것처럼
id
도 index 로 하고,
age
도 index 로 하려면 따로따로 선언해 주어야 한다.
[Table #2] - Index(id), Index(age)
DB Index와 Query를 최적화하는 방법
Database
2023/02/21
개요
•
프로그램을 "잘" 작성했다는 기준을 어떻게 세울 수 있을까?
•
코드를 짧게 하는 것이 좋은 코드다, 다른 사람들이 읽었을 때 보기 좋은 코드가 좋은 코드이다 등 N명의 사람들에게 N개 혹은 그 이상의 기준들이 있을 수 있다.
•
하지만 어떤 질을 측정하기 위해서는 보편적으로 존재해야하는 기준이 존재해야 하기에, 현대 개발 생태계에서는
유지보수가 쉽고 기능 확장이 용이한 것
을 그 기준으로 잡고 있다.
•
그렇다면 유지보수가 쉽고 기능 확장이 용이하게 프로그램을 설계하고 제작하기 위해서는 어떻게 해야할까?
객체지향 설계 원칙: SOLID
SOLID
•
그 중에서 이번 글은 가장 마지막 원칙인
의존성 역전 원칙
의 의의와 이 원칙의 구현체를 다룰 것이다.
의존성 역전 원칙
1. 상위 레벨의 모듈(하위 레벨의 모듈을 활용하여 판단을 내리는 모듈)은 하위 모듈에 의존해서는 안된다. 두 모듈 전부 추상화에 의존해야한다. 2. 추상화는 구체적인 것에 의존해서는 안된다. 구체적인 것은 추상화에 의존해야한다.
예시
•
램프의 사용패턴은 스위치를 활용하여
램프를 끄는 것이다.
의존성 주입(DI)과 IoC (with node.js)
Backend
2023/01/13
MVC
본문에 앞서 내용 이해를 위해 MVC에 대해 얘기한다.
MVC란
•
MVC란
M
odel-
V
iew-
C
ontroller
의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다.
•
아래의 그림처럼
사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 통해 시각적 표현을 제어하여 사용자에게 전달
하게 된다.
•
이러한 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시작적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있게 된다.
위의 개념을 WEB에 적용 시
1.
사용자가 웹사이트에 접속 (Users)
2.
Controller는 사용자가 요청한 웹페이지를 서비스하기 위해서 모델을 호출 (Manipulates)
3.
Model은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후 그 결과를 Return
MVC 패턴이란?
Design Pattern
2023/01/12
babel
babel?
공식문서에서는 babel을 다음과 같이 표현한다.
Babel is a JavaScript compiler. Use next generation JavaScript
babal은 최신 버전의 자바스크립트 문법(보통 ES6+)을 이전 버전의 자바스크립트 문법으로 변환시켜주는 트랜스 컴파일러다.
예를들어, 개발자가 아래와 같이 코딩했다면
이렇게 바뀐다.
하지만 babel을 사용한다고 해서 모든 자바스크립트 최신 문법을 사용할 수 있는건 아니다.
Array.from
이나
Object.assign()
등 기존에 문법에 없던 문법은 **pollyfill(코드 조각)**을 추가하여 지원하게 해야한다.
pollyfill
babel의 동작원리
Source Code => AST => modified AST => Source Code
Webpack 제대로 알기
Frontend
2022/12/28
SQL, NoSQL
•
SQL은
관계형
및
비관계형(NoSQL)
데이터베이스를 처리하는데 사용된다.
•
"
관계형
"이라는 용어는
대수학에서 유래
했다. 데이터베이스에서 이것은 관계형 데이터베이스
데이터가 테이블과 행의 형태로 저장됨을 의미
한다.
•
비관계형 데이터베이스는 정보를 JSON 문서 모음에 저장
한다.
•
관계형 데이터베이스는 SQL을 사용한다. 이러한 데이터베이스의 구조를 통해 각 테이블의 원자 데이터를 고유하게 식별하는 데 사용되는
외부 키(또는 인덱스)
를 사용하여
서로 다른 테이블의 정보를 연결할 수 있다
. 다른 테이블은 이 외부 키를 참조하여 데이터 부분과 이 외부 키로 가리킨 부분 사이의 관계를 만들 수 있다.
•
비관계형 데이터베이스가 필요한 이유
SQL, NoSQL 차이점
•
이 예제는
SQL(관계형) 데이터베이스
와
NoSQL(비관계형) 데이터베이스
간의 주요 차이점 중 하나를 설명하는 데 도움이 된다.
SQL, NoSQL 장단점
•
관계형 데이터베이스
는 데이터를 처리하고 조작하기 위해
구조화된 쿼리 언어를 사용
한다.
•
비관계형 데이터베이스
는
구조화되지 않은 데이터에 대한 유연한 스키마
를 가지고 있다.
열
,
문서
,
그래프
또는
키-값
저장소와 같은
다양한 방법으로 저장
할 수 있다.
SQL 데이터베이스 사용이 더 좋을 때
SQL과 NoSQL의 특징과 차이점
Database
2022/12/17
로드 밸런싱이란?
•
로드 밸런싱은 애플리케이션을 지원하는 리소스 풀 전체에
네트워크 트래픽을 균등하게 배포하는 방법
이다.
•
많은 양의 트래픽을 처리하기 위해 대부분의 애플리케이션에는 데이터가 중복되는 리소스 서버가 많이 있다.
•
로드 밸런서는
사용자와 서버 그룹 사이에 위치
하며 보이지 않는 촉진자 역할을 하여
모든 리소스 서버가 동일하게 사용되도록 하는 디바이스
다.
로드 밸런싱의 이점
•
로드 밸런싱은 애플리케이션
서버와 방문자 또는 클라이언트 간의 인터넷 트래픽을 지시하고 제어
한다.
•
애플리케이션의
가용성, 확장성, 보안 및 성능이 향상
된다.
애플리케이션 가용성
•
서버 장애 또는 유지 관리로 인해 애플리케이션
가동 중지 시간이 늘어 방문자가 애플리케이션을 사용할 수 없게 될 수 있다
.
•
로드 밸런서
는
서버 문제를 자동으로 감지
하고
클라이언트 트래픽을 사용 가능한 서버로 리디렉션
하여
시스템의 내결함성을 높인다
.
•
로드 밸런싱을 사용하여 다음 태스크를 더 쉽게 수행할 수 있다.
애플리케이션 확장성
•
로드 밸런서
를 사용하여
여러 서버 간에 네트워크 트래픽을 지능적으로 전달
할 수 있다.
Load Balancing 기본 개념
DevOps
2022/11/23
Redux
Redux의 기본 개념 : 세 가지 원칙
1. Single source of truth
•
동일한 데이터는 항상 같은 곳에서 가지고 온다
.
•
즉, 스토어라는 하나뿐인 데이터 공간이 있다는 의미이다.
2. State is read-only
•
리액트에서는 setState 메소드를 활용해야만 상태 변경이 가능하다.
•
리덕스에서도
액션이라는 객체를 통해서만 상태를 변경할 수 있다
.
3. Changes are made with pure functions
•
변경은 순수함수로만 가능
하다.
•
리듀서와 연관되는 개념이다.
•
Action(액션) – Reducer(리듀서) - Store(스토어)
Store, Action, Reducer의 의미와 특징
React 상태 관리 라이브러리 4가지
Frontend
2022/11/16
NestJS 란?
NestJS는 왜 생겼나?
공식 문서
최근 몇 년 동안 Node.js 덕분에 JavaScript는 BE, FE 애플리케이션 모두 웹의 공통 언어가 되었습니다. 이로 인해 Angular, React, Vue가 나오게 되었으며, 해당 프로젝트를 통해 생산성을 향상하고 빠르게 만들 수 있으며, 테스트 가능하고 확장성이 있는 프런트엔드 애플리케이션을 만들 수 있게 되었습니다. 그러나 서버 측
Node.js
에서는 뛰어난 라이브러리, 툴이 존재하지만
아키텍처의 주요 문제를 효과적으로 해결하는 것은 없었습니다
.
해당 글은 NestJS 공식 홈페이지에서 발췌한 글입니다.
•
이 글의 핵심은
NestJS는 서버 측 어플리케이션 개발에 있어 아키텍처의 주요 문제를 효과적으로 해결
하기 위해 등장 한것입니다.
•
Express는 사용하기도 쉽고 성능도 뛰어나지만 아키텍처에 관한 정의나 기능을 제공해주고 있진 않습니다.
특징
•
NestJS
는
Node.js에 기반을 둔 웹 API 프레임워크
로써 Express 또는 Fastify 프레임워크를 래핑하여 동작합니다.
•
기본으로 설치하면
Express를 사용
합니다.
•
Node.js
는
손쉽게 사용
할 수 있고
뛰어난 확장성
을 가지고 있지만,
과도한 유연함
으로 인해
SW의 품질이 일정하지 않고
알맞은 라이브러리를 찾기 위해 사용자가
많은 시간을 할애
해야 합니다.
•
이에 반해
NestJS
는
데이터베이스, ORM, 설정(Configuration), 유효성 검사 등 수많은 기능을 기본 제공
하고 있습니다.
•
그러면서도 필요한
라이브러리를 쉽게 설치하여 기능을 확장
할 수 있는
Node.js 장점은 그대로
가지고 있습니다.
NestJS 왜 써야할까?
Backend
2022/11/09