[TIL] SSR & CSR

Dev_minΒ·2019λ…„ 10μ›” 11일
0

TIL

λͺ©λ‘ 보기
16/61

πŸ‘‰ μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§ & ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§

λͺ¨λ°”μΌμ˜ μ‹œλŒ€μ— λ“±μž₯ν•œ ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œλ Œλ”λ§ Single Page Application(SPA)
SPAλŠ” 졜초 ν•œλ²ˆ νŽ˜μ΄μ§€ 전체λ₯Ό λ‘œλ”©ν•œ ν›„ λ°μ΄ν„°λ§Œ λ³€κ²½ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜
전톡적인 μ›Ή 방식(SSR)은 μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§ 방식이닀. 즉, λΈŒλΌμš°μ €μ— λ‚˜νƒ€λ‚˜λŠ” ν˜•νƒœ κ·ΈλŒ€λ‘œλ₯Ό HTML둜 λ§Œλ“€μ–΄ μ œκ³΅ν•˜κ³ , λΈŒλΌμš°μ €λŠ” HTML을 ν‘œμ‹œν•˜λŠ” λ°©μ‹μ΄μ—ˆλ‹€. μš”μ¦˜μ€ μ›Ήμ—μ„œ μ œκ³΅λ˜λŠ” 정보가 많기 λ•Œλ¬Έμ— 전톡적인 방식은 μ„±λŠ₯λ¬Έμ œμ— 이슈λ₯Ό λ‚³μ•˜λ‹€.
ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§μ€ μ‚¬μš©μžμ˜ 행동에 따라 ν•„μš”ν•œ λΆ€λΆ„λ§Œ λ‹€μ‹œ 읽어듀이기 λ•Œλ¬Έμ— μ„œλ²„μΈ‘μ—μ„œ λ Œλ”λ§ν•˜μ—¬ 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ μ½μ–΄λ“€μ΄λŠ” 것보닀 λΉ λ₯Έ μΈν„°λ ‰μ…˜μ„ κΈ°λŒ€ν•  수 μžˆλ‹€. μ„œλ²„λŠ” 단지 JSON파일만 보내주고, html을 κ·Έλ¦¬λŠ” 역할은 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μˆ˜ν–‰
νŠΈλž˜ν”½μ„ κ°μ†Œμ‹œν‚€κ³ , μ‚¬μš©μžμ—κ²Œ 더 λ‚˜μ€ κ²½ν—˜μ„ 제곡

πŸ‘‰ Express

  1. Philosophy
    : http μ„œλ²„λ₯Ό μœ„ν•œ μž‘μ§€λ§Œ κ°•λ ₯ν•œ νˆ΄μ„ μ œκ³΅ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬

  2. Middleware
    : 쀑간 단계 ν•¨μˆ˜?
    middleware next 인자 --> λ‹€μŒ λ―Έλ“€μ›¨μ–΄ν•¨μˆ˜ μ—°κ²° ( μ „ 단계 νŒλ³„ )
    .use() λ©”μ„œλ“œ

  3. Router
    : λΌμš°νŒ…μ€ μ–΄λ–€ λ„€νŠΈμ›Œν¬ μ•ˆμ—μ„œ 톡신 데이터λ₯Ό 보낼 경둜λ₯Ό μ„ νƒν•˜λŠ” κ³Όμ •.
    URI 및 νŠΉμ •ν•œ HTTP μš”μ²­ λ©”μ†Œλ“œ (GET, POST λ“±)인 νŠΉμ • μ—”λ“œν¬μΈνŠΈμ— λŒ€ν•œ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‘λ‹΅ν•˜λŠ” 방법을 κ²°μ •ν•˜λŠ” 것
    < μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ ν•  수 μžˆλ„λ‘ μš”μ²­κ²½λ‘œλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. >

    // node.js router 방식
    if(path === '/a'){
        res.send('aa');
    }else if(path === '/b'){
        if(req.age < 20){
            res.status(400).send('no')
        }else{
            res.send('b')
        }
    }
    
    // express router 방식
    router.get('/a', (req,res) => {
        res.send('aa');
    })
    router.get('/b', (req,res) => {
        if(req.age < 20){
            return res.status(400).send('no')
        }
        res.send('b')
    })
    // 기본ꡬ쑰
    var express = require("express");
    var app = express();
    app.METHOD(PATH, HANDLER);	 
    • app은 express의 μΈμŠ€ν„΄μŠ€
    • METHODλŠ” HTTP μš”μ²­ λ©”μ†Œλ“œ
    • PATHλŠ” μ„œλ²„μ—μ„œμ˜ 경둜
    • HANDLERλŠ” λΌμš°νŠΈκ°€ μΌμΉ˜ν•  λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜
    app.get('/', function (req, res) {
      res.send('Hello World!');
    });
    
    app.post('/', function (req, res) {
      res.send('Got a POST request');
    });
    
    app.put('/user', function (req, res) {
      res.send('Got a PUT request at /user');
    });
  • app.route()
    : 라우트 κ²½λ‘œμ— λŒ€ν•˜μ—¬ 체인 κ°€λŠ₯ν•œ 라우트 ν•Έλ“€λŸ¬λ₯Ό μž‘μ„±ν•  수 μžˆλ‹€. κ²½λ‘œλŠ” ν•œ 곳에 μ§€μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ, λͺ¨λ“ˆμ‹ 라우트λ₯Ό μž‘μ„±ν•˜λ©΄ 쀑볡성과 κ°μ†Œν•˜μ—¬ 도움이 λœλ‹€.

    app.route('/book')
      .get(function(req, res) {
        res.send('Get a random book');
      })
      .post(function(req, res) {
        res.send('Add a book');
      })
      .put(function(req, res) {
        res.send('Update the book');
      });

πŸ‘‰ Cors

Cross Origins Resource Sharing : cross originμ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•œλ‹€
λ³΄μ•ˆμƒμ˜ 이유둜 λΈŒλΌμš°μ €μ—μ„œ cross origin 도메인 μš”μ²­μ€ 기본적으둜 μ œν•œ

const defaultCorsHeaders = {
    'access-control-allow-origin' : '*',
    'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
    'access-control-allow-headers': 'content-type, accept',
    'access-control-max-age' : 10 //seconds
}
  • λͺ¨λ“  도메인( * )을 ν—ˆμš©
  • λ©”μ†Œλ“œλŠ” GET POST PUT DELETE OPTIONS만 ν—ˆμš©
  • ν—€λ”μ—λŠ” content-typeκ³Ό accept만 μ“Έ 수 μžˆλ‹€
  • preflight requestλŠ” 10μ΄ˆκΉŒμ§€ ν—ˆμš©
    --> ν—ˆμš© μ„€μ • μ½”λ“œ
profile
TIL record

0개의 λŒ“κΈ€