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

devbug·2024년 12월 6일
0

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개의 댓글