
useEffect(() => {
  fetch('http://127.0.0.1:3001/api/todos')
    .then((res) => {
      return res.json();
    })
    .then(({ todos }) => {
      setTodoList(() => todos.map((item) => <List value={item} key={uuidv1()} />));
    });
}, []);
localhost:3000localhost:3001에서 실행중이다. port가 다르기 때문에 Same-origin policy를 위배한다. 따라서 Cross-Origin Resource Sharing을 해주기 위한 조치를 취해줘야 했다.
request 중 simple request에 해당하는 상황이기 때문에 nodejs-express 서버측에서만 조치를 취해주면 됐다.
const express = require('express');
const router = express.Router();
const mysql = require('mysql2');
const allowOrigins = ['http://127.0.0.1:3000', 'http://localhost:3000'];
/* GET home page. */
router.get('/todos', function(req, res, next) {
    const { origin } = req.headers;
    if (allowOrigins.includes(origin)) {
        res.setHeader('Access-control-allow-origin', origin);
    }
    let todos = [];
    const connection = mysql.createConnection({
        host: process.env.DB_HOST,
        user: process.env.DB_USER,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_SCHEMA_TODOS,
    });
    connection.connect();
    connection.query(
        'SELECT * FROM todo_list',
        async (err, results, fields) => {
            if (err) throw err;
            for (let i = 0; i < results.length; i++) {
                const { todo, add_time } = results[i];
                todos.push(todo);
            }
            res.send({ todos });
        }
    );
    connection.end();
});
module.exports = router;

loading... 혹은 spinner gif 등)initdb.sql파일에서 한글로 row들을 넣어주면 공백으로 들어간다.