본문 바로가기

728x90

Java, JavaScript

(33)
[Spring Boot] 외부 API 정보 가져오기 RestTemplate는 HTTP 요청을 동기 방식으로 실행하는 것으로 json이나 xml과 같은 일반적인 template에 대해 간편하게 응답을 받을 수 있습니다. RestTemplate는 다음의 함수를 제공합니다. method http description getForObject GET 주어진 URL로 GET 방식을 사용하여 responseType으로 결과를 받는다. getForEntity GET 주어진 URL로 GET 방식을 사용하여 ResponseEntity로 결과를 받는다. 다은은 getForObject 함수를 사용하여 외부 API 경로의 결과를 Item.class 타입으로 받는 예제입니다. private Item[] getItemList() { String url = "외부 API 경로"; R..
[Spring Boot] dto의 toEntity를 어떻게 사용해야할까? POST, PUT과 같이 서버의 리소스를 생성, 수정할 경우에 dto의 toEntity 함수를 어떻게 작성하면 좋을지에 관한 고민입니다. 게시글 작성 예시를 중심으로 살펴보겠습니다. 게시글을 작성할 때에는 제목, 설명 그리고 작성자가 필요합니다. 게시글을 작성 과정은 다음과 같습니다. 회원은 로그인을 진행한다. 로그인에 성공하면 JWT 토큰을 발급받는다. 게시글 작성 폼에 들어와서 제목과 설명글을 작성한다. 게시글 작성하기 버튼을 클릭하여 게시글 정보를 서버에 저장한다. 위의 과정을 토대로 dto를 설계할 때에 제목과 설명은 다른 entity와 관계가 없기 때문에 문제가 되지 않습니다. 문제가 되는 부분은 회원과 관계를 가지는 작성자 부분입니다. 작성자를 고려한 dto 설계는 크게 2가지가 있습니다. d..
[Error] ids for this class must be manually assigned before calling save() 게시글에서 구성원들을 설정하는 기능을 개발하여 테스트를 하던 도중에 다음의 error가 발생하였습니다. nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): backend.core.domain.Staff error 발생 원인은 EntityManage.save() 함수를 호출하기 전에 id 값이 설정되어 있어야 한다는 것입니다. 따라서 Staff.java의 id 값 설정에 문제가 있을 것을 알 수 있었습니다. 문제 해결을 위해서 Staff.java 파일을 열어 id 값을 확인해본 결과 다음의 코드가 작성되어 있었습니다...
[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..
[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..
[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")..
[Spring Boot] Spring Rest Docs 사용하기 - POST GET 방식에 이어 이번에는 POST를 사용한 테스트를 진행해보겠습니다. GET 방식과 마찬가지로 given, when, then 순서로 설명하겠습니다. 먼저 Member POST의 given입니다. //given Address address = new Address("경기도", "테스트", "544-54"); Map map = new HashMap(); map.put("name", "홍길동"); map.put("phone", "010-5424-6542"); map.put("address", address); member 등록을 위해서는 name, phone, address가 필요합니다. 따라서 필요한 데이터의 Key와 Value를 map에 저장해줍니다. //when ResultActions result..

728x90