전체 글 106

MySQL vs MariaDB

MySQL MySQL은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 오라클이 관리 및 지원하고 있으며, 이중 라이선스가 적용됩니다. 하나는 GPL이 적용되는 무료 버전이고 다른 하나는 유료 상용 라이선스 버전입니다. 무료 버전과 유료 버전 모두 필요시 소스 코드를 고쳐 쓸 수 있지만, 무료 버전의 경우 소스 코드 수정 후 고객에게 "납품"을 하면 해당 수정된 MySQL 코드를 공개해야 합니다. "납품"하는 것이 아니고 "자체적으로 사용"하는 경우에는 소스 코드를 수정하더라도 소스 코드를 공개하지 않아도 됩니다. 이 부분이 약간 헷갈린 데 예시를 들면 아래와 같습니다. MySQL Community Server를 사용하여 웹사이트를 운영할 경우: GPL 라이선스..

RDB 2024.01.18

postgreSQL - 트랜잭션 격리 수준

공부 내용을 정리한 글입니다. 틀린 내용이 있을 수 있으니 아래 첨부한 공식 문서를 참조하세요. PostgreSQL의 트랜잭션 격리 수준 pg는 총 네 가지 격리 수준(Read uncommitted, Read committed, Repeatable read, Serializable)을 제공하지만, 내부적으로는 read committed, repeatable read, serializable 세 가지 격리 수준으로 동작합니다. 공식 문서에 따르면 표준 격리 수준을 PostgreSQL MVCC와 매핑하는 유일한 합리적인 방법이라서 그렇게 제공한다고 말하고 있습니다. pg는 트랜잭션의 격리 수준을 구현하기 위해 MVCC를 사용합니다. MVCC란 특정 시점을 기준으로 "커밋된" 데이터를 읽는 것입니다. 반면, ..

RDB 2023.12.05

MVC 패턴에서의 validation 처리

Validation validation(유효성 검사)은 데이터가 정확하고 유용한지 확인하는 프로세스입니다. 예를 들어, 함수의 매개 변수가 해당 함수의 로직을 수행하기에 적합한지 확인하는 것입니다. MVC 패턴을 사용하는 server-side에서 이러한 Validation은 어디에서 수행해야 할까요? MVC 패턴과 Validation 우선 controller에서 모든 validation을 처리하는 구조를 생각해 봅시다. 이 형태에서는 service는 무조건 controller로부터 호출되어야 합니다. 왜냐하면 controller에서 모든 validation을 처리하기 때문입니다. 만약, controller가 아닌 다른 곳에서 service를 호출한다면 service로 넘어간 파라미터는 validation..

statement와 expression / literal과 variable, constant

Statement와 Expression statement와 expression은 자바스크립트의 기본적인 구성 요소입니다. statement는 코드를 실행하는 최소 단위이며 expression은 값을 계산하는 식입니다. Statement는 다음과 같은 종류가 있습니다. - declaration statement: 변수 또는 함수를 선언하는 statement입니다. let a; // 변수 a를 선언합니다. - assignment statement: 변수에 값을 할당하는 statement입니다. a = 10; // 변수 a에 10을 할당합니다. - control flow statement: 프로그램의 흐름을 제어하는 statement입니다. if (a > 10) { console.log('a is greate..

Node.js 이벤트 루프

Node.js? Node.js 공식 문서와 위키 백과를 보면 Node.js에 대한 설명이 아래와 같이 나와 있습니다. Node.js는 비동기 이벤트 주도 자바스크립트 런타임입니다. 단일 스레드 이벤트 루프를 통해 높은 처리 성능을 가집니다. 다른 건 차치하고 단일 스레드 이벤트 루프를 통해 높은 처리 성능을 보인다고 합니다. 여기서 한 가지 의문이 생깁니다. 약 10초 정도 걸리는 I/O 작업 요청을 받으면, 단일 스레드 환경에서는 해당 I/O 작업을 끝마치기까지 다른 요청을 처리할 수 없을 것입니다. (스레드가 한 개니까요) 그런데 어떻게 Node.js는 단일 스레드로 높은 처리 성능을 갖는 걸까요? 이 질문은 이렇게 바꿀 수 있습니다. 이벤트 루프는 어떠한 방식으로 동작하길래 단일 스레드로도 높은 처..

AWS S3에 파일 업로드: pre-signed URL

