본문 바로가기

728x90

Java, JavaScript/Spring Boot

(15)
[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 값을 확인해본 결과 다음의 코드가 작성되어 있었습니다...
[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..
[Spring Boot] Spring Rest Docs 사용하기 - GET Spring Rest Docs는 REST API를 문서화하기 위해 사용하는 기술입니다. Spring Rest Docs는 다음의 기능을 제공합니다. Test Code를 기반으로 Test 통과 시 REST API 문서를 생성해준다. Test Code의 메서드를 사용하여 문서를 수정 및 보안할 수 있다. 따라서 Spring Rest Docs를 사용하면 Controller의 코드가 변하더라도 Test Code에 적용하기만 한다면 일일이 모든 문서를 수정할 필요가 없습니다. 🚩 Spring Rest Docs 설치 및 적용에 대해서는 언급하지 않겠습니다. (Spring Rest Docs Starter) Spring에서 REST API를 테스트하기 위해서는 Controller 마다 다음을 초기화하여야 합니다. API..
[Spring Boot] POST 요청을 사용하여 Entity 생성하기 Member Entity를 생성하는 API를 만들어보도록 하겠습니다. 테이블은 https://hangjastar.tistory.com/223를 참고하면 됩니다. Member 생성 시에는 name, phone, address를 입력받도록 하겠습니다. 다음은 Member 생성 코드입니다. @PostMapping("/api/v1/member") public CreateMemberResponse saveMemberV1( @RequestBody @Valid CreateMemberRequest request) { Member member = Member.createMember(request.getName(), request.getPhone(), request.getAddress()); Long id = member..
[Spring Boot] @RequestParam, @PathVariable 차이는 뭐야? 프로젝트를 만들면서 조회 API를 만드는 2가지 방법에 대해서 알게 되었습니다. 예를 들어 id에 맞게 반려동물의 정보를 조회한다고 한다면 크게 2가지 방법으로 나눌 수 있습니다. /api/v1/pet?id=XXX - id 파라미터를 명시해주면서 조회를 요청하는 법 /api/v1/pet/XXX - pet/ 뒤에 id를 입력하여 조회를 요청하는 법 1번처럼 요청을 할 경우에 추가적인 파라미터가 존재할 경우 /api/v1/pet?id=XXX&param=YYY와 같이 변하고, 2번의 경우에는 추가적인 파라미터가 존재할 경우 /api/v1/pet/XXX/YYY 와 같은 형태로 변형이 됩니다. 따라서 2번의 경우에는 입력받을 파라미터가 많이 존재한다면 어떤 값이 입력되는지 알기가 힘듭니다. 다음으로는 @Reque..

728x90