개발ꡬ리🐸

Node에 S3 μ μš©ν•˜κΈ°

μ•ˆλ…•ν•˜μ„Έμš” 🐸 S3? Simple Storage Service 의 μ•½μžλ‘œ μŠ€ν† λ¦¬μ§€ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ„œλ²„μ—μ„œ λͺ¨λ“  정적 νŒŒμΌμ„ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•œλ‹€λ©΄ μ„œλ²„μ— λΆ€ν•˜κ°€ 되기 λ•Œλ¬Έμ— S3λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ ν•„μš” νŒ¨ν‚€μ§€ μ„€μΉ˜ npm i multer-s3 @aws-sdk/client-s3 S3 버킷 생성 및 μ„€μ • AWSμ—μ„œ S3λ₯Ό κ²€μƒ‰ν•˜μ—¬...

Node에 Redis μ μš©ν•˜κΈ°

μ•ˆλ…•ν•˜μ„Έμš” 🐸 μ΄λ²ˆμ—” μ œκ°€ λ…Έλ“œμ— λ ˆλ””μŠ€λ₯Ό μ—°λ™ν–ˆλ˜ κ²½ν—˜μ„ 기둝해놓기 μœ„ν•΄ μ •λ¦¬ν•©λ‹ˆλ‹€. μ™œ λ ˆλ””μŠ€? μ„Έμ…˜μ€ μ„œλ²„κ°€ λ‹€μš΄λ˜κ±°λ‚˜ μž¬μ‹œμž‘λ˜λ©΄ 정보가 μ‚¬λΌμ§€κ²Œ λ©λ‹ˆλ‹€. 그리고 μ„Έμ…˜μ€ μ„œλ²„λ§ˆλ‹€ 각자 κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ μ‘°μΉ˜κ°€ μ—†λ‹€λ©΄ A μ„œλ²„μ—μ„œ 둜그인 ν–ˆλ˜ μ‚¬μš©μžκ°€ λ‹€μŒ μš”μ²­μ€ B μ„œλ²„λ‘œ μš”μ²­λ˜μ–΄μ„œ 둜그인이 λ˜μ§€ μ•Šμ€ μ‚¬μš©μžλ‘œ 식별 될 수 μžˆμŠ΅λ‹ˆλ‹€. 이...

lighsail에 node λ°°ν¬ν•˜κΈ°

μ•ˆλ…•ν•˜μ„Έμš” 🐸 AWS의 Lightsail μ—μ„œ Node.js ν”„λ‘œμ νŠΈλ₯Ό μ˜¬λ €λ³΄λŠ” κΈ°λ‘μž…λ‹ˆλ‹€. 1. Lightsail μƒμ„±ν•˜κΈ° Lightsail은 AWSμ—μ„œ κ²€μƒ‰ν•˜λ©΄ λ°”λ‘œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€κ°€ μ—†λŠ” 첫 ν™”λ©΄ μž…λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€ 생성을 λˆ„λ¦…λ‹ˆλ‹€. ν”Œλž«νΌμ€ λ¦¬λˆ…μŠ€λ₯Ό μ„ νƒν•˜κ³  λΈ”λ£¨ν”„λ¦°νŠΈλŠ” Node.js λ₯Ό μ„ νƒν•©λ‹ˆλ‹€. 첫 90일은 무료인 ...

μ‹œν€„λΌμ΄μ¦ˆ increment와 decrement

μ•ˆλ…•ν•˜μ„Έμš” 🐸 μ‹œν€„λΌμ΄μ¦ˆμ™€ 같은 ORM은 직접 쿼리λ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” μž₯점이 μžˆλŠ” 반면, λ³΅μž‘ν•œ 쿼리 μž‘μ—…μ€ μ–΄λ ΅λ‹€λŠ” 단점이 μžˆλŠ”λ°μš”. κ·Έλž˜μ„œ μ‹œν€„λΌμ΄μ¦ˆμ—μ„œλŠ” literal() 을 톡해 직접적인 쿼리 μž‘μ„±μ„ 돕기도 ν•©λ‹ˆλ‹€. UPDATE κ΅¬λ¬Έμ—μ„œ 컬럼 κ°’μ˜ 증가/κ°μ†Œλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•΄ literal() 을 μ‚¬μš©ν•˜κΈ°λ„ ν•˜λŠ”λ°μš”, 이 λ–„ λŒ€μ‹ ν•΄μ„œ ...

λ…Έλ“œ μŠ€μΌ€μ₯΄ μ‚¬μš©ν•˜κΈ°

μ•ˆλ…•ν•˜μ„Έμš” 🐸 μ˜€λŠ˜μ€ node-schedule λ―Έλ“€μ›¨μ–΄μ˜ μ‚¬μš© 방법에 λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. node-schedule μ„œλ²„κ°€ μŠ€μΌ€μ₯΄λ§ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” λ―Έλ“€μ›¨μ–΄μž…λ‹ˆλ‹€. μž₯점 μ„œλ²„ λ‹¨μœ„μ—μ„œ μŠ€μΌ€μ₯΄λ§ μž‘μ—…μ„ 처리 κ°€λŠ₯ 단점 μ„œλ²„ λ‹€μš΄λ˜λ©΄ μŠ€μΌ€μ₯΄λ§ 데이터가 μœ μ‹€ κ΅¬ν˜„ν•˜κΈ° μ„€μΉ˜ npm i node-schedule ...

