REST API는 웹 서비스에서 많이 사용하는 데이터 통신 방식으로, 서버와 클라이언트 간의 데이터 요청과 응답을 HTTP 프로토콜을 통해 주고받을 수 있게 해준다. REST는 "Representational State Transfer"의 줄임말로 자원의 상태(데이터)를 표현하고 전달한다는 의미.
자원을 URI로 구분: REST에서는 서버의 데이터를 "자원"이라고 부르고, 각 자원은 고유한 URI(예: /users, /posts/1 등)로 접근할 수 있다. 이렇게 자원을 URI로 구분하므로 서버에서 어떤 데이터를 요청할지 명확하게 알 수 있다.
HTTP 메서드를 사용: REST는 주로 HTTP 메서드를 이용해서 요청의 목적을 구분한다.
GET: 데이터를 조회할 때 사용 (예: GET /users)
POST: 데이터를 생성할 때 사용 (예: POST /users)
PUT: 데이터를 수정할 때 사용 (예: PUT /users/1)
DELETE: 데이터를 삭제할 때 사용 (예: DELETE /users/1)
JSON 또는 XML 형식: REST API의 응답 데이터는 주로 JSON이나 XML 형식으로 전달된다. JSON이 더 가볍고 다루기 쉬워서 일반적으로 많이 사용됨
간단함: HTTP 프로토콜을 그대로 사용하기 때문에, HTTP를 사용할 줄 알면 REST API도 쉽게 이해할 수 있다.
유연성: REST API는 다양한 클라이언트(웹, 모바일 등)에서 접근할 수 있다. 각기 다른 플랫폼에서도 같은 규칙을 통해 서버에 데이터를 요청하고 응답받을 수 있다.
확장성: 특정 자원 URI에 여러 클라이언트가 접근해도 되기 때문에, 애플리케이션 확장이 용이하다.
예시)
만약 사용자의 정보를 얻고 싶다면:
GET 요청을 /users/1로 보내면 서버가 ID가 1인 사용자의 정보를 JSON 형식으로 응답해준다.
이렇게 REST API는 클라이언트와 서버가 간편하고 일관성 있게 데이터를 주고받을 수 있는 표준화된 방식을 제공해주는 역할을 한다.

1. boardContents.jsp에서 $.boardCommentList() 함수 주석 해제하기
댓글 기능을 구현할 차례다.

2. 하나의 주소로 하나의 표현만 하는게 REST API?
이렇게 주소 사이에 값을 넣는게 REST API라고 한다.

@RestController
@RequestMapping(value="/comment")
public class CommentController {
@RequestMapping(value="/{bidx}/commentList.aws")
public JSONObject commentList(
@PathVariable("bidx") int bidx //이걸 통해서 그 bidx값을 꺼낼 수 있다.
){
JSONObject js = new JSONObject();
return js; // 객체가 리턴된다.
}
}
3. CommentController 새로 생성해서 메서드 만들기.
commentList는 주소가 아니라 객체라서 객체를 받기위해서는 @ResponsBody를 주입시키면 된다.
하지만 댓글들은 모두 객체기 때문에 메서드마다 어노테이션을 주입시키지말고 컨트롤러 자체에 @RestController를 붙인다. 이걸 붙이면 메서드마다 @ResponsBody를 넣은것과 같다.
이 메서드를 실행하게 되면 제이슨 파일로 넘겨야하니까 객체 생성해서 넘겨주기.

package com.myaws.myapp.service;
import java.util.ArrayList;
import com.myaws.myapp.domain.CommentVo;
public interface CommentService {
public ArrayList<CommentVo> commentSelectAll(int bidx) ;
}
4. CommentService와 impl 만들고 메서드 만들기. 게시물을 모두 조회하고 댓글까지 가져오는 메서드.
package com.myaws.myapp.domain;
public class CommentVo {
private String delyn;
private String writeday;
private int cidx;
private int midx;
private int bidx;
private String ccontents;
private String csubject;
private String cwriter;
private String cip;
public String getDelyn() {
return delyn;
}
public void setDelyn(String delyn) {
this.delyn = delyn;
}
public String getWriteday() {
return writeday;
}
public void setWriteday(String writeday) {
this.writeday = writeday;
}
public int getCidx() {
return cidx;
}
public void setCidx(int cidx) {
this.cidx = cidx;
}
public int getMidx() {
return midx;
}
public void setMidx(int midx) {
this.midx = midx;
}
public int getBidx() {
return bidx;
}
public void setBidx(int bidx) {
this.bidx = bidx;
}
public String getCcontents() {
return ccontents;
}
public void setCcontents(String ccontents) {
this.ccontents = ccontents;
}
public String getCsubject() {
return csubject;
}
public void setCsubject(String csubject) {
this.csubject = csubject;
}
public String getCwriter() {
return cwriter;
}
public void setCwriter(String cwriter) {
this.cwriter = cwriter;
}
public String getCip() {
return cip;
}
public void setCip(String cip) {
this.cip = cip;
}
}
5. 도메인에서 CommentVo생성해서 안에 db와 같은 값을 넣어준다.
package com.myaws.myapp.persistance;
import java.util.ArrayList;
import com.myaws.myapp.domain.CommentVo;
public interface CommentMapper {
/* 마이바티스용 메소드. 서비스에 있는 메소드 이름을 동일하게 해서 헷갈리지 않게 한다. */
public ArrayList<CommentVo> commentSelectAll(int bidx);
}
6. CommentMapper 만들어서 서비스랑 같은 메서드 넣어주기

7. impl로 가서 보드꺼 복사해서 Comment로 수정만 해준다.
@Override
public ArrayList<CommentVo> commentSelectAll(int bidx) {
ArrayList<CommentVo> clist = cm.commentSelectAll(bidx);
return clist;
}
8. commentSelectAll 메서드만 수정해주고 나머지 메서드는 싹 다 지운다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- Mapper의 네임스페이스 설정. 해당 인터페이스와 정확히 연결하기 위해 사용-->
<mapper namespace="com.myaws.myapp.persistance.CommentMapper">
<!-- 게시글 목록 조회 쿼리 -->
<select id="commentSelectAll" parameterType="int" resultType="cv">
select * from comment where delyn='N' and bidx=#{bidx} order by cidx desc
</select>
</mapper>
9. CommentMapper.xml을 생성하고 그 안에 쿼리 만들기. board꺼를 그대로 가져와서 SelectAll만 수정해주면 된다.

10. config에서 mybatis.config에 CommentVo 추가하기

11. 컨트롤러 돌아와서 사용할 수 있게 CommentService 주입을 해준다.

@Autowired
CommentService commentService;
@RequestMapping(value="/{bidx}/commentList.aws")
public JSONObject commentList(
@PathVariable("bidx") int bidx //이걸 통해서 그 bidx값을 꺼낼 수 있다.
){
JSONObject js = new JSONObject();
ArrayList<CommentVo> clist = commentService.commentSelectAll(bidx);
js.put("clist", clist); //제이슨에 담아서 화면에 가지고 갈거에용
return js; // 객체가 리턴된다.
}
12. 객체 리턴

13. boardContents.jsp로 돌아와서 요기에 clist 넣어주기