설치방법및 주의사항
nodejs 설치시 참고할사이트 mac의 경우
https://velog.io/@scroll0908/Node.js-설치Mac
최상위 폴더가 아닐때 레폴 할경우
https://velog.io/@ejayjeon/Node-Cannot-find-module-MODULENOTFOUND-에러-해결법
를 사용해주거나
node ../해서 폴더위치를 지정해준다.
시작
//설치 버전 확인
//node -v
// 설치가 끝났으면 ~
// nodejs의 repl
// 읽기 - 해석 (실행) - 출력 -반복
// REPL ( READ - EVAL - PRINT - ROOF)은 콘솔 환경에서
// 코드를 입력하면 즉시 실행해서 결과를 반환해주는 인터페이스
// nodejs의 코드를 test 하고 실행할수있도록 해주는 대화형 콘솔 이다.
//레포라는 모드에 들어가보자.
// 터미널 창을 열고
// node 만써주면 됩니다. 쉽죠?
// 레포모드에서는
//> const str ="hello nodejs";
//undefined
//> str
//'hello nodejs'
//> console.log(str);
//hello nodejs
//undefined
//함수에대한 반환값 ,함수의 반환값이 다음으로 출력되는데 없기때문에 undifined
//자바스크립트로 브라우저 창을 만들고 볼때는 런타임 환경
//node의 런타임환경
// 실행되고 있는 환경이다르다.
// console.log 브라우저 실행하는 console.log와 nodejs에서 실행하는 console.log는
// 내용이 비슷한건지 같은 친구가 아니다. 런타임 환경이다르다.
// 브라우저에서는 this 전역객체가 window였고
// node 런타임환경에서 this의 전역객체가 global
// 레포모드를 사용하다가 종료하고싶은데
// 컨트로 + c
// node로 파일을 실행해서 응용프로그램으로 만들어보자
// 파일 실행모드
// node로 파일을 실행할때
// node 구문뒤에 파일의 경로를 작성해주면된다.
// node index.js
// 잠깐 실행되고 종료되는 응용프로그램을 만든것
const str = "hello world";
console.log(str);
// window
// global
//> this
//<ref *1> Object [global] {
모듈이란?
// 하나의 파일에 기능을 모두 작성해버리면
// 협업이 힘들고 ..
// 수정도 힘들고 유지보수도 힘들고 ..
// 파일을 규칙에 맞게 나눌수있으면 나누는것이 좋다.
// 하나의 큰프로그램의 작은 단위
// 모듈은 각각의 파일단위로 구분되어있고
// 파일의 내용은 필요한 기능들의 함수나 변수들이 포함되어있는것
const BlockClass = [
{
name : "안녕",
age: 1,
comment:function(){
console.log(this.name + "이야")
}
},{
name : "안녕2",
age: 1,
comment:function(){
console.log(this.name + "이야")
}
}
]
// 여기서 이내용을 작성했고 다른파일에서 이내용을 실행시키면
// 오류가 나는데
// 이 내용을 모듈로 내보내서 다른파일엣 가져와서 모듈화 시켜서 사용
// 해당파일의 리턴값을 내보내 줄수있다.
module.exports = BlockClass;
// 받을때
// 모듈을 가져오는 방법
const BlockClass = require('./index2'); // .js 는 생략가능
console.log(BlockClass);
// 현재 내용에 외부의 모듈을 모듈화 할수있는 메소드가
// require 메소드를 사용해서 외부의 모듈을 현재내용에 모듈화
// 시켜줄수있다.
내장모듈
// nodejs의 내장모듈
// nodejs에서 미리 만들어놓은 모듈을 내장모듈이라고 한다.
// require에서 모듈 경로와 파일 명을 적는게 아니라
// 모듈의 이름만 필요해요~
// 운영 체제 정보가 들어있는 모듈~
//내장모듈의 경우 이름만 작성해준다.
// const os = require('os');
// console.log(os);
// nodejs 의 내장 객체
// node의 전역 객체에는 global 객체 우리가 js에서 보던 window 처럼
// 전역 객체가 있어요~
// 런타임 환경이 다르기때문에 전역객체도 다르다.
// 자바스크립트에 this를 작성하고 module.exports
// 참조가 들어가기때문에 다르지 않을까?
// 개념을 숙지하고 global 객체를 사용할 일은 없다.
// nodejs 모듈의 실행 컨텍스트와 전역 컨텍스트가 다르기때문에
// nodejs 에서는 모듈은 각각의 파일 스코프를 가지기때문에 this는 모듈 자체를
// 가르키게된다.
// 레포모드 켜고
// console
// global.console.log()
// global.console.time(); // 코드 시작시간 매개변수로해당텍스트 이름을 문자열로 작성
// global.console.timeEnd(); 코드 종료후 시간출력 해당 끝낼 테스트 이름을 문자열로 작성
// global.console.table({a:{ name:"안녕"},b:{name:"안녕2"},c:{name:"안녕3"}});
// 표처럼 보여준다.
// 실행시키면 실행 파일의 이름까지 보여줌
// > global.console.log("안녕")
// 안녕
// undefined
// >
// > global.console.time("a")
// undefined
// > global.console.timeEnd("a")
// a: 12.829s
// undefined
// 실행시키면 실행파일의 이름까지 보여줌
console.log(__filename);
// 실행한 파일의 디렉토리까지 보여줌
console.log(__dirname);
// 나중에 필요한때가 생기니 잘 알아둘것~
// process 객체
// console.log(process.env);
console.log(process.version); // 노드의 설치버전
console.log(process.execPath); // 노드의 경로
console.log(process.cpuUsage()); // Cpu사용량
// 우리가 window를 생략해서 작성하던것과 같이
// window.console.log();
// console.log();
// global과 module을 생략해서 작성할수 있다~
console.log(module.exports == exports);
// true 생략을 해도 된다.
exports.obj = {a:1};
exports.add = ()=>{
return 2;
}
function add2(){
console.log("난 함수임");
}
exports.add2 = add2;
const BlockClass= require("./index5");
// require 파일을 가져와서 실행시켜주는것.
const require = (path) =>{
// 1. 해당 파일의(path)를 가져오고
// 2. 해당 소스코드를 실행시킨다.
// 3. return module.exports
// require 기능 풀어준거
}
// nodejs 역사
// ES6
// nodejs가 자체적으로 모듈의 문법을 만든것
// 모듈 시스템을 구축한것.
console.log(BlockClass);
console.log(BlockClass.add());
BlockClass.add2();
// 웹 서버 만들어보자~
// 내장 모듈 가져오자
const { Console } = require("console");
const http = require("http");
// createServer 메소드 서버 객체를 만들어주고
// 클라이언트의 요청을 받으면 호출이 된다.
// 전달된 콜백 함수는 클라이언트의 요청을 받아서 처리후
// 클라이언트에 응답해준다.
const server = http.createServer((req, res)=>{
//처리를 다하고~
//응답 end메소드 해당내용을 응답한후 종료
//차후에 헤더 내용을 인코딩을 utf - 8 을 추가해서
// //문자열이 왜깨질까
// res.setHeader()
res.end("server on");
});
// 포트
// 3000번 포트 같은 포트를 지정하는 이유
// 네트워크 프로세스 나눠주기위해서
// http 80 https 433
// 시스템 예약 포트이외의
// 사용하지않을것같은 포트들을 사용하면된다.
// 1025~ 65535까지 안에서
// 8000 8080 3000 주로 많이 사용한다.
const PORT = 4000;
// 여기까지 작성하고 실행시키면 바로 실행끝나자마자 종료된다.
// 서버객체의 listen 메소드를 호출해서
// 클라이언트의 요청을 대기상태로 만들어줄수있다.
// 이벤트 루프를 돌면서 요청이 오기까지 대기를 하다가
// 요청이오면 응답해준다.
// listen메소드에 매개변수로 첫번째 매개변수로 port를 전달
server.listen(PORT,()=>
{
//콜백함수를 등록해서
// 성공적으로 서버가 열린것인지 확인가능하다.
console.log("서버가 잘열려있어요" + PORT+"에");
}
);
'backend > nodejs' 카테고리의 다른 글
| 20230516 엑세스 해싱 (0) | 2023.09.07 |
|---|---|
| 20230508 nodejs 미들웨어 등 (0) | 2023.09.07 |
| 20230504 nodejs express ejs mysql2 path (0) | 2023.09.07 |
| 20230501 (0) | 2023.07.26 |
| 20230428 # TCP와 UDP ,서버 (0) | 2023.07.25 |