coding 97

supertest 테스트 코드 작성

지난 포스팅에선 단위 테스트에 많이 쓰이는 jest의 간단한 사용법과 모킹 함수가 무엇인지 정리했다. 이번에는 통합 테스트에서 많이 사용하는 supertest를 알아보겠다. supertest란 ExpressJS 통합 테스트용 라이브러리 내부적으로(가짜로) 익스프레스 서버를 구동시켜 가상의 요청을 보낸 뒤 결과를 검증한다. 기능을 검증하는 단위 테스트들의 상호 연결이 잘 되었는지 확인하는 통합 테스트에서 사용한다. API 서버를 만들고 HTTP 검증 도구로 슈퍼 테스트를 사용한다 supertest 설치 및 설정 1. 설치 npm i supertest -D 2. 테스트 데이터 베이스 설정 jest는 데이터베이스에 접근하지 않기 위해 모킹 함수를 써서 했다 치고 하고 값을 지정해주어 넘어갔지만, 통합 테스트는..

coding/JS 2022.08.11

jest 테스트 코드 작성 방법

테스트 코드가 무엇인지 어떤 종류가 있는지는 지난 포스팅에서 언급했기 때문에 이번엔 실제 그 테스트 코드를 작성하는 방법과 어떻게 코드를 짜야하는지에 대해서 알아보겠다. 간단하게 정의만 집고 가자면 테스트 코드란 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드 테스트 코드의 종류 - 단위 테스트(유닛 테스트) 가장 작은 규모의 기능을 테스트 - 통합 테스트 여러 가지 기능을 합쳤을 때 생시는 문제를 방지하기 위한 테스트 - E2E 테스트(end-to-end 테스트) 백앤드부터 시작해서 최종적으로 웹페이지가 원하는 대로 동작하며 원하는 데이터를 잘 보여주는지 확인 jest란 jest란 페이스북에서 만들어서 리액트와 더불어 많은 js 개발자들이 사용하고 있는 테스팅 라이브러리이다. 주로 단위 테스..

coding/JS 2022.08.11

Side effect, Decoupling, 디자인 패턴

side effect 사전적 정의 : 부작용 프로그래밍의 side effect 사전적 정의와 다르게 프로그래밍의 사이드 이펙트는 꼭 부정적인 말은 아니다. 예상한 결과와 다르게 결과가 다르게 나타나는 현상을 말한다. 실행 도중 어떠한 객체를 접근해서 변화가 발생하는 행위 함수를 실행할 때 return 값과는 별개로 발생하는 프로그램 상태 변경 개발 영역에서는 버그라고 하기도 한다. 구현하고자 하는 형태의 기능이 동작이 되지 않고, 어떠한 다른 요인으로 인해서 동작을 못하거나 값이 다른 올바르게 나오지 않는 여러 가지 상황을 사이드 이펙트라고 한다. 빈 구문이 아니라면 반드시 하나의 사이드 이펙트를 가져야 한다. 빈 구문이 아닌데 사이드 이펙트가 일어나지 않는 구문은 일반적으로 프로그래밍 에러를 가리킨다...

coding/IT, CS 2022.08.10

class의 호이스팅

hoisting이란? 변수와 함수의 선언문을 해당 스코프의 꼭대기로 끌어올리는 동작을 의미한다. 이 과정에서 선언문 자체는 옮겨지지만, 함수 표현식의 대입문을 포함한 모든 대입문은 끌어올려지지 않는다. 예시 console.log(a) // undefiend var여서 호이스팅 됬지만 undefiend로 초기화 상태 var a = 1; console.log(a) // 1 1로 초기화 상태 console.log(b) // Uncaught ReferenceError: b is not defined let b = 1; console.log(c); // ReferenceError const c = '1'; print() // d function print() { console.log('d') } print2() ..

coding/JS 2022.08.09

객체지향 class (ES5/ES6)

Class 객체를 생성하는 생성자 함수 js에서는 class가 생성자 함수 역할을 대신함 ES6에서 class 개념 추가 객체 생성 : object 생성법 / class 생성법 object 생성법 : 붕어빵을 하나하나 만드는 방법 class 생성법 : 붕어빵 틀을 만들어 틀을 이용해 붕어빵을 찍어내는 방법 object 생성법으로 객체 만들기 var potBung = { base : '밀가루'; flavor : '팥'; } var chouxBung = { base : '쌀가루'; flavor : '슈크림'; } var pizzaBung = { base : '튀김가루'; flavor : '피자'; } . . . 비슷한 객체를 만든다면 object 생성법은 하나하나 직접 작성을 해줘야 하는 단점이 존재한다. ..

