카테고리 없음
PUT , PATCH Method API 구현
doridam
2023. 6. 21. 15:53
이전 포스트에서는 POST 메소드 구현 및 @Vaild 를 사용한 유효성 검증을 해봤다.
이번에는 PUT, PATCH 메소드 구현을 알아보자.
PUT 과 PATCH 의 차이
HTTP 메소드에서 업데이트 역할을 하는 메소드는 PUT과 PATCH 가 있다.
둘의 차이점은 리소스의 전체를 업데이트를 하느냐 또는 일부를 업데이트 하느냐로 나뉜다.
PUT의 경우 리소스의 전체를 업데이트 하며, 경우에 따라서 리소스 생성까지 한다.
PATCH의 경우 리소스의 일부를 업데이트 하는 용도로 사용된다.
프로젝트 환경설정
Framework : SpringBoot 2.7.12 | JDK : JAVA 11 | IDE : IntelliJ | DB : OracleDB | build Tool : Gradle
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation group: 'com.auth0', name: 'java-jwt', version: '4.0.0'
#Application.properties
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=C##APITEST
spring.datasource.password=APITEST
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
mybatis.mapper-locations=mapper/*.xml
mybatis.type-aliases-package=com.newbie.training
mybatis.configuration.map-underscore-to-camel-case=true
PUT Method 구현
이전 포스트에서는 POST를 사용해 게시글을 등록하는 간단한 API를 구현했다.
PUT의 경우 리소스를 업데이트 하거나, 해당하는 리소스가 없을 경우 생성한다.
게시글에 좋아요를 없을 경우 생성하고, 있을 경우 업데이트 하는 기능을 구현했다.
테이블 스키마는 USER_ID, POST_NO 를 복합키로 구성하고 LIKE_STATUS 좋아요 여부를 1 또는 0 으로 설정한다.
USER_ID 와 POST_NO 를 AND 조건으로 조회시 값이 없을 경우 해당 값을 기반으로 INSERT 를 수행하고
만약 값이 있을 경우 LIKE_STATUS 좋아요 여부를 1 > 0 , 0 > 1 로 업데이트 한다.
코드
Controller는 PUT /post/like/{postNo} 로 요청을 받는다.
PathVariable로 postNo와 @RequestBody로 Like 객체로 userId 를 받는다.
두개의 변수를 likeParam으로 생성 후 Service로 전달 후 Service에서는 likeParam을 가지고 Repository의
selectLikeByIdnNo를 통해 값을 조회한다.
값이 있을경우 조회한 like 객체로 값을 기반으로 LIKE_STATUS를 0 또는 1 로 업데이트 하고
값이 없을경우 likeParam 을 사용해서 insert를 한다.
생성 또는 업데이트에 따라 ReponseEntity 를 200 또는 201 로 리턴한다.
실행
DB에 데이터가 없을때 postNo = 6, userId = userA 로 요청했을때 생성 완료라는 메시지와 함께
리소스 생성이 완료되었다.
만약 데이터가 있을때 동일한 요청을 보낸다면 요청 성공과 함께 LIKE_STATUS가 1에서 0으로 업데이트 된것을 확인할 수 있다.
PATCH Method 구현
PATCH 메소드의 경우 리소스의 부분 수정시 사용한다.
게시글의 제목과 내용을 수정하는 API를 구현했다.
PathVariable을 통해 받은 postNo를 가지고 findPostByNo 메소드로 업데이트할 기존 게시글을 조회한다.
만약 기존 게시글이 없을 경우 404 Not Found 를 반환하며
있을 경우
Post 객체로 받은 게시글의 정보를 가지고 Service와 Repository를 거쳐 업데이트를 한다.
업데이트에 성공한 경우 200 OK를 리턴한다.
실행
요청 성공 후 데이터 수정이 잘 끝난것을 확인했다.
만약 없는 번호인 8 로 요청할 경우 404 에러 발생되는것을 확인했다.