본문 바로가기

Development

(135)
CPU와 메모리 CPU의 구성 ALU (산술 논리 연산장치) 비교, 판단, 연산 담당 CU (제어부) 명령어 해석, 실행을 위해 CPU 내부적 제어 Register 처리할 명령어 저장 Cache Memoy (L1) 처리속도를 높여주는 역할 스케줄링 CU의 핵심 기능 CPU를 효율적으로 사용하기 위해 실행중인 프로그램에 리소스 배분 스케줄링 종류 선점 스케줄링 OS가 나서서 CPU 사용권을 선점하고 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세스에게 분배하는 방식 Priority Scheduling (우선순위 스케줄링) 미리 주어진 프로세스의 우선 순위에 따라서 스케줄링하는 방식 Round Robin 정해진 시간 할당량 만큼 프로세스를 할당한 뒤 작업이 끝난 프로세스는 준비완료 큐의 가장 마지막에 가서 재할당을 ..
git의 diff 알고리즘 오늘은 코치님의 멘토링이 있었다. 현재 우리 프로젝트는 LCS를 기반으로 한 diff 알고리즘을 형상 관리에 적용하고 있다. 그런데 코치님은 LCS에 기반한 diff 알고리즘은 비효율적이라고 다른 알고리즘을 사용할 것을 추천하셨다. 그래서 git에서 사용하는 diff 알고리즘에 대한 설명이 담긴 웹 페이지를 공유해주셨다. 그것을 보고 학습한 내용을 정리해보려고 한다. diff와 patch diff는 두 개의 파일 또는 문서 간의 차이점을 식별하는 알고리즘 또는 도구를 의미한다. 원본과 수정된 버전 사이의 변경 내용을 탐지하고 추가된 내용, 제거된 내용, 수정된 내용 등을 식별한다. 주로 LCS 알고리즘이나 히스토그램 알고리즘 등을 사용해 구현할 수 있다. patch는 변경된 내용을 적용하는 것을 의미한다..
데이터 형상 관리 (특정 버전으로 롤백) 이번주는 증분식 데이터 형상관리 학습과 구현으로 대부분의 시간을 보냈다. 나는 최신 버전 전체 스냅샷과 특정 버전 스냅샷으로 롤백하는 기능 구현을 맡았다. 전체 스냅샷 응답은 스냅샷 테이블에서 특정 영화의 id 값을 기준으로 찾아서 보여주면 되는 것이기 때문에 어려움 없이 구현할 수 있었다. 반면 롤백 기능 구현에 많은 시간을 할애했다. 롤백은 post 테이블에 쌓인 버전별 변경사항 데이터와 snapshot 테이블에 10개의 버전 단위로 쌓인 전체 스냅샷 데이터를 movieId와 version 값을 기준으로 찾아와서 합치는 것이 기본적인 로직이다. 오늘 애를 먹었던 부분은 post 테이블에서 여러 버전의 변경 사항 데이터들을 가져와 원본 문서와 더해주는 함수에 집어 넣는 것이다. 아래는 repositor..
증분식 데이터 형상관리 : Increment Data Versioning 현재 진행중인 MovieWiki 프로젝트의 1차 API 작성을 완료했다. 이제 다음 스텝은 성능 개선 및 기능 고도화다. 그중에서도 가장 난이도가 높을 것으로 예상되는 것이 프로젝트의 핵심 기능인 데이터 형상관리 (Data Versioning)이다. 지난주 멘토링에서 코치님이 증분식 데이터 형상관리(Increment Data Versioning)를 사용하는 것으로 방향성을 제시해주셨다. 그래서 그에 대해 학습한 것을 정리해본다. 증분식 데이터 형상관리(Increment Data Versioning) 데이터의 변경 이력을 증분 방식으로 관리하는 방법이다. 데이터의 일부분이 변경되었을 때 전체를 저장하거나 복사하는 대신 변경된 부분만 저장하여 저장 공간을 절약하고 데이터 전송 시간을 단축시키는 장점이 있다...
TypeORM enum 타입 사용하기 코드 작성 중 entity에 제한된 값을 가지는 컬럼을 만들기 위해 enum(열거형) 타입을 사용해보았다. 진행중인 프로젝트에서 유저가 특정 게시물에 적절하지 않은 내용이 있을 경우 신고를 할 수 있는 기능이 있다. 그래서 유저가 해당 게시물에 신고 요청을 하면 관리자가 내용을 확인하고 승인 또는 반려를 하게된다. 위의 로직에서 특정 신고에 3가지의 제한된 상태가 필요하다. 유저가 특정 게시물 신고를 완료한 상태 => AWAIT (관리자의 처리를 대기하는 상태) 관리자가 내용을 확인하고 신고를 승인한 상태 => ACCEPT 신고 내용이 적절하지 않아 반려한 상태 => REJECT notification-status.enum.ts 먼저 enum 파일을 생성하여 상태 값을 정의해주었다. export enum..
git stash(생성, 삭제, 복구) 협업을 하다보면 내가 작성해놓은 코드를 커밋하기 전에 github repository에서 pull을 해야할 경우가 생긴다. 그럴경우엔 git stash 명령어를 사용하여 커밋을 하지 않고 임시 저장해두었다가 merge를 완료한 후에 불러와서 작업을 이어갈 수 있다. 오늘도 프로젝트의 organization repo에서 내 repo로 최신버전을 sync fork한 후 local에서 작업중이던 내용을 stash하고 remote repo를 pull해왔다. 그리고 stash apply를 이용해 임시 저장한 작업 내용을 불러왔다. 문제는 그 다음에 발생했다. 괜히 stash 기록을 깔끔하게 만들고 싶어서 stash drop을 이용해 list를 지웠더니 해당 stash에 적용되는 코드들이 전부 날아가버린 것이다. ..
TypeORM Isolation Level 이번 프로젝트에 transaction을 적용하며 TypeORM이 지원하는 transaction의 격리 수준에 대해 정리한다. 트랜잭션 격리 수준(Isolation Level)은 데이터베이스에서 동시에 실행되는 트랜잭션들 간에 어떻게 상호작용하고 데이터 일관성을 유지할지를 정의하는 개념이다. TypeORM은 다양한 트랜잭션 격리 수준을 지원한다. 1. Read Uncommitted (Level 0): - 가장 낮은 격리 수준이며, 트랜잭션의 변경 내용이 커밋되지 않았더라도 다른 트랜잭션에서 해당 변경 내용을 읽을 수 있다. - Dirty Read, Non-repeatable Read, Phantom Read 등과 같은 일관성 문제가 발생할 수 있다. 2. Read Committed (Level 1): - ..
DataSource `DataSource`는 NestJS에서 데이터베이스 연결과 관련된 작업을 처리하기 위해 사용되는 클래스이다. 이 클래스는 `@nestjs/typeorm` 패키지에서 제공되며, `typeorm` 패키지의 `Connection` 객체를 래핑하여 NestJS 애플리케이션과 데이터베이스 간의 상호작용을 쉽게 구성하고 관리할 수 있게 해준다. DataSource 역할 1. 데이터베이스 연결 설정: 데이터베이스에 연결하고 연결 옵션을 구성할 수 있다. 이를 통해 데이터베이스 호스트, 포트, 사용자 이름, 암호 등과 같은 연결 세부 정보를 제공할 수 있다. 예시 코드 (TypeORM, PostgresSQL 기준) type은 사용하는 데이터베이스의 유형 host, port, username, password, dat..