본문 바로가기

분류 전체보기

(153)
프로그래머스 Level 1 - 모의고사 내 정답: def solution(answers): def one(i): return (i + 1) % 5 or 5 def two(i): if i % 2 == 0: return 2 else: if i % 8 == 1: return 1 elif i % 8 == 3: return 3 elif i % 8 == 5: return 4 else: return 5 def three(i): if i % 10 < 2: return 3 elif i % 10 < 4: return 1 elif i % 10 < 6: return 2 elif i % 10 < 8: return 4 else: return 5 answer = [] oneCount = 0 twoCount = 0 threeCount = 0 for i in range(l..
프로그래머스 Level 1 - 완주하지 못한 선수 내 정답: def solution(participant, completion): participant.sort() completion.sort() for i in range(len(participant)-1, -1, -1): if participant[i] == completion [i-1]: continue else: return participant[i] 다른 사람의 정답: collections 패키지 사용 import collections def solution(participant, completion): answer = collections.Counter(participant) - collections.Counter(completion) return list(answer.keys())[0] 해시..
프로그래머스 Level 1 - 크레인 인형 뽑기 내가 제출한 정답: def solution(board, moves): answer = 0 stack = [] def checkStack(stck): length = len(stck) if length < 2: return False elif stck[length-1] == stck[length-2]: stck.pop() stck.pop() return True return False for move in moves: for row in board: if row[move-1]: stack.append(row[move-1]) row[move-1] = 0 if checkStack(stack): answer += 2 break return answer 다른 사람의 정답들: def solution(board, m..
Node.js - Jest 를 이용한 테스팅 (Testing using Jest) Jest 서비스를 개발 완료한 후, 개발자나 QA들은 자신이 만든 서비스가 제대로 동작하는지 테스트해본다. 그러나 기능이 많다면 일일이 수작업으로 테스트하기엔 작업량이 너무 많을 수 있다. 이런 경우엔 테스트를 자동화하여 프로그램에 프로그램을 테스트하도록 할 수 있다. 테스트 기법에는 여러 가지가 있지만, 그 중 유닛 테스트, 통합 테스트, 부하 테스트, 테스트 커버리지를 살펴보자. Jest 는 페이스북에서 만든 오픈소스 라이브러리로, 테스팅에 필요한 툴들을 대부분 갖추고 있어 편리한 라이브러리다. 먼저 jest 패키지를 개발 전용으로 다운로드 받아놓자 (테스팅 툴은 개발 시에만 사용하므로). > npm i -D jest 이후 package.json 의 test 커맨드로 jest를 넣어두자. 앞으로 np..
Node.js - CORS (Cross-Origin Resource Sharing) CORS를 제대로 이해해 보자. Access-Control-Allow-Origin Access-Control-Allow-Origin 에러는 Access-Control-Allow-Origin이라는 헤더가 없다는 내용의 에러이다. 브라우저와 서버의 도메인이 일치하지 않으면 기본적으로 요청이 차단이 된다. 이 현상은 브라우저에서 서버로 요청을 보낼 때 만 발생을 하고, 서버에서 서버로 요청을 보낼 때는 발생하지 않는다. 위 로그는 실제 Access-Control-Allow-Origin 에러가 뜨는 경우이다. 보면 토큰의 Method가 POST 대신 OPTIONS로 표시되는 것을 볼 수 있다. OPTIONS 메서드는 실제 요청을 보내기 전 서버가 이 도메인을 허용하는지 체크하는 역할을 한다. CORS 문제를 해..
Node.js - API 사용량 제한 구현, express-rate-limit (API Limit) 일차적으로 인증된 사용자 (토큰을 발급받은 사용자) 만 API를 사용할 수 있게 필터를 두더라도, 인증된 사용자가 과도한 API 사용을 하게 되면 API 서버에 무리가 갈 수 있다. 따라서 일정 기간 내에 API를 사용할 수 있는 횟수를 제한하여 서버의 트래픽을 줄이는 것이 좋다. 유료 서비스라면 과금 체계별로 횟수에 차이를 둘 수도 있을 것이다. 이 기능은 express-rate-limit 패키지로 구현할 수 있다. api 서버의 미들웨어로 다음 기능을 추가해준다. const RateLimit = require('express-rate-limit'); ... exports.apiLimiter = new RateLimit({ windowMs: 60 * 1000, max: 1, delayMs: 0, han..
Node.js - API 서버를 위한 도메인 등록 (Domain for API Server) 도메인과 CORS API 서버 쪽에선 원하지 않는 사용자 또는 서비스가 자신의 API 서비스에 접속하는 것을 막기 위하여 도메인을 등록할 수 있다. 웹 브라우저에서 요청을 보낼 때, 응답을 하는 곳과 도메인이 다르면 CORS (Cross-Origin Resource Sharing) 에러가 발생할 수 있다. CORS 문제를 해결하려면 API 서버 쪽에서 미리 허용할 도메인을 등록해야 한다. 서버에서 서버로 요청을 보내는 경우엔 CORS 문제가 발생하지 않는다. CORS는 브라우저에서 발생하는 에러이기 때문이다. NodeBird의 경우를 예로 들어 사용해보자. 먼저 models/domain.js를 만들어준다. const Sequelize = require('sequelize'); class Domain ex..
Web - API API란 Application Programming Interface의 줄임말로. 다른 애플리케이션에서 현재 프로그램의 기능을 사용할 수 있게 해주는 접점을 의미한다. 웹 API는 다른 웹 서비스의 기능을 사용하거나, 자원을 가져올 수 있는 일종의 창구이다. 흔히 API를 '열었다', 또는 '만들었다' 라고 표현하는데, 이는 다른 프로그램에서 현재 기능을 사용할 수 있게 허용했음을 뜻한다. 다른 사람에게 정보를 제공하고 싶은 부분만 API를 열어놓고, 제공하고 싶지 않는 부분은 API를 만들지 않는 것이다. 또한, API를 열어놓았다 하더라도 모든 사람이 정보를 가져갈 수 있는 것이 아닌, 인증된 사람만 일정 횟수 내에서 가져가게 제한을 둘 수도 있다. 위와 같은 서버에 API를 올려 URL을 통해 접근..