SSE μ‚¬μš©ν•˜κΈ°

μ•ˆλ…•ν•˜μ„Έμš” 🐸 SSE(Server-Sent-Event) μ„œλ²„μ˜ 데이터λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ³΄λ‚΄λŠ” 이벀트 μž…λ‹ˆλ‹€. μ‹€μ‹œκ°„ ν†΅μ‹ μ΄λΌλŠ” 점은 μ›Ήμ†ŒμΌ“κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ SSEλŠ” μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³΄λ‚΄λŠ” 단방ν–₯ ν†΅μ‹ λ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€. μ‹€μ‹œκ°„ 톡신은 ν•„μš”ν•˜μ§€λ§Œ μ–‘λ°©ν–₯일 ν•„μš”λŠ” μ—†λŠ” 경우 μ μ ˆν•˜κ²Œ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€. κ΅¬ν˜„ν•˜κΈ° κ΅¬ν˜„ 방법은 μ›Ήμ†ŒμΌ“μ˜ κ΅¬ν˜„...

크둬과 μ—£μ§€μ˜ μ›Ήμ†ŒμΌ“ μ—°κ²°/ν•΄μ œ μˆœμ„œ 문제 뢄석

μ•ˆλ…•ν•˜μ„Έμš” 🐸 Node.js κ°•μ˜λ₯Ό λ“€μœΌλ©΄μ„œ μ›Ήμ†ŒμΌ“μ— λŒ€ν•΄ 곡뢀 쀑 μ΄μƒν•œ 문제λ₯Ό λ§Œλ‚¬μŠ΅λ‹ˆλ‹€. λ°°κ²½ 상황 /chat , /room 으둜 λ‚˜λ‰˜μ–΄μ§„ λ„€μž„μŠ€νŽ˜μ΄μŠ€κ°€ μžˆλ‹€. 각각 /chat 은 μ±„νŒ…λ°©μ— μ—°κ²°λ˜λŠ” μ†ŒμΌ“μ„ κ΄€λ¦¬ν•˜κ³  /room 은 μ±„νŒ…λ°© λͺ©λ‘μ— μ—°κ²°λ˜λŠ” μ†ŒμΌ“μ„ κ΄€λ¦¬ν•œλ‹€. μ±„νŒ…λ°©μ—μ„œ λͺ¨λ“  μœ μ €κ°€ 방을 λ‚˜κ°€λ©΄ ν•΄λ‹Ή 방은 μ‚­μ œλ˜κ³  μ‚¬μš©μžλŠ” λ©”μΈνŽ˜μ΄...

λͺ½κ³ DB μ—°κ²° μ—λŸ¬ MongoParseError: option usecreateindex is not supported

μ•ˆλ…•ν•˜μ„Έμš” 🐸 μ‚°λ„˜μ–΄ μ‚°μž…λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” MongoParseError: option usecreateindex is not supported λΌλŠ” μ—λŸ¬κ°€ λœ¨λ„€μš” usecreateindex λΌλŠ” μ˜΅μ…˜μ΄ 지원이 μ•ˆλœλ‹€λ‹ˆ 그러면 뭐 없어진건지 λ‹€λ₯Έκ±Έλ‘œ λŒ€μ²΄κ°€ λœκ±΄μ§€μ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…이 μ—†κΈΈλž˜ κ³΅μ‹λ¬Έμ„œλ₯Ό λ“€μ–΄κ°€μ„œ κ²€μƒ‰ν•΄λ΄€μŠ΅λ‹ˆλ‹€. useNewUrl...

λͺ½κ³ DB μ—°κ²° μ—λŸ¬ MongooseError: Mongoose.prototype.connect() no longer accepts a callback

μ•ˆλ…•ν•˜μ„Έμš” 🐸 곡뢀쀑 MongooseError: Mongoose.prototype.connect() no longer accepts a callback 이런 μ—λŸ¬λ₯Ό κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€. λ³΄μ•„ν•˜λ‹ˆ μ½œλ°±ν˜•μ‹μ€ 더 이상 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것 κ°™λ„€μš”πŸ€” κ·Έλž˜μ„œ μ†ŒμŠ€λ₯Ό λ³΄λ‹ˆ μ•„λž˜μ²˜λŸΌ μ£Όμ„μ—μ„œ 링크도 μ—°κ²°λ˜μ–΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€   /** Opens Mongoose's def...

Socket.IO λͺ¨λ“ˆ μ‚¬μš©ν•˜κΈ°

Socket.IO λͺ¨λ“ˆ κ°œλ°œμžκ°€ μ›Ήμ†ŒμΌ“μ„ 보닀 κ°„νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€. ws 보닀 νŽΈμ˜μ„±μ΄ λŒ€ν­ κ°œμ„ λ˜μ—ˆκΈ°μ— 개발이 μˆ˜μ›”ν•©λ‹ˆλ‹€. μ„€μΉ˜ npm i socket.io μ‚¬μš© 방법 기쑴의 ws λ₯Ό μ‚¬μš©ν•  λ•Œ μ„€μ •ν–ˆλ˜ socket.js 파일의 λ‚΄μš©μ„ μˆ˜μ •ν•΄μ•Όν•©λ‹ˆλ‹€. const SocketIO = require('socket.io'); mod...