배경 우테캠에서 호눅스님이 추천한 책 중에 하나가 객체지향의 사실과 오해다. 그때는 그런 책이 있구나 하고 넘어갔는데 여러 글들을 보고 면접을 보면서 객체지향에 대해 관심이 생기고 공부할 필요성을 느꼈다. 자바스크립트는 프로토타입 기반의 객체지향 언어이다. 그렇다면 클래스형 객체지향 언어와 다른 점은 무엇인가? 객체지향이 왜 중요하고 어디에 적용할 수 있는가? 라는 질문에 제대로 대답할 수 없다. 구글링해서 답변만 찾아보는 것으로는 부족하다. 현실 세계에 있는 것들을 추상화를 통해 코드로 구현하고 캡슐화, 상속, 다향성의 특징을 가진다 정도의 설명은 너무 막연하다. 단순히 면접에서 잘 대답하기 위해서가 아니라(사실 객체지향에 대한 깊은 지식은 신입 개발자에게 잘 물어보지 않는다) 더 좋은 개발자가 되기 ..
배경 테스트에 최근에 관심이 생겨서 백엔드는 해봤는데 프론트 개발자가 프론트 테스트를 제대로 해보지 않았다. 그래서 차근차근 조금씩 학습할 예정이다. 프론트엔드에서 테스트가 필요한 이유 백엔드는 당연히 테스트가 필요하다. db에 접근하기 때문에 실수가 나오면 안되고 ui를 보고 직접 테스트하는게 불가능하기 때문에 어차피 수동으로 테스트를 해볼려면 일일히 postman을 이용해서 하나하나 테스트해봐야 한다. 그리고 많은 쿼리가 들어오면 서버가 터지기도 하기 때문에 진짜 필수다. 그런데 프론트에서도 필요할까??? 사실 간단한 프로젝트에서는 필요하지 않다. 그냥 버튼 몇 번 클릭해보면 눈으로 확인 가능하니 말이다. 하지만 프로젝트 규모가 커지고 실제로 배포해서 사용자가 있는 서비스에서는 사소한 오류라도 나와서..
배경 지난번 프로젝트 때 cloud watch를 통해 봤을 때 메모리 용량이 초과되지 않았는데 서버가 계속 죽었다. 새벽 3,4시 쯤에 다들 열심히 원인을 분석했는데 그 중 팀원 한명이 원인을 찾았다. ec2에서는 기본적으로 swap memory를 사용하지 않기 때문에 이런 현상이 일어난다고 했다. 그리고 그때 팀원이 문제를 해결하고 넘어갔다. 그때 너무 바빠서 신경을 쓰지 못했다. 그냥 그런게 있구나 이런데서도 cs 배경지식이 이용되는구나 했었다. 그런데 혼자서 새로 프로젝트를 하던 와중에 또다시 문제가 발생했다. 설마 그때 그건가?? 하는 생각이 문득 들었다. 그냥 우연히겠지 하고 인스턴스를 재시작했는데 계속 서버가 죽었다. 그래서 스왑 메모리 설정을 일단 해보자 하는 생각이 들었다. swap mem..
배경 우리가 웹페이지에서 로그인을 하면 새로고침을 하더라도 로그인이 유지가 된다. 이걸 가능하게 하는 가장 대표적인 기술 두가지는 jwt와 세션 쿠키 방식이다. 물론 두가지 방식을 같이 사용하는 경우도 있다. 나는 그동안 passport를 이용한 세션 쿠키 방식을 많이 사용해왔다. 우아한테크캠프 4번째 프로젝트 때 거의 처음으로 jwt를 팀원을 통해 배웠고 그때 완벽하게 이해하지 못했다고 생각해서 조금 신경써서 이번에 공부했다. jwt란 jwt는 JsonWebToken의 약자다. 간단히 말하면 암호화된 데이터다. header, payload, signature 세부분으로 나뉘어지며 header에는 토큰 타입과 어느 알고리즘을 사용할지, payload에는 데이터, signature에는 비밀키가 있다. 프론..
배경 보통 우리들은 코딩할 대 로그를 찍는다. 개발할 때는 로그를 직접 볼 수 있지만 배포하고 나서는 그렇지 않다. 우리는 24시간 컴퓨터 앞에서 어디서 오류가 나는지 확인할 수 없다. 이걸 효율적으로 하기 위해서는 어떻게 해야할까?? 바로 기록이다. 로그를 기록하면 된다. 사실 이전에 node교과서를 보면서 공부했었지만 대충 쓰고 넘어갔던 기억이 난다. 그때 제대로 공부해놨다면 우아한테크캠프에서 프로젝트를 하면서 winston으로 로그를 기록했을 것이다. 앞으로 그런 기회가 있다면 내가 나서서 winston을 적용해야겠다. winston 무작정 사용해보기 일단 문서를 보다가 생각보다 좀 길어서 적용부터 해보기로 했다. 일단 해보고 이런거구나 먼저 알아보자 logger.js const winston = ..
배경 저번글에서 기본 jest 사용법을 알아봤다. 기본 사용법은 알았으니 뚝딱 되지 않을까?? 그럴리가... 단위 테스트 미들웨어 테스트 먼저 미들웨어 테스트를 해보자. 비교적 간단한 것부터 시작하려고 한다. is-logged-in-middleware.ts import { NextFunction, Request, Response } from 'express'; const isLoggedInMiddleware = async (req: Request, res: Response, next: NextFunction) => { if (req.user) { return next(); } res.status(403).json({ errorMessage: '로그인이 필요합니다' }); }; export default ..
배경 jest는 우아한테크캠프에서 조금 공부하고 사용해보긴 했다. 그런데 사가 테스트에만 사용을 했었고 tdd방식으로 만들어본적도 없다. 또한 백엔드가 진짜 테스트가 중요한데 백엔드에서 적용해본적이 없다. 그래서 이번에 만든 프로젝트에 테스트를 적용해보려고 한다. 이글은 www.daleseo.com) 글들을 바탕으로 적었다. 사용한 라이브러리 버전 package.json "jest": "^27.3.1", "supertest": "^6.1.6", "ts-jest": "^27.0.7", "@types/jest": "^27.0.2", jest 설정하기 jest는 jest.config.js, jest.config.ts, package.json에서 설정할 수 있다. 나는 jest.config.ts에 작성했다. 세..
배경 우아한테크캠프에서 많은 사람들이 자신이 만든 라이브러리를 배포했다. 나도 실제로 유저들이 사용할만큼 좋은 라이브러리는 아니라도 일단 열심히 만들고 배포해보겠다는 생각을 했다. npm 회원가입 먼저 npm 회원가입을 하자. 이메일 연동까지 해야된다. 까먹지 말자 npm 로그인 npm login을 입력하고 아까 가입한 정보를 입력하면 로그인된다. 그리고 확인을 위해 npmwhoami를 입력하면 내 아이디가 뜬다 중복되는 패키지명 확인하기 중복되는 패키지는 당연히 배포할 수 없다. npm info 로 미리 확인해보자. 그렇게 중복되지 않는 내용을 package.json 내용에 입력하자. 패키지 만들기 열심히 패키지를 만들자. typescript와 d.ts로 타입도 넣어줘야 되는데 일단은 그냥 자바스크립트..