본문 바로가기
SI 업무/나만의 프로젝트 만들기

4. spring boot start with Postman

by 새로운걸 배우는게 너무 싫은 IT 복붙러 2024. 11. 23.
728x90

지난 3번째 글에서 

1) mybatis-config.xml 을 설정 했다.

2) mappers 폴더에 쿼리가 들어 있는 UserMapper.xml을 만들었다.

3) UserMapper 의 interface class 를 만들었다.

4) UserMapper 가 select 하고 값을 담을 dto class를 만들었다.


 

이번에는 Postman (UI역활) 에서 rest요청을 하면  요청을 받는 service 단을 만들고,

Spring boot 를 start 시킨후

실제 쿼리가 실행 되면서 정상 작동이 되게 하는 일을 할것이다.

 

1. Service 를 만든다.

    보통 다른 예제 보면 Controller 따로 Service 따로 만들지만 난 Controller 하나 만들고 Controller에서 

    바로 Mapper 호출 하는 구조로 갔다.

 


package com.example.myproject.biz.service;

import com.example.myproject.biz.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/api") // API 기본 경로
public class MyService {

    @Autowired
    private UserMapper userMapper;

    // ID로 사용자 정보 조회
    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable("id") int id) {
        return userMapper.getUserById(id); // MyBatis Mapper 직접 호출
    }
}

 

낯선게 또 보여서 놀래는 사람이 있을수 있다.

@PathVariable  <-- Spring 에서 쓰는 annotaion으로 Restful 요청시 요청 주소의 일부의 값이 메소드를 호출 할때
   매개 변수로 쓰여 진다는 의미이다.

위의 예는 Postman 에서 /user/13 하면 13이라는 값이 getUserById 를 호출 할때 매개변수로 정의된 id 에 담긴다는

의미로 즉 호출시 13을 넣어서 getUserById() 메소드가 호출 되는 것이다.

 

2. Postman을 설치 한다.

   설치하는 내용은 아래 링크를 참조한다.

    Postman 설치 법

 

3. Intellj 에서 myproject 를 run 시키고, Postman 에서 요청을 발생 시킨다.

 

  Intellj 에 있는 myproject 부터 run 시키기가 쉽지 않다.

  run 시키는 방법도 다양하다.

  1) maven 일때
     - 난 gradle을 이용 했으므로 이 방법은 안쓴다.

       만약 spring boot project 를 spring initializr 로 만들때 maven 을 선택 했다면 아래 처럼 명령어를 쳐보길 바란다.

./mvnw spring-boot:run

 
2) gradle 일때

./gradlew bootRun


 3) 묻고 따지지 않고 Intellj 에서 화살표 클릭

   난 2)번을 했더니 막 에러가 나서 어쩔수 없이 3번을 했다.
    쉽게 한번에 되는게 없다.

    이게 느리게 가는 내 인생인가!!!
   

  

녹색 버튼 클릭하면 실행 된다.

 

   Postman 에서 아래처럼 한다.

   -   http://localhost:8080/api/user/1

 

더보기

문득 드는 질문..
MyprojectApplication.java 라는 파일이 맨 상위 루트에 존재 하고 안에 main메소드가 존재 한다.
RESTful을 받아서 작동 할 건데도 해당 파일의 main 메소드 수정 안하고 그대로 써도 되는건가?

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyprojectApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyprojectApplication.class, args);
    }

}

 

==>답변

네, 위의 MyprojectApplication.java는 Spring Boot 프로젝트의 기본 진입점으로, Spring Initializr에서 생성된 그대로 사용해도 문제없습니다.

이 파일에서 아래 부분은 필수입니다:

  • @SpringBootApplication: 이 애노테이션은 프로젝트의 설정을 초기화하고 컴포넌트 스캔을 수행합니다.
  • public static void main(String[] args): Java 프로그램의 진입점으로, Spring Boot의 내장 서버(Tomcat)를 실행하는 역할을 합니다.
  • SpringApplication.run(...): 애플리케이션을 시작합니다.

따라서 Postman으로 요청을 처리할 때도 이 파일이 반드시 필요합니다.

 

4. DB 처리가 잘 된걸 확인 한다. 라고 쓰기 전....

  아 db에 table 을 만들지 않았다.

  아래 스크립트로 db table을 만든다.

create table users
(
id number,
name varchar2(30),
email varchar2(30)
);


insert into users(id, name, email) valueS( 1, 'robin', 'robin@wood.com');

commit;

 


과연 ..결과는..
역시 한번에 될리가 없다.

 

IT 20년 넘게 하면서 한번에 되는게 손에 꼽힌다.

 

Postman은 500번 에러를 뱉어내니

Server가 요청을 이상하게 처리 한거고

Server 는 Server 대로 알수 없는 에러를 뱉어낸다.

 

에러 잡는건 다음화에..

 

RESTful 에 대한 에러 결과

 

 

오늘도 읽어주셔서 감사합니다.

728x90