클래스/└ TIL 101

<TIL> 220408 미들웨어, req.body, req.params

🌱 익스프레스: 미들웨어 미들웨어의 적용 범위에 따라 애플리케이션 레벨 미들웨어, 라우터 레벨 미들웨어로 구분할 수 있습니다. 익스프레스에서는 라우팅 역할을 하는 라우터도 미들웨어로 구현되어 있습니다. req.body 해석 app.use(express.urlencoded({ extended: false })); app.use(express.json()); req.body의 내용을 익스프레스 서버가 해석하기 위한 과정이 필요합니다. form 태그의 내용을 해석하려면 urlencoded()를 사용하고, 그 외에는 json()을 사용합니다. req.params.id 자료형 req.params의 파라미터(예시의 id)는 문자열로 받아오므로 숫자가 필요한 경우 형변환이 요구됩니다.

클래스/└ TIL 2022.04.08

<TIL> 220330 IP, multer, sequelize

🌱 IP IP에는 공인(Public) IP와 사설(Private) IP가 있습니다. 사설IP를 Port로 연결하면 공인IP를 통해 접속할 수 있습니다(포트포워딩). multer 오류 upload.single("fieldname") 미들웨어 설정시 "fieldname"에 input 태그의 name 속성값과 동일한 값을 입력해야 합니다. 동일한 값을 입력하지 않을 경우 MulterError: Unexpected field 에러를 만나게 될 것입니다. sequelize Node.js의 ORM입니다. ORM은 Object-Relational Model의 약자입니다. ORM은 자바스크립트의 객체를 관계형 DB의 릴레이션으로 변경해줍니다. SQL 없이 자바스크립트로 관계형 데이터베이스를 조작할 수 있습니다. htt..

클래스/└ TIL 2022.03.31

<TIL> 220324 strip(), 제스트

🌱 자바스크립트 CSS에 영향받는 innerText 보다는 textContent 사용하기 기존 노드를 제거하고 다시 생성하는 innerHTML 보다는 insertAdjacentHTML 사용하기 코드리뷰 항해99 알고리즘 2주차 시험을 끝내고 팀원들과 코드리뷰를 진행하였습니다. 프로그래머스 43165번 타켓 넘버 코드는 아래와 같이 DFS로 작성하여 풀이했습니다. sum_list를 만들어 sum들을 저장하고, 마지막에 for문으로 돌면서 target과 같은지 확인하여 카운트하는 코드입니다. 팀원들과 얘기를 나누면서 sum_list 변수가 불필요하다는 것을 알게 되었습니다. def solution(numbers, target): answer = 0 # 리스트 생성: 합계를 하나씩 계산해서 저장 sum_lis..

클래스/└ TIL 2022.03.25

<TIL> 220321 백트래킹, 트랜잭션, 몽구스

🌱 자바스크립트 배열.splice(start[, deleteCount[, item1[, item2[, ...]]]]) -> mutator 배열.slice([begin[, end]]) -> accessor for ... in 객체 for ... of 이터러블(배열, 문자열, Map, Set...) Rest 파라미터 스프레드 문법 디스트럭처링 할당 백트래킹(가지치기) DFS, 재귀 등의 탐색 중 조건에 부합하지 않는 요소를 만날 경우 포기하고 다른 요소를 탐색하는 것입니다. 특강 쌀팔다 개발자 김병욱님 특강을 들었습니다. 비전공자에서 개발자가 되기까지 중요한 질문 3가지를 꼽아서 알려주셨습니다. 첫번째는 개발을 하는 이유였고, 두번째는 취업에 필요한 역량, 세번째가 신입 개발자가 실제로 하는 일이었습니다. ..

클래스/└ TIL 2022.03.22

<TIL> 220319 BFS, 몽구스, 스웨거

🌱 알고리즘: BFS BFS(너비 우선 탐색)는 특정 노드를 중심으로 가장 가까운 노드들을 하나씩 탐색하는 것입니다. 큐를 활용하여 구현합니다. BFS는 재귀로 풀 수 없습니다(재귀함수를 적용하기 위해서는 함수의 스코프가 한 단계씩 떨어져야 함). 노드: 몽구스 몽구스 스키마에 정적 메서드를 추가하여 데이터 포맷을 정하는데 쓸 수 있습니다. 몽고DB의 document 검색시 정규표현식을 활용할 수 있습니다($regex: new RegExp(정규표현식, 플래그)). 스웨거 express.static("public") 으로 공개 디렉터리를 만들고, 스웨거 UI를 넣어둡니다. API를 명세할 swagger.yaml 파이을 작성합니다. 스웨거 변경사항이 적용되지 않는 경우 캐시를 비우고 재시작합니다. 자바스크립..