coding/JS 2022.08.09

테스트 코드 종류와 테스트 피라미드

테스트 코드란 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드 테스트 단위가 좀 더 쪼개질수록 어느 부분에서 에러가 발행했는지 좀 더 찾기가 쉬워진다. 테스트 코드의 종류 - 단위 테스트(유닛 테스트) 가장 작은 규모의 기능을 테스트 - 통합 테스트 여러 가지 기능을 합쳤을 때 생시는 문제를 방지하기 위한 테스트 - E2E 테스트(end-to-end 테스트) 백앤드부터 시작해서 최종적으로 웹페이지가 원하는 대로 동작하며 원하는 데이터를 잘 보여주는지 확인 TDD Test Driven Development의 약자로 테스트 주도 개발이라고 한다. 작은 단위의 테스트 코드를 작성하고, 이를 통과하면, 코드를 추가하는 단계를 반복하여 구현 즉, 바로 코드를 작성하는 것이 아닌, 테스트 코드를 먼저 만..

coding/IT, CS 2022.08.09

마이크로 서비스 아키텍처 도메인

마이크로 서비스 하나의 큰 애플리케이션을 여러 개의 다른 역할을 수행하는 애플리케이션으로 분리하였을 때 각 애플리케이션을 의미 마이크로 서비스 아키텍처 마이크로 서비스를 분리하여 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처 애플리케이션을 특화된 기능별로 나누게 되면 자연스럽게 애플리케이션의 추상화(abstraction)가 가능해진다. 즉, ‘인증’을 담당하는 서비스(예, auth.example.com)는 그 구체적인 구현 내용을 모르더라도 다른 서비스에서 약속된 인터페이스를 이용해 인증 과정을 수행할 수 있다. 모놀리틱 아키텍처(MONOLITHIC ARCHITECTURE) 비즈니스 로직을 담당하고 있는 애플리케이션이 존재하고, 해당 애플리케이션은 데이터베이스 등 외부 시..

coding/IT, CS 2022.08.07

node.js Controller, Service, Repository

사전 준비 Directory Structure 내 프로젝트 폴더 이름 ├── app.js ├── config │ └── config.json ├── controllers │ └── posts.controller.js ├── migrations │ └── 20220731133318-create-posts.js ├── models │ ├── index.js │ └── posts.js ├── repositories │ └── posts.repository.js ├── routes │ ├── index.js │ └── posts.routes.js ├── services │ └── posts.service.js ├── package.json └── package-lock.json controllers, servi..

coding/Node.js 2022.08.07

.gitignore .env dotenv 환경변수 설정 및 관리

.gitignore이란? git으로 관리하지 않을 파일들을 설정해 주는 파일이므로 이 안에 있는 파일들을 gitHub에 업로드되지 않는다. // .gitignore # 파일 무시 test.txt # 다음과 같은 확장자는 전체 무시 *.text *.exe *.zip # 폴더 무시 test/ gitignore 안에 작성한 파일 및 폴더는 변경사항이 있더라도 변경사항에 포함되지 않아 git commit 을 해도 반영이 되지 않는다. 당연히 push에도 영향을 받지 않는다. .env이란 환경변수를 설정한 파일 남들에게 보여서는 안 되는 정보들이 담겨있기에 이 파일이 깃 허브에 올라가 모두에게 중요한 정보를 노출되지 않도록 .gitignore 파일에 명시한다. 주로 ID, PW, secretkey 등등 중요한 정..

coding/git 2022.08.06

계층형 아키텍처 패턴(Layered Architecture Pattern)

계층형 아키텍처 패턴(Layered Architecture Pattern) 계층을 분리해서 관리하는 아키텍처 패턴이고, 현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나 단순하고 대중적이면서 비용도 적게 들어 모든 어플리케이션의 사실상 표준 아키텍처이다. 어떤 경우든 계층을 분리해서 유지하고, 각 계층이 자신의 바로 아래 계층에만 의존하게 만드는 것이 목표다. 3계층 아키텍처의 계층 -프레젠테이션 계층 (Presentation Layer) - 비즈니스 로직 계층 (Business Logic Layer) - 데이터 엑세스 계층 (Data Access Layer) 계층형 아키텍처 패턴의 장점 각 계층별로 의존성이 낮아 모듈을 교체하더라도 코드 수정이 용이하다. 각 계층별로 단위 테스트를 작성할 수 있어..

coding/Node.js 2022.08.05