[Spring Framework] 스프링 프레임워크와 MyBatis 연결하여 api 만들기 - Postman 을 통해 테스트 API를 JSON 타입으로 호출

devbug·2024년 12월 6일

INTRO

이제 마무리 단계이다. 컨트롤러 에서 값을 받고 보내는 내용만 만들고 호출까지 하면 완료이다. 빠르게 진행해보도록 한다.

순서
1. 스프링 프레임워크 프로젝트 생성
2. 스프링 프레임워크 MyBatis 연동
3. Postman 을 통해 테스트API를 JSON 타입으로 호출

선행작업

  • postman 설치 및 로그인



테스트 API 생성하기

Controller 설정

어노테이션에 관한 설명은 나중에 따로 다룰 것이기 때문에 지금은 작성 위주로 할 것이다. 우선 Controller 에서 @RequestBody 어노테이션을 사용하여 Json 데이터로 파라미터를 받아오도록 작성해준다.

@RestController
@RequestMapping("/*")
public class HomeController {

    @GetMapping("/sample")
    public String sample(@RequestBody SampleVO sampleVo) {
        return "hello";
    }

}

Postman 설정

위에서 작성한 @RequestBody 가 정상적으로 작동하는지 테스트해보기 위해 PostMan 에서 Parameter 를 넘겨서 확인해보기로 했다.
PostMan을 실행해서 왼쪽 Workspace 밑에 + 버튼 클릭 > Blank collection 을 눌러서 새 컬렉션을 만든다.


컬렉션 생성을 완료했으면 아래 사진에서 빨간 박스안에 컬렉션 이름을 클릭해서 이름을 변경할 수 있다. 컬렉션 이름을 변경했으면 환경 변수를 등록해주기 위해 Variables 탭을 클릭한 뒤, Variable 에 변수명을 입력하고 Initial value 와 Current value 에 주소를 입력해준다. 입력을 완료했으면 ctrl + s 를 눌러 저장해주자.


환경 변수 설정을 완료했으면 컬렉션 옆에 점 세개 메뉴 클릭 > Add request 를 클릭하여 새 request 를 생성한다.


request 의 이름을 지정해주고 메서드 타입을 지정해준다. 이제 주소를 넣어야되는데 아까 설정한 환경 변수를 가져오기 위해 {{ 를 입력해주면 아래와 같이 아까 작성한 localhost 라는 변수가 나타난다. 변수의 경우 {{ [Variable 명] }} 으로 작성하여 사용할 수 있다.


이제 주소까지 설정 완료했으면 아래 탭에서
Body 클릭 > raw > JSON 으로 지정
하면 거의 다 마무리되었다.


이제 아래 입력란에 저번에 작성한 VO 형식에 맞게 Json 형태로 입력해준다. VO 형식에 맞게 입력하는 이유는 위에 Controller 에서 @RequestBody 에 작성한 VO 타입으로 지정해주었기 때문이다.


이제 인텔리제이에서 실행한 모드를 디버깅모드로 변경하고 Controller 에 BreakPoint 를 찍어서 값이 정상적으로 들어오는지 확인해보았다.

BreakPoint 에 찍히지도 않고 400에러를 뱉어냈다. 그러고보니까 Json 형태로 변환해주는 라이브러리를 넣지 않았었다. Jackson 라이브러리를 pom.xml 에 추가해주었다.

    <!-- Java Object를 JSON으로 변환하거나 JSON을 Java Object로 변환하는데 사용하는 라이브러리 -->
    <!-- jackson-databind 라이브러리는 jackson-core 및 jackson-annotation 라이브러리의 의존성을 포함 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>

또한 servlet-context.xml 에 bean 을 추가해준다.

    <!-- Spring과 json과의 연동 설정 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>

이제 400 에러는 나지 않는데, 문제는 sampleVo 에 값이 들어오지 않았다.

SampleVO 를 HashMap<> 으로 변경해봤는데, 값이 정상적으로 들어와서 매핑 문제라고 생각했다. 그래서 SampleVO 를 수정해주고, Request 부분의 Json 도 같이 수정해주었다.

SampleVO 수정

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class SampleVO {

    String sampleNo;

    String sampleDesc;

    Date insertDate;

}

Json 수정

{
      "sampleNo" : "1"
    , "sampleDesc" : "설명 샘플"
}

이제 Request 파라미터가 정상적으로 출력됐다.


이제 Response 값만 제대로 출력되도록 처리하면 된다. Controller 에 @ResponseBody 를 붙여주고 return 타입을 SampleVO 로 지정해주었다.

    @GetMapping("/sample")
    @ResponseBody
    public SampleVO sample(@RequestBody SampleVO map) {
//        String sample_no = map.getSampleDesc();
        return map;
    }

이렇게 변경 후 실행해보았다.

정상적으로 작동했다. 이제 지난번에 연결한 Oracle 과 연결해서 작성한 쿼리를 Response 에 받아 결과로 출력해본다.

DB 데이터 출력하기

지난번에 쿼리는 작성했지만, 안에 데이터는 하나도 없는 상태이다. 우선 DBeaver 에 들어가서 테이블에 데이터를 추가해 줄 것이다. 아래 양피지 그림에 SQL이 적혀있는 내용을 클릭하면 SQL 스크립트가 나타난다. 거기에서 테이블을 조회한 뒤, 데이터를 삽입해주었다.


이제 Controller 로 돌아와서, 우선 Service 를 Controller 에 추가해주기 위해 @RequiredArgsConstructor 어노테이션을 달아주고 Service 를 final 로 달아주었다.

@RequiredArgsConstructor
public class HomeController {

    private final SampleService sampleService;

DB에서 값을 받아와서 호출할 메서드를 하나 만들어주고 실행해보았다.

    @GetMapping("/sample2")
    @ResponseBody
    public List<SampleVO> sample2(@RequestBody SampleVO map) {
        List<SampleVO> svo = sampleService.samplesql();
        return svo;
    }

생각해보니까 아까 VO 를 변경한 것 때문에 여기도 매핑이 되지 않아서 null 값이 나온다 ㅋㅋ..
어차피 테스트용도라서 삭제할거긴 한데 나중에는 request 쪽은 그냥 hashMap 으로 작성해야겠다는 생각이 들며 SampleVO를 원상태로 복구시켜놓고 다시 실행해보았다.

INSERT_DATE 는 값을 받아오지 않아서 null 인 것이고, 나머지는 제대로 값이 들어오는 것을 확인할 수 있다. 여기까지 해서 rest-api 기본 틀을 완성했다.

마무리하며

사실 여기서 끝난게 아니라 어노테이션이랑 myBatis 구문 등 작성해야될게 아직 많이 남아있다. 그러한 내용은 번외로 넣어 작성하거나 이것저것 시리즈에서 작성할 것 같다. 원래 작업을 해놓고 깃이랑 연동하고 젠킨스 써보고 할까 했는데 그렇게 만들면 사용을 못해볼거같아서 다음 게시물로 할 것 같다. 우선은 myBatis 문법이랑 어노테이션, 기타 등등 지금 시리즈를 다루면서 부족했던 내용좀 정리부터 해야겠다.. 생각하며 이번 포스트는 여기서 마친다.

0개의 댓글