콜백 함수, newsList 페이지에 대한 학습 내용

 

단일 콜백 함수

connection.query('select * from test',
    function (err, rows, fields) {

      if (err) throw err;
      // 쿼리 결과 가져온거
      for (var i = 0; i < rows.length; i++) {
        var data = rows[i];
        console.log(data.no, data.name);
      }
      res.send(rows);
    }
  );

 

이중 콜백 함수

connection.query(`update test set name='${data1}' where (no) = '${data2}'`,
  // update test.test  set name='ddd' where (no) >= 1020;
    function (err, rows, fields) {

      if (err) throw err;
      // 쿼리 결과 가져온거
      connection.query(`select * from test where (no) = '${data2}'`,
        function (err, rows, fields) {

          if (err) throw err;
          // 쿼리 결과 가져온거
          for (var i = 0; i < rows.length; i++) {
            var data = rows[i];
            console.log(data.no, data.name);
          }
          res.send(rows);
        }
      );
    }
  );

 

 

1. app.js

var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app).listen(81);
console.log("server is running...")

var mysql = require('mysql');
// npm install mysql

var connection = mysql.createConnection({
  host: 'localhost',
  port: 3308,
  user:'root',
  password: '1234',
  database: 'javascript'
});


// 1. 서버 접속시 쿼리 실행해서 DB에서 데이터 읽어오기.
app.get('/selectFromServer', function (req, res) {
  // 콜백 함수
  connection.query('select * from test',
    function (err, rows, fields) {

      if (err) throw err;
      // 쿼리 결과 가져온거
      for (var i = 0; i < rows.length; i++) {
        var data = rows[i];
        console.log(data.no, data.name);
      }
      res.send(rows);
    }
  );
});

// 2. update 하는 라우터를 만들고 번호, 이름을 쿼리스트링으로 받아서 수정.
app.get('/query', function (req, res) {
  res.sendfile("dbquery.html");
});

app.get('/updateFromServer', function (req, res) {
  console.log(req.query);
  var data1 = String(req.query.data1);
  var data2 = Number(req.query.data2);

  connection.query(`update test set name='${data1}' where (no) = '${data2}'`,
  // update test.test  set name='ddd' where (no) >= 1020;
    function (err, rows, fields) {

      if (err) throw err;
      // 쿼리 결과 가져온거
      connection.query(`select * from test where (no) = '${data2}'`,
        function (err, rows, fields) {

          if (err) throw err;
          // 쿼리 결과 가져온거
          for (var i = 0; i < rows.length; i++) {
            var data = rows[i];
            console.log(data.no, data.name);
          }
          res.send(rows);
        }
      );
    }
  );
});

// 라우터 없이 하는 경우
// app.get('/updateFromServer', function (req, res) {
//   connection.query('update test set name="dddd" where (no) >= 1020',
//   // update test.test  set name='ddd' where (no) >= 1020;
//     function (err, rows, fields) {
//
//       if (err) throw err;
//       // 쿼리 결과 가져온거
//
//       // 얘는 update 쿼리 안에 들어가야한다. update 쿼리 뒤에 select 쿼리가 올 경우 누가 먼저 response가 오고 실행될지 모른다. (콜백함수라서)
//       connection.query('select * from test',
//         function (err, rows, fields) {
//
//           if (err) throw err;
//           // 쿼리 결과 가져온거
//           for (var i = 0; i < rows.length; i++) {
//             var data = rows[i];
//             console.log(data.no, data.name);
//           }
//           res.send(rows);
//         }
//       );
//     }
//   );
// });

