목록전체 글 (118)
상권's

오늘은 자바스크립트의 동작 원리를 깊이 있게 이해할 수 있는 실행 컨텍스트에 대해 알아보겠습니다. 모든 코드는 실행 컨텍스트를 통해 실행되고 관리됩니다. ECMAScript에서 구분하고 있는 다음 4가지의 소스코드가 실행 컨텍스트를 생성합니다. 여기서 ECMAScript란, Ecma International이 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 말하며 자바스크립트를 표준화하기 위해 만들어졌습니다. 출처 위키백과 전역 코드 : 전역에 존재하는 소스코드. 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않음=> 전역 스코프 생성 함수 코드 : 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않음 => 지역 스..

오늘은 코드스테이츠 수강 중에 개인적으로 학습했던 TDD(Supertest) 복습하면서 북담의 테스트 코드를 만들어보다가 맞이한 에러에 대해서 알아보겠습니다. 지난 주 목요일부터 supertest 복습하고 코드를 구현했습니다. describe나 it은 잘 구현했었는데 before로 테스트용 데이터를 넣는 부분에서 고생을 했습니다. TDD 학습을 인프런의 김정환님 강의로 했었는데 강의에서는 Sequelize cli가 아닌 define으로 테이블을 정의했습니다. const app = require('../app'); const request = require('supertest'); const models = require('../models'); const should = require('should');..

앞 서 알아봤던 스코프에 이어서 함께 학습할 수 있는 var, let, const 키워드를 자세하게 알아보고 추가적으로 호이스팅까지 알아보겠습니다. 먼저 변수의 선언에 대해서 알아보겠습니다. 변수 선언은 변수를 생성하는 것으로, 값을 저장하기 위해 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해 값을 저장할 수 있게 준비하는 것입니다. 자바스크립트 엔진은 변수 선언을 선언 단계, 초기화 단계에 거쳐 수행합니다. 선언 단계는 변수 이름을 해당 스코프에 등록해 자바스크립트 엔진에 변수의 존재를 알리는 것이며, 초기화 단계는 값을 저장하기 위한 메모리 공간을 확보하고 최초로 값을 할당하는 것인데, 암묵적으로 undefined를 할당해 초기화하는 것입니다. var 키워드를 사용한 변수 선..

지금까지 학습하면서 스코프에 대해서 알고 있다고 생각을 했으나 누가 물어봤을 때 정확하게 답변을 하지 못하는 제 모습에 정확하게 정리하는 것이 필요하다는 생각이 들었습니다. 스코프란, 모든 식별자들은 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위를 의미합니다. 이러한 스코프는 전역 스코프와 지역 스코프로 구분할 수 있습니다. 전역 스코프는 말 그래도 코드의 가장 바깥 영역을 의미하는 전역에서 만들어서 지는 스코프이며, 지역 스코프는 함수 몸체 내부를 의미하는 지역에서 만들어지는 스코프입니다. 조금 더 자세하게 알아본다면, 스코프는 모든 식별자가 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위입니다. 이 때 선언된 지역과 하위 지역에서만 유효합니다...
오늘 북담의 try/catch 리팩토링이 1차가 끝났습니다. try/catch를 사용하지 않고 예외처리를 했다 보니 많이 복잡했던 코드가 간편해질 수 있었습니다. express 공식 문서를 조금 더 빨리 보고 학습했더라면 프로젝트 초기부터 잘 반영했을텐데라는 아쉬움도 있지만, 지금이라도 학습하고 반영했다는 점에서 다행이라는 생각을 했습니다. db 관련된 에러는 다음 주에 더 자세하게 확인하고 처리할 예정입니다. 아티클 생성 부분에서 column으로 들어갈 값이 많은데 요소가 없을 때 발생하는 에러를 어떻게 처리해야할지 고민 중에 있습니다. Sequelize의 에러로 처리할 지 아니면 req.body로 확인할 지에 대해서는 더 학습해볼 예정입니다. 그리고 이 예외로 발생하는 에러에 대해서도 추가적으로 학습..
* 앞 서 학습했던 내용을 복습하기 위해 질문과 답변 형태로 작성했습니다. 질문에 대해 개인적으로 이해하고 작성한 답변이기에 내용이 빈약하거나, 오류가 있을 수 있다는 점 양해 부탁드립니다. REST한 API에 대해서 자세히 설명해주세요. REST API는 REST 아키텍쳐 스타일을 따르는 API입니다. 여기서 REST란 REpresentational State Transfer의 줄임말로 분산 하이퍼미디어시스템을 위한 아키텍쳐 스타일로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법인 '네트워크 아키텍처 원리'의 모임이라고 할 수 있습니다. 추가 : 이러한 REST를 구성하는 스타일은 클라이언트-서버 구조, 무상태(stateless), 캐시, 계층 시스템, 인터페이스 일관성(Uniform Interf..

22.02.12 try/catch 적용부분 logout: async (req, res) => { // test done try { const cookie = req.cookies.jwt; if (!cookie) return res.status(401).json({ message: '로그인 유저가 아닙니다.' }); let decodedData = isAuthorized(cookie, res) const findUser = await UserModel.findOne({ where: { id: decodedData.id, userId: decodedData.userId } }); if (!findUser) return res.status(400).json({ message: '유저가 없어 로그아웃에 실패했습..

서버 리팩토링 1. 서버 jwt 쿠키 모듈화 하기 쿠키 만료인지 여부 확인하는 모듈을 만들어 봤습니다. 먼저, jwt.verify에서 try/catch문을 이용해 만료된 토큰의 여부를 확인했습니다. 마주한 에러 : 쿠키가 만료되었거나 잘못된 쿠키의 경우 isAuthorized에서 catch로 return res 을 해도 다시 logout으로 넘어왔을 때 decodedData 이후 코드 진행에 에러가 발생하고, 이미 res를 했기때문에 클라이언트에 보낸 이후에 headers 세팅을 불가능하다는 에러가 발생했습니다. 해결방법 : try/catch 예외처리를 학습하면서 리팩토링을 하고 있지만 너무 기본적인 거에서 오류를 냈습니다. 해당 문제는 isAuthorized catch에서 throw error를 해줌으..