
[Express] 라우터 분리, 모듈화
2024. 11. 14. 21:20
NestJS
라우트 가 많아지면 관리가 힘들다.express.Router()를 사용하면 여러 라우트를 독립적인 모듈로 작성하여 파일 단위로 관리할 수 있다.이를 통해 코드의 재사용성과 가독성이 향상된다. Router와 app의 차이점🐥app 객체Express 애플리케이션 전체를 나타낸다. 서버를 생성하고 설정하는 데 사용되며, app.use() 메소드를 통해 미들웨어나 라우트를 등록한다.🐥Router 객체독립적인 라우트 모듈을 생성한다. 이 객체를 사용해 특정 라우트 그룹을 만들고, 최종적으로 app.use()로 Express 애플리케이션에 등록한다. Router 사용 방식Router 객체를 사용하면 라우트를 모듈화할 수 있다.이를 통해 관련된 라우트들을 하나의 파일에 모아 두고, 나중에 app.use..

[Express] CRUD 기능 만들기
2024. 11. 14. 15:46
NestJS
이번 포스팅에서는 Express로 CRUD(Create, Read, Update, Delete) 기능을 구현하는 기본적인 흐름을 살펴보겠다.실제로 DB와 연결하지는 않았고, Express의 CRUD 처리 과정과 코드 흐름을 이해하는 데 집중했다. 🐱READ - 데이터 조회전체 데이터 조회전체 고양이 데이터를 조회하는 엔드포인트다.데이터베이스에서 데이터를 가져오는 것처럼 가정하고 Cat이라는 객체에서 데이터를 불러온다.만약 데이터 조회 중 에러가 발생하면 에러 메시지를 반환한다.import { error } from "console";import * as express from "express";import { Cat, CatType } from "./app.model";const app: expr..

[Express] 라우팅과 미들웨어
2024. 11. 14. 10:31
NestJS
NestJS에 관한 강의를 듣다 보니 라우터와 미들웨어라는 용어가 자주 등장했다.하지만 이런 개념을 처음 배우다 보니 다소 추상적으로 느껴져서 쉽게 와닿지 않는 부분이 있었다.그래서 두 개념의 차이점을 조금 더 명확하게 이해하기 위해 추가로 찾아보게 되었다. 라우팅라우팅은 특정 엔드포인트(URI + HTTP 메소드(GET,POST,,,) )에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 정의해두는 것을 말한다. 예를 들어 " '/user' 구조의 URI가 get 메소드로 올 대는 user.html을 보내주자!" 와 같은 규칙들을 미리 짜놔야 한다.Express에는 이를 간단하게 처리해주는 함수가 존재한다. 구조는 다음과 같다. app.METHOD(PATH,HANDLER);- app은 expre..