// // 3. news 테이블 생성, no, title, content 컬럼 생성
// // /newsListPage 라우터로 접속 -> newsList.html 파일 응답으로 전송
// // 전송 후 브라우저에서 페이지가 로드되면 ajax로 뉴스테이블의 모든 데이터를 읽어와서 제목, 내용만 화면에 출력.
// // Main
// app.get('/newsListPage', function (req, res) {
//   res.sendfile("newsList.html");
// });
// // C insert
// app.get('/insertNewsFromServer', function (req, res) {
//   console.log(req.query);
//   var q_no = Number(req.query.q_no);
//   var q_title = String(req.query.q_title);
//   var q_content = String(req.query.q_content);
//
//   connection.query(`insert into news (no, title, content) values('${q_no}', '${q_title}','${q_content}')`,
//     function (err, rows, fields) {
//       if (err) throw err;
//       // 쿼리 결과 가져온거
//       connection.query(`select * from news`,
//         function (err, rows, fields) {
//
//           if (err) throw err;
//           // 쿼리 결과 가져온거
//           for (var i = 0; i < rows.length; i++) {
//             var data = rows[i];
//             console.log(data.no, data.title, data.content);
//           }
//           res.send(rows);
//         }
//       );
//     }
//   );
// });
// // R select
// app.get('/selectNewsFromServer', function (req, res) {
//   console.log(req.query);
//   var q_no = Number(req.query.q_no);
//   var q_title = String(req.query.q_title);
//   var q_content = String(req.query.q_content);
//
//   connection.query('select * from news',
//   // connection.query(`select * from news where no='${q_no}'`,
//     function (err, rows, fields) {
//       if (err) throw err;
//       // 쿼리 결과 가져온거
//       for (var i = 0; i < rows.length; i++) {
//         var data = rows[i];
//         console.log(data.no, data.title, data.content);
//       }
//       res.send(rows);
//     }
//   );
// });
// // U update
// app.get('/updateNewsFromServer', function (req, res) {
//   console.log(req.query);
//   var q_no = Number(req.query.q_no);
//   var q_title = String(req.query.q_title);
//   var q_content = String(req.query.q_content);
//
//   connection.query(`update news set title='${q_title}', content='${q_content}' where no='${q_no}'`,
//     function (err, rows, fields) {
//       if (err) throw err;
//       // 쿼리 결과 가져온거
//       connection.query(`select * from news`,
//         function (err, rows, fields) {
//
//           if (err) throw err;
//           // 쿼리 결과 가져온거
//           for (var i = 0; i < rows.length; i++) {
//             var data = rows[i];
//             console.log(data.no, data.title, data.content);
//           }
//           res.send(rows);
//         }
//       );
//     }
//   );
// });
// // D delete
// app.get('/deleteNewsFromServer', function (req, res) {
//   console.log(req.query);
//   var q_no = Number(req.query.q_no);
//   var q_title = String(req.query.q_title);
//   var q_content = String(req.query.q_content);
//
//   connection.query(`delete from news where no='${q_no}'`,
//     function (err, rows, fields) {
//       if (err) throw err;
//       // 쿼리 결과 가져온거
//       connection.query(`select * from news`,
//         function (err, rows, fields) {
//
//           if (err) throw err;
//           // 쿼리 결과 가져온거
//           for (var i = 0; i < rows.length; i++) {
//             var data = rows[i];
//             console.log(data.no, data.title, data.content);
//           }
//           res.send(rows);
//         }
//       );
//     }
//   );
// });

// 4. 위에 3번을 POST 방식으로
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({limit: '50mb', extended: false}));
app.use(bodyParser.json({limit: '50mb'}));

// Main
app.get('/newsListPost', function (req, res) {
  res.sendfile("newsListPost.html");
});
// C insert
app.post('/insertNewsFromServer', function (req, res) {
  console.log(req.body);
  var q_no = Number(req.body.q_no);
  var q_title = String(req.body.q_title);
  var q_content = String(req.body.q_content);
  connection.query(`insert into news (no, title, content) values('${q_no}', '${q_title}','${q_content}')`,
    function (err, rows, fields) {
      if (err) throw err;
      connection.query(`select * from news`,
        function (err, rows, fields) {
          if (err) throw err;

          for (var i = 0; i < rows.length; i++) {
            var data = rows[i];
            console.log(data.no, data.title, data.content);
          }
          res.send(rows);
        }
      );
    }
  );
});
// R select
app.post('/selectNewsFromServer', function (req, res) {
  console.log(req.body);
  var q_no = Number(req.body.q_no);
  var q_title = String(req.body.q_title);
  var q_content = String(req.body.q_content);

  connection.query('select * from news',
    function (err, rows, fields) {
      if (err) throw err;

      for (var i = 0; i < rows.length; i++) {
        var data = rows[i];
        console.log(data.no, data.title, data.content);
      }
      res.send(rows);
    }
  );
});
// U update
app.post('/updateNewsFromServer', function (req, res) {
  console.log(req.body);
  var q_no = Number(req.body.q_no);
  var q_title = String(req.body.q_title);
  var q_content = String(req.body.q_content);
  connection.query(`update news set title='${q_title}', content='${q_content}' where no='${q_no}'`,
    function (err, rows, fields) {
      if (err) throw err;

      connection.query(`select * from news`,
        function (err, rows, fields) {

          if (err) throw err;
          // 쿼리 결과 가져온거
          for (var i = 0; i < rows.length; i++) {
            var data = rows[i];
            console.log(data.no, data.title, data.content);
          }
          res.send(rows);
        }
      );
    }
  );
});
// D delete
app.post('/deleteNewsFromServer', function (req, res) {
  console.log(req.body);
  var q_no = Number(req.body.q_no);
  var q_title = String(req.body.q_title);
  var q_content = String(req.body.q_content);

  connection.query(`delete from news where no='${q_no}'`,
    function (err, rows, fields) {
      if (err) throw err;
      connection.query(`select * from news`,
        function (err, rows, fields) {

          if (err) throw err;
          // 쿼리 결과 가져온거
          for (var i = 0; i < rows.length; i++) {
            var data = rows[i];
            console.log(data.no, data.title, data.content);
          }
          res.send(rows);
        }
      );
    }
  );
});

 

