clone toy projects/node_express_sns 썸네일형 리스트형 테스트 커버리지 유닛 테스트를 작성하다 보면, 전체 코드 중에서 어떤 부분이 테스트되고 어떤 부분이 테스트되지 않는지 궁금해집니다. 어떤 부분이 테스트되지 않는지를 알아내어 해당 부분의 테스트 코드를 작성할 수 있습니다. 전체 코드 중에서 테스트되고 있는 코드의 비율과 테스트되고 있지 않은 코드의 위치를 알려주는 Jest의 기능이 있습니다. 이 기능은 커버리지(coverage) 기능입니다. 테스트 결과가 출력되고, 추가적으로 표가 하나 더 출력됩니다. 표의 열을 살펴보면, 각각 File (파일과 폴더 이름), % Stmts (구문 비율), % Branches (if문 등의 분기점 비율), % Funcs (함수 비율), % Lines (코드 줄 수 비율), Uncovered Line #s (커버되지 않은 줄 위치)입니다... 더보기 유닛 테스트 middlewares.js에 있는 isLoggedIn과 isNotLoggedIn 함수를 테스트해보겠습니다. isLoggedIn 함수와 isNotLoggedIn 함수를 불러와 네 개의 테스트를 작성했습니다. 아직 내용은 입력하지 않았습니다. describe 함수는 처음 보는 것일텐데요. 이 함수는 테스트를 그룹화해주는 역할을 합니다. test 함수와 마찬가지로 첫 번째 인수는 그룹에 대한 설명이고, 두 번째 인수인 함수는 그룹에 대한 내용입니다. 테스트 내용을 작성하기에 앞서 middlewares.is를 다시 보고 오겠습니다 실제 코드에서는 익스프레스가 req, res 객체와 next 함수를 인수로 넣었기에 사용할 수 있었지만, 테스트 환경에서는 어떻게 넣어야 할지 고민됩니다. req 객체에는 isAuth.. 더보기 테스트 준비하기 이번 장에서는 NodeBird 서비스에 테스팅을 적용해보겠습니다. 실제 서비스를 개발 완료한 후, 개발자나 QA들은 자신이 만든 서비스가 제대로 동작하는지 테스트해봅니다. 이 때 기능이 많다면 일일이 수작업으로 테스트하기에는 작업량이 너무 많을 수 있습니다. 이런 경우 테스트를 자동화하여 프로그램이 프로그램을 테스트하도록 만들기도 합니다. 또한, 테스트 환경과 실제 서비스 환경은 다르므로 테스트하는 데 제약이 따를 수도 있고, 테스트 결과와 실제 동작 결과가 다를 수도 있습니다. 이럴 때는 테스트 환경에서 실제 환경을 최대한 흉내내서 작업합니다. 단, 테스트를 아무리 철저하게 해도 모든 에러를 완전히 막을 수는 없습니다. 보통 에러는 개발자가 예상하지 못 한 케이스에서 발생하므로, 예상하지 못한다면 그에.. 더보기 CORS 이해하기 이전 절에서 NodeCat이 nodebird-api를 호출하는 것은 서버에서 서버로 API를 호출한 것입니다. 만약 NodeCat의 프론트에서 nodebird-api의 서버 API를 호출하면 어떻게 될까요? routes/index.js에 프론트 화면을 렌더링하는 라우터를 추가합니다. 프론트 화면도 추가 clientSecret의 {{key}} 부분이 Nunjucks에 의해 실제 키로 치환되어 렌더링됩니다. 단, 실제 서비스에서는 서버에서 사용하는 비밀 키와 프론트에서 사용하는 비밀 키를 따로 두는 것이 좋습니다. 보통 서버에서 사용하는 비밀 키가 더 강력하기 때문입니다. 프론트에서 사용하는 비밀 키는 모든 사람에게 노출된다는 단점도 따릅니다. 데이터베이스에서 clientSecret 외에 frontSecre.. 더보기 사용량 제한 구현하기 일차적으로 인증된 사용자 (토큰을 발급받은 사용자) 만 API를 사용할 수 있게 필터를 두긴 했지만, 아직 충분하지는 않습니다. 인증된 사용자라고 해도 지나치게 API를 사용하면 API 서버에 부하가 갈 수 있습니다. 따라서 일정 기간 내에 API를 사용할 수 있는 횟수를 제한하여 서버의 트래픽을 줄이는 것이 좋습니다. 유료 서비스라면 과금 체계 별로 횟수에 차이를 둘 수도 있습니다. 예를 들면 무료로 이용하는 사람은 1시간에 열 번을 허용하고, 유료로 이용하는 사람은 1시간에 100번을 허용하는 식입니다. 이러한 기능 또한 npm에 패키지로 만들어져 있습니다. 이 기능을 제공하는 express-rate-limit 패키지를 소개합니다. nodebird-api 서버에 다음 패키지를 설치합시다. npm in.. 더보기 SNS API 서버 만들기 다시API 제공자(no debird- api)의 입장으로 돌아와서 나머지API 라우터를 완성해봅시다. GET /posts/my 라우터와 GET /posts/hashtag/:title 라우터를 추가했습니다. 내가 올린 포스트와 해시태그 검색 결과를 가져오는 라우터입니다. 이렇게 사용자에게 제공해도 되는 정보를 API로 만들면 됩니다. 사용하는 측 (NodeCat) 에서는 위의 API를 이용하는 코드를 추가합니다. 토큰을 발급받는 부분이 반복되므로, 이를 함수로 만들어 재사용하는 것이 좋습니다. routes/index.js와 controllers/index.js를 통째로 바꾼다. request 함수는 NodeBird API에 요청을 보내는 함수입니다. 자주 재사용되므로 함수로 분리했습니다. 먼저 요청의 헤더.. 더보기 다른 서비스에서 호출하기 API 제공 서버를 만들었으니 API를 사용하는 서비스도 만들어봅시다. 이 서비스는 다른 서버에게 요청을 보내므로 클라이언트 역할을 하게 됩니다. API 제공자가 아닌 API 사용자의 입장에서 진행하는 것이며, 바로 NodeBird 앱의 데이터를 가져오고 싶어하는 사용자입니다. 이 사용자는 주로 데이터를 가공해 2차적인 서비스를 제공하는 회사나 개인일 수 있습니다. 예를 들어 쇼핑몰들의 최저가를 알려주는 서비스가 2차 서비스가 될 수 있습니다. 이제 우리의 2차 서비스 이름은 "NodeCat"이라고 해보겠습니다. nodebird-api 폴더와 같은 위치에 nodecat이라는 새로운 폴더를 만듭니다. 이는 별도의 서버이므로 nodebird-api와 코드가 섞이지 않도록 주의합니다. 이 서버의 주 목적은 n.. 더보기 JWT 토큰으로 인증 하기 다시 API 서비스를 제공하는 입장 (localhost:8002) 이 되어봅시다. NodeBird 앱이 아닌 다른 클라이언트가 NodeBird의 데이터를 가져갈 수 있게 해야하는 만큼 별도의 인증 과정이 필요합니다. 이 책은 JWT 토큰으로 인증하는 방법을 사용합니다. JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰입니다. JWT는 다음과 같이 세 부분으로 구성되어 있습니다. • 헤더 (HEADER): 토큰 종류와 해시 알고리즘 정보가 들어있습니다. • 페이로드 (PAYLOAD): 토큰의 내용물이 인코딩된 부분입니다. • 시그니처 (SIGNATURE): 일련의 문자열이며, 시그니처를 통해 토큰이 변조되었는지 여부를 확인할 수 있습니다. 시그니처는 JWT 비밀키로 만들.. 더보기 이전 1 2 3 다음