Isolation과 연관된 이상 현상의 종류 데이터베이스는 고립성과 관련되어 다양한 오류가 발생한다. (예시 SALES 테이블) NAME QNT PRICE PR1 10 1000 PR2 20 9000 Dirty reads 하나의 트랜잭션이 다른 트랜잭션에 의해 커밋 되지 않은 데이터를 읽는 것. TR1 - SELECT QNT*PRICE FROM SALES // 10000, 18000 TR2 - UPDATE SALES SET QNT = QNT + 5 WHERE NAME = PR1 TR1 - SELECT QNT*PRICE FROM SALES // 15000, 18000 TR2 Rollback Commit조차 되지 않은 데이터를 읽어 오기 때문에 Inconsistance한 정보를 얻는 문제가 발생한다. Non-..
분류 전체보기
ACID 원칙이란? Atomicity, Consistency, Isolation, Durability의 약자로 데이터베이스 관리 시스템(DBMS)에서 트랜잭션을 안전하게 수행하기 위한 속성이다. Transaction 트랜젝션은 하나의 단위로 수행되는 쿼리의 집합이다. 작업이 하나라도 실패하면 트랜젝션도 실패가 되며, 모든 작업이 성공해야 트랜젝션이 성공한다. 데이터베이스 트랜젝션은 ACID라는 특성을 가지고 있다. Atomicity (원자성) 트랜잭션 내의 모든 연산은 전부 성공하거나 전부 실패해야 하며 부분적으로 실행 되어서는 안된다. 트랜잭션이 중간에 실패하면 변경 사항은 모두 롤백 되어야 한다. 사용자 A가 사용자 B에게 1000원을 입금할 때 1. A 계좌에서 1000원을 삭제 2. B의 계좌에 ..
Why winston logger? winston logger는 다양한 커스터마이징과 logger level 설정, daily rotate를 이용한 로깅 저장 등의 기능을 제공하기 때문에 기본 내장 로거가 아닌 winston logger를 사용했다. How to imply? 1. app.module.ts 설정 import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { AppController } from './app.controller'; import { AppService } from './app.servi..
Why Nest.js? nest.js는 최근 부상하고 있는 node.js의 프레임워크로 모듈 단위의 관리, DI, TypeScript 친화적 환경 및 다양한 이점을 제공하고 있다. 레어이드 아키텍처 및 모듈화를 기반으로 프로젝트를 시작할 것이기 때문에 다양한 디자인 패턴을 쉽게 적용할 수 있게 만든 nest.js가 적합한 프레임워크로 생각된다. Why do use validator? 배포 상황에서 환경파일을 실수로 넣지 않아 오작동을 하는 경우가 종종 있어 이를 검증하고 싶었다. nest.js에서 환경 파일의 validation을 할 수 있는 것은 class-validator와 joi 두가지로 보인다. class-validator를 사용하기 위해서는 클레스를 작성해야 하고, 데코레이터가 점점 길어져 가독..

의존성 역전의 원칙이란? 의존성 역전의 원칙(Dependency Inversion Principle, DIP)은 객체 지향 설계 원칙 중 하나로, 고수준 모듈이 저수준 모듈에 의존하는 것이 아니라 둘 다 추상화에 의존하도록 해야 한다는 원칙이다. 1. 고수준 모듈과 저수준 모듈이란? 고수준 모듈이란: 모듈의 본질적 기능과 책임을 말하며, 구체적 동작은 포함되지 않는다. (무엇을?) 저수준 모듈이란: 모듈 시스템의 구체적인 세부 사항과 기능을 나타낸다. (어떻게?) 그림에서는 HL1은 ML1보다 고수준의 모듈이다. 이때 일반적인 제어의 흐름으로는 고수준의 모듈이 저수준의 모듈에 의존하게 된다. 2. 의존이란? 의존이란 어떠한 모듈, 클래스 또는 컴포넌트가 다른 모듈, 클래스 또는 컴포넌트의 기능이나 행위에..
Why 'as const'? enum과 const enum, as const는 비슷해 보이지만 어떠한 차이점이 있고 무엇을 써야 하는지 고민을 한 뒤 as const로 타입 지정을 바꾸기로 했다. 이유는 아래에서 설명한다. enum enum이란 여러 값들에 미리 이름을 정의하여 열거해두고 사용하는 타입이다. TypeScript에서 enum은 다음과 같은 특징을 가진다. 1. reversed mapping이 가능하다. reversed mapping이란 object 안의 객체에 암시적으로 숫자가 mapping되는 것을 의미한다. enum { one // 0 two // 1 } 이러한 reversed mapping을 통해 역으로 숫자 비교 등을 할 수 있다. if (one > 0) { ... } one은 0에..

Why atomic pattern? 이전에 관리자 페이지를 만들면서 아토믹 패턴을 변형한 atom, block, page 3단 구조의 독자적인 디자인 패턴으로 프런트 엔드 코드를 작성해 보았는데 장점과 단점은 다음과 같았다. 장점 단점 빠른 코드 작성 page가 비대해짐 일관된 디자인의 코드 작성 가능 커스터마이징이 힘듦 코드의 구조화 프런트엔드 개발자가 아니기에 최대한 빠르고 일관되게 페이지를 작성할 필요가 있었고, 일관되고 구조적인 코드를 짜면서, 특정 부분(이전에는 page에서 모든 디자인을 한번에 했다)의 비대화를 막기 위해 아토믹 패턴의 변형이 아닌 best practice로 프런트엔드 코드를 작성하기로 했다. How to make it? - atoms 1. 기능의 최소 단위로 분리한다. But..
https://github.com/marketplace/actions/action-slack action-slack - GitHub Marketplace You can notify slack of GitHub Actions github.com action/slack을 이용하여 깃허브 액션이 시작되면 slack 메시지를 발송하도록 만들었지만 가장 마지막의 commit message만을 표시하는 문제점이 있었다. 모든 commit message를 보여주기 위해 다음과 같은 코드를 작성했다. 1. checkout을 통해 코드 가져오기 - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 fetch-depth: 0 로 설정되어 있어야 모든 커..
두개로 나뉘어져 있던 Nginx 서버를 하나로 합치게 되면서 발생한 문제들이 있었다. 먼저 (1) main 웹 페이지와 (2) admin 웹 페이지 두개의 정적 파일을 배포하는데 설정은 다음과 같았다. server { listen 80; localtion / { proxy_pass docker-main-web ... } location /admin_address { proxy_pass docker-admin-web } } 이때 admin_address에서 배포하는 정적 페이지는 next.js를 기반으로 하고 있었다. 1. next.js의 static page가 /admin_address의 경로가 아니라 /경로를 기준으로 생성되었다. - 이를 해결하기 위해 next.config.js를 수정하여 /admin..
[Leetcode] 34. Find First and Last Position of Element in Sorted Array (JavaScript) Source https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/ Find First and Last Position of Element in Sorted Array - LeetCode Can you solve this real interview question? Find First and Last Position of Element in Sorted Array - Given an array of integers nums sorted in ..