2. dbquery.html (http://localhost:81/query)

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <input type="text" placeholder="name을 입력" id="data1">
    <input type="text" placeholder="where 조건" id="data2">
    <br><br>
    <input type="button" value="셀렉트" id="selectBnt"></button>
    <input type="button" value="업데이트" id="updateBnt"></button>
    <input type="button" value="지우개" id="clearBnt"></button>
    <br><br>
    <span id="result"></span>
  </body>
  <script  src="http://code.jquery.com/jquery-latest.min.js"></script>
  <script>
    $('#selectBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/selectFromServer',
        data : {
        },
        success : function(response) {
          console.log(response);
          for (var i = 0; i < response.length; i++) {
            $('#result').append("no : " + response[i].no);
            $('#result').append(", name : " + response[i].name + "<br>");
          };
        }
      });
    });
    $('#updateBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/updateFromServer',
        data : {
          data1 : $('#data1').val(),
          data2 : $('#data2').val()
        },
        success : function(response) {
          console.log(response);
          for (var i = 0; i < response.length; i++) {
            $('#result').append("no : " + response[i].no);
            $('#result').append(", name : " + response[i].name + "<br>");
          };
        }
      });
    });
    $('#clearBnt').click(function() {
      $('#result').html("");
    });
  </script>
</html>

 

