Git 명령어
git branch #### 브랜치명 확인
git branch “브랜치명” #### 새로운 브랜치 생성
git checkout 브랜치명 #### 해당 브랜치로 전환
git checout -b “브랜치명” #### 생성과 이동을 동시에
git branch -d 브랜치명 #### 브랜치 삭제 (삭제는 반드시 자신이 위치한 곳이 아닌 곳에서 삭제할 수있다, 꼭 메인이 아니여도)
git checkout a #### a로 이동
git merge b #### a에 b를 합칩
🔥 런타임이란
- 프로그래밍 언어가 구동되는 환경
- 자바스크립트 런타임 환경은 웹 브라우저만 존재했다
- 자바스크립트를 서버단으로 언어로 사용하기 위해 나온 것이 nodejs
- 웹 브라우저 없이 실행 가능
console.log(obj);
console.log(obj["out"]);
console.error('error');
console.time("시간"); //이것과
console.timeEnd("시간"); //이것은 들어가는 게 같아야한다
console.table([{name: 'abc'}, {name: 'def'}]);
console.dir(obj, {colors : true, depth:1}); //객체 구조 , color : 색을 구분하게 보임
console.dir(obj, {colors : true, depth:2});
console.trace("error");
{ out: { in: { key: 'value' } } }
{ in: { key: 'value' } }
error
시간: 0.044ms
┌─────────┬───────┐
│ (index) │ name │
├─────────┼───────┤
│ 0 │ 'abc' │
│ 1 │ 'def' │
└─────────┴───────┘
{ out: { in: [Object] } }
{ out: { in: { key: 'value' } } }
Trace: error
at Object.<anonymous> (C:\Users\SBAUser\SeSAC_YS\nodejs\221117_1.js:23:9)
at Module._compile (node:internal/modules/cjs/loader:1155:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
at Module.load (node:internal/modules/cjs/loader:1033:32)
at Function.Module._load (node:internal/modules/cjs/loader:868:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:22:47
setTimeout(콜백함수, 밀리초) : 밀리초 후 콜백함수 실행
setInterval(콜백함수, 밀리초) :
setImmediate(콜백함수) : 즉시 콜백함수 실행
clearTimeout(아이디) : setTimeout 끝내기
clearInterval(아이디) : setInterval 끝내기
const func1 = setTimeout(function(){
console.log("1.5초후 실행");
},1500);
const func2 = setInterval(()=>{
console.log("1초마다 반복");
},1000);
const func3 = setTimeout(()=>{
console.log("func3 실행");
},3000);
setTimeout(()=>{
clearTimeout(func3);
clearInterval(func2);
},2500);
const func4 = setImmediate(()=>{
console.log("func4 즉시실행");
});
const func5 = setImmediate(()=>{
console.log("func5 즉시 실행");
})
clearImmediate(func5);
/*
func4 즉시실행
1초마다 반복
1.5초후 실행
1초마다 반복
*/
Timer메소드는 따로 호출안해도 실행이 된다. 그래서 변수에 담으면 메소드 실행 후 만들어진 아이디가 변수에 담기는 것!
const func1 = setTimeout(function(){
console.log("1.5초후 실행");
},1500);
// 이렇게 있으면 func1()이렇게 실행하지 않는것!
//func1에는 setTimeout 실행하고 난 후 생성되는 아이디가 담긴다
console.log("__filename : " , __filename); //__filename : C:\Users\SBAUser\SeSAC_YS\nodejs\221117_1.js
console.log("__dirname : ", __dirname); //__dirname : C:\Users\SBAUser\SeSAC_YS\nodejs
console.log("process.version : ", process.version);
console.log("process.arch : ", process.arch);
console.log("process.platform : ", process.platform);
console.log("process.cpuUsage : ", process.cpuUsage());
const os = require("os");
console.log("os.type : ",os.type()); //Windows_NT
console.log("os.cpus : ",os.cpus());
console.log("os.homedir : ",os.homedir());
console.log("os.freemem : ",os.freemem());
const path = require("path");
const file = __filename;
console.log("path.extname : ", path.extname(file)); // .js : 확장자 이름 가져오기
console.log("path.parse : ", path.parse(file)); // 구분자별로 가져올 수 있는걸 모두 가져오기
searchParams는 url의 ?안의 내용을 나눠 놓은 것이다
Javascript 문법
구조분해 할당
- 배열이나 객체의 속성을 제거해 어쩌고..
- 기본값 = 없을때 대체하는 것
[item1, item2 = 'peach', item3 = 'orange'] = list;
console.log(item1); //apple
console.log(item2); //banana
console.log(item3); //orange
- 임시 변수 안 만들고 바꾸는 법
let x = 1;
let y = 3;
[y,x] = [x,y];
console.log(x); //3
console.log(y); //1
- 객체 구조분해는 순서가 아닌, 이름이 같은 것을 찾는다
- 객체의 이름을 바꾸고 싶으면 원래이름:바꾸고싶은이름 의 구조
let obj = {
key1 : 'one',
key2 : 'two',
};
//let key1 = obj.key;
let {key2,key1 : a, c = 'three'} = obj;
console.log(a); //one
console.log(key2); //two
console.log(c); //three
- 스프레드 문법 : 나머지 애들
- … 은 무조건 마지막에 넣기
//나머지 연산, 스프레드
let {b, ...rest} = obj;
console.log(b); //2
console.log(rest); //{ a: '1', c: '3' }
클래스
- 객체를 생성하기 위한 템플릿
/* Car.js */
class Car{
constructor(color){
this.color = color;
this.isDoor = true;
}
Ismove(){
console.log('move');
}
IsStop(){
console.log('stop');
}
returnColor(){
return this.color;
}
}
module.exports = {Car};
/* index.js */
const {Car} = require('./221117_3'); //구조분해라서 이름 같게
let carA = new Car('red');
let carB = new Car('orange');
let carC = new Car('yellow');
console.log("CarA color : ", carA.returnColor());
console.log("CarB color : ", carB.returnColor());
console.log("CarC color : ", carC.returnColor());
콜백함수
- callback : 함수가 끝난 뒤 실행되는 함수
- 함수를 만들 때 파라미터로 함수를 받아서 사용
function login(id, ps) {
setTimeout(()=>{
console.log('x');
return id;
},2000);
}
const id = login("kim", null);
console.log(id + '님 환영합니다!');
console.log("------------FINISH-------------");
/*
-------------START--------------
undefined님 환영합니다!
------------FINISH-------------
x
*/
⇒ 비동기라 저런 결과! 콜백함수 사용하면 해결
console.log("-------------START--------------");
function login(id, cb) {
setTimeout(()=>{
console.log('x');
cb(id);
},2000);
}
const id = login("kim", function(id){
console.log(id + '님 환영합니다!');
console.log("------------FINISH-------------");
});
/*
-------------START--------------
x
kim님 환영합니다!
------------FINISH-------------
*/
콜백함수를 쓰다보면 Callback Hell에 빠짐
계속 매개변수로 넘겨지는 콜백함수가 반복되어 코드 들여쓰기가 너무깊어짐
⇒ 가독성떨어지고 코드 수정이 어려워진다
프로미스(promise)
- 콜백헬로 인한 복잡도 증가와 예외처리의 어려움을 해결하기 위해 만들어짐
- 비동기 작업에서 성공과 실패를 분리해 메소드 수행
- resolve(value) : 일이 성공적으로 끝난경우 ⇒ 프로미스를 실행한 곳의 then으로들어감
- rejuect(error) : 일이 성공적이지 않은경우, 에러 발생시 ⇒ 프로미스를 실행한 곳의 catch로 들어감
프로미스 상태
- pending : promise 수행 중인 상태
- fulfilled : promise가 resolve된 상태
- rejected : promise가 지켜지지 못한 상태, reject 된 상태
- settled : fulfilled 또는 rejected로 결론이 난 상태
모듈
fs모듈
- filesystem의 약자로 파일에 접근하고 만들거나 삭제 등등 파일처리에 관련됨
readFile(파일경로, 콜백함수)
- 파일읽기, 콜백함수의 첫번째 인자는 에러가 있으면 받는 에러, 데이터는 버퍼형태로 출력된다 따라서 문자로 변환해야함
const fs = require("fs");
fs.readFile("./test.txt", function (err, data) {
if(err) throw err;
console.log("data : ", data); //data : <Buffer 74 65 73 74 ed 8c 8c ec 9d bc>
console.log("data : ", String(data)); // data : test파일
})
- 프로미스로 불러올 수 있다
const fs2 = require("fs").promises;
fs2.readFile("./test.txt")
.then((res) =>{
console.log("data : ", String(res));
});
writeFile(파일경로이름, 내용)
- 파일쓰기
- resolve로 넘기는게 없다
fs2.writeFile("./write.txt", "hyebin")
.then((res)=>{
return fs2.readFile('./write.txt');
})
.then((res) => {
console.log("data : ", String(res));
})
http 통신
- 클라이언트와 서버가 통신하는 것 : tcp connection
- 클라이언트가 서버에게 요청(request) 보냄 ⇒ 서버는 요청을 처리하고 응답(response)함
http 모듈
- nodejs를 통해 서버를 구축하는 방법은 http와 express두개가 있다
- 웹 서버를 구동하기 위한 nodejs 내잡 웹 모듈
- server 객체 request객체 response 객체 사용
- 요즘은 거의 express쓴다
const http = require("http");
//req : 클라이언트가 서버에게 요청하는 내용 , res : 서버가 클라이언트에게 응답하는 내용
const server = http.createServer(function(req,res){
res.write("<h1>Hello</h1>");
res.end("<hr>");
});
/* server.on()//이벤트 등록 함수
server.listen() //서버 실행, 클라이언트를 기다린다 */
server.listen(8080, function(){
console.log('8080번 포트로 실행');
})
///
const http = require("http");
const fs = require("fs").promises;
//req : 클라이언트가 서버에게 요청하는 내용 , res : 서버가 클라이언트에게 응답하는 내용
const server = http.createServer(function(req,res){
fs.readFile('./test.html')
.then(function(data){
res.end(String(data));
})
});
/* server.on()//이벤트 등록 함수
server.listen() //서버 실행, 클라이언트를 기다린다 */
server.listen(8080, function(){
console.log('8080번 포트로 실행');
})
response 객체 : writeHead : 응답 헤더, wrtie : 응답 쓰기, end : 응답 끝내기
localhost와 port
localhost
- 컴퓨터 내부 주소(127.0.0.1)
- 자신의 컴퓨터를 가리키는 호스트 이름
port
- 서버 내에서 데이터를 주고 받는 프로세스를 구분하기 위한 번호
- 기본적으로 http서버는 80번 포트 사용(생략가능, https 는 443)
http 응답
1xx : 처리중 ⇒ 100 : Continue , 102 : Processing
2xx : 성공 ⇒ 200 : OK, 201 : created, 202 : Accepted
3xx : 리다이렉트(다른페이지로 이동)
4xx : 요청 오류 ⇒ 400 : 잘못된 요청, 410 : 권한 없음, 403: 금지됨, 404 : 찾을 수 없음
5xx : 서버 오류
node 하고 명령어 칠때 경로는 명령어를 치는 곳의 위치로 보게된다
후기
개발문화라든지, 실제로 많이 쓰는 git같은 실무에서 쓰일많안 이론적인것들을 배웠다. 프로미스가 아직 조금 어색해서 더 공부를 해봐야겠다. 깃브랜치 종류를 생각하지 않고 평소에는 그냥 푸시했는데 그렇게 했다가는 나중에 큰일나겠구나..생각을 했고 이제 프로젝트를 진행하면서 적용해볼 생각에 기대가 된다..!