댓글기능 구현하기

·2024년 11월 12일

스프링

목록 보기
26/33

REST API

REST API는 웹 서비스에서 많이 사용하는 데이터 통신 방식으로, 서버와 클라이언트 간의 데이터 요청과 응답을 HTTP 프로토콜을 통해 주고받을 수 있게 해준다. REST는 "Representational State Transfer"의 줄임말로 자원의 상태(데이터)를 표현하고 전달한다는 의미.

REST API의 주요 특징

  • 자원을 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이 더 가볍고 다루기 쉬워서 일반적으로 많이 사용됨

REST API의 장점

  • 간단함: 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 넣어주기

0개의 댓글