전체 글 77

로드밸런싱

부하를 알고리즘과 정책에 따라 분산하는 것, 서비스 이용자가 늘어나면서 현재 사용하고 있는 서버로만 정상적인 서비스가 불가능하게 되면 스케일 업 또는 스케일 아웃을 하게 되는데 스케일 아웃을 하게되면 로드밸런싱이 필요하다. 로드밸런싱은 로드밸런싱 알고리즘을 기준으로 이뤄진다. 로드밸런싱 알고리즘 Round Robin 클라이언트의 요청을 정해진 순서에 따라 서버로 전달하는 방식, 작업 권한 관리와는 아무 상관이 없지만 전달 순서는 링 토큰 구조를 생각하면 될 듯 Weighted Round Robin Scheduling 사용 가능한 서버 마다 가중치를 매기고 가중치가 높은 순서대로 클라이언트의 요청을 전달하는 방식, 서버마다 처리 성능이 다른 경우에 사용하는 방식이다. Least Connection 클라이언..

카테고리 없음 2022.07.01

Pagination

보여줘야하는 데이터가 많을 때 한번에 보여주는 데이터 수를 정해놓고 페이지 순서대로 보여주는 것 MySQL OFFSET을 이용한 Pagination LIMIT 쿼리를 이용해서 한번에 보내줄 row 수 지정하기 OFFSET 쿼리를 이용해서 몇번째 row부터 보내줄 수 지정하기 order by로 정렬해서 보내주기 Select * from order by LIMIT value_1, OFFSET value_2 데이터를 조회할 때 테이블 전체를 대상으로 작업을 수행하는 것 도바 WHERE를 사용해서 대상을 한정하는 것이 좋다 주의 페이지를 넘길 때 DB테이블 ROW가 늘거나 줄면 같은 ROW를 결과로 받을 수 있다 => 게시판을 사용하다보면 게시물이 밀리는 경우를 흔히 볼 수 있다 조회, 정렬 기준이 항상 같기 ..

카테고리 없음 2022.06.27

Big query

페타바이트에 달하는 큰 데이터에 대해 SQL쿼리를 수행하고 빠르게 분석할 수 있게 해주는 GCP 서비스 Data Warehouse라고도 한다. BigQuery란 무엇인가요? | Google Cloud 의견 보내기 BigQuery란 무엇인가요? BigQuery는 머신러닝, 지리정보 분석, 비즈니스 인텔리전스와 같은 기본 제공 기능으로 데이터를 관리하고 분석할 수 있게 해주는 완전 관리형 엔터프라이즈 데 cloud.google.com 이번에는 TypeORM을 이용해서 GCP Big Query로 트리거를 작성해서 사용하는 방법을 연습힙니다 트리거 기본 설정 import { Connection, EntitySubscriberInterface, EventSubscriber } from 'typeorm'; impo..

카테고리 없음 2022.06.24

검색 프로세스(Elastic, Redis)

Elasticsearch, logstash, Redis를 이용한 검색 기능을 구현하고 프로세스(로직)을 메모합니다. API서버 검색어를 입력받는다. 검색어를 키워드로 Redis또는 Elasticsearch에 조회하고 조회 결과를 클라이언트로 리턴한다. 검색결과 또는 자주 찾는 키워드의 결과를 Redis에 캐싱한다. MYSQL 원본 데이터를 저장한다. Logstash의 요청에 따라 데이터를 제공한다. 검색 기능외에 api에서 필요한 데이터를 제공한다. Elasticsearch Logstash에서 입력받은 데이터를 역인덱스 형식으로 저장한다. 받은 검색어를 Analyzer에 따라 토크나이징한다. 검색어 조회에 결과를 리턴한다. Logstash mysql에서 받아온 원본 데이터를 Elasticsearch로 i..

카테고리 없음 2022.06.23

마이크로 서비스

