Spring

    [35] 파일 업로드 처리 - 게시물의 조회와 첨부파일

    게시물의 조회에서는 첨부파일을 다운로드하거나 원본 이미지의 파일을 볼 수 있는 기능을 사용하게 된다. 게시물의 정보는 tbl_board 테이블에 기록되 어있고, 첨부파일의 정보는 tbl_attach에 기록되어 있기 때문에 화면에서 두 테이블에 있는 정보를 사용하기 위해서는 다음과 같은 방식을 고려할 수 있다. BoardVO 객체를 가져올 때 join을 처리해서 한꺼번에 게시물과 첨부파일의 정보를 같이 처리하는 방식이다. 데이터베이스를 한 번만 호출하게 되므로 효율적이지만 MyBatis 쪽에서 처리해아 하는 일이 많아진다 JSP 에서 첨부파일의 정보를 Ajax를 이용해서 처리하는 방식이다. 다시 쿼리를 처리해야 하는 불편함이 있지만 난이도가 낮고, 화면에서 처리는 JavaScript 처리가 복잡하다. 위의..

    [34] 파일 업로드 처리 - 프로젝트의 첨부파일 - 등록

    기존에 작성해 두었던 게시판 프로젝트에서 필요한 패키지와 리소스 등을 복사하여 ex05에 붙여넣기하고 프로젝트가 잘 실행되는지 확인한다! pom.xml, web.xml, servlet-context.xml, root-context.xml 에서 빠진게 없는지 잘 확인한다. 1. 첨부파일 정보를 위한 준비 첨부파일이 게시물과 합쳐지면 가장 먼저 진행해야 하는 일은 게시물과 첨부파일의 관계를 저장하는 테이블의 설계가 우선이다. 게시물의 첨부파일은 각자 고유한 UUID를 가지고 있기 때문에 별도의 PK를 지정할 필요는 없지만, 게시물을 등록할 때 첨부파일 테이블 역시 같이 insert 작업이 진행되어야 하므로 트랜잭션 처리가 필요하다. 첨부파일을 보관하는 테이블은 tbl_attach로 설계한다. tbl_boar..

    [33] 파일 업로드 처리 - 첨부파일의 다운로드 혹은 원본 보여주기

    1. 첨부파일의 다운로드 이미지를 처리하기 전에 우선 좀 더 간단한 첨부파일의 다운로드부터 처리하도록 한다. 첨부파일의 다운로드는 서버에서 MIME 타입을 다운로드 타입으로 지정하고, 적절한 헤더 메시지를 통해서 다운로드 이름을 지정하게 처리한다. 이미지와 달리 다운로드는 MIME 타입이 고정되기 때문에 메서드는 아래와 같이 시작하게 된다. - UploadController의 일부 @GetMapping(value = "/download", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) @ResponseBody public ResponseEntity downloadFile(String fileName){ log.info("download file : " + ..

    [32] 파일 업로드 처리 - 브라우저에서 섬네일 처리

    브라우저에서 첨부파일의 업로드 결과가 위와 같이 JSON 객체로 반환되었다면, 남은 작업은 다음과 같다. 업로드 후에 업로드 부분을 초기화 시키는 작업 결과 데이터를 이용해서 화면에 섬네일이나 파일 이미지를 보여주는 작업 현재 업로드는 을 통해서 이루어지기 때문에 한 번 업로드가 끝난 후에는 이를 초기화 시켜주는 작업과 업로드된 결과를 화면에 반영해 줄 필요가 있다. 1. 의 초기화 은 다른 DOM 요소들과 조금 다르게 readonly라 안쪽의 내용을 수정할 수 없기 때문에 별도의 방법으로 초기화 시켜서 또 다른 첨부파일을 추가할 수 있도록 만들어야 한다. - uploadAjax.jsp에 아래 코드를 추가한다. 우선 첨부파일을 업로드 하기 전에 아무 내용이 없는 객체가 포함된 를 복사한다. 첨부파일을 업..

    [31] 파일 업로드 처리 - 파일 업로드 상세 처리

    1. 파일의 확장자나 크기의 사전 처리 최근 포털에서도 특정한 확장자를 제외한 파일들의 업로드를 제한하는 경우가 많은데, 이는 첨부파일을 이용하는 웹 공격을 막기 위해 행해지는 조치이다! 이 책의 예제에서는 첨부파일의 확장자가 'exe, sh, zip' 등의 경우에는 업로드를 제한하고, 특정 크기 이상의 파일은 업로드할 수 없도록 제한하는 처리를 JavaScript로 처리한다. 파일 확장자의 경우 정규 표현식을 이용해서 검사할 수 있다. 1) uploadAjax.jsp 파일의 확장자와 크기를 설정하고, 이를 검사하는 함수 checkExtension()을 작성해서 적용하면 아래와 같은 형태가 된다. 첨부파일을 업로드 하면 for 루프에서 checkExtension()을 호출해서 확장자와 파일의 크기를 체크..

    @GetMapping, @RequestMapping, @DeleteMapping 등이 import 안되는 에러

    간혹 여러 프로젝트를 만들고 설정할때마다 제목의 어노테이션들이 import가 되지 않을때가 있다.. 방법은 간단하다 만일 프로젝트를 Spring Legacy Project로 만들었을경우 기본적으로 스프링 3.0 버전을 사용하므로 pom.xml에서 아래와 같이 버전을 변경해주면 된다! 그러면 에러없이 import 되는것을 볼 수 있다. 쉬운건데 간혹 까먹어서 에러를 발생시킬때가 있다ㅠ 정신바짝차리자!