반응형

개발/[Spring] 블로그 만들기 32

[코드로 배우는 스프링 웹 프로젝트] 27강. 게시물의 삭제와 첨부파일

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 게시물을 삭제할 때는 게시물의 포함된 첨부파일 역시 삭제되어야 한다. 단순히 데이터베이스 상에서 삭제만 이뤄지는 것이 아닌 실제 폴더 내의 파일도 같이 삭제되어야하기 때문에 삭제 작업의 순서를 고려해야 한다. 먼저, 데이터 베이스의 삭제 작업을 처리한 후 실제 파일을 삭제하도록 할 것이다. 27.1 첨부파일 삭제 처리 첨부파일 관련 SQL은 BoardAttachMapper 인터페이스와 XML 파일에 작성해왔다. BoardAttachMapper 인터페이스에 deleteAll 인터페이스를 추가해보자. BoardAttachMapper.java package org.zerock.mapper; import java.util.List..

[코드로 배우는 스프링 웹 프로젝트] 26강. 게시물의 조회와 첨부파일

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 게시물의 조회에서는 첨부파일을 다운로드하거나 원본 이미지의 파일을 볼 수 있는 기능을 구현할 것이다. 게시물을 조회하는 방법에서는 아래 두 가지 방법 중 결정이 필요하다. 게시물의 정보는 tbl_board, 첨부파일의 정보는 tbl_attach 에 기록되어있다. BoardVO 객체를 가져올 때 join을 처리해서 한꺼번에 게시물과 첨부파일의 정보를 같이 처리하는 방식 (데이터베이스를 한 번만 호출하게 되므로 효율적이지만, MyBatis 쪽에서 처리해야하는 일이 많아짐) JSP에서 첨부파일 정보를 Ajax를 이용해서 처리하는 방식 (다시 쿼리해야하는 불편함이 있지만, 난이도가 낮고 화면에서 처리는 JavaScript 처리가 ..

[코드로 배우는 스프링 웹 프로젝트] 25강. 프로젝트의 첨부파일 - 등록

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 25.1 첨부파일 정보를 위한 준비 첨부파일 등록을 위해서는 가장 먼저 게시물과 첨부파일의 관계를 저장하는 테이블 설계가 필요하다. 게시물의 첨부파일은 각자 고유한 UUID를 갖기에 별도의 PK는 필요 없지만, 게시물을 등록할 때 첨부파일 테이블 역시 같이 insert 작업이 되어야하므로 트랜잭션 처리가 필요하다. 첨부파일 테이블 명 : tbl_attach create table tbl_attach ( uuid varchar2(100) not null, uploadPath varchar2(200) not null, fileName varchar2(100) not null, filetype char(1) default 'I'..

[코드로 배우는 스프링 웹 프로젝트] 24강. 첨부파일의 다운로드 혹은 원본 보여주기

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 한동안 회사 프로젝트로 바빠 블로그 작성에 신경을 못썼다.. 마지막 글이 3달 전이라니.. 이제 다시 개인 공부도 열심히 해야지....! 첨부파일은 크게 2가지로 분류된다. 1) 이미지 종류 (이 경우는 섬네일 이미지를 클릭하면 원본 파일을 보여주는 형태로 처리) 2) 일반 파일 (이 경우는 해당 파일의 이름으로 다운로드) 위 두가지의 다운로드를 구현해본다. 24.1 첨부파일의 다운로드 먼저, 첨부파일의 다운로드부터 구현해볼 것이다. 첨부파일의 다운로드는 서버에서 MIME 타입을 다운로드 타입으로 지정하고, 적절한 헤더 메시지를 통해서 다운로드 이름을 지정하게 처리할 것이다. UploadController.java 일부 @..

