본문 바로가기

728x90

전체 글

(223)
[Node] 비동기 처리 - async/await Promise를 사용하여 콜백 함수의 늪에서는 빠져나올 수 있었지만 Promise도 마찬가지로 reject와 resolve 그리고 .then, .catch들을 사용하면서 눈으로 보기에 코드가 완전히 깔끔하지 않습니다. 이때 async/await를 사용하면 앞에서 나열한 함수들을 사용하지 않고 코드를 깔끔하게 유지할 수 있습니다. 또한 비동기로 진행되는 Promise를 구조적으로 동기로 진행되는 것처럼 해줍니다. 그 이유는 다음과 같습니다. Async functions can contain zero or more await expressions. Await expressions make promise-returning functions behave as though they're synchronous by..
[Error] UnhandledPromiseRejection Node를 사용하면서 async/await 구문을 사용하여 Promise를 처리하는 방법에 대한 예제를 만들던 중에 UnhandledPromiseRejection가 발생하였습니다. UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To termin ate the node process on unhandled promise rejection, use the CLI flag..
[Node] 비동기 처리 - Promise node.js를 공부하면서 비동기 처리에 대해서 배우게 되었습니다. 비동기 처리란 특정 연산이 끝날 때까지 기다려주지 않고 다음 코드를 먼저 실행하는 것을 말합니다. Promise에는 resolve와 reject 메서드가 존재합니다. resolve는 요청을 수행할 수 있을 때 실행됩니다. 이때 'then'이 존재할 경우 then을 실행합니다. reject는 요청을 수행할 수 없을 때 실행됩니다. 이때 'catch'가 존재할 경우 catch를 실행합니다. 위의 특성 때문에 promise와 같은 비동기 처리를 설명할 때 실행은 바로 하고, 결과는 나중에 받는 것이라고 말하기도 합니다. 이유는 코드를 먼저 실행하고 요청에 따라 then과 catch를 통해 결괏값을 반환받기 때문입니다. 먼저, resolve를 ..
[Node] http 모듈을 사용하여 간단한 API 만들기 express를 공부하기 전에 http 모듈만을 사용하여 간단한 API를 만들어보겠습니다. 우선, 전체적인 코드를 구조를 살펴보고 GET, POST, PUT, DELETE는 따로 알아보겠습니다. 다음은 전체적인 코드입니다. (🧨 코드가 길어 주석 부분은 따로 나누어서 설명하겠습니다) const http = require('http'); const foods = {} let index = 0; http.createServer(async (req, res) => { try { console.log(req.method, req.url); // 여기서 부터 GET, POST, PUT, DELETE 추가 } catch (e) { console.error(e); res.writeHead(500); res.end(e..
[Problem Solving] 백준 7569번 토마토 문제풀이 백준 7569번 토마토 문제풀이에 대해서 알아보겠습니다. 문제 해설은 다음의 링크를 참고해주시기 바랍니다. 문제 해설 토마토 문제는 그래프 탐색 문제입니다. 따라서 bfs를 사용하여 구현해야 합니다. 해결 방법은 다음과 같습니다. 처음 박스에 존재하는 토마토의 위치를 저장한다. 지정한 범위에 벗어나지 않은 안 익은 토마토를 찾아서 도달한 시간을 저장한다. 박스의 정보를 순차적 탐색하여 0이 존재하는지 확인한다. (5. 0이 존재한다, 6. 0이 존재하지 않는다.) -1을 출력한다. 도달한 시간의 최대값에서 1을 뺀 값을 출력한다. 위의 과정에서 도달한 시간이란 처음 토마토에서 시작하여 해당 위치까지 몇 번의 탐색 끝에 왔는지를 나타냅니다. 다음은 해결 방법에 따라 구현한 코드입니다. # 백준 No.756..
[Problem Solving] 백준 3020번 개똥벌레 파이썬 백준 3020번 개똥벌레 문제에 대한 해설과 코드입니다. 문제는 다음의 링크를 참고해주시기 바랍니다. 문제 해설 문제에서는 짝수 번째에서는 석순이 홀수 번째에서는 종유석이 등장합니다. 그렇기 때문에 석순과 종유석을 따로 계산하여 겹치는 장애물의 개수를 세워주어야 합니다. 문제 해결을 위한 과정은 다음과 같습니다. 입력받은 n을 index로 사용하여 순서에 따라 석순과 종유석에 1을 넣어준다. 석순은 0을 기준으로 오른쪽에 있는 값들을 모두 더해서 저장한다. 종유석은 h를 기준으로 왼쪽에 있는 값들을 모두 더해서 저장한다. 2, 3에 계산된 값을 answer에 더해서 저장한다. answer에서 가장 작은 값과 가장 작은 값의 수를 출력한다. 2번과 3번의 계산 결과는 각 자릿수를 지나갔을 때 파괴되는 장애..
[Error] Initialize a Spring Batch Database jobParameters의 변수를 가져와 출력하는 spring batch 코드를 작성하고 build 하는 과정에서 다음의 error를 발견하였습니다. Table "BATCH_JOB_INSTANCE" not found; SQL statement: h2 데이터베이스를 사용하였고, main 코드를 실행시켜보아도 BATCH_JOB_INSTANCE는 보이지 않았습니다. 그래서 구글을 통해 문제점을 찾아본 결과 batch를 위한 기본 테이블이 생성되지 않아 발생하는 문제였습니다. 문제 해결을 위해서는 application.properties, application.yml 파일에 다음을 추가하는 것으로 해결 가능합니다. //properties의 경우 spring.batch.initialize-schema=always..
[Spring Boot] Spring Rest Docs 사용하기 - PUT Spring Rest Docs를 사용하여 PUT을 테스트하는 방법에 대해서 알아보겠습니다. GET, POST와 마찬가지로 given, when, then의 순서로 설명하겠습니다. //given Address addressA = new Address("경기도", "테스트", "53-123"); Member member = Member.createMember("아무개", "010-6541-9815", addressA); em.persist(member); Address addressB = new Address("서울", "테스트", "53-123"); Map map = new HashMap(); map.put("address", addressB); map.put("phone", "010-1111-2222")..

728x90