안녕하세요
로로봉입니다 : )
지난번엔 SELECT 조건으로 조회하는 것을 알아보았습니다.
이번엔 REST API에서 INSERT 쿼리를 처리하는 방법을 알아보도록 하겠습니다.
우선 알아야 할점은 REST API는 HTTP나 HTTPS 프로토콜을 기반으로 한 통신방법입니다.
따라서 호출 방법이 GET 방식과 POST 방식으로 나눌 수 있습니다.
GET 방식은 파라미터가 URL에 모두 노출되는 방식을 말하고, POST 방식은 패킷 내부에 숨겨져 URL에 노출되지 않고 전달하는 방식을 말합니다.
이처럼 SELECT 같은 경우에는 GET 방식으로도 큰 문제가 안되겠지만, INSERT, UPDATE, DELETE 같은 경우는 일반적으로 POST 방식을 사용합니다.
여짓껏 GET 방식은 계속 사용해왔기 때문에 POST 방식을 한번 알아보도록 하겠습니다.
1) PostMapping
POST 방식은 GET 방식과 다르게 메소드 어노테이션에 @PostMapping으로 정의해주어야 합니다.
InfoController4 클래스에 아래 메소드를 추가해보겠습니다.
@PostMapping("/peopleAdd")
public ResponseEntity<People> peopleAdd(@RequestBody People people) {
log.debug("people = {}", people.toString());
return new ResponseEntity<>(people, HttpStatus.OK);
}
People 객체를 전달받아 그대로 다시 결과로 응답하도록 하였습니다.
POST 방식은 크롬에서 제공하는 Talend API Tester 확장 프로그램을 이용해서 테스트하겠습니다.
파라미터를 패킷에 담아서 보내는 것이기 때문에 웹 브라우저에서 GET 방식처럼 호출할 수가 없습니다.
chrome 웹 스토어에서 talend api tester를 검색하여 설치해줍니다.
설치를 하게 되면 우측 상단에 체크 박스 같은 아이콘이 생깁니다.
체크 박스를 눌러주면 Talend API Tester 창이 표시되고 아래와 같이 테스트할 URL과 HEADER, BODY 부분을 작성 후 Send로 요청하면 됩니다.
JSON 데이터를 주고 받을 것이기 때문에 HEADERS 에는 Content-Type : application/json 을 넣어주어야 하고, BODY에는 People 객체와 동일한 구조의 변수명으로 작성해줍니다.
Send 버튼을 누르면 결과가 아래와 같이 표시됩니다.
이제 POST 방식으로 호출하는 방법을 알아보았으며, INSERT, UPDATE, DELETE를 POST 방법으로 등록하여 알아보도록 하겠습니다.
2) INSERT
INSERT 쿼리를 우선 만들어주겠습니다.
repository 패키지에 PeopleSql.groovy 파일을 열어서 아래와 같이 INSERT문을 추가해줍니다.
p_seq 기본 키에는 Auto Increment가 설정되어 있기 때문에 생략하였습니다.
이제 PeopleRepository 클래스에 insert 메소드를 추가해줍니다.
public People insertPeople(People people) {
KeyHolder keyHolder = new GeneratedKeyHolder();
SqlParameterSource param = new MapSqlParameterSource("name", people.getName())
.addValue("age", people.getAge())
.addValue("job", people.getJob());
int affectedRows = namedParameterJdbcTemplate.update(PeopleSql.INSERT, param, keyHolder);
log.debug("{} inserted, new id = {}", affectedRows, keyHolder.getKey());
people.setSeq(keyHolder.getKey().intValue());
return people;
}
Insert 쿼리를 실행하면서 KeyHolder를 넘겨주어 실제 생성된 데이터의 key 값을 구할 수 있습니다.
생성된 key 값을 p_seq에 넣어준 뒤 people 객체를 return 해주도록 하였습니다.
다음으로는 서비스에서 호출할 수 있도록 InfoService 클래스에 아래와 같이 호출 메소드를 추가해줍니다.
public People insertPeople(People people) {
return this.peopleRepository.insertPeople(people);
}
마지막으로 POST로 맵핑하여 호출될 수 있도록 Controller 클래스에 메소드를 추가해주어야 합니다.
InfoController4는 기존에 작업했던 내용이 있어서 새로운 클래스를 만들어서 테스트해보도록 하겠습니다.
info 클래스에서 우측 마우스를 눌러 New - Class를 선택합니다.
클래스명에 InfoController5 를 입력 후 Finish 버튼을 눌러줍니다.
생성한 클래스를 아래와 같이 작성해줍니다.
@Slf4j
@RestController
public class InfoController5 {
private InfoService infoService;
@Autowired // spring 4.3 버전 이상부터는 생략 가능
public InfoController5(InfoService infoService) {
this.infoService = infoService;
}
@PostMapping("/AddPeople")
public ResponseEntity<People> AddPeople(@RequestBody People people) {
try {
log.debug("people = {}", people.toString());
return new ResponseEntity<>(infoService.insertPeople(people), HttpStatus.OK);
} catch (Exception e) {
log.error(e.toString());
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
InfoService를 생성자로 초기화 해주고 AddPeople을 POST로 맵핑하여 작성해주었습니다.
이제 빌드 후 Talend API Tester를 이용해 테스트 해보도록 하겠습니다.
people_tbl에 데이터는 3개가 들어있습니다. REST API를 통해 데이터가 추가되는지 확인해보겠습니다.
Talend API Tester를 실행하여 아래와 같이 작성해줍니다.
Send를 눌러 실행하고 실행결과는 아래와 같이 데이터가 추가된 뒤 키 값을 포함한 people 객체가 응답되는 것을 볼 수 있습니다.
테이블을 다시 조회해보니 추가 된 것을 볼 수 있습니다.
다음 시간에는 Update에 대해 알아보겠습니다.
공감 ♥ + 구독부탁드립니다 : )
'개발 정보 > 웹개발' 카테고리의 다른 글
[웹 개발] Eclipse REST API 구현 - Swagger 3.0 설정 (8) | 2022.06.04 |
---|---|
[웹 개발] Eclipse REST API 구현 - UPDATE, DELETE문 처리 (0) | 2022.06.02 |
[웹 개발] Eclipse REST API 구현 - SELECT문 조건 조회 (0) | 2022.05.30 |
[웹 개발] Eclipse REST API 구현 - JDBC 사용하여 MySQL 연동하기 (6) | 2022.05.27 |
[웹 개발] Eclipse REST API 구현 - Service 생성 (4) | 2022.05.26 |
댓글