학습 기록/언어 기본

node js

서버관리자 페페 2022. 4. 30. 08:25

0.

node.js 셋팅 (cmd 환경)

- 'node -v' > 버전 출력되면서 준비

- 'node' > 실행

- console.log(1+1); > 결과값 출력됨

- .exit / ctrl+c 두번 > 나가기

 

1.

cmd 다루기

- cd '폴더 주소' > 디렉토리 위치 변경

- 해당 위치에서 'dir' > 폴더 내부 보여줌

- 해당 위치에서 '파일이름' > 실행

 

2. 

node.js 웹서버로 활용하기

- 서버 오픈 : cmd > 출력물 있는 dir로 이동 > node server.js(node가 서버파일을 실행하게 한다)

- 출력 > localhost:3000

 

3.

접속 기록 확인하기

- reponse 파트에 console.log(__dirname + url); 삽입

- 접속시마다 cmd에 기록이 뜬다

 

 

4. 

variable

- 초기 사용시 var 붙여주고, 그 뒤에는 붙이지 않음

- // > 코멘트(프로그램에서 읽히지 않는다)

 

 

5.

variable 활용으로 가독성 높이기

- var 셋팅 후

- 출력에 var 넣기

 

6.

variable 활용으로 유지보수 편하게 하기

- 변하게 되는 var를 하나 더 설정하기

 

7.

template literal

- 코드에서 줄바꿈하게되면 에러가 남 > 역슬래시 넣기(\)

- \n\ > 줄바꿈 출력 / 한줄에서는 \n\n