S3에 파일을 업로드하는 방법 client의 입장에서 S3에 파일을 업로드하는 방법은 총 두 가지로 나눌 수 있습니다. 하나는 API 서버에 파일을 전달하고 API 서버에서 S3에 파일 업로드하는 방식이고 다른 하나는 front-end에서 S3에 직접 업로드하는 방식입니다. API 서버에 파일을 전달하고 API 서버에서 S3에 파일 업로드 API 서버에 파일을 전달하고 API 서버에서 S3에 파일을 업로드하는 방법은 API 서버에서 파일을 업로드하기 때문에 AWS Access Key와 Secret Key가 노출되는 위험이 없습니다. 하지만, 파일이 서버에서 업로드되기 때문에 서버의 리소스를 사용하게 되고 따라서, 과도한 파일 업로드 요청이 오면 서버에 과부하가 걸릴 수 있습니다. Front-end에서 S..

GraphQL 맛보기

공식 문서 속 GraphQL GraphQL 공식 문서에 다음과 같은 소개가 적혀있습니다. GraphQL은 API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임입니다. GraphQL은 특정 DB나 특정 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체됩니다. 정말 무슨 말인지 하나도 모르겠네요! 그래도 결국 돌고 돌아 끝끝내 어떠한 개념에 대해 이해했을 때, 공식 문서에 적힌 문장이 가장 정확한 표현임을 항상 느끼므로, 인내심을 갖고 하나하나씩 저 문장을 이해해 봅시다. GraphQL? GraphQL Spec은 GraphQL에 대한 아이디어와 개념을 모아놓은 집합입니다. 이 GraphQL Spec을 준수한다면 그것은 GraphQL입니다. 따라서 Graph..

SOLID 원칙

SOLID 원칙 SOLID는 객체 지향 프로그래밍의 원칙을 정리한 것으로, 객체 지향 설계의 품질과 유지보수성을 향상시키기 위해 개발된 원칙의 집합입니다. 단순하게 말하자면 객체 지향 프로그래밍을 사용하여 유연한 코드를 작성하기 위해 지키면 좋은 것들을 모아놓은 것이 SOLID입니다. Single Responsibility Principle(SRP, 단일 책임 원칙) 클래스는 오직 한 가지 일만 해야 하고, 클래스를 수정해야 하는 상황이 생긴다면 바꾸려는 이유가 하나여야 한다는 원칙입니다. 한마디로 한 클래스 내에서 너무 많은 일을 하지 말라는 것입니다. 하나의 클래스에서 프로그램의 모든 문제를 해결한다면 클래스 내부에서 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 있고 이러한 상황에서 기..

PostgreSQL vs MySQL

PostgreSQL과 MySQL의 유사점 둘 다 구조화된 쿼리 언어(SQL)를 사용하여 데이터를 읽고 편집할 수 있으며 데이터 백업, 복제 및 액세스 제어 기능이 내장되어 있으며 여러 데이터 타입을 지원합니다. PostgreSQL과 MySQL의 차이점 ANSI SQL 준수 PostgreSQL은 표준에 좀 더 가깝게 발전하고 있으며 다른 DBMS보다 그 수준이 높습니다. SQL은 준수하는 수준이 높으면 다른 SQL을 준수하는 DB로의 이전이 쉽다는 장점이 있습니다. 데이터 유형 MySQL과 PostgreSQL은 둘 다 여러 데이터 타입을 지원하지만, PostgreSQL이 좀 더 다양한 데이터 타입을 지원합니다. 예를 들어, PostgreSQL는 XML, 배열 등과 같은 데이터 타입도 지원합니다. 또한, M..

Socket.IO 소개 3 - adapter

이전 글... Socket.IO 소개 1 - server Socket.IO 소개 2 - event Adapter 소개 어댑터는 모든 클라이언트 또는 클라이언트 하위 집합에 이벤트를 브로드캐스팅하는 서버 측 구성 요소입니다. 여러 Socket.IO 서버로 확장할 때 기본 in-memory adapter를 다른 구현으로 교체해야 이벤트가 모든 클라이언트로 적절하게 라우팅됩니다. in-memory adapter 외에도 다섯 가지 공식 구현이 있습니다. 다음 다섯 가지 어댑터는 이 포스팅에서 배울 것입니다. - the Redis adapter - the Redis Streams adapter - the MongoDB adapter - the Postgres adapter - the Cluster adapter ..