분류 전체보기 182

[PostgreSQL] 데이터타입에 알맞은 테이블 만들기

데이터의 성격에 알맞은 데이터 타입을 선택함으로써 PostgreSQL이 더 빠르고, 정확하게 우리가 원하는 역할을 할 수 있게 되기 때문에 데이터 타입을 아는 것은 중요합니다. 프로그래밍 언어는 대부분 비슷한 데이터 타입을 갖고 있습니다. PostgreSQL도 마찬가지로 비슷한 데이터 타입을 가지고 있습니다. 체계적인 데이터베이스 구축을 위해 데이터베이스의 ‘무결성’에 대해 알아야 합니다. 데이터 타입이란? 데이터 타입 데이터 타입을 선언함으로써 테이블의 각 컬럼 속에 있는 데이터의 성질을 정의할 수 있습니다. 변수명 앞에 데이터 타입을 선언하면서 변수의 성질을 정의하는 것과 유사합니다. 숫자형(Numeric) 숫자형은 테이블의 컬럼속 데이터들을 숫자의 형태로 저장하는 것입니다. 숫자형에는 여러 가지 데..

DataScience 2023.06.14

[PostgreSQL] psql 쉘에서 쿼리 작성하기

다양한 작업을 수행하기 위해서 콘솔에 코드를 입력하여 데이터베이스를 관리하고 조작할 수 있습니다. 사용자 편의를 위해 PostgreSQL은 많은 명령어를 기본적으로 제공하고 있습니다. 콘솔을 이용하면 데이터베이스를 이용해 다양한 애플리케이션에 연결하고 데이터를 백업 및 복원할 수도 있습니다. 한 가지 주의할 점은, 콘솔에 입력하는 코드의 종류에 대해 혼동해서는 안됩니다. 콘솔 명령어는 PostgreSQL 프로그램을 실행하기 위한 코드이며 SQL 문법은 프로그램 내부에서 이해할 수 있는 데이터베이스 고유의 프로그래밍 언어입니다. psql 콘솔이란 무엇인가? 콘솔이란 사람이 컴퓨터를 조작하기 위해 운영체제를 이용할 때 텍스트로 접근하는 방식을 뜻합니다. 즉, 콘솔이란 컴퓨터를 조작하기 위한 도구라고 생각하거..

DataScience 2023.06.13

[Nest.js] 헬스 체크

서비스를 운영하다 보면 트래픽이 늘어나거나 DB에 부하가 생기기도 하고 기간 통신망이 끊기게 되는 경우도 발생합니다. 장애는 어느 레이어에서든 발생할 수 있고 사용자의 불편을 줄이기 위해 신속하게 장애에 대응하는 게 필요합니다. 그러려면 현재 서비스가 건강한 상태인지 항상 체크하고 있어야 할 장치가 필요합니다. 이를 헬스 체크라고 부릅니다. 서버는 HTTP, DB, 메모리, 디스크 상태 등을 체크하는 헬스 체크 장치가 있어야 합니다. 만약 서버가 건강하지 않은 상태가된다면 즉시 이를 사내 메신저 등을 통해 담당자에게 알려야 합니다. 헬스 체크와 함께 쌓아둔 에러 로그를 기반으로 종합적으로 모니터링 전략을 세워야 합니다. Nest는 Terminus(@nestjs/terminus) 헬스 체크 라이브러리를 제..

BackEnd/Nest.js 2023.06.01

[PostgreSQL] 보안과 백업

보안 보안을 유지한다는 것은, 안전한 곳에 보관된 데이터에 접근할 수 있는 사람과 그렇지 않은 사람을 구분하고 제한한다는 것과 같습니다. 보안의 정도는 데이터의 중요도에 따라 그리고 누가 얼마나 데이터에 접근할 수 있는지에 따라 달라집니다. DBMS에서 보인이 이루어지는 구조는 사용자가 시스템에 접속할 기본적인 권리가 있다는 것을 확인해주는 인증 단계를 거쳐야합니다. 일반적으로 Id와 Password를 통해 홈페이지에 로그인 하는 방법으로 이 인증 단계를 통과합니다. 인증 단계를 통해 시스템에 접속했다면 시스템내에서 특정 기능에 접근할 수 있는지에 대한 여부를 결정하는 권한 설정 단계를 거쳐야 합니다. 이 단계에서는 사용자가 접근하는 것에 대한 승인이 필요합니다. 권한 설정 단계를 마쳤다면, 사용자는 데..

DataScience 2023.05.31

[Nest.js] 태스크 스케줄링

@nestjs/schedule 패키지 서비스를 개발하다 보면 주기적으로 동일한 작업을 처리해야 하는 경우가 생깁니다. 이런 주기적 반복 작업을 태스크 또는 배치라고 부릅니다. 태스크 스케줄링을 잘 활용하면 특정 기간마다 수행해야 하는 귀찮은 작업을 신경쓰지 않아도 됩니다. 태스크 스케줄링을 반드시 반복적인 작업에만 적용해야 하는 것은 아닙니다. 1회성 태스크를 만들 수도 있습니다. 리눅스에는 태스크 스케줄링을 담당하는 크론이라는 기능이 있습니다. Node.js에는 cron과 같은 기능을 하는 여러 라이브러리가 있습니다. Nest는 인기 패키지인 node-cron을 통합한 @nestjs/schedule 패키지를 제공합니다. $ npm i @nestjs/schedule @types/cron 태스크 스케줄링은..

BackEnd/Nest.js 2023.05.31

[PostgreSQL] 트랜잭션

