지금까지 사이드 프로젝트를 진행할 사람들을 찾다가 사람이 별로 없어서 내가 만들고 싶은거를 만들자라는 생각이 들어서 첫 토이 프로젝트는 Node.Js 플레임 워크에 Typescript기반 프로젝트를 진행하려 한다.
선정 이유는 Node.Js는 기초로만, 어떤 느낌인지만 알고 넘어간 후, Nest.Js를 활용해서 프로젝트를 진행했었기 때문에 이번 기회에 Node.Js로도 프로젝트를 진행하고 싶은 마음이 생겼다.
Nest.Js를 사용하면서 느낀 점은, Controller와 Service로직을 나눠 MVC패턴을 설계하는데 되게 쉽다고 생각했었다. 그래서 이번에 Node.Js를 사용하면서, MVC패턴에 좀 더 익숙해지고, OOP의 대한 개념도 조금 더 알고자 진행하려 한다.
DB는 일단 대용량 데이터가 없는 상태를 가정하고 진행하려하기 때문에 MySQL을 사용하려한다.
ERD Cloud를 사용하여 먼저 User와 Board간의 관계만 나타낸 상황이고 필요하다면 추후에 추가할 예정이다.
Nest.Js는 TypeORM 라이브러리를 사용하여 구현하여 연동이 되게 쉽게 된 편이였는데, Node.Js는 아니여서 시간이 좀 걸렸다.
그 중 하나 SQL연결 작업 도중 배운 것이 있는데,
const pool = mysql.createPool({
connectionLimit: 10,
host: DB_HOST,
user: DB_USER,
password: DB_PASSWORD,
database: DB_DATABASE,
waitForConnections: true,
})
여기서 createPool을 처음 봤는데, createPool()은 설정된 connectionLimit만큼의 데이터베이스 연결을 동시에 유지할 수 있는 풀을 만드는데, 요청을 처리할 때마다 이미 생성된 연결 중 하나를 재사용한다. 연결이 필요할 때마다 새로운 연결을 만드는 대신, 풀에 미리 생성해 둔 연결을 재사용하여 리소스 사용을 최적화하고 성능을 개선한다고 한다.
처음에는 OS의 세마포어와 비슷한 느낌인줄 알았으나, Race condition을 염두해두고 만든 기능은 아니라고한다.
약간 캐시와 비슷하다고 해야하나...? 재사용성을 늘리고 연결/해제를 반복하지 않아도 되고, 모든 풀이 꽉 차있다면 풀에 새로운 연결을 만들면 되니 성능을 개선 시키는 것 같다.
오늘은 DB를 연결하고, 회원가입 API를 만든 것이 전부다. 내일은 게시글 작성 및 JWT 활용 로그인을 구현할 예정이다.