Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터베이서
- 생활코딩
- 머신러닝(딥러닝)
- 생활코딩 머신러닝야학
- 딥러닝
- reshape
- 카카오클라우드스쿨2기
- CNN
- 연산자
- 개발자
- pandas
- Java
- MySQL
- flatten
- 생활코딩 데이터베이스
- 머신러닝야학
- 판다스
- 데이터베이스 개론
- LeNet
- Python
- tensorflow
- 머신러닝
- 이것이 자바다
- 파이썬
- 야학
- JavaScript
- 데이터베이스
- Database
Archives
- Today
- Total
IT's 우
[Node, 3주차-3] 모듈 프로그래밍, Node 내장 객체 본문
728x90
1) Module
- 독립적으로 실행 가능한 작업의 단위
- 노드에서는 하나의 파일이 모듈
- 모듈화는 중요한 작업 중의 하나
하나의 모듈에 모든 내용을 전부 작성하면 가독성이 떨어지고 재사용성이 떨어지게 됩니다.
역할별로 나누는 작업이 중요
Controller : 클라이언트의 요청을 받아서 필요한 서비스 로직을 호출하고 응답을 클라이언트에게 전송하는 역할
Service: 사용자의 로직(Business Logic)을 처리하는 역할
Repository(DAO- Data Access Object): 데이터 저장소와 연결해서 작업을 수행하는 역할
VO(Variable Object)- 여러 개의 속성을 묶어서 하나로 표현하기 위한 역할
DTO(Data Transfer Object) - 서로 다른 계층 사이에 전달을 위한 역할
Entity - ORM(객체와 데이블의 행을 매핑시켜주는 프레임워크)에서 테이블과 연결되는 역할
View - 화면 출력하는 역할
2) 모듈의 내용을 내보내고 가져와서 사용
- 내용을 내보낼 파일을 생성
var.js
const odd = "홀수";
const even = "짝수";
// 다른 곳에서 사용할 수 있도록 내보내기
module.exports = {
odd,
even
}
- var.js 파일의 내용을 가져와서 사용할 파일을 생성
func.js
// var에서 내보낸 내용 가져오기
const {odd , even}= require('./var');
const ckeckOddOrEven = (num)=>{
if(num %2){
return odd;
}else{
return even;
}
}
// 이렇게 내보내면 가져올 때는 아무이름이나 사용해서 받으면 됩니다.
module.exports=ckeckOddOrEven;
- 실행할 파일을 생성
app.js
// { }로 묶어서 내보낸 것은 이름을 맞추어서 받아야 합니다.
const {odd, even}=require('./var');
// 하나를 내보냈을 때는 이름을 바꿔서 받을 수 있습니다.
// func의 내용을 가져와서 checkNumber라는 이름을 붙이는 것입니다.
const checkNumber= require('./func');
console.log(checkNumber(5));
4. Node 내장 객체
- node가 제공하는 객체
1) global
- 노드의 전역 객체
- 이 객체는 노드 프로그램 전체에서 1개만 생성
- 이 객체는 하나만 만들어서 노드 프로그램 전체가 공유
- 사용하는 것을 권장하지는 않지만 모든 곳에서 사용해야 할 데이터가 있는 경우 사용
ex) 현재 접속자 수나 대기자 수 또는 로고 등은 모든 사용자에게 동일하게 보입니다. 이런 데이터를 global을 이용해서 사용합니다.
global.countUser = 10;
2) console 객체
- 현재 보여지는 터미널 화면
- 로직이 복잡해지거나 여러 모듈을 거쳐가면서 수행되는 코드가 있다면 중간중간 로그를 출력해서 확인을 하는 것이 좋습니다.
로그를 출력하는 작업을 한 것을 배포할 때 모두 제거해야 합니다.
필요하다면 로그는 파일이나 데이터베이스에 기록하는 것이 좋습니다.
로그를 콘솔에 출력하는 것은 개발과정에서만 해야 합니다.
console.log(메세지) //메세지 로깅
console.error(메시지) // 에러 형태로 로깅
console.trace(메시지) //호출 스택 로깅 - 함수나 //메서드를 호출하는 순서를 역순으로 출력
호출하는 메서드의 순서를 확인하고자 할 때 사용
console.table(배열) // 테이블 형태로 출력
console.time(메세지)
console.timeEnd(메세지) // 동일한 메세지를 사용하면 2개 호출 사이의 시간을 출력
console.dir(객체, 옵션) // 객체를 로깅할 때 옵션을 설정하는 것이 가능
3) 경로 관련 속성
__filename: 현재 파일의 경로
__dirname: 현재 디렉터리의 경로
- 최근에 등장하는 언어나 프레임워크에서는 _를 이용해서 예약어를 만드는 경우가 많으므로 이제는 사용자 정의 이름을 만들 때 _로 시작하는 이름을 사용하는 것을 추천하지 않습니다.
4) module.exports
- 모듈의 내용을 다른 곳에서 사용할 수 있도록 하고자 할 때 사용하는 속성
module.exports = 내보낼 내용
exports.내보내고자하는 이름 = 내용 // 으로 해도 동일한 기능
5) this
- 함수나 클래스 외부에서는 module.exports
- 함수 안에서는 global
- 클래스의 메서드 안에서는 인스턴스
6) require 함수
- 외부 모듈의 내용을 가져올 때 사용하는 함수
- import도 외부 모듈을 가져오는 데 사용할 수 있지만 require는 caching을 합니다.
한 번 사용한 모듈을 메모리에 적재해두었다가 다음에 require를 하게 되면 캐싱된 모듈을 가져옵니다. - .js 는 생략 가능
7) process 객체
- 노드 프로세스에 대한 정보를 가지는 객체
- 노드 버전이나 CPU 사용량 등을 확인할 수 있는 속성과 메서드를 제공
- process.nextTick(콜백 함수): 다른 콜백 함수보다 우선해서 처리
Promise.resolve().then으로 작성 가능 - process.exit(코드) : 노드 프로세스 종료
: 서버에서는 사용하지 않는 것이 일반적이며 일반 애플리케이션을 만들었을 때 사용 코드는 운영체제에게 알려주는 종료 이유
8) os 객체
- 운영체제에 대한 정보를 가진 객체
- 운영체제에 대한 종류나 CPU 또는 메모리 사용량 등을 확인할 수 있는 속성과 메서드를 제공
- 실제 서비스를 운영할 때는 메모리 사용량은 확인해보는 것이 좋습니다.
서버를 운영할 때 메모리 사용량을 주기적을 모니터링해서 서버를 물리적으로 늘릴 것인지 여부를 판단
9) path 객체
- 디렉터리와 파일의 경로를 쉽게 조작하도록 도와주는 모듈
- 속성과 함수
path.sep // 경로 구분자(windows는 \이고 나머지는 /)
// 서버를 만들 때는 운영체제를 확정짓고 만들기 때문에 잘 사용하지 않지만 일반 애플리케이션을 만들 때는 경로 지정 시 이 속성을 이용해서 지정해야 윈도우나 Mac에서 코드 수정없이 동작하는 애플리케이션을 만들 수 있습니다.
//os 모듈을 이용해서 운영체제를 확인해서 별도로 코딩을 하는 방법도 있습니다.
path.dirname(경로) // 경로에 해당하는 파일이 위치하는 디렉토리
path.extname(경로) // 경로에 해당하는 파일의 확장자
path.join(경로를 나열) //경로를 합쳐서 하나의 경로를 리턴
- 현재 작업 디렉터리와 프로젝트 내의 public 디렉토리 경로 확인
const path=require('path');
// 현재 디렉토리 확인
console.log(__dirname);
// 현재 디렉토리 내의 public 디렉토리의 경로
console.log(path.join(__dirname,"public"));
10) url 모듈
- url과 관련된 모듈
parse 함수: url 분해
format 함수: 분해된 url을 하나로 복원 - URL 분해
const url=require('url');
const addr="https://www.naver.com/login?id=kjk04021";
// url 분해
const p=url.parse(addr);
// pathname에는 서버 URL을 제외한 경로를 저장하고 있고
// query는 query string 을 저장하고 있습니다.
console.log(p);
11) searchParams 모듈
- query string(parameter라고 하는데 클라이언트가 서버에게 get 방식으로 요청을 할 때 전송하는 데이터)을 위한 모듈
- 읽어오는 함수
getAll(key) // key에 해당하는 모든 데이터를 가져옵니다. 체크 박스나 파일의 경우는 다중 선택이 가능
get(key) // key에 해당하는 데이터 1개만 가져옵니다. 체크박스나 파일이 아니면 하나의 값만 전달
// addr에서 파라미터 부부만 가져오기
// searchParams 속성을 호출하면 파라미터 부분에 해당하는 객체를 리턴
const address =new URL("https://www.naver.com/login?id=kjk04021");
console.log(address.searchParams);
//id의 값 추출하기
console.log(address.searchParams.get("id"));
- 파라미터를 추가하는 함수
append(키, 값) // 추가
set(키, 값) // 수정
12) util 모듈
- 여러 가지 편의 기능을 모아둔 모듈
- util.promisify: 콜백 패턴을 Promise 패턴으로 변경
13) worker_threads 모듈
- html5에서 Web Worker라는 스레드 관련 API가 추가됨
Web Worker를 사용하기 쉽도록 해주는 모듈 - Node는 14 버전까지는 싱글 스레드 기반 - 하나의 스레드만 만들어서 사용자의 요청을 순서대로 처리
14 버전 이후에 멀티 스레드를 지원 - express 모듈로 웹 서버를 만들면 멀티 스레드 형식으로 사용자의 요청을 처리해줍니다.
14) child_process 모듈
- 다른 프로세스(명령어)를 실행하는 모듈
- 이 모듈을 사용하고자 하면 운영체제 별로 분기를 해서 명령어를 사용해야 합니다.
const os = require("os");
const exec = require('child_process').exec;
let position = os.type().toLowerCase().indexOf("windows");
let process;
if (position >= 0) {
console.log("windows");
process = exec('dir');
} else {
console.log("windows 아님");
process = exec('ls');
}
//console.log(os.platform());
// 프로세스가 정상적으로 수행되면
process.stdout.on('data', function (data) {
console.log(data.toString());
});
//수행되지 않으면
process.stderr.on('data', function (data) {
console.log(data.toString());
});
-> 2개를 조합해서 windows 일 때는 dir 명령어를 그렇지 않은 경우에는 ls 명령을 수행하도록 작성
-> 문자열 비교할 때는 일치하는 것을 찾는 경우보다는 포함된 경우를 찾는 경우가 많습니다.
이런 경우네는 indexOf를 이용할 수 있는 indexOf는 포함된 경우에는 시작 위치를 그렇지 않은 경우는 음수를 리턴 -> 문자열 비교할 때는 대소문자를 구분하는 것인지 아닌 지를 판단해서 작성해야 합니다.
728x90
반응형
'카카오 클라우드 스쿨 2기 > node' 카테고리의 다른 글
[Node, 3주차 -3] 암호화, 파일 시스템 (0) | 2022.11.16 |
---|---|
[Node, 3주차- 2] Window에 Node 설치, Node 프로젝트 만들기 (0) | 2022.11.15 |
[Node.js, 3주차 -2] Node의 개요 (0) | 2022.11.15 |