트랜잭션 트랜잭션은 PostgreSQL을 비롯한 DBMS에서 작업 수행의 단위로 쓰이는 논리적인 개념입니다. 데이터를 처리하는 작업 중에 오류가 발생하여 원하는 결과값이 나오지 못할 상황이 되면 트랜잭션은 해당 작업 전체를 취소합니다 .트랜잭션의 개념을 활용하면 단계별로 분리되어 있던 작업이 하나의 작업으로 그룹화됩니다. 즉, 작업 전체가 완벽하게 잘 수행되거나 아니면 아예 수행되지 않거나로 결과가 나뉩니다. 따라서 트랜잭션은 작업 중간의 오류로 인해 발생할 수 있는 데이터의 불일치를 방지함으로써 데이터 작업의 신뢰도를 높이는 효과를 얻을 수 있습니다. 트랜잭션의 특징: ACID 트랜잭션은 네 가지 특징을 가지고 있습니다. 원자성(Atomicity): 작업의 수행은 전체가 다 수행되거나, 아무것도 안되는..

DataScience 2023.05.31

[Nest.js] 인터셉터

인터셉터 인터셉터는 요청과 응답을 가로채서 변형을 가할 수 있는 컴포넌트입니다. 인터셉터는 관점 지향 프로그래밍에서 영향을 많이 받았습니다. 인터셉터를 이용하면 다음과 같은 기능을 수행할 수 있습니다. 메서드 실행 전/후 추가 로직을 바인딩 함수에서 반환된 결과를 변환 함수에서 던져진 예외를 변환 기본 기능의 동작을 확장 특정 조건에 따라 기능을 완전히 재정의(예: 캐싱) 인터셉터는 미들웨어와 수행하는 일이 비슷하지만, 수행 시점에 차이가 있습니다. 미들웨어는 요청이 라우트 핸들러로 전달되기 전에 동작하며, 인터셉터는 요청에 대한 여러 개의 미들웨어를 조합하여 각기 다른 목적을 가진 미들웨어 로직을 수행할 수 있습니다. 어떤 미들웨어가 다음 미들웨어에 제어권을 넘기지 않고 요청/응답 주기를 끝내는 일도 ..

BackEnd/Nest.js 2023.05.31

[Nest.js] 예외 필터

소프트웨어를 개발하면서 예외 처리는 필수 사항입니다. 어떤 상황에서든 에러는 발생할 수 있고 개발자는 이 에러에 대응책을 마련해둬야 합니다. 예외가 발생할 만한 모든 곳에 예외 처리 코드를 삽입하는 것은 중복 코드를 양산할 뿐 아니라 기능 구현과 관련 없는 코드가 삽입되므로 핵심 기능 구현에 집중하지 못하게 됩니다. 예외가 발생했을 때 에러 로그와 콜 스택을 남겨 디버깅에 사용할 수 있는 별도의 모듈을 작성했다면, 예외 처리기 역시 따로 만들어 한곳에서 공통으로 처리하도록 해야 합니다. 예외 처리 Nest는 프레임워크 내에 예외 레이어를 두고 있습니다. 애플리케이션을 통틀어 제대로 처리하지 못한 예외를 처리하는 역할을 합니다. 아무런 작업을 하지 않아도 기본 예외 처리기가 예외를 잡아서 유저가 이해하기 ..

BackEnd/Nest.js 2023.05.30

[Nest.js] 로깅

서비스에 기능이 늘어나고 사이즈가 커지게 되면 동작 과정을 남기고 추적하는 일이 중요하게 됩니다. 이슈가 발생했을 경우 이슈 증상만으로 원인을 파악하는 데에는 시간과 노력이 많이 들고 코드를 다시 역추적하면서 이해하는 데에 어려움이 따릅니다 .이슈가 발생한 지점과 콜 스택이 함께 제공된다면 빨리 해결이 가능할 것입니다. 또 어떤 기능이 많이 사용되는지와 같이 유저의 사용 패턴을 분석하는 데에도 로그를 활용할 수 있습니다. 서비스를 실행하면 서버 콘솔에는 로그가 출력됩니다. 이미 각 컴포넌트에서는 내장 로거를 이용하여 로그를 출력하고 있습니다. 내장 Logger 클래스 @nest/common 패키지로 제공됩니다. 로깅 옵션을 조절하면 다음과 같이 로깅 시스템의 동작을 제어할 수 있습니다. 로깅 비활성화 로..

BackEnd/Nest.js 2023.05.30

[PostgreSQL] 데이터모델링과 인덱싱

데이터베이스에서 하드웨어 개선 없이도 내부 구조나 기능을 활용하여 속도를 향상시키는 대표적인 방법이 데이터 모델링과 인덱싱을 잘 하는 것입니다. 테이블 사이의 관계 같은 의미의 데이터라도 어떻게 구성할지 전략적으로 정하지 않으면 효율적인 데이터 처리를 수행할 수 없습니다. 이처럼 저장할 데이터의 구조를 정하는 작업을 데이터 모델링이라고 합니다. 데이터 모델링은 많은 양의 데이터를 빈번하게 조회하는 서비스에서 특히 더 중요합니다. 일대다 관계 하나의 테이블이 다른 테이블에 속하는 관계를 일대다 관계라고 합니다. 일대다 관계를 의미하는 정보는 일반적으로 속하는 테이블에 속해지는 테이블 id 값을 저장합니다. 이러한 방식을 이용하면 정보의 중복을 최소화하면서 정보를 저장할 수 있습니다. 이와 같이 서로간의 불..

DataScience 2023.05.30