- μΈμ΄ : JavaScript(ES6)
- νλ‘ νΈ : SCSS, PUG
- λ°±μλ : NodeJs, MongoDB, Express
- λ°°ν¬ : AWS S3, Mongo Atlas, Fly.io
- λΌμ΄λΈλ¬λ¦¬ : npm, WebPack, Mongoose, babel, express-session, multer, FFmpeg λ±
- User
- κΉν openAPI λ₯Ό μ΄μ©ν μμ λ‘κ·ΈμΈ κΈ°λ₯
- μΈμ μ ν΅ν λ‘κ·ΈμΈ/ λ‘κ·Έμμ κΈ°λ₯
- νλ‘ν μμ (μ¬μ§, λλ€μ λ±) κΈ°λ₯
- Video
- λμμ/ μ΄λ―Έμ§(μ¬λ€μΌ) μ λ‘λ κΈ°λ₯(AWS S3)
- λμμ λ Ήν λ° λ Ήνν μμ λ€μ΄λ‘λ & μΈλ€μΌ λ€μ΄λ‘λ κΈ°λ₯(FFmpeg)
- λμμ μ‘°νμ κΈ°λ₯
- λμμ μμ λ° μμ κΈ°λ₯
- (νλ©΄μμ 보μ΄λ μ’μμ, μ«μ΄μλ κΈ°λ₯λμ§ μμ΅λλ€..π€£)
- κ·Έ μΈ
- λκΈ μΆκ° λ° μμ κΈ°λ₯
- μμ μ λͺ© κ²μ κΈ°λ₯
-π[src]
β‘[client] β‘οΈ js γγβγ js ν΄λ (videoEvent)
β‘[client] β‘οΈ scss γγβγ css ν΄λ
β‘[controllers]γγβγμ¬μ©μ μμ²/μλ΅ μ²λ¦¬ ν΄λ
β‘[models]γγβγ DB model ν΄λ
β‘[routers]γγβγμ¬μ©μ μμ²/μλ΅ λΌμ°ν° ν΄λ
β‘[views]γγβγ PUG ν
νλ¦Ώ ν΄λ
β‘db.js γγβγ mongoose DB μ°κ²°
β‘init.js γγβγμλ² μ€ν
β‘middlewares.js γγβγ express middleware
β‘server.js γγβγ express μλ² μΈν
- ES6 λ²μ μ 곡λΆνλ©°, Arrow function κ³Ό async/await μ κ°μ λΉλκΈ° ν¨μ μ²λ¦¬μ κ°μ μ°¨μ΄μ μ λν΄ μ μ μμμ΅λλ€.
- FFmpeg, AWS S3 λ₯Ό μ¬μ©νλ©° CORSλ 무μμ΄λ©°, νμμ±, λ¬Έμ ν΄κ²° λ°©λ²μ λν΄ κ΅¬μ²΄μ μΌλ‘ 곡λΆν μ μμμ΅λλ€.
- Mongoose μ schema & model μ λν΄ κ³΅λΆνλ©° λ°±μλμ ꡬ쑰μ λν΄ λ°°μΈ μ μμμ΅λλ€. μ΄λ ΅μ§λ§ μ§μ λͺ¨λΈμ μ€κ³νκ³ κ΅¬μ‘°λ₯Ό μ‘μκ°λ κ³Όμ μ΄ μ¦κ±°μ μ΅λλ€ π
-
MongoDB Atlas + AWS S3 μλ²λ₯Ό μ¬μ©νλ κ²μ μ²μμ΄λ€λ³΄λ μ΄λ €μμ΄ λ§μμλλ°,
νΉν λμμ λ Ήν λ° λ³ν λΌμ΄λΈλ¬λ¦¬μΈ FFmpeg μ AWS S3 μ Same Origin Policy μ μ± μ΄ λΆλͺν
μ μμ μΈ μλμ΄ μ λ¬μλ€. μ²μ λ§λ CORS μ μ± μ€λ₯μλ€. -
FFmpeg λ 보μμ μν΄ μΆμ²κ° 격리λ νμ΄μ§μμλ§ μ¬μ©μ΄ κ°λ₯νλ,
μλ°ν URL μ AWS S3 μμ, κ·Έλ¬λκΉ λ€λ₯Έ μΆμ²μμ μ΄λ―Έμ§λ₯Ό κ°μ ΈμμΌ νλ€. -
μ΄μ CORS λ 무μμΈμ§, κΈ°μ΄λ₯Ό λ€μ 곡λΆνκ³
λ κ°μ§ μ μ± μ΄ λΆλͺνμ§ μλλ‘ ν μ μλ CORS μ μ± μ λν΄ κ³΅λΆν κ²°κ³Ό,
COEP λ₯Όcredentialless
μΌλ‘ μ€μ νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμλ€.πμλ¬λ ΈνΈ_CORS μ€λ₯ ν΄κ²°(2) feat. SharedArrayBuffer
-
μλλ λ¬Έμ κ° λ°μνλ
server.js
μ λΆλΆ.
// κΈ°μ‘΄ μ½λ
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", true);
res.header("Cross-Origin-Embedder-Policy", "credentialless");
next();
});
// μμ ν μ μ λμ
app.use((req, res, next) => {
res.header("Cross-Origin-Embedder-Policy", "credentialless");
res.header("Cross-Origin-Opener-Policy", "same-origin");
next();
});
- λ°μν μΉ λμμΈ, ν¬λ‘μ€ λΈλΌμ°μ§!
- λ€μ΄λ² openAPI μμ λ‘κ·ΈμΈ κΈ°λ₯ ꡬν
- λμμ μ’μμ, μ«μ΄μ κΈ°λ₯
- ν΄μνκ·Έλ₯Ό ν΅ν΄ μμμ κ²μνλ κΈ°λ₯