[코드로 배우는 스프링 웹 프로젝트] 23강. 브라우저에서 섬네일 처리

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 브라우저에서 첨부파일의 업로드 결과가 JSON 객체로 반환되었다면, 아래와 같은 작업이 필요하다. 업로드 후에 업로드 부분을 초기화 시키는 작업 결과 데이터를 이용해서 화면에 섬네일이나 파일 이미지를 보여주는 작업 23.1 의 초기화 은 다른 DOM 요소들과 다르게 readonly라 안쪽의 내용 수정이 불가하다. 따라서, 다른 방법으로 초기화 시켜서 다른 첨부파일을 추가할 수 있도록 만들어야 한다. 객체가 포함된 를 복사(clone)하고, 첨부파일을 업로드한 뒤에는 복사된 객체를 내에 다시 추가해서 첨부파일 부분을 초기화 해준다. uploadAjax.jsp 일부 /* 은 다른 DOM 요소들과 다르게 readonly라 안쪽의..

[코드로 배우는 스프링 웹 프로젝트] 22강. 파일 업로드 상세 처리하기 (Ajax, Thumbnailator, 섬네일 생성하기)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 22.1 파일의 확장자나 크기의 사전 처리 첨부파일을 이용하는 웹 공격을 막기 위해 특정 확장자의 파일 업로드를 제한할 필요가 있다. 예제는 첨부파일의 확장자가 'wxw, sh, zip'등의 경우레는 업로드를 제한하고, 특정 크기 이상의 파일은 업로드할 수 없도록 제한하는 처리를 JavaScript로 처리한다. uploadAjax.jsp의 일부 $(document).ready(function(){ var regex = new RegExp("(.*?)\.(exe|sh|zip|alz)$"); var maxSize = 5242880; //5MB function checkExtension(fileName, fileSize) { i..

[코드로 배우는 스프링 웹 프로젝트] 21강. 파일 업로드 방식 (form태그, Ajax방식, MultipartFile)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 첨부파일을 서버에 전송하는 방식은 크게 태그를 이용해서 업로드하는 방식과 Ajax를 이용하는 방식으로 나눌 수 있다. 태그를 이용하는 방식 : 브라우저 제한이 없어야 하는 경우에 사용 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방식 을 이용해서 화면의 이동없이 첨부파일을 처리하는 방식 Ajax를 이용하는 방식 : 첨부파일을 별도로 처리하는 방식 을 이용하고 Ajax로 처리하는 방식 HTML5의 Drag And Drop 기능이나 JQuery 라이브러리를 이용해서 처리하는 방식 서버 쪽에서의 처리는 대부분 비슷하다. 응답을 HTML 코드로 하는지, JSON 등으로 처리하는지 정도만 구분하면 된다. 시작에 앞서, 첨부..

[코드로 배우는 스프링 웹 프로젝트] 20강. 댓글과 댓글 수에 대한 처리 (트랜잭션 적용)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 게시글에 달린 댓글의 개수를 나타내기 위해 댓글 추가시, replyCnt(댓글 개수) 컬럼을 update하는 예제를 진행해본다. 먼저, tbl_board 테이블에 replyCnt 컬럼을 추가한다. (기본 값 0) alter table tbl_board add (replyCnt number default 0); 기존에 댓글이 존재했다면, replyCnt에 반영해 두어야 하므로 아래의 쿼리를 실행한다. update tbl_board set replyCnt = (select count(rno) from tbl_reply where tbl_reply.bno = tbl_board.bno); 적용 결과 20.1 프로젝트 수정 위와 같..

[코드로 배우는 스프링 웹 프로젝트] 19강. 스프링에서 트랜잭션 관리 (트랜잭션, ACID ...)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. 트랜잭션(Transaction)이란? : 한 번에 이루어지는 작업의 단위를 뜻함. (쪼갤 수 없는 하나의 단위 작업) 트랜잭션의 성격을 'ACID 원칙'으로 설명한다. 아래의 표를 참고해보자. 19.1 데이터베이스 설계와 트랜잭션 데이터베이스의 저장 구조를 효율적으로 관리하기 위해서는 '정규화' 작업을 한다. '정규화' 작업은 '중복된 데이터를 제거'해서 데이터 저장의 효율을 올리는 것을 목표로 한다. 정규화를 진행하면 1) 테이블을 늘어나고, 2) 각 테이블의 데이터 양은 줄어드는 것이 일반적이다. 정규화의 목적과 단계 별 정규화에 대해 상세히 알고 싶다면, 여기 글을 참고하면 좋다. 19.2 트랜잭션 설정 실습 스프링의..

[코드로 배우는 스프링 웹 프로젝트] 18강. AOP라는 패러다임 (Aspect-oriented programming/트랜잭션/AOP 용어 정리)

해당 프로젝트는 코드로 배우는 스프링 웹 프로젝트(개정판)을 기반으로 진행됩니다. AOP(Aspect-oriented programming)는 '관점 지향 프로그래밍'이라는 용어로 해석되는데 이때 '관점(Aspect)'는 '관심사(concern)'라는 말로 통용된다. 주로, 아래와 같이 핵심 로직은 아니지만, 코드를 온전하게 만들기 위해서 필요한 고민들이다. 파라미터가 올바르게 들어왔는가? 이 작업을 하는 사용자가 적절한 권한을 가진 사용자일까? 이 작업에서 발생할 수 있는 모든 예외는 어떻게 처리할까? AOP가 추구하는 것은 이와 같은 반복적인 부분을 '관심사의 분리(separate concerns)'하는 것이다. 즉, AOP는 개발자가 염두에 두어야하는 일들은 별도의 '관심사'로 분리하고, 핵심 비즈..