PostgreSQL 구조 이해하기
·
PostgreSQL
pgAdmin의 좌측 트리구조기존에 사용하던 MariaDB와는 다르게 PostgreSQL은 데이터베이스 - Schemas - public - 테이블 이런식으로 배치가 되어있다. Servers └ test-server └ Databases └ app ├ Schemas │ └ public │ ├ Tables │ ├ Views │ ├ Indexes │ └ Sequences기존에 사용하던 MariaDB와는 다르게 PostgreSQL은 데이터베이스 - Schemas - public - 테이블 이런식으로 배치가 되어있다. 간단한 SQL 날려서 확인 해보기Query Tool을..
NestJS로 효율적인 백엔드 개발하기 (10) - 인터셉터
·
NestJS/개념과 구조 정리
인터셉터인터셉터는 관점 지향 프로그래밍 (AOP) 기법 에서 영감을 받은 유용한 기능들을 가지고 있다.메서드 실행 전후에 추가 로직을 바인딩한다.함수에서 반환된 결과를 변환한다.함수에서 발생한 예외를 변환한다.기본 기능 동작을 확장한다.특정 조건에 따라 함수를 완전히 재정의한다. (예: 캐싱 목적)간단한 인터셉터 셋팅하기nest g itc interceptor위의 명령어를 통해 인터셉터를 셋팅하자. 간단한 코드인데 컨트롤러 진입전에 시간을 찍고 컨트롤러 종료되면 걸린시간을 찍는것이다.import { CallHandler, ExecutionContext, Injectable, NestInterceptor,} from '@nestjs/common';import { Observable, tap } fr..
NestJS로 효율적인 백엔드 개발하기 (09) - 가드
·
NestJS/개념과 구조 정리
가드란 무엇일까??"이 요청을 컨트롤러까지 보내도 되는지"를 판단하는 관문이다.true -> 다음 단계로 이동false -> 요청 차단가드를 보다 보면 이런 생각이 들 수 있다. “이거 파이프랑 비슷한 역할 아닌가? 굳이 따로 있어야 하나?” 하지만 파이프와 가드는 목적 자체가 다르다. 파이프는 요청 데이터의 검증과 변환에 집중한다. 반면 가드는 이 요청이 실행될 자격이 있는지, 즉 접근 가능 여부를 판단한다. 쉽게 말해, 파이프는 데이터를 다루는 도구이고 가드는 요청을 통과시킬지 결정하는 문이다.가드는 모든 미들웨어 이후에 실행되지만, 인터셉터나 파이프 이전에 실행된다.Request ↓Middleware ↓Guard ← 현재 위치 // 여기서 true면 다음 스텝으로 넘기고 false인..
NestJS로 효율적인 백엔드 개발하기 (08) - 파이프
·
NestJS/개념과 구조 정리
파이프(Pipe)는 무엇일까??변환 : 입력 데이터를 원하는 형태로 변환한다.(예: 문자열을 정수로)유효성 검사 : 입력 데이터를 평가하고, 유효한 경우 변경 없이 그대로 전달하고, 그렇지 않으면 예외를 발생시킨다.기본적으로 사용할 수 있는 여러 가지 내장 파이프를 제공커스텀 파이프 생성 가능여러가지 제공되는 함수가 많다. 공식문서를 확인하는것이 좋다.https://docs.nestjs.com/pipes변환파이프를 테스트 하기 위해서 아래의 명령어를 입력해서 컨트롤러 하나를 만들어둔다.nest g controller pipe-testParseIntPipe에 대해서 한번 테스트를 해볼건데, 일단 아래와 같이 코드를 한번 적어본다.import { Controller, Get, Query } from '@ne..
NestJS로 효율적인 백엔드 개발하기 (07) - 예외 필터
·
NestJS/개념과 구조 정리
Exception Filters는 무엇인가??Nest 에는 애플리케이션 전체에서 처리되지 않은 모든 예외를 처리하는 내장 예외 처리 계층이 있다. 애플리케이션 코드에서 예외를 처리하지 못하면 이 계층에서 예외를 포착하여 사용자에게 적절한 응답을 전송한다.예외 필터를 위한 컨트롤러 셋팅필터를 확인하기 위해서 아래의 명령어를 입력하여 새로운 filter 컨트롤러를 만들어보자.nest g controller filter새로운 filter 컨트롤러를 생성한 후 정상적으로 파일이 생성되었는지 확인한다.filter.controller.ts의 코드를 열어서 경로 하나를 Get()으로 하나 만들어주자.import { Controller, Get } from '@nestjs/common';@Controller('filt..
NestJS로 효율적인 백엔드 개발하기 (06) - 미들웨어(클래스형, 함수형)
·
NestJS/개념과 구조 정리
미들웨어는 무엇일까??미들웨어는 Express와 마찬가지로 요청(Request)과 응답(Response) 사이에서 실행되는 함수이다.요청의 전처리(인증, 유효성검사, 로깅) 후 다음 스텝으로 넘겨주는게 필요할때 사용함Nest 미들웨어는 의존성 주입(Dependency Injection)을 완벽하게 지원함미들웨어 생성 - logger.middleware.ts import { Injectable } from '@nestjs/common';@Injectable()export class LoggerMiddleware { use(req, res, next) { console.log('Request...'); next(); }}middleware 폴더를 하나 생성 후 logger.middleware...
NestJS로 효율적인 백엔드 개발하기 (05) - 모듈에 대해 알아보자
·
NestJS/개념과 구조 정리
모듈 꼭 알아야 할까?Nest CLI를 사용하면 nest g controller, nest g service 같은 명령어 한 줄로 파일을 자동 생성할 수 있어서 처음에는 구조가 단순해 보이지만, 프로젝트 규모가 조금만 커져도 이게 왜 필요한지, 어디에 어떤 코드를 넣어야 하는지가 헷갈리기 시작한다. 나 역시 NestJS를 쓰면서 많은 기능들을 빠르게 만들 수 있었지만, 모듈을 이해하지 못하면 파일 구조가 뒤엉키고, 의존성 주입이 꼬이고, 유지보수가 어려워진다. 그래서 이번 포스트에서 한번 정리를 하고 넘어가려 한다.모듈은 무엇일까??NestJS에서 모듈은 앱 구조를 정의하고, 의존성을 관리하는 핵심 단위모듈은 기능 단위로 코드를 캡슐화한 것UsersModule ├─ users.controller.ts ├..
NestJS로 효율적인 백엔드 개발하기 (04) - 서비스 사용하기
·
NestJS/개념과 구조 정리
nest/cli 명령어로 service.ts 만들기이전에 nest g resource users 명령어를 사용하여 프로젝트를 셋팅 했다면 service.ts가 있지만 혹시라도 없는 경우에는 하단의 명령어를 통해서 service.ts를 셋팅하도록 하자nest g service users인터페이스 생성잠시동안 users 타입으로 데이터를 받아줄 인터페이스를 생성한다. 아래의 명령어를 터미널에 입력하자.nest g interface users그리고 인터페이스가 생성이 되면 아래와 같이 타입을 지정해주자.export interface Users { name: string; age: number; job: string;}service.ts 설정import { Injectable } from '@nestjs/..
NestJS로 효율적인 백엔드 개발하기 (03) - 컨트롤러 사용하기
·
NestJS/개념과 구조 정리
컨트롤러(controller)란?NestJS의 컨트롤러는 HTTP 요청을 받아 처리할 메서드로 연결하고, 서비스의 실행 결과를 클라이언트에게 돌려주는 역할을 한다. URL 경로와 HTTP 메서드를 매핑해 애플리케이션의 라우팅을 담당하는 핵심 요소이다.시작 전 셋팅nest g resource users시작 전 위의 명령어를 실행하여 users를 만들어준다.@Getimport { Controller, Get } from '@nestjs/common';@Controller('users')export class UsersController { @Get() findUser(): string { return 'find user page'; }}@Controller('users')를 통해서 localhos..
NestJS로 효율적인 백엔드 개발하기 (02) - 컨트롤러, 서비스, 모듈
·
NestJS/개념과 구조 정리
기본설명Nest는 타입스크립트와 순수 자바스크립트 모두와 호환 됨순수 자바스크립트와 함께 사용하려면 Babel 컴파일러가 필요함25년 12월 기준 Node.js(20) 이상의 버전이 설치되어 있는지 확인이 필요디렉토리 확인하기이전에 01번 포스트에서 정상적으로 진행했다면 보일러플레이트가 정상적으로 설치되었을 것이다. 그리고 src 폴더를 열어본다.보일러 플레이트란?컴퓨터 프로그래밍에서 "보일러플레이트"는 각종 프로젝트의 기본이 되는, 재사용될만한 소스 코드 기반을 의미합니다. 프로젝트를 시작할 때마다 기본이 될만한 세팅들을 매번 넣어준다면 초기 준비 시간이 많이 소요될 수 있기 때문에, 자주 사용되는 "상용구 코드"를 미리 프로젝트화 하여 제작해두는 것입니다. 여러 회사들은 각자 사내에서 주요 기술이라고..
NestJS로 효율적인 백엔드 개발하기 (01) - nest/cli 설치
·
NestJS/개념과 구조 정리
시작Express로 백엔드를 작업하면서 자유도가 높다는 장점을 경험했다. 혼자 작업할 때는 매우 편리했지만, 팀 프로젝트에서는 이 자유도가 오히려 단점으로 작용하기도 했다. 규격과 구조를 어느 정도 정리하지 않으면 협업에서 불편한 상황들이 만들어졌다. 그래서 이후에는 SpringBoot로 옮겨 개발했다. 스프링부트는 큰 규모의 프로젝트에서 안정적이고 구조화된 개발을 지원해, 팀 환경에서 훨씬 효율적임을 느꼈다. 하지만 한 가지 프레임워크에만 의존하다 보니, 프로젝트 상황에 따라 유연하게 대응하기 어렵다는 한계도 있었다. 이러한 경험을 통해, 백엔드 개발자라면 한 프레임워크나 언어에 얽매이지 않고 상황에 맞는 기술을 선택할 수 있어야 한다는 생각을 하게 되었다.Nest CLI 설치하기설치 전 확인 - 25..
자바에서 int[] ↔ List<Integer> 변환 (for문은 이제 그만...)
·
Java
느꼈던 불편함에 대하여코딩을 하다 보면 배열을 동적으로 관리해야 하는 상황이 자주 생긴다. 처음에는 배열을 다루기 위해 for문을 반복해서 돌리며 값을 옮기거나 추가하는 방식을 사용했다. 하지만 이런 방식은 코드가 길어지고 유지보수도 쉽지 않았다. 그러던 중, 배열을 List로 변환한 뒤 관리하는 것이 훨씬 유연하다는 걸 깨달았다. 특히 람다식(Stream)을 활용하면 반복문 없이도 가독성 좋은 코드로 깔끔하게 변환할 수 있어 큰 도움이 되었다.int[] -> List 변환 import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class Main { public static void main(St..