22.12.16

Han Lee·2022년 12월 16일
0

TIL

목록 보기
16/43

자바스크립트에 대한 공부가 부족하다 느껴져서 일단 자바스크립트 부터 공부

배열 = object형식

const 배열 =[a,b,c,d,e]

{0:a,1:b,2:c,3:d,4:e}와 같다고 이해가 된다.
그래서 배열[0]을 통해서 배열에 있는 값을 가져올수 있었던것

원시 타입 vs 참조 타입

원시 타입 : 값에 의한 복사 : 원시의 값을 직접 바라보는
a=1, b=a, a=2 순으로 실행한다면 -> a=2, b=1로 나타난다.
a는 1이 저장되있는 메모리를 바라보고있고 b도 같은 메모리를 바라보게 한뒤 a가 3이 저장된 메모리를 바라보게 바꾸게한것이어서
a,b사이에 관계는 없다.
참조 타입 : 참조에 의한 복사 = 주소의 값을 복사 : 객체나 배열은 다른 값을 바라보는 주머니를 바라보는

const obj1 = {
  num: 1, str: 'ABC', bool: true
};
const obj2 = obj1;

obj1은 num,str,bool의 값을 직접 바라보고 있는것이 아니라
obj1->주소1:{num: 1이 저장된 주소, str:'ABC'가 저장된 주소, bool:true가 저장된 주소}를 바라보고 있는것이다.
obj2또한 obj2->주소1:{num: 1이 저장된 주소, str:'ABC'가 저장된 주소, bool:true가 저장된 주소}

obj2.num = 2;
obj2.str = '가나다';
obj2.bool = false;

obj2의 각 값을 바꾸면 {num: 2이 저장된 주소, str:'가나다'가 저장된 주소, bool:false가 저장된 주소}로 변경이 되어도 주소1이 바뀌지 않았기에 obj1또한 같이 바뀌게 된다.

스코프

식별자들이 유효하게 사용할 수 있는 범위 -> 변수,상수(let,const)를 선언 했을때 어디까지 적용이 되는지 스코프 단위로

const xx = 0;
let yy = 'hello';
console.log(xx, yy);

{
  const xx = 1; //블록 안에서는 바깥의 const 재선언 가능
  let yy = '안녕하세요';

  console.log(xx, yy);
}

console.log(xx, yy);
//0 'hellow'
//1 '안녕하세요'
//0 'hellow'

스코프 체인

스택 - 후입선출 -> 실행 스코프는 스택과 같다.
전역 변수상수, 지역 변수상수를 생각하고 코드를 작성해야 한다.

if

else if 를 많이 쓰지 말고 retrun으로 값을 나가고 if를 여러번 사용하자.

switch

주어진 평가에 일치하는 case로 실행 위치 이동

switch (조건){
case 조건:
	실행할 내용
    break
}
default:
	실행할 내용

break : 원하는 조건case를 실행후 switch를 나오는 구문
default : 만족하는 case가 없을떄 실행

이터러블 iterable 객체

반복 가능한(iterable, 이터러블) 객체는 배열을 일반화한 객체입니다. 이터러블 이라는 개념을 사용하면 어떤 객체에든 for..of 반복문을 적용할 수 있습니다.

과제 리뷰

라우트와 스키마의 차이 : 엔드포인트 룰 = 라우터 (표지판), 스키마 = 몽고db와 연결 할때 모델이 필요 -> 데이터를 현실화 특정 컬렉션이 어떻게 되있는지

AWS배포 포트포워딩 -> 포트에게 어디로 갈지 정해주는 aws 로드벨런스에서 설정이 가능

몽고db ec2에 설치 -> 원래는 말이 안된다. db와 api서버는 분리가 되어야 한다.
api/posts/1
https://www.naver.com/search?keyword=“blah”&start_time=“20221210”
parm - 1
query - 조건을 설정
body - 서버에 변경사항을 보낼 때 Content-Type,application/json
역활별 Directory structure 분리 -> 유지보수 쉬움 : 디렉토리 구조를 잘 잡아야한다.
서버에서 페이지네이션 -> 분할로 서버에 전송 필요
/posts/:_postid -> _postid는 parm

POST /api/posts/:post_id/comments -> 상하 관계를 생각해서

app.listen -> port를 받아서 열겠다.
app.use -> 미들웨어
s를 올바르게 사용하자. key:value 이름이 같으면 하나만 적어도 된다.
"/" 엔트리 포인트(Entry point) -> 첫 화면, 맨 처음 루트에서만 사용하는 것이 옳다.

댓글 모델에서 user 는 user_id가 들어가야 한다. -> 참고하는 자료는 변하지않는 값으로
스키마 설계 단계에서 상관관계를 생각해서 고민을 해야한다.
에러핸들러도 app.js에 있어야한다.
몽고db연결하는 부분은 분리를 하는게 좋다.
app.use(express.json()) -> body-parser 역활 json을 유용하게 사용하기 위해
Returns middleware that only parses json and only looks at requests where the Content-Type header matches the type option.

verb가 리턴 값의 이름에 붙는 것은 좋은 네이밍 컨벤셔이 아니다.
타입은 엄격하게 지켜줘야 한다.
제약 조건을 설정할때 find({조건}) -> 필요한 조건만 걸어야 한다.
const post = await Posts.find({postId})
post가 있으면 postid를 가진 콜렉션이 db에 있다.
description 검색 필요

if문 best cass -> 필터링을 통해 불필요한 케이스를 쳐낸다.
createdAt -> 클라이언트에서 시간을 조작할 수 있기 때문에 body로 받으면 안되고 서버에서 해결
!는 0or1, true/false등 2분법으로 나눠지는 상황에서 사용하는게 좋다.
목록은 무조건 페이지네이션 필요
고유한 값인 id 값등은 body로 받으면 안된다.

"/posts/:postid/comments/:commentid"
const {postid,commentid} = req.params

모듈은 위에 모아서 정리

애자일 방법론 특강

팀프로젝트하면서 드는 의문

  • 잘못됬는데 어떻게 고쳐야 하는지 모르겠는 우리
    달인 : 꾸준한 반복 = 개선하려는 동기 + 적절한 시기의 구체적인 피드백 :넷플릭스의 4A피드백
    제자리걸음인 이유 : 의도적인 수련이 필요 -> 지속적으로 감정상태를 알아차려야한다 = 메타인지
    객관적인 자기 점검이 필요하다. 난이도가 나와 맞는지
    1만 시간의 법칙 - 자신의 기량을 향상시키는 시간을 이야기하는것

업무 프로세스

팀프로젝트를 하면서 겪는 실수 -> 실수는 예방이 불가능 하다. -> 실수를 공개하고 빠르게 고치자

애자일 : 기민한

반복적인 실험, 실행 -> 빠른 실행과 학습 : 일단 빨리 해보고 에러,문제등을 빠르게 파악 해결

profile
렌덤형 인간

0개의 댓글