Chapter 26-1

ChangWoo·2023년 11월 27일
0

Part 26. 게시물의 조회화 첨부파일

  • 게시물의 조회에서는 첨부파일을 다운로드하거나 원본 이미지의 파일을 볼 수 있는 기능을 사용하게 된다.
  • 게시물의 조회에서 고민해야 하는 내용은 첨부파일을 한 번에 볼 것인지, Ajax를 이용해 별도로 처리할 것인지에 대한 결정이다.
  • 게시물의 정보는 tbl_board 테이블에 기록되어 있고, 첨부파일의 정보는 tbl_attach에 기록되어 있기 때문에 화면에서 두 테이블에 있는 정보를 사용하기 위해서는 다음과 같은 방식을 고려할 수 있다.
    • BoardVO 객체를 가져올 때 join을 처리해 한꺼번에 게시물과 첨부파일의 정보를 같이 처리하는 방식으로 데이터베이스를 한 번만 호출하게 되므로 효율적이지만 MyBatis 쪽에서 처리해야 하는 일이 많아진다.
    • JSP에서 첨부파일의 정보를 Ajax를 이용해 처리하는 방식으로 다시 쿼리를 처리해야 하는 불편함이 있지만 난이도가 낮고, 화면에서 처리하는 JavaScript 처리가 복잡하다.
  • 위의 방식들 중 전통적인 방식은 쿼리를 이용해 두 개의 테이블을 join 해서 처리하는 방식이다.
  • 쿼리를 한 번만 실행하기 때문에 데이터베이스의 부하를 줄여줄 수 있다는 장점이 있다.
  • join을 이용해 하나의 객체를 구성하는 방식은 조금 뒤에 나온다.
  • 예제는 Ajax를 이용하는 방식을 사용해 구성한다.
  • 가장 큰 이유는 기존에 개발해 둔 코드를 최소한으로 수정해 사용하는 것이 가능하기 때문이기도 하고, 앞에서 작성한 예제 코드를 어느 정도 사용할 수 있기 때문이다.
  • 또한, 댓글의 처리 역시 Ajax를 이용했으므로 동작 방식에 일관성을 유지하는 의도도 있다.

26.1 BoardService와 BoardController 수정

  • 게시물을 조회할 때 첨부파일을 Ajax로 처리하기로 했다면 우선적으로 서버 측에서 JSON 데이터를 만들어서 화면에 올바르게 전송하는 작업을 먼저 처리해야 한다.
  • BoardAttachMapper에서는 이미 게시물의 번호를 이용해 BoardAttachVO 타입으로 변환하는 메서드 findByBno() 메서드가 완성된 상태이므로, BoardService와 BoardServiceImpl 클래스를 수정한다.
< BoardService 인터페이스 >
package org.zerock.service;
import java.util.List;
import org.zerock.domain.BoardAttachVO;
import org.zerock.domain.BoardVO;
import org.zerock.domain.Criteria;
public interface BoardService {
	public void register(BoardVO board);
	public BoardVO get(Long bno);
	public boolean modify(BoardVO board);
	public boolean remove(Long bno);
	// public List<BoardVO> getList();
	public List<BoardVO> getList(Criteria cri);
	// 추가
	public int getTotal(Criteria cri);
	public List<BoardAttachVO> getAttachList(Long bno);	
}
  • 마지막에 getAttachList()를 추가해 게시물의 첨부파일들의 목록을 가져온다.
< BoardServiceImpl 클래스 >
	@Override
	public List<BoardAttachVO> getAttachList(Long bno) {
		log.info("get Attach list by bno" + bno);
		return attachMapper.findByBno(bno);
	}
  • BoardServiceImpl은 이미 BoardAttachMapper를 주입하도록 설계한 상태이므로, BoardAttachMapper 인터페이스의 findByBno()를 호출하고 반환하도록 작성한다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글