TypeScript와 Express로 Node.js 서버 구축하기
2024. 11. 13. 14:44
NestJS
타입 스크립트는 JS의 확장 언어다.타입스크립트로 작성한 코드를 JS로 컴파일하여 컴파일 된 JS 코드가 Node.js(JS의 런타임 환경)에서 실행되면서 프로그램이 움직인다. package.json 설정package.json에 다음과 같은 스크립트를 추가했다.{ "scripts": { "build": "tsc", -> npm run build 시 실행 tsc -> (루트 경로에서 tsconfig.json을 읽어서 옵션에 맞게 컴파일해라) "start:dev": "tsc-watch --onSuccess \"node dist/app.js\"", -> npm run start:dev 실행 시 해당 명령어 실행 tsc로 계속 컴파일을 했을 때 성공했다면 다음 명령어 실행 node 로 dist 폴..

서버 환경에 ssl 인증서 적용하기(zeroSSL)
2024. 8. 12. 11:26
HTTP
무료 ssl 인증서는 3개월마다 한번씩 만료된다. 이를 서버에 다시 적용할 때마다 방법을 다시 찾아보는게 귀찮아서, 문서화도 하고 약했던 서버 관련 개념도 정리할 겸 블로깅해본다. 따라서 이번 포스팅에서는 Nginx를 이용해 Ec2 인스턴스에서 SSL/TLS 인증서를 설정하고, HTTPS 보안 연결을 활성화하는 과정을 작성해보려 한다. SSL/TLS 는 웹 사이트와 사용자의 브라우저 간 통신을 암호화하여, 데이터를 안전하게 만드는 프로토콜이다.SSL과 TLS는 사실상 같은 기능을 하는 프로토콜이지만 TLS가 SSL의 후속 버전이다. 자세한건 다음 블로깅에서 포스팅할 예정 일단 인증서 발급 사이트에서 다운받은 인증서를 인증서 가져오기로 가져온다! (ZeroSSL를 이용했다) 1️⃣ 다운받은 인증서 가져오..

Spring 프로젝트에서 웹소켓 적용하기~!! 2탄
2024. 6. 12. 21:44
Spring
🔎하고싶은것유저중 한명이 POST,UPDATE,DELETE요청을 보내서 여행 일정을 변경하면같은 세션에 있는 다른 유저들에게도 페이지 새로고침되어 변경사항이 보였으면 좋겠다! 🔎구현 방법서버에서 클라이언트의 엔티티변경(POST,UPDATE,DELETE) 요청을 처리한 후 브로드캐스트하여 변경사항을 모든 클라이언트에게 알림=> 웹소켓에 연결된 클라이언트는 메시지를 받을 때 페이지를 새로고침함 브로드캐스트❔❓한 장치가 여러 장치에게 동시에 메세지를 전송하는 것을 의미하며여기서는 웹소켓을 통해 서버에서 클라이언트들에게 동시에 메세지를 전송하는 방식을 의미한다. 브로드캐스트: 한 번의 메시지 전송으로 네트워크에 연결된 모든 장치(또는 지정된 그룹)에게 메시지를 전달하는 방식멀티캐스트(Multicast):..

Spring 프로젝트에서 웹소켓 적용하기~!! 1탄
2024. 6. 10. 23:01
Spring
여행 일정 공유사이트를 만들며 여러명이서 실시간으로 편집상태를 공유하는 기능이 있으면 좋겠다고 생각했고, 이를 위해 웹소켓을 연동하게 되었다. 기본 HTTP는 stateless하기 때문에 서버에 변경사항이 생겨도 클라이언트에서 요청을 하지 않으면 변경사항이 적용되지 않는 반면 WebSocket은 지속적으로 connection을 유지하기 때문에 실시간으로 변경사항이 적용된다! 웹소켓의 이런 특징을 이용해 실시간 편집기능을 구현할 수 있다. 그리고 WebSocket 은 HTTP를 통해 최초 연결(핸드세이크)되며 이후 일정 시간이 지나면 HTTP연결은 자동으로 끊어지고 WebSocket Connection은 유지된다 다만 웹소켓은 stateful 프로토콜로서 connection을 항상 유지해야하기 때문에 트..

[ERROR]Git에서 폰트파일 깨지는 문제
2024. 5. 23. 14:54
Error
🔎문제상황폰트 파일을 깃에만 올리면 깨지는 문제가 발생했다. 🔎원인폰트 파일이나 바이너리 파일은 본질적으로 텍스트 파일이 아니기 때문에,Git이 이 파일들을 텍스트 파일로 처리하려고 할 경우 파일이 깨질 수 있다. 🔎해결법 gitattributes에 다음 설정 추가 * text eol=lf .gitattributes 파일에서 특정 파일 타입에 대해 binary 속성을 지정하거나,모든 파일에 대해 -text 속성을 지정하여 Git이 라인 엔딩을 변경하지 않도록 할 수 있다. text 속성 -> Git이 해당 파일을 텍스트 파일로 인식하도록 지정텍스트 파일로 인식된 파일은 Git이 라인 엔딩을 자동으로 변환할 수 있게 됨. eol=lf -> 라인 엔딩을 강제로 LF(Line Feed)로 설정하..

프로그래머스 SQL 고득점 KIT 뿌시기 - SELECT 1
2024. 5. 5. 18:37
SQL
코딩테스트 평균 일일 대여 요금 구하기 ROUND(컬럼명, 1(소수 둘쨰자리에서 반올림=첫째자리까지 보임)) => 반올림 AVG(컬럼명) => 컬럼의 평균 AS => 컬럼 이름 지정 답SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEEFROM CAR_RENTAL_COMPANY_CAR cWHERE c.CAR_TYPE = 'SUV' 프로그래머스 조건에 맞는 도서 리스트 출력하기 DATE FORMAT 함수DATE_FORMAT(컬럼명, format형식) FORMAT 형식에 들어갈 수 있는 형식 지정자%Y: 4자리 연도 (예: 2024)%y: 2자리 연도 (예: 24)%m: 월 (01~12)%d: 일 (01~31)%H: 24시간 형식의 시간 (00~23)%i: 분 (00~59)..