- `(backtick)을 사용하면 줄바꿈 별도 사용없이 enter로 그대로 출력

- 문자는 ' + variable +  ' 사용없이 $(variable) 로 간편히 출력

 

 

8.

URL

- protocol = 통신 규약

- host(domain) = 메인 주소

- port = 컴퓨터 내 다양한 서버 중 어떤 서버에 접속하는지

- path = 디렉토리

- query string = page

 

9.

주소창에 입력된 query string이 서버내에서 어디로 가는지 확인

- console.log(url); 삽입 

- cmd에서 발산되는 것 확인

 

10.

url 입력 받아서 화면에 내보이기 

var url = request('url');

var queryData = url.parse(_url, true).query;

console.log(queryData.id);

respnse.end(queryData.id);

 

 

11.

파일들을 읽어주는 역할

 

12.

url 받아서 본문 제목에 띄우기

- 기존에는 클릭 시에 문서를 그대로 띄워주는 것

- url을 받으면, 제목에 반영되도록 하는 것(동적)

 

13. 

모듈 

- 기본적으로 제공하는 기능

 

14.

node js에서 파일 읽기

- utf8 = 한글로 출력 설정

 

15.

url 받아서 본문도 같이 띄우기

data 안에 본문파일 생성할것

 

16.

노드에서의 불리언 양식

17

노드에서의 컴패리즌 양식

18.

조건문 사용

if에 false 삽입도 가능

 

19.

노드에서의 array 형식

- cmd에서 실행 뒤에 문자를 넣으면, 배열 맨 뒤에 추가됨

- 0번째 > 노드 dir

- 1번째 > 실행되는 파일의 dir

 

20.

arrangements에서 특정값 출력하기

 

21.

arrangement 사용으로 조건문 분기 만들기(실용x 버전)

 

22. 접속한 url 정보 추출 발산하기

 

url 중 특정한 것만 끌어낼 수도 있음

 

23.

404 not found 띄우기

- 구조 : 조건문 분기 

- 요소 : 입력된 url 중 pathname을 사용

- 정상실행은 200

- 비정상은 404

 

24.

if(pathtime === '/') 분기로 404 구현 후, 메인 페이지와 서브 페이지 구분하기

구조 > queryData.id === undefined

메인 / 서브
그리고 404

 

25.

loop statement

 

26

array data type

- 스트링 말고 불리언도 숫자도 항목으로 포함 가능

 

 

27.

array에서 항목 꺼내기

구조 = while 반복문을 사용하여

 

바보 버전
정상인 버전

28.

array 항목 더하기

구조 = 반복문으로 레이블 + 반복더하기 

- var = var + 1 > 컨베이어링

- var = 0 > 플레이트

 

29.

파일목록 불러오기

구조 > readdir 모듈 사용

- ./ > 지금 있는 위치

 

30.

파일목록 불러와서 list에 삽입으로 대체

- 구조 > while 컨베이어링

 

31.

파일목록 불러와서 list에 링크까지 삽입

디렉토리를 직접 불러오는 구조는, 파일을 하나 추가해도 코드 수정 없이 자동으로 실행됨

 

 

32.

펑션

- 의문 : 위에서 아래로 리딩되는게 아닌듯? 밑에서 정의했는데도 작동하는거 보니?

 

 

33.

function 만들어내기

최하단 예제처럼 값 하나만 불러올 수도 있음

 

 

34.

자동으로 화면에 발산되지않는것과 자동으로 발산되는 것

- Math.round는 program 내 계산만 되고, 자동발산x

- function은 계산과 자동적 발산

 

35.

return과 console.log()의 차이

- return은 함수를 그자리에서 종료, 출력값을 화면에 발산하지 않음

- console.log는 출력값을 화면에 발산하되, 값은 남아있지 않음 

 

36.

function으로 템플릿 삽입

 

 

37.

동기 = 하나 끝나고 다른 하나

비동기 = 하나와 다른 하나 같이

 

38.

동기함수와 비동기함수의 형식

동기함수는 result를 var로 설정해줘야 한다

 

비동기함수는 콜백함수로 결과값이 나온다

 

39.

동기함수와 비동기함수의 결과값 차이

--

 

 

40.

package manager > pm2

 

- 실행 : pm2 start 'app.js' /// 껐다 안켜도 변경사항 자동 반영

- 종료 : pm2 stop 'app.js'

- pm2 monit /// 작업 관리자

- Q = OUT

 

41.

HTML FORM으로 정보 전송받기

method="post" 를 달지 않으면 querystring이 그대로 드러남 > 해킹 위험

서버에서 받아올떄는 'get' / 아무표시 없는것도 'get'

 

42.

정보 송출

 

43.

잘 전송되었는지 chrome 검사에서 확인

 

44.

post 방식으로 전송된 data 받기

- 데이터를 쪼개서 받는 형식

- 데이터를 다 받았으면 end

 

 

 

45.

post 방식으로 전송된 data를 dir안에 저장하기

 

46.

저장과 동시에 새로 생성된 page로 redirection하기

 

47.

수정하기

- function에 control 인자를 추가한다 // control = create + update

- 메인 페이지에는 create만 남겨두고

- 상세 페이지에만 update를 둔다

 

업데이트 버튼을 클릭시, 해당 폼과 함께, 기존 내용이 나오도록 한다

- title area : input type에서는 value로 ${title} 값을 받아오고

- description area : textarea에서는 중간에 ${description} 값을 받아오는 것 주의

 

 

48.

수정된 내용 변경 저장

 

✔사용도구 :

- fs.rename(`oldname`, `newname`, function(err){})

- fs.writeFile('newname', description, 'utf8', function(err){

   response.writhHead(302, {Location: `/?id=${title}`});

   response.end();}

 

✔구조

- writeFile이 reaname의 콜백이 되도록

- 수정 UI에는 보이지 않게 id hidden으로 기존 title 생성 > rename 인자로 사용하도록 한다

 

49.

삭제 버튼 구현

✔ 도구 > 

✔ 구조 > qs방식으로 하면 위험할 수 있으니, post 방식으로 변경

- form action값에 / 추가할것

 

 

50.

삭제 버튼으로 들어온 요청 처리

 

✔도구 : fs.unlink

✔구조 : 삭제 + 루트로 REDIRECTION

 

51

OBJECT와 ARRAY

- 둘 다 정보를 저장하는 방식

- ARRAY는 순서로, 숫자로 라벨링함

- OBJECT는 순서X. 별도 라벨링

- designer : key(라벨) // k8805(value)로 호출은 안됨(undefined) 

 

52.

OBJECT 꺼내기

- var name을 roles 내부의 요소로 정의 // name은 key값 꺼내짐

- roles[name]은 value값 꺼내짐 

 

53.

함수를 객체로 받기

일반적인 함수의 형식
함수를 객체로 받아 실행1

 

함수를 객체로 받아 실행2

*if나 while 등은 객체로 담기지 못함(err)

함수를 배열 인자로 받아 실행3

- 실용성이 없어서 배열로 잘 담지는 않음

함수를 객체 인자로 받아 실행4

 

53.

OBJECT 내에서의 함수

원래
객체 내에 함수 넣어버리기
this를 사용한 더 나은 버전


- 데이터와 처리하려는 함수를 묶어서 편하게 다룰 수 있음

 

54

OBJECT 내 함수 삽입으로 템플릿 기능 정돈하기

원본
원본 실행단과 바뀐 곳

 

55.

MODULE

원래의 기능
독립된 file 에서 모듈 생성, 외부에서 사용 가능하도록 exports 셋팅

 

모듈 불러와서 실행하기

 

56.

MODULE을 사용한 refactorying

- 사용하고자 하는 part를 새로운 module로 만든다

더 나은 버전
서버에서 require로 모듈 불러오기

 

57.

보안 관련 1 - 해킹 가능성

 

queryData.id 로 데이터를 불러 들이는데,

주소창에 ../을 치면, 부모 디렉토리로 연결, 

CSS, HTML 등 보라고 버튼을 만들지 않은 '../password.js' 와 같은 파일이 노출될 수 있다

.을 더 많이 찍으면, 더 상위 dir로 연결, 컴퓨터 뒤지기 가능

 

 

58.

보안 관련2 - 입력 경로 세탁으로 해킹 방지

- point : "var filteredId = path.parse(queryData.id).base;"

- 구조 : "fs.readFile이 읽어들이는 queryData.id > filterdId 대체"

- 통과하는 흐름 : "해당 경로에서 접속하는 것은 필터되어도 결과값은 같고, 상위 dir에서 접속하면 결과값이 달라져 undefined됨

- 시행하는 공간 :

"queryDatad를 받아오는 곳"

"상세 게시글 / update 페이지 / update_process 페이지 / delete_process 페이지"

 

흐름
해당 도구로 세탁
이렇게 쿼리데이터가 들어오는 부분을

 

새 변수를 설정해 세탁한다
DELETE PROCESS에는 ID를 변경할 것

 

59.

보안관련 3 

출력정보에 대한 보안 1

 

문제가 일어나는 경우

- point : "사이트에 create후 저장되는 code"

- 구조 : "일반 txt가 아닌, script 코드로 서버내에 저장됨"

- 흐름 : "팝업 페이지 or redirection 등등"


60.

보안 관련 4

해결 구조 : 저장되는 script code > 일반 txt 대체

상단 코드를 하단으로 대체

61.

보안 관련5 : NPM을 통한 앱 빌드와 > SANITIZER의 설치

- cmd > npm init : "우리의 app을 npm으로 빌드, 관리하는 절차 시작"

- 나오는 라벨링 정보들을 enter 혹은 원하는 point 입력

- 절차가 완료되면 package.json이 생성

package.json의 생성으로 정상 설치됨을 확인

- 그 후 "npm install -S sanitize-html" 입력

(*npm install -g는 전반적으로 사용가능한 SYSTEM 설치 / -S는 특정 part의 사용)

- 정상 설치되면 node_modules package 생성

- dependencies : 내 앱이 sanitize-html에 의존함

- 또한 sanitize-html은 해당 모듈 폴더 내 모듈에 의존함 

 

 

62.

보안 관련 7 - SANITINZE-HTML의 사용

공간 : 읽혀지는 data 페이지 부분에서 사용

 

원본을

이렇게 바꿔준다

 

스크립트 내 리다이렉션 코드가 삭제된 것 확인

 

(더 나은 버전 - 필터 조절하기)

h1 tag는 통과
정상 작동 확인

'학습 기록 > 언어 기본' 카테고리의 다른 글

for 시행 공간  (0) 2022.12.06
JAVA  (0) 2022.05.10
Javascript  (0) 2022.02.04
CSS  (0) 2022.01.25
HTML  (0) 2022.01.19