IntelliJ 콘솔 한글 깨짐 JDK 21
·
Category/SpringBoot
JDK 21버전으로 사용 중에 콘솔에서 한글이 깨져서 출력되었다. 설정에서 인코딩을 UTF-8로 했는지 확인하고 구글에 나오는 거 다 적용해봐도 안되길래 JDK 17버전으로 변경하고 그냥 넘어갈까 하던차에 해결법을 알게되었다. 파일 인코딩 및 기본 문자셋으로 UTF-8 사용JDK 18부터는 모든 운영 체제에서 UTF-8 기본 문자셋으로 사용됩니다. JEP 400 - 기본적으로 UTF-8 Java 플랫폼 개선 제안(JEP) 400에서는 콘솔 입력 및 출력 인코딩을 제외하고 Java 18부터 모든 운영 체제에www.ibm.com위의 링크를 들어가 보면 다음과 같은 내용이 적혀있다. 그래서 아래 단계를 따라 설정해주면 한글이 깨지지 않고 잘 출력된다. 오른쪽 하단 Apply, Save 버튼 클릭 후 다시 실..
NestJs에 Swagger 적용하는 법
·
Category/NestJs
터미널에서 아래 명령어를 입력하여 Swagger 관련 패키지를 설치합니다.npm install --save @nestjs/swagger swagger-ui-express main.ts 파일에 다음과 같이 설정을 추가합니다.import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';// Swagger 관련 importimport { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';async function bootstrap() { const app = await NestFactory.create(AppModule); // Swagger 설정 추가 const c..
터미널에서 mermaid 파일 변환하기
·
Note/nk
vs-code 터미널에 아래 명령어를 입력하여 mermaid-cli를 설치합니다.npm install -g @mermaid-js/mermaid-cli 아래의 diagram.mmd 처럼 원하는 내용으로 파일을 생성합니다. 간단하게 gpt에 '로그인 흐름을 정리한 mermaid 작성해줘.' 라고 입력하여 생성해 봅니다.sequenceDiagram participant Client participant Frontend participant Backend participant Redis Note over Client,Frontend: 1. 로그인 요청 Client->>Frontend: 로그인 정보 입력 Frontend->>Backend: POST /auth/login (id..
express-generator
·
Note/nk
npm i express-generator -gexpress 프로젝트 생성express -h 명령어 확인npm installwww 파일 port 3000->9999npm start app
🐳 Docker 자격 증명 에러 해결하기 (docker-credential-desktop not found)
·
Category/Docker
Git Bash에서 docker-compose up 실행 시docker-credential-desktop: executable file not found 오류가 발생했다.$ docker-compose up[+] Running 0/1 - pgadmin Pulling 0.0s error getting credentials - err: exec: "docker-credential-desktop": executable file not found in %PATH%, out: `` where docker-credential-desktop 명령어를 실행하여 확인해보니 해당 파일은 존재한다.$ where docker-credential-desk..
NestJS에서 DTO는 왜 클래스(class)로 작성해야 할까?
·
Category/NestJs
NestJS 실습을 하다 보면 DTO(Data Transfer Object)를 클래스(class)로 작성하는 것을 자주 보게 됩니다. 그런데 TypeScript에서는 interface도 타입 정의가 가능한데, 왜 하필 클래스를 쓰는 걸까요?그 이유는 바로 런타임(Runtime)에 있습니다.interface는 컴파일 타임에만 존재TypeScript의 interface는 오직 컴파일 타임에만 존재합니다. 즉, TypeScript가 JavaScript로 변환될 때 인터페이스는 전부 사라집니다. 런타임에는 아무 정보도 남아있지 않기 때문에, 실행 중에 이 타입을 활용할 수 없습니다.interface CreateUserDto { name: string;}이렇게 작성된 인터페이스는 JS로 컴파일되면 완전히 없어집..
성능 측정 지표 Core Web Vitals (LCP, INP, CLS) 알아보기
·
Note/nk
1. LCP (Largest Contentful Paint)👉 페이지에서 가장 큰 콘텐츠(예: 이미지, 텍스트 블록)가 화면에 렌더링되는 데 걸리는 시간항목설명의미유저가 페이지 로딩이 끝났다고 느끼는 시점대상 요소큰 이미지, , 등의 텍스트 블록기준 (좋음)2.5초 이하면 우수개선 방법이미지 최적화, 서버 응답 속도 개선, 폰트 로딩 최적화💡 예시:사용자가 사이트에 들어왔을 때, 화면 대부분을 차지하는 배너 이미지가 2.3초만에 나타나면 → LCP = 2.3s2. INP (Interaction to Next Paint)**👉 사용자가 버튼을 누르거나 입력을 했을 때, 화면에 반응이 렌더링되기까지 걸린 시간항목설명의미반응성(Responsiveness) 측정대상클릭, 키보드 입력 등 모든 사용자 인터..
RESTful API의 핵심 설계 원칙
·
Note/nk
REST는 자원 중심(Resource-Oriented) 이기 때문에,URL은 "무엇을" 다루는지 (명사)를 표현하고,HTTP 메서드(GET, POST 등)는 "어떻게" 처리할지를 표현해야 함.잘못된 방식 (행위 중심)GET /getItemPOST /createItemDELETE /deleteItem?id=1메서드 이름을 URL에 표현하는 건 RESTful하지 않음HTTP 메서드 자체가 이미 의미를 내포하고 있기 때문에 중복바람직한 방식 (자원 중심)GET /items // 아이템 목록 조회GET /items/123 // 특정 아이템 조회POST /items // 아이템 생성PUT /items/123 // 아이템 수정DELETE /items/123 ..