최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

공지사항

작성중인 블로그 글 목록

serpiko 2023. 10. 12. 10:58

< 작성중인 포스트 >

정리 안되어있고 자세한 설명이 누락됨


1. 클라이언트 용 버퍼 (TypeScript)

이벤트를 감지하여 실행할 때 일정 개수와 일정 시간을 감지하여 이 버퍼에 담았다가 일괄 처리하여 성능을 크게 향상 시키는데에 그 목적이있다. 특히 소켓데이터를 처리함에 있어 특정 시간내에 쌓인 버퍼를 일괄 처리하므로 클라이언트 어플리케이션에 부담을 비약적으로 줄일 수 있다. 간략하게 구성해본 코드는 다음과 같다.

 

 

실무에서는 비동기 처리할 때 아래와 같이.

// const result = await this.dataBuffer?.bufferAsync({ snapshot, changedMarketdata });
// this.observer.notify(channel, result);

동기로 처리할 때는 아래와 같이 사용하였음

if (!this.dataBuffer)
this.dataBuffer = new DataBuffer<{
snapShotMarketdata: IMarketData;
changedMarketdata: ChangedMarketData<IMarketDataTicker>;
}>(channel, this.observer.notify);
 
this.dataBuffer?.bufferSync({ snapshot, changedMarketdata });

 

2. 빠른 정렬 알고리즘 (TypeScript)

빠른 정렬 알고리즘을 이용하여, 배열의 좌측(작은)과 우측(큰)을 포인터 개념의 인덱스를 사용하여 -1, +1 하여 정렬한다.

정렬 알고리즘에서도 시간 복잡도 O(nlog2n)을 가지는 다른 정렬 알고리즘과 비교해도 가장 빠르다

(삽입,버블,병합 등등 정렬 알고리즘에 비해서도 빠르며 특히, 수만개 이상의 경우 선택적 정렬이나 버블, 셸 정렬보다는 압도적으로 비교할 수 없을 만큼 효율이 좋다고 할 수 있다)

O(log n)의 메모리를 가지므로 추가적인 메모리 공간이 필요하지 않다, 반으로 쪼개는 병합정렬의 경우 매번 새로운 배열이 생성되어 메모리를 할당해야 하지만 빠른 정렬은 재귀를 사용하기 때문이다.

물론 장점만 있는건 아니지만..예를들어.. 이미 정렬된 경우 불가피하게 빠른 정렬의 효율이 매우 좋지 못하다. 왜냐하면 O(n2)까지 도달하게 될 수 있기 때문이다. 그리고 추가로 나의 경우 오름차(정방향)순 내림차(역방향)순으로도 정렬이 되어야 하기에 그 부분도 구현해보았다. 

 

 

3. git merge vs git rebase

머지와 리베이스의 차이점 그리고 실무에서 어떻게 사용하면 효과적일지, 실제로 git 환경을 터미널로 빠르게 구성해보고 학습하며 개념에 대한 이해와 사용법을 알아본다.

먼저 git merge를 위해서 준비해야 할 실습 환경은 다음과 같이 CLI를 이용하여 빠르게 구성해 본다

git merge

mkdir merge && cd merge

//
git init --initial-branch=main
touch MAIN.md
git add MAIN.md
git commit -m "initialize commit"

//
git checkout -b develop
touch develop.txt
git add develop.txt
git commit -m "created develop branch"

//
git checkout -b feature
touch feature.txt
git add feature.txt
git commit -m "created feature branch"

//
git checkout develop
git checkout -b hotfix
touch hotfix.txt
git add hotfix.txt
git commit -m "created hotfix branch"
echo "bug fix" >> hotfix.txt
git add hotfix.txt
git commit -m "bug fix"

//
git checkout develop
git checkout -b refactor
touch refactor.txt
git add refactor.txt
git commit -m "refactoring work"

//
git checkout feature

git rebase

mkdir rebase && cd rebase

//
git init --initial-branch=main
touch MAIN.md
git add MAIN.md
git commit -m "initialize commit"

//
git checkout -b develop
touch develop.txt
git add develop.txt
git commit -m "created develop branch"

//
git checkout -b feature
touch feature.txt
git add feature.txt
git commit -m "created feature branch"

//
git checkout develop
git checkout -b hotfix
touch hotfix.txt
git add hotfix.txt
git commit -m "created hotfix branch"
echo "bug fix" >> hotfix.txt
git add hotfix.txt
git commit -m "bug fix"

//
git checkout develop
git checkout -b refactor
touch refactor.txt
git add refactor.txt
git commit -m "refactoring work"

//
git checkout feature