require()
로 불러와서 사용한다
const fs = require('fs');
const url = require('url');
const path = require('path');
const crypto = require('crypto');
const dns = require('dns');
const events = require('events');
• join과 resolve의 차이: resolve는 /를 절대경로로 처리, join은 상대경로로 처리
• 상대 경로: 현재 파일 기준. 같은 경로면 점 하나(.), 한 단계 상위 경로면 점 두 개(..)
• 절대 경로는 루트 폴더나 노드 프로세스가 실행되는 위치가 기준
: 인터넷 주소를 쉽게 조작하도록 도와주는 모듈
• url 처리에 크게 두 가지 방식이 있음(기존 노드 방식 vs WHATWG 방식)
• 요즘은 WHATWG 방식만 사용함
• WHATWG 방식 주소 체계는 다음과 같음
: WHATWG 방식에서 쿼리스트링(search) 부분 처리를 도와주는 객체
: DNS를 다룰 때 사용하는 모듈
• 도메인을 통해 IP나 DNS 레코드를 얻고자 할 때 사용
• A(ipv4 주소), AAAA(ipv6 주소), NS(네임서버), SOA(도메인 정보),CNAME(별칭, 주로 www가 붙은 주소는 별칭인 경우가 많습니다), MX(메일 서버)
: 암호화는 가능하지만 복호화는 불가능
• md5, sha1, sha256, sha512 등이 가능하지만, md5와 sha1은 이미 취약점이 발견되었습니다.
• 현재는 sha512 정도로 충분하지만, 나중에 sha512마저도 취약해지면 더 강화된 알고리즘으로 바
꿔야 합니다.
: 대칭형 암호화(암호문 복호화 가능)
• Key가 사용됨
• 암호화할 때와 복호화 할 때 같은 Key를 사용해야 함
• 암호화 알고리즘은 aes-256-cbc를 사용했습니다. 다른 알고리즘을 사용해도 됩니다.
• 사용 가능한 알고리즘 목록은 crypto.getCiphers()를 하면 볼 수 있습니다.
• 키는 32바이트, 초기화벡터(iv)는 16바이트로 고정입니다.
: 파일 시스템에 접근하는 모듈
• 파일/폴더 생성, 삭제, 읽기, 쓰기 가능
• 웹 브라우저에서는 제한적이었으나 노드는 권한을 가지고 있음
• 파일 읽기 예제
• 콜백 방식 대신 프로미스 방식으로 사용 가능
• require(‘fs’).promises
• 사용하기 훨씬 더 편해서 프로미스 방식을 추천함
노드에서는 대부분 동기-블로킹 방식과 비동기-논블로킹 방식임
• 동기와 비동기: 백그라운드 작업 완료 확인 여부 (노드는 대부분의 내장 모듈 메서드를 비동기 방식으로 처리)
• 블로킹과 논 블로킹: 함수가 바로 return 되는지 여부
file i/o 비동기-논블로킹 예시 (⚠️ 실행 순서를 강제할 수 없다)
file i/o 동기-블로킹 예시 (⚠️ 성능 저하 발생)
동기식 코드의 장점
• 에러처리가 직관적
• 결과를 바로 변수에 할당 가능
동기식 코드의 단점
• I/O 작업 동안 프로그램이 블로킹
• 성능저하발생(대용량파일이라면?)
• 다른 작업을 수행 못함
• 일정한 크기가 되면 한 번에 처리
• 버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업
• 일정한 크기로 나눠서 여러 번에 걸쳐서 처리
• 버퍼(또는 청크)의 크기를 작게 만들어서 주기적으로 데이터를 전달
• 스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업
• fs.createReadStream
and fs.createWriteStream
• pipe
로 여러 스트림을 이을 수 있다 (readStream.pipe(writeStream);
)
access
, mkdir
, open
, rename
: events 모듈로 커스텀 이벤트를 만들 수 있음
• 스트림에 쓰였던 on(‘data’), on(‘end’) 등과 비교
• on(이벤트명, 콜백): 이벤트 이름과 이벤트 발생 시의 콜백을 연결해줍니다. 이렇게 연결하는 동작
을 이벤트 리스닝이라고 부릅니다.
• addListener(이벤트명, 콜백): on과 기능이 같습니다.
• emit(이벤트명): 이벤트를 호출하는 메서드입니다. 이벤트 이름을 인자로 넣어주면 미리 등록해뒀
던 이벤트 콜백이 실행됩니다.
• once(이벤트명, 콜백): 한 번만 실행되는 이벤트입니다. myEvent.emit('event3')을 두 번 연속 호출
했지만 콜백이 한 번만 실행됩니다.
• removeAllListeners(이벤트명): 이벤트에 연결된 모든 이벤트 리스너를 제거합니다.event4가 호출
되기 전에 리스너를 제거했으므로 event4의 콜백은 호출되지 않습니다.
• removeListener(이벤트명, 리스너): 이벤트에 연결된 리스너를 하나씩 제거합니다. 역시event5의
콜백도 호출되지 않습니다.
• off(이벤트명, 콜백): 노드 10 버전에서 추가된 메서드로, removeListener와 기능이 같습니다.
• listenerCount(이벤트명): 현재 리스너가 몇 개 연결되어 있는지 확인합니다.
본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 (B-log) 리뷰로 작성 되었습니다.
#한컴AI아카데미 #AI개발자 #AI개발자교육 #한글과컴퓨터 #한국생산성본부 #스나이퍼팩토리 #부트캠프 #AI전문가양성 #개발자교육 #개발자취업