생활코딩
-
[Node.js & MySQL] 도전과제: 검색/페이징/정렬생활코딩/WEBn 2021. 1. 24. 11:33
생활코딩 Node.js - MySQL 마무리에서 제시된 도전과제를 구현하였다. 1. 검색: form get 방식으로 요청을 받고, db단에서 SQL구문 SELECT * FROM 테이블 WHERE 컬럼 LIKE "%키워드%"로 데이터를 찾는다. 찾은 데이터를 html 데이터로 구성해서 웹페이지로 띄운다. 2. 페이징: 한번에 보여줄 페이지를 설정하고, 페이지목록을 만들어서 넘길 수 있도록 한다. 각 페이지는 SELECT * FROM topic LIMIT 0 OFFSET 20; 구문을 응용해서 구성하고, 페이지 목록은 SELECT COUNT(*) FROM topic; 구문으로 전체 글 개수를 확인한 다음 나눠서 구한다. 3. 정렬: 타이틀-오름차순/타이틀-내림차순/작성일순/작성일역순 4가지 옵션으로 검색이 ..
-
[Node.js & MySQL] 도전과제: 검색 - 색인기능 살펴보기생활코딩/WEBn 2021. 1. 20. 23:11
자주 검색하는 컬럼이라면 색인을 넣어주자. 검색 속도가 빨라진다. 아래처럼 인덱스를 만들어주고, 기존대로 WHERE 컬럼명 = ?으로 검색하면 된다. 다만 데이터가 꽤 많아야(테스트했을 때는 몇십만건 정도) 유의미한 차이를 느낄 수 있다. CREATE INDEX index_category ON 테이블명(컬럼명) 생활코딩 Node.js - MySQL 수업은 이고잉님이 추가 도전과제를 던져주는 것으로 끝난다. 검색, 정렬(저자 이름 순, 시간 순), 페이지 기능을 구현해보면 좋겠다. 그리고 팁을 몇 가지 준다. 1. 검색 의 get 방식을 이용해서 검색 요청을 처리하고, db단에서 SQL구문 SELECT * FROM topic WHERE title = "keyword"로 데이터를 찾는다. 이때 데이터가 많으..
-
[Node.js & MySQL] 보안: SQL injection, Escaping생활코딩/WEBn 2021. 1. 13. 20:41
외부로부터 유입되는 정보는 필터링이 필요하다. 유저가 입력 데이터로 악성 SQL을 주입해 공격하는 경우인 SQL injection 예방법과 해당 데이터를 웹브라우저로 실행할 때 발생할 수 있는 Cross site scripting (XSS) 예방법을 살펴본다. [강의 출처] opentutorials.org/course/3347/21299 SQL injection 예방법 페이지를 아래처럼 로드한다고 할 때, var mysql = require('mysql'); var db = mysql.createConnection({ host : 'localhost', user : 'root', password : 'password', database : 'data' }) db.connect(); var app = ht..
-
[Node.js & MySQL] 테이블 생성생활코딩/WEBn 2021. 1. 13. 18:57
DB에서 가져온 데이터를 반복문을 이용해 html 테이블() 형태로 작성 +기본적인 조작에 필요한 CSS [강의 출처]opentutorials.org/course/3347/21202 테이블 생성 html에서 테이블을 생성하는 태그는 이다. 그 아래로 제목 , 행 , 컬럼(셀 하나하나 자리) 가 온다. 는 강조를 위한 제목태그로, 제목 부분에서 를 대신해서 사용하면 된다. # C1 C2 1 Data1 Data2 2 Data3 Data4 Foot . . # C1 C2 1 Data1 Data2 2 Data3 Data4 결론 . . 기본 값은 테두리 없음이다. 전체 테두리를 쳐보자. html 내에서 css를 실행하려면 # C1 C2 1 Data1 Data2 2 Data3 Data4 결론 . . 헤딩 부분은 td..
-
[Node.js & MySQL] main.js 정리 - DB접속 정보/쿼리 분리생활코딩/WEBn 2021. 1. 12. 02:08
main.js에 실제 실행 부분의 코드가 포함되어 있으면 복잡해져서 전체맥락을 파악하기 쉽지 않다. main.js는 index, 목차처럼 사용하는 것이 바람직하고, 그렇게 하기 위해서는 구체적인 정보들의 분리가 필요하다. 먼저 DB접속 정보를 분리했다. data/lib/db.js 파일 생성 후 접속 정보를 가져온다. var mysql = require('mysql'); var db = mysql.createConnection({ host : 'localhost', user : 'root', password : 'password', database : 'data' }) db.connect(); module.exports = db; // 외부에서 임포트할 모듈이 하나라면 이렇게 하면 된다 main.js에서는..
-
[Node.js & MySQL] 목록 콤보박스 생성 / 디폴트값 설정생활코딩/WEBn 2021. 1. 5. 21:03
DB에서 가져온 데이터를 반복문을 이용해 html 콤보박스() 형태로 작성 그중 원하는 데이터를 디폴트로 설정(selected) [강의 출처] opentutorials.org/course/3347/21193 html에서 콤보박스를 생성하는 태그는 select다. Value1 Value2 Value3 Value1 Value2 Value3 이 박스에서 Value1을 선택하고 해당 FormData를 전송하면, 데이터는 {"전송되는 데이터 이름": "1"}처럼 객체형태로 전달된다. 이 기능과 반복문을 이용해 특정한 데이터로 콤보박스를 생성할 수 있다. (MDN Web Docs js 루프와 반복 페이지에도 비슷한 예시가 있으니 나중에 헷갈리면 참조!) 자바스크립트의 배열을 이용해 콤보박스를 생성하는 경우: var..
-
[Node.js & MySQL] LEFT JOIN으로 가져온 데이터 출력생활코딩/WEBn 2020. 12. 9. 21:32
LEFT JOIN SELECT * FROM table1 LEFT JOIN table2 ON table1.key=table2.key 테이블에 같은 이름의 컬럼이 있는 경우, 테이블.컬럼 형태로 표시해주어야 ambiguity error가 나지 않는다. SELECT topic.id, title, author.name, author.description FROM topic LEFT JOIN author ON topic.author_id=author.id; +----+-----------+--------+-------------+ | id | title | name | description | +----+-----------+--------+-------------+ | 0 | Home | banana | fru..
-
[Node.js & MySQL] 데이터 처리방식: 파일 -> MySQL 이식생활코딩/WEBn 2020. 12. 9. 18:03
[강의 출처] opentutorials.org/course/3347 Node.js - MySQL - 생활코딩 수업소개 이 수업은 Node.js와 MySQL을 이용해서 웹애플리케이션을 만드는 방법에 대한 수업입니다. 수업대상 예를들어 1억 개의 페이지로 이루어진 웹사이트에서 필요한 정보가 파일에 하나하나 opentutorials.org 데이터 리스트 얻기 기존에는 파일 시스템을 이용했었기 때문에, 데이터 리스트를 얻으려면 아래처럼 파일 시스템을 읽어와야 했다. fs.readdir('./data', function(err, dataList){ /* code */ }; 이제 데이터는 MySQL에 저장되므로 이 부분은 이렇게 대체해야 한다. /* var db = mysql.createConnection({ ho..