클래스/└ TIL 2022.03.20

<TIL> 220318 DFS, 몽구스, 스웨거

🌱 자료구조: 그래프 표현방법: 인접 행렬(2차원 배열), 인접 리스트(딕셔너리) 알고리즘: DFS - 깊이 우선 탐색 구현: 스택 또는 재귀 함수 노드: Mongoose 모델.create({ }) 모델.findById(id) 모델.findByIdAndUpdate(id, { }) 모델.exists({ _id: id }) 스키마.pre("save", f ( ) { }) Schema: 데이터의 형태를 결정 model: 스키마를 바탕으로 하는 constructor 스웨거 웹 API 명세, 테스트 등을 하기 위한 도구입니다. 포스트맨의 상위호환으로 보입니다. 오늘의 경험치 1. 인풋 값이 문자열이면 숫자도 문자열로 다루는게 편합니다. 2. 문자를 요소로 하는 배열을 만들려면 그냥 문자열을 써도 됩니다. 오늘의 ..

클래스/└ TIL 2022.03.18

<TIL> 220317 포스트맨, JWT, PUG

🌱 자바스크립트: ES6 함수의 특징 ES6 메서드, 화살표함수, Rest 파라미터, 매개변수 기본값 파이썬 'while 리스트:' 배열이 빈 요소가 아닐 경우를 판단하여 조건문 돌리는 방법입니다. 배열의 값이 하나씩 줄어드는 경우에 유용합니다. JWT 리프레쉬 토큰은 액세스 토큰보다 긴 생명주기를 가지고 있습니다. 액세스 토큰이 만료될 경우 리프레쉬 토큰의 정보를 통해 액세스 토큰을 재발급하게 됩니다. 노드 await 함수에 대한 try/catch 처리가 필요합니다. 몽고DB 스키마를 정의할 때 데이터의 타입, 필수요소인지 등을 구체적으로 정의할 수 있습니다. 오늘의 고생 1. 라우터에서 get으로 url을 받아올때 라우트 파라미터를 받는 코드에서 파라미터의 성질을 정의해 주지 않아서 아래로 작성한 u..

클래스/└ TIL 2022.03.18

<TIL> 220316 해시 테이블, set

🌱 자료구조: 해시 테이블 로드팩터 = 데이터 개수 / 버킷의 개수 (TMI) 개수는 한자어이므로 사이시옷을 받치지 않습니다. 해시함수를 통해서 해싱을 하여 해시 값을 구합니다. 해싱 방법으로 나머지 연산을 활용할 수 있습니다. 해시테이블의 충돌을 해결하는 방법으로는 개별 체이닝 방식과 오픈 어드레싱(연결 리스트) 방식이 있습니다. 파이썬 for char in "문자열" 문자열은 굳이 리스트로 바꾸지 않아도 한 문자씩 반복할 수 있습니다. 리스트.sort(리버스 옵션) sorted(리스트) => 정렬 리스트 반환 딕셔너리.keys() 딕셔너리.values() 리스트.index(요소값) 리스트[인덱스] 요소 in 리스트 보다 요소 in 세트의 탐색 속도가 빠릅니다(∵리스트는 연결리스트 기반, O(1) vs..

클래스/└ TIL 2022.03.17

<TIL> 220315 큐, 라우터, 포스트맨, 펑(500)

🌱 자료구조: 큐 FIFO의 특성을 가지는 큐는 아래와 같이 구현합니다(파이썬). class Node: def __init__(self, item, next): self.item = item self.next = next class Queue: def __init__(self): self.front = None def push(self, value): if not self.front: self.front = Node(value, None) return node = self.front while node.next: node = node.next node.next = Node(value, None) def pop(self): if not self.front: return None node = self.fro..

클래스/└ TIL 2022.03.16

<TIL> 220307 JWT, 깃헙 이슈

🌱 JWT 사용자 정보를 서버가 아닌 클라이언트 쪽에 저장하는 방법입니다. 토큰에는 만료기간을 설정할 수 있습니다. 토큰을 저장할 수 있는 곳으로는 LocalStorage, 쿠키 등이 있습니다. 깃헙 이슈 깃헙 리포지토리에 이슈를 등록할 수 있습니다. 라벨을 달아서 구분하기도 하고, 담당자를 설정할 수도 있습니다. 이슈가 완료되거나 특별한 사유가 있을 경우 이슈를 닫습니다.

클래스/└ TIL 2022.03.08