서비스의 사이즈가 관리하기 어려울만큼 커지고있는 경우 서비스안의 기능을 나눠 별도의 서비스로 만들어 관리 개발하는 것 사용 이유 관리 목적으로 마이크로 서비스모델을 사용하는 이유는 모듈러 방식을 사용하는 것과 크게 다르지 않은 듯 하다, 하지만 하나 큰 이득이 있는데 빌드하고 실행하는데 걸리는 시간이 매우 적어질 것이다 => 나눠놓은 서비스 단위로 따로 실행된다 위험 분산을 위해 사용한다. 모놀리식 구조는 하나의 모듈에 문제가 생겨서 서비스가 다운되면 모든 기능을 사용할 수 없다. 기능 단위로 서버를 따로 만들면 하나의 기능을 담당하는 서버에 문제가 생겼을 때 다른 기능에 미치는 영향을 최소화 할 수 있다. (게이트웨이에 문제가 생기면 안된다) => 모든 기능을 나누는 것이 비효율적이라고 생각되면 중요 ..

카테고리 없음 2022.06.23

Redis

Redis 메모리 기반 DB => In-memory이기 때문에 휘발성이다. 하지만 영구 저장을 위한 옵션 기능이 있다. => persistence 기능(RDB, AOF) Redis persistence How Redis writes data to disk (append-only files, snapshots, etc.) redis.io 조회 결과를 빠르게 전달하거나 데이터를 잠시 저장하기 위해서 사용한다. 다양한 데이터 타입을 지원하고 대부분의 프레임워크와 호환이 가능합니다 => 가장 대중적으로 사용할만합니다 Redis data types Overview of the many data types supported by Redis redis.io 언제 사용할까 Input/Output이 빈번한 경우 DB의 ..

카테고리 없음 2022.06.23

ELK 스택

ELK(Elastic Stack) ElasticSearch 데이터들을 검색용으로 가공하고 저장해서 검색기능을 제공하는 도구 검색용으로 개발 되었지만 로그, 데이터 분석 등 다양한 영역에서 사용하고있다. Lucene(아파치 검색 라이브러리) 기반 Java 오픈소스 -> 사용하려면 Java를 설치해야한다. yarn add @nestjs/elasticsearch yarn add @elastic/elasticsearch 모듈에 Elastic 모듈 추가 resolver/controller에 의존성 주입 검색 curl -XGET "http://localhost:9200/myproduct03/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "..

카테고리 없음 2022.06.21

ACID

ACID Atomicity(원자성) 모두 성공하거나 모두 실패하거나 => 데이터 오염보다 훨씬 좋다!! Consistency(일관성) 같은 쿼리의 결과는 동일해야한다 Isolation(고립성, 격리성) 하나의 작업을 처리하는 동안 다른 작업은 기다려야한다 Isolation-Level => MySQL 디폴트 레벨은 Repeatable-Read 레벨이 올라갈수록 안전하지만 성능에 영향을 준다 Isolation-Level Dirty-Read Non-Repeatable-Read Phantom-Read Read-Uncommitted o o o Read-Committed x o o Repeatable-Read x x o Serializable x x x Dirty-Read commit 되지 않은 데이터를 rollb..

카테고리 없음 2022.06.14

4주차 리뷰

TypeORM - MySQL 더보기 관계형 데이터 베이스 사용을 도와주는 ORM의 하나 이번 프로젝트에서는 nestjs에 타입스크립트를 사용하기 때문에 nest와 호환이 좋은 TypeORM을 사용했다. Entity를 생성하고 스키마를 구성할 수 있다. Entity 구성 예시 //Type ORM을 사용한 Entity 구성 예시 @Entity() export class Product { @PrimaryGeneratedColumn('uuid') id: string; @Column() name: string; @Column() description: string; @Column() price: number; @Column() isSoldout: boolean; @JoinColumn() @OneToOne(() =..

카테고리 없음 2022.06.06

스크래핑, 크롤링

스크래핑 특정 사이트의 html을 긁어오는 것 긁어온 html에서 필요햔 정보를 골라 뽑아서 사용할 수 있습니다.( ex) og태그 정보를 이용한 소개 화면 만들기) 크롤링 스크래핑을 주기적으로 여러번 수행하는 것 또는 정보를 모두 수집하려면 스크래핑을 반복 수행해야할 때 이를 자동화 한 것 다른 사이트를 크롤링할 때는 사이트의 서비스에 부하를 주지않도록 주의해야합니다.( www.test.com/robot.txt 등을 확인하여 크롤링을 허용하는 지 확인하는 것도 좋습니다. -> 허용하고 있다고 해서 부하를 줘도 좋은것은 아닙니다.)

카테고리 없음 2022.06.02