java, spring

[Spring] 게시물에 첨부파일 등록하기 - 2 -

isaac.kim 2021. 8. 29. 21:39
728x90
반응형

[Spring] 게시물에 첨부파일 등록하기 - 2 -

 

이전 글

2021.08.29 - [Spring] - [Spring] 게시물에 첨부파일 등록하기 - 1 -

 

이 글은 이전 글에 이어서 작성하는 글입니다.

 

게시물 등록과 첨부파일의 데이터베이스 처리

게시물이 등록될 때 첨부파일과 관련된 자료를 같이 전송하고, 이를 데이터베이스에 등록합니다. 게시물의 등록은 <form> 태그를 통해 이루어지므로, 이미 업로드된 첨부파일의 정보는 별도의 <input type='hidden'> 태그를 생성해서 처리합니다.

 

이를 위해서는 첨부파일 정보를 태그로 생성할 때 첨부파일과 관련된 정보(data-uuid, data-filename, data-type)를 추가합니다.

<input type='hidden'> 으로 처리된 첨부파일의 정보는 BoardVO로 수집됩니다.

 

BoardVO 클래스

BoardVO에는 attachList라는 이름의 변수로 첨부파일의 정보를 수집하기 때문에 <input type='hidden'>의 name은 'attachList[인덱스번호]'와 같은 이름을 사용합니다.

 

JSP 화면에서 Javascript를 이용해서 기존에 <form> 태그를 전송하는 부분을 아래와 같이 수정합니다.

 

register.jsp의 일부

브라우저에서 게시물 등록을 선택하면 이미 업로드된 항목들을 내부적으로 <input type='hidden'> 태그들로 만들어서 <form> 태그가 submit될 때 같이 전송되도록 합니다.


BoardController, BoardService의 처리

파라미터를 수집하는 BoardController는 별도 처리 없이 전송되는 데이터가 제대로 수집되는지 확인합니다.

BoardController 클래스

테스트

업로드한 파일의 값들이 제대로 넘어간 것을 확인할 수 있습니다.

 

BoardServiceImpl 처리

BoardMapper와 BoardAttachMapper는 이미 작성해 두었기 때문에 BoardServlceImpl에서 두 개의 Mapper 인터페이스 타입을 주입하고, 이를 호출하는 일입니다. 2개의 Mapper를 주입받아야 하기 때문에 자동주입 대신에 Setter 메서드를 이용하도록 수정합니다.

 

 

<BoardServiceImpl 클래스 수정 전>

수정 전

<BoardServiceImpl 클래스 수정 후>

수정 후

게시물의 등록 작업은 tb_board 테이블과 tb_attach 테이블 양쪽 모두 insert가 진행되어야 하기 때문에 트랜잭션 처리가 필요합니다. 

 

BoardServiceImpl 클래스의 일부

BoardServiceImpl의 register( )는 트랜잭션 하에서 tb_board에 먼저 게시물을 등록하고, 각 첨부파일은 생성된 게시물 번호를 세팅한 후 tb_attach 테이블에 데이터를 추가합니다. MyBatis 쪽에 문제가 없다면 데이터베이스의 tb_attach 테이블에 여러 파일이 등록되었을 때 아래와 같은 모습으로 출력되는 것을 볼 수 있습니다.

 

실행 결과

 


게시물과 첨부파일의 등록 그리고 트랜잭션 처리 등에 대해 알아보았습니다.

728x90
반응형