분류 전체보기
[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 되는것을 볼 수 있다. 쉬운건데 간혹 까먹어서 에러를 발생시킬때가 있다ㅠ 정신바짝차리자!
[30] 파일 업로드 처리 - 파일 업로드 방식
첨부파일을 서버에 전송하는 방식은 크게 태그를 이용해서 업로드하는 방식과 Ajax를 이용하는 방식으로 나눠볼 수 있다. 주로 다음과 같은 방식을 이용하는 경우가 대부분이다. 태그를 이용하는 방식 : 브라우저의 제한이 없어야 하는 경우에 사용 - 일반적으로 페이지 이동과 동시에 첨부파일을 업로드 하는 방식 - 을 이용해서 화면의 이동 없이 첨부파일을 처리하는 방식 Ajax를 이용하는 방식 : 첨부파일을 별도로 처리하는 방식 - 을 이용하고 Ajax로 처리하는 방식 - HTML5의 Drag And Drop 기능이나 jQuery 라이브러리를 이용해서 처리하는 방식 브라우저 상에서의 방식은 다양하지만 서버쪽에서의 처리는 거의 대부분 비슷하다. 응답을 HTML 코드로 하는지 아니면 JSON 등으로 처리하는지 정도..
[29] AOP와 트랜잭션 - 댓글과 댓글 수에 대한 처리
tbl_board 테이블에 replyCnt 칼럼을 추가한다 (게시물 수가 많으면 시간이 오래 걸림) 기존에 댓글이 존재했다면 replyCnt에 반영해 두어야 하므로 아래의 쿼리를 실행한다. 1. 프로젝트 수정 데이터베이스가 수정되었으므로, BoardVO 클래스와 MyBatis의 SQL, BoardService 등을 수정해 줄 필요가 있다. 이전 파트에서 작성했던 'ex03' 프로젝트를 수정한느 형태로 적용한다! 1-1. BoardVO, BoardMapper 수정 - BoardVO 댓글의 숫자를 의미하는 인스턴스 변수를 하나 추가해야 한다. - BoardMapper 인터페이스에는 새롭게 replyCnt 를 업데이트 하는 메서드를 추가해야 한다. public void updateReplyCnt(@Param(..
ERROR: org.springframework.test.context.TestContextManager - Caught exception while allowing
트랜잭션 관련 test 코드를 실행하던중 아래와 같은 오류가 발생했다 ㅠ 책보고 따라하는 중이었는데 도무지 다른점이 없어서 뭔가했더니 프로젝트에 jdbc 라이브러리가 추가되어 있지 않아서 벌어진 일이었다... INFO : org.springframework.test.context.support.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support..
[28] AOP와 트랜잭션 - 스프링에서 트랜잭션 관리
트랜잭션의 성격을 'ACID 원칙'으로 설명하곤 하는데 다음과 같다. 원자성(Atomicity) 하나의 트랜잭션은 모두 하나의 단위로 처리되어야 한다. 좀 더 쉽게 말하자면 어떤 트랜잭션이 A와 B로 구성된다면 항상 A,B의 처리 결과는 동일한 결과이어야 한다. 즉 A는 성공했지만, B는 실패할 경우 A,B는 원래 상태로 되돌려져야만 한다. 어떤 작업이 잘못되는 경우 모든 것은 다시 원점으로 되돌아가야만 한다. 일관성(Consistency) 트랜잭션이 성공했다면 데이터베이스의 모든 데이터는 일관성을 유지해야만 한다. 트랜잭션으로 처리된 데이터와 일반 데이터 사이에는 전혀 차이가 없어야만 한다. 격리(Isolation) 트랜잭션으로 처리되는 중간에 외부에서의 간섭은 없어야만 한다. 영속성(Durabilit..