전체 글

전체 글

    TDD 도입기

    테스트 코드를 도입하기로 한 이유 1. 기존 서비스 코드의 리팩토링 시 기존 서비스에 영향을 주지 않게 하기 위해 기존 서비스 코드에서 작동하던 로직들을 수정할 일이 있거나, 리팩토링 해야할 일이 있을 때, 해당 코드를 수정했을 때 어디 부분까지 이 코드가 영향을 미치는지, 수정해도 이상이 없는지 여부 등을 체크하기 어렵고, 놓치게 되어 에러가 발생하는 문제가 있었기 때문에, 테스트 코드를 도입하여 수정 시 어디 부분에 영향을 미치고, 어떤 부분에서 에러가 일어나는지 확실하게 체크하여 유지보수 및 신기술 도입 등에 도움을 주기 위해 필요했습니다. 2. 코드의 구조 및 품질 향상을 위해 테스트 코드를 작성하기 위해서는 테스트 코드를 작성하기 쉽게 코드를 작성해야합니다. 테스트 코드를 작성하기 쉬운 코드란 ..

    [Docker] Docker , Dockerfile Tutorial

    [Docker] Docker , Dockerfile Tutorial

    🎇Docker를 이용하여 express를 background 에서 실행해보기 목표 : 기존 터미널에서 실행하던 express 서버를 docker image를 만들어 컨테이너를 생성 한 후 background에서 실행시키기! 1. 🚲 Docker image 만들기 docker image를 만들기 위한 Dockerfile 을 프로젝트의 root 폴더에 생성해줍니다. Dockerfile 포멧 하나의 Dockerfile은 기본적으로 다음과 같은 구조를 가진 여러 개의 명령문으로 구성되어 있습니다. #주석(Comment) 명령어(INSTRUCTION) 인자(arguments)각 명령문은 명령어로 시작하고 여러 개의 인자가 따라올 수 있으며, 해당 명령문에 대한 주석도 달 수 있습니다. 인자와 구분이 쉽도록 명령어..

    [Error] Node 에서 환경 변수를 읽어오지 못하는 오류

    문제 발생 Node 에서 환경 변수를 사용하기 위해 파일을 생성 후 process 를 통해 사용하려 했으나 값이 undefined 으로 나오는 문제 환경 SERVER_PORT=5001 MONGODB_URL="mongodb+srv://:@portfolio.zk0k1.mongodb.net/myFirstDatabase?retryWrites=true&w=majority" JWT_SECRET_KEY="ad5kafl91ak@192vk0ckv#ao!d3o1qw%ez" 문제 발생 원인 환경 변수를 사용해주기 위해 필요한 라이브러리 import 및 명령어를 사용하지 않아서 환경 변수를 읽어오지 못하는 문제 문제 해결 import dotenv from "dotenv"; dotenv.config(); console.log(..

    [ 문제 풀이 ] BOJ-14501 퇴사

    📔 문제 설명 문제 풀러 가기 🧰 변수 설명 N 타입 : 정수 저장 데이터 : 일 수 입력 dp 타입 : 리스트 저장 데이터 : 각 날짜마다의 최대값을 저장 T 타입 : 리스트 저장 데이터 : 상담 소요 시간 저장 P 타입 : 리스트 저장 데이터 : 상담 금액 저장 🖨풀이 과정 1. 일 수를 입력 받는다 [N] 2. 시간과 금액을 저장할 리스트를 초기화 해준다. [T, P] 3. 반복문을 통해 N 만큼 반복하며 각 상담마다의 소요 시간과 금액을 입력받는다. 4. dp를 N+1 크기 만큼 초기화 해준다. (회사를 N+1 일에 나가기 때문에) 5. 시간을 초과하면 회사에 있지 않기 때문에 역순으로 반복문을 돈다. 6. 현재 날짜와 상담 소요시간을 더 한 값이 N보다 작다면 큰 값을 비교하여 큰 값을 dp에 ..

    [ Node.js ] Mongoose 를 사용해보자!

    🤷‍♂️Mongoose란 무엇일까? Mongoose 모듈은 MongoDB 라는 NoSQL 데이터베이스를 Node.js로 사용할 수 있도록 하는 확장 모듈 중 하나 입니다. Mongoose는 데이터를 만들고 관리하기 위해 스키마 [ Schema ]를 만들고, 그 스키마로 모델을 만들어 데이터를 관리 합니다. 스키마와 모델을 통하여 data를 불러온 후 객체화 시켜 빠르게 수정함으로써 데이터에 접근 가능하게 만들어줍니다. 모델링 된 문서 [ Document ]가 모여있는 Collection을 관리하는 것을 수월하게 만들어 줍니다. 🍀 주요 메소드 사용해보기 💻데이터 베이스 연결하기 const mongoose = require('mongoose') mongoose.connect("mongodb:..

    [ Node.js ] crypto를 사용하여 비밀번호 암호화 하기

    🤷‍♂️ crypto란? Node.js 에 내장되어 있는 내장 모듈 중 하나로 문자열을 암호화, 복호화, 해싱할 수 있도록 도와주는 모듈입니다. Crypto에는 여러가지 암호화 방식이 있지만, 아래에선 Hash를 통해 암호화를 해보겠습니다. ❔ 암호화 방식 암호화 방식은 크게 두가지로 나뉩니다. 단방향 암호화 : 복호화를 할 수 없는 암호화 방식. 양방향 암호화 : 복호화가 가능한 암호화 방식. 🍀 복호화란? -> 복호화는 암호화 된 것을 암호화 되기 전의 상태로 되돌리는 것을 말합니다. 실제 웹 서비스에서 비밀번호를 찾기를 할 때, 원래 쓰던 비밀번호를 알려주는 것이 아닌 새로운 비밀번호를 생성하는 창으로 넘어가게 되는데요. 이때 사용하는 암호화 방식이 단방향 암호화 방식 이기 때문에 그렇습니다. 🚔 ..

    [ Node.js ] readFile, readFileSync 함수 알아보기

    🤷‍♂️ readFile 이란? readFile은 파일을 읽는 비동기 함수로서, 위 그림 처럼 3가지의 인자가 필요하다. path : 내용을 읽을 파일의 경로 options : 파일의 내용을 읽을 때 적용할 옵션 [ ex) "utf-8" ] callback : 파일의 내용을 다 읽었을 때 실행될 콜백 이렇게 3개 중 1, 3번은 필수 인자이고, 2번의 options는 선택인자 입니다. 이때, callback 함수의 모양을 보면 아래 코드와 같은 Arrow Function 형태인 것을 알 수 있습니다. (err, data) => { //함수 내용 } 파일 읽기가 완료 되면 콜백이 실행 되면서 data 인자로 파일의 내용이 전달되고, 만약 실행 중 에러가 발생하면 err인자에 에러 정보를 담은 객체가 전달 ..

    [ JS ] Event 정리

    [ JS ] Event 정리

    Mouse Event 1. MouseEvent.button 마우스 이벤트 객체의 버튼 프로퍼티를 활용하면, 마우스 버튼을 눌렀을 때 일어난 이벤트에 대해서 어떤 버튼을 눌러서 일어난 이벤트인지를 정확하게 알아낼 수 있다! 값 내용 0 마우스 왼쪽 버튼 1 마우스 휠 2 마우스 오른쪽 버튼 3 X1 (일반적으로 브라우저 뒤로 가기 버튼) 4 X2 (일반적으로 브라우저 앞으로 가기 버튼) 이때, mouseenter, mouseleave, mouseover, mouseout, mousemove 처럼 마우스 이동과 관련된 이벤트에서는 이 값이 null이나 undefined가 아니라 0 입니다! 2. MouseEvent.type 이벤트 타입 내용 mousedown 마우스 버튼을 누르는 순간 mouseup 마우스 ..

    [ JS ] DOM에 대한 총 정리!

    📙Window 객체 window 객체는 브라우저 창을 대변하면서 자바스크립트에서 최상단에 존재하는 객체입니다. 자바스크립트 코드 어느 곳에서나 항상 접근할 수 있기 때문에 전역 객체 [ Global Object] 라고 부릅니다. 어떤 프로퍼티나 메소드를 사용하든 결국 전역 객체 내부의 것 이기 때문에 window.을 생략하고 사용이 가능합니다! 🤷‍♂️DOM 이란? DOM 은 Document Object Model 의 약자로서 '문서 객체 모델' 이라고 부릅니다. 웹 페이지에 나타나는 HTML 문서 전체를 객체로 표현한 것 으로 생각하면 됩니다. 이때, 각 객체를 노트 [ Node ] 라는 용어로 표현하고, 태그는 요소 노드, 문자는 텍스트 노드로 구분됩니다. 🏕️ DOM 트리 HTML의 계층 구조는 D..

    [ JS ] JS의 TDZ란 무엇일까?

    👨‍🎓 TDZ는 무엇일까? TDZ ( Temporal Dead Zone )는 해석하면 "일시적 사각지대" 이다. 위 아래 코드를 보면서 어떤 부분에서 에러가 일어나는지 살펴보자! 첫 번째 코드 [ 인스턴스 생성 후 클래스 선언 ] const myCat = new cat('mimi') class cat { constructor(name) { this.name = name; } } 두 번째 코드 [ 함수 호출 후 함수 선언] hello('Shin') function hello (name) { return `Hello ${name} :)` } 위 두개의 코드를 실행해보면 두 번째 코드는 정상적으로 작동 하지만 첫 번째 코드를 작동시키면 ReferenceError: Cannot ac..