3.1 newList.html (http://localhost:81/newListPage) GET방식... 아래와 동일...

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <input type="text" placeholder="no" id="no">
    <input type="text" placeholder="title" id="title">
    <input type="text" placeholder="content" id="content">
    <br><br>
    <input type="button" value="C(insert)" id="insertBnt"></button>
    <input type="button" value="R(select)" id="selectBnt"></button>
    <input type="button" value="U(update)" id="updateBnt"></button>
    <input type="button" value="D(delete)" id="deleteBnt"></button>
    <input type="button" value="화면지우개" id="clearBnt"></button>
    <br><br>
    <span id="result"></span>
  </body>
  <script  src="http://code.jquery.com/jquery-latest.min.js"></script>
  <script>
    $('#insertBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/insertNewsFromServer',
        data : {
          q_no : $('#no').val(),
          q_title : $('#title').val(),
          q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#selectBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/selectNewsFromServer',
        data : {
          q_no : $('#no').val(),
          q_title : $('#title').val(),
          q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#updateBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/updateNewsFromServer',
        data : {
          q_no : $('#no').val(),
          q_title : $('#title').val(),
          q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#deleteBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/deleteNewsFromServer',
        data : {
          q_no : $('#no').val(),
          q_title : $('#title').val(),
          q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#clearBnt').click(function() {
      $('#result').html(" ");
    });
  </script>
</html>

 

3.2 newsListPost.html (http://localhost:81/newsListPost)

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <input type="text" placeholder="no" id="no">
    <input type="text" placeholder="title" id="title">
    <input type="text" placeholder="content" id="content">
    <br><br>
    <input type="button" value="C(insert)" id="insertBnt"></button>
    <input type="button" value="R(select)" id="selectBnt"></button>
    <input type="button" value="U(update)" id="updateBnt"></button>
    <input type="button" value="D(delete)" id="deleteBnt"></button>
    <input type="button" value="화면지우개" id="clearBnt"></button>
    <br><br>
    <span id="result"></span>
  </body>
  <script  src="http://code.jquery.com/jquery-latest.min.js"></script>
  <script>
  $('#insertBnt').click(function() {
    $.ajax({
      url : 'http://localhost:81/insertNewsFromServer',
      type : 'POST',
      data : {
        q_no : $('#no').val(),
        q_title : $('#title').val(),
        q_content : $('#content').val()
      },
      success : function(response) {
        console.log(response);
        $('#result').html(" ");
        for (var i = 0; i < response.length; i++) {
          $('#result').append("번호 : " + response[i].no + "<br>");
          $('#result').append("제목 : " + response[i].title + "<br>");
          $('#result').append("내용 : " + response[i].content + "<br><br>");
        };
      }
    });
  });
    $('#selectBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/selectNewsFromServer',
        type : 'POST',
        data : {
          // q_no : $('#no').val(),
          // q_title : $('#title').val(),
          // q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#updateBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/updateNewsFromServer',
        type : 'POST',
        data : {
          q_no : $('#no').val(),
          q_title : $('#title').val(),
          q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#deleteBnt').click(function() {
      $.ajax({
        url : 'http://localhost:81/deleteNewsFromServer',
        type : 'POST',
        data : {
          q_no : $('#no').val(),
          q_title : $('#title').val(),
          q_content : $('#content').val()
        },
        success : function(response) {
          console.log(response);
          $('#result').html(" ");
          for (var i = 0; i < response.length; i++) {
            $('#result').append("번호 : " + response[i].no + "<br>");
            $('#result').append("제목 : " + response[i].title + "<br>");
            $('#result').append("내용 : " + response[i].content + "<br><br>");
          };
        }
      });
    });
    $('#clearBnt').click(function() {
      $('#result').html(" ");
    });

  </script>
</html>

C : title, content만 입력하면 된다.

R : select * from table 이라서 '화면지우개'로 지운 뒤 혹은 페이지 로딩 후 전체 데이터를 불러올 때 사용한다.(C, U, D에는 이벤트 후 자동으로 R을 실행하게 되어있음)

U : no, title, content를 입력한다. no를 기준으로 title, content를 업데이트한다.

D : no만 입력하면 된다.

 

 

DB

더보기

Database : MySQL / Database Name : javascript / Table Name : test

CREATE TABLE javascript.test (
	`no` INT auto_increment NOT NULL,
	name varchar(100) NULL,
	content varchar(100) NULL,
	CONSTRAINT test_PK PRIMARY KEY (`no`)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;

 

1xx (조건부 응답)

헤더에서 임시 응답을 보내고 종료하는 것으로 body에 의한 것이 이루어지지 않기 때문에 현재 큰 의미가 없어 보인다.

  • 100(계속): 요청자는 요청을 계속해야 한다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다.
  • 101(프로토콜 전환): 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다.

 

2xx (성공)

서버가 클라이언트의 request를 적절히 처리하고 response를 보냈다.

  • 200(성공): 서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다.
  • 201(작성됨): 성공적으로 요청되었으며 서버가 새 리소스를 작성했다.
  • 202(허용됨): 서버가 요청을 접수했지만 아직 처리하지 않았다.
  • 203(신뢰할 수 없는 정보): 서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다.
  • 204(콘텐츠 없음): 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다.
  • 205(콘텐츠 재설정): 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 204 응답과 달리 이 응답은 요청자가 문서 보기를 재설정할 것을 요구한다(예: 새 입력을 위한 양식 비우기).
  • 206(일부 콘텐츠): 서버가 GET 요청의 일부만 성공적으로 처리했다.
  • 207(다중 상태, RFC 4918)
  • 208(이미 보고됨, RFC 5842)
  • 226 IM Used (RFC 3229)

 

3xx (리다이렉션)

서버가 클라이언트의 request에 response를 보내긴 하지만 response로써 새로운 request를 보낸다. 그러면 클라이언트는 해당 response(새 request를 포함한)를 받아 다시 reuqest를 보낸다.

  • 300(여러 선택항목): 서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다.
  • 301(영구 이동): 요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다.
  • 302(임시 이동): 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.

  • 303(기타 위치 보기): 요청자가 다른 위치에 별도의 GET 요청을 하여 응답을 검색할 경우 서버는 이 코드를 표시한다. HEAD 요청 이외의 모든 요청을 다른 위치로 자동으로 전달한다.
  • 304(수정되지 않음): 마지막 요청 이후 요청한 페이지는 수정되지 않았다. 서버가 이 응답을 표시하면 페이지의 콘텐츠를 표시하지 않는다. 요청자가 마지막으로 페이지를 요청한 후 페이지가 변경되지 않으면 이 응답(If-Modified-Since HTTP 헤더라고 함)을 표시하도록 서버를 구성해야 한다.
  • 305(프록시 사용): 요청자는 프록시를 사용하여 요청한 페이지만 액세스할 수 있다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 하다.
  • 307(임시 리다이렉션): 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.
  • 308(영구 리다이렉션, RFC에서 실험적으로 승인됨)

 

4xx (request 오류 / 클라이언트 오류)

서버는 살아 있으나 요청 문법이 잘못 되었거나 하는 등 서버측에서 클라이언트의 요청을 처리할 수 없다고 보내는 오류 코드다.

  • 400(잘못된 요청): 서버가 요청의 구문을 인식하지 못했다.
  • 401(권한 없음): 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음(Unauthorized)으로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다.[2]
  • 402(결제 필요): 이 요청은 결제가 필요합니다.
  • 403(Forbidden, 금지됨): 서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 갖고 있지 않다. (401은 인증 실패, 403은 인가 실패라고 볼 수 있음)
  • 404(Not Found, 찾을 수 없음): 서버가 요청한 페이지(Resource)를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다.
  • 405(허용되지 않는 방법): 요청에 지정된 방법을 사용할 수 없다. 예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우에 이 코드를 제공한다.
  • 406(허용되지 않음): 요청한 페이지가 요청한 콘텐츠 특성으로 응답할 수 없다.
  • 407(프록시 인증 필요): 이 상태 코드는 401(권한 없음)과 비슷하지만 요청자가 프록시를 사용하여 인증해야 한다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 한다.
  • 408(요청 시간초과): 서버의 요청 대기가 시간을 초과하였다.
  • 409(충돌): 서버가 요청을 수행하는 중에 충돌이 발생했다. 서버는 응답할 때 충돌에 대한 정보를 포함해야 한다. 서버는 PUT 요청과 충돌하는 PUT 요청에 대한 응답으로 이 코드를 요청 간 차이점 목록과 함께 표시해야 한다.
  • 410(사라짐): 서버는 요청한 리소스가 영구적으로 삭제되었을 때 이 응답을 표시한다. 404(찾을 수 없음) 코드와 비슷하며 이전에 있었지만 더 이상 존재하지 않는 리소스에 대해 404 대신 사용하기도 한다. 리소스가 영구적으로 이동된 경우 301을 사용하여 리소스의 새 위치를 지정해야 한다.
  • 411(길이 필요): 서버는 유효한 콘텐츠 길이 헤더 입력란 없이는 요청을 수락하지 않는다.
  • 412(사전조건 실패): 서버가 요청자가 요청 시 부과한 사전조건을 만족하지 않는다.
  • 413(요청 속성이 너무 큼): 요청이 너무 커서 서버가 처리할 수 없다.
  • 414(요청 URI가 너무 긺): 요청 URI(일반적으로 URL)가 너무 길어 서버가 처리할 수 없다.
  • 415(지원되지 않는 미디어 유형): 요청이 요청한 페이지에서 지원하지 않는 형식으로 되어 있다.
  • 416(처리할 수 없는 요청범위): 요청이 페이지에서 처리할 수 없는 범위에 해당되는 경우 서버는 이 상태 코드를 표시한다.
  • 417(예상 실패): 서버는 Expect 요청 헤더 입력란의 요구사항을 만족할 수 없다.
  • 418(I'm a teapot, RFC 2324 ,https://google.com/teapot)
  • 420(Enhance Your Calm, 트위터)
  • 422(처리할 수 없는 엔티티, WebDAV; RFC 4918)
  • 423(잠김,WebDAV; RFC 4918): 접근하려는 리소스가 잠겨 있다.
  • 424(실패된 의존성, WebDAV; RFC 4918)
  • 424(메쏘드 실패, WebDAV)
  • 425(정렬되지 않은 컬렉션, 인터넷 초안)
  • 426(업그레이드 필요, RFC 2817): 클라이언트는 업그레이드 헤더 필드에 주어진 프로토콜로 요청을 보내야 한다.
  • 428(전제조건 필요, RFC 6585)
  • 429(너무 많은 요청, RFC 6585): 사용자가 일정 시간 동안 너무 많은 요청을 보냈다.
  • 431(요청 헤더 필드가 너무 큼, RFC 6585)
  • 444(응답 없음, Nginx)
  • 449(다시 시도, 마이크로소프트)
  • 450(윈도 자녀 보호에 의해 차단됨, 마이크로소프트)
  • 451(법적인 이유로 이용 불가, 인터넷 초안)
  • 451(리다이렉션, 마이크로소프트)
  • 494(요청 헤더가 너무 큼, Nginx)
  • 495(Cert 오류, Nginx)
  • 496(Cert 없음, Nginx)
  • 497(HTTP to HTTPS, Nginx)
  • 499(클라이언트가 요청을 닫음, Nginx)

 

5xx (response 오류 / 서버 오류)

서버가 죽었거나 혹은 없어졌거나, 서버 내부 에러로 클라이언트의 요청에 응답을 하지 못 할 경우(클라이언트가 request를 던지지만 일정 시간이 지나도 아무런 response를 못 받을 경우) 확인할 수 있는 오류 코드다.

  • 500(내부 서버 오류): 서버에 오류가 발생하여 요청을 수행할 수 없다.
  • 501(구현되지 않음): 서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다.
  • 502 (Bad Gateway, 불량 게이트웨이): 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았다.
  • 503(서비스를 사용할 수 없음): 서버가 오버로드되었거나 유지관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없다. 이는 대개 일시적인 상태이다.
  • 504(게이트웨이 시간초과): 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못했다.
  • 505(HTTP 버전이 지원되지 않음): 서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않는다.
  • 506(Variant Also Negotiates, RFC 2295)
  • 507(용량 부족, WebDAV; RFC 4918)
  • 508(루프 감지됨, WebDAV; RFC 5842)
  • 509(대역폭 제한 초과, Apache bw/limited extension)
  • 510(확장되지 않음, RFC 2774)
  • 511(네트워크 인증 필요, RFC 6585)
  • 520(Unknown Error, 알 수 없음)
  • 598(네트워크 읽기 시간초과 오류, 알 수 없음)
  • 599(네트워크 연결 시간초과 오류, 알 수 없음)

 

 

출처 : ko.wikipedia.org/wiki/HTTP_상태_코드

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 아래는 HTTP(하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA가 현재 공식 HTTP 상태 코드 레지스트리를 관리하고 ��

ko.wikipedia.org

 

 

Tag. 에러 코드, 에러코드, 응답 코드, 응답코드, 530에러, 530 에러

딥러닝이 뭔지 대충 듣고 하루종일 스프링만 했다...

CRUD가 왜케 어려울까...

기본 틀을 하나 만들어야겠다. 기본 틀이 없으니 할때마다 새롭다.

'개발자 > TIL' 카테고리의 다른 글

TIL 20.06.26  (0) 2020.06.28
TIL 20.06.25  (0) 2020.06.26
TIL 20.06.23  (0) 2020.06.23
TIL 20.06.22  (0) 2020.06.22
TIL 20.06.19  (0) 2020.06.20

오늘은 미래산업 시험을 쳤다. 보안의 3대 요소, 블록체인과 소프트웨어 라이센스, 깃 사용 관련해서 나왔다.

교수님이 실시간 채점 하셨다는데 난 제출하고 그냥 나와버려서 점수를 모른다...

그리고 자바 자바 자바 자바... 자바 CRUD...

자바스크립트 시간에 배웠을 때랑 jQuery 사용법이 조금 다르다...

음... HTML 파일 안에 넣어 사용할 때랑 .js 파일 따로 만들어 분리해서 사용할 때랑 달라서 그런건가..?

따로 파일이 분리되서인지 HTML에서는 .js 자바스크립트에 있는 함수를 찾지 못 한다... onclick 쓰고 싶었는데 실패했다...

HTML에서는 .js에 있는 함수 인식을 못 하는데 .js에서는 HTML에 있는 태그들 인식을 다 하는거 보면... 상속 비슷하게 개념을 잡아도 되는걸까??

'개발자 > TIL' 카테고리의 다른 글

TIL 20.06.25  (0) 2020.06.26
TIL 20.06.24  (0) 2020.06.24
TIL 20.06.22  (0) 2020.06.22
TIL 20.06.19  (0) 2020.06.20
TIL 20.06.18  (0) 2020.06.20

기말고사 시작이다... 시험을 치고 남은 시간은 전부 리눅스와 하둡을 공부하는데 사용했다...

집에 와서는 스위프트 하려 했는데 아... 내일 시험 볼 거 준비부터 해야겠구나...

'개발자 > TIL' 카테고리의 다른 글

TIL 20.06.24  (0) 2020.06.24
TIL 20.06.23  (0) 2020.06.23
TIL 20.06.19  (0) 2020.06.20
TIL 20.06.18  (0) 2020.06.20
TIL 20.06.17  (0) 2020.06.18

+ Recent posts