지금까지의 업로드는 을 통해서 이루어지기 때문에 아래의 작업이 필요하다 업로드 후 업로드부분을 초기화시키는 작업 결과데이터를 이용해서, 화면에 섬네일이나 파일 이미지를 보여주는 작업 1.초기화 은 , 다른 DOM요소들과 조금 다르게 readonly라서, 안쪽내용을 수정할 수 없기 때문에 별도의 방법으로 초기화시켜야한다. var cloneObj = $(".uploadDiv").clone(); $("#uploadBtn").on("click", function(e){ var formData = new FormData(); var inputFile = $("input[name='uploadFile']"); var files = inputFile[0].files; console.log(files);..
파일 업로드 1. 태그 이용 브라우저의 제한이 없어야하는 경우에 사용. 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방식 을 이용해서 화면의 이동 없이 첨부파일을 처리 2.Ajax를 이용 첨부파일을 별도로 처리 을 이용하고 Ajax로 처리 HTML5의 Drag and Drop기능이나 jQuery라이브러리를 이용해서 처리하는 방식 파일업로드시 고려할 점 1.동일한 이름으로 업로드되었을 때 기존파일이 사라지는문제. 2.이미지파일의경우, 원본파일의 용량이 큰 경우 섬네일이미지를 생성해야 하는 문제 3.이미지파일과 일반파일을 구분해서 다운로드, 혹은 페이지에서 조회하도록 처리해야하는 문제 4.첨부파일공격에 대비하기위한 업로드파일의 확장자 제한 파일 확장자, 크기 사전 처리 var regex = new ..
@Transactional 어노테이션 속성들 1.전파(Propagation) 속성 PROPAGATION_MADATORY : 작업은 반드시 특정 트랜잭션이 존재한 상태에서만 가능하다. PROPAGATION_NESTED : 기존에 트랜잭션이 있는경우, 포함되서 실행. PROPAGATION_NEVER : 트랜잭션 상황 하에 실행되면 예외발생. PROPAGATION_NOT_SUPPORTED : 트랜잭션이 있는경우, 트랜잭션이 끝날때까지 보류된 후 실행. PROPAGATION_REQUIRED : 트랜잭션이 있으면, 그 상황에서 실행. 없으면 새로운 트랜잭션 실행.(기본설정) PROPAGATION_REQUIRED_NEW : 대상은 자신만의 고유한 트랜잭션으로 실행. PROPAGATION_SUPPORTS : 트랜잭션..
스프링에서의 트랜잭션 관리 트랜잭션은 한번에 이루어지는 작업의 단위 트랜잭션의 성격을 ACID원칙으로 설명한다.(Atomicity, Consistency, Isolation, Durability) 1.원자성(Atomicity) 하나의 트랜잭션은 하나의 단위로 처리되어야 한다. 어떤 트랜잭션이 A, B로 구성된다면, A, B의 처리결과는 항상 동일한 결과여야 한다. A 는 성공했지만, B는 실패했을 경우 A, B는 원래 상태로 되돌려져야만 함. 2.일관성(Consistency) 트랜잭션이 성공했다면, 데이터베이스의 모든 데이터는 일관성을 유지해야만 한다. 트랜잭션으로 처리된 데이터와 , 일반 데이터 사이에는 전혀 차이가 없어야한다. 3.격리(Isolation) 트랜잭션으로 처리되는 중간에, 외부에서의 간섭..
AOP 실습 및 테스트 AOP실습을 위해 Spring Legacy Project 생성 1.프로젝트에 패키지를 생성하고 테스트를 위한 Service Interface와 Class 구현 SampleService 인터페이스 내용 package org.sample.service; public interface SampleService { public Integer doAdd(String str1, String str2) throws Exception; } SampleServiceImpl 클래스 package org.sample.service; import org.springframework.stereotype.Service; @Service public class SampleServiceImpl implemen..
AOP AOP기능은 주로 일반적인 JAVA API를 이용하는 클래스(POJO)들에 적용한다. Controller에 적용이 불가능한 것은 아니지만, Controller의 경우에는 인터셉터나 필터 등을 주로 이용. 스프링의 AOP는 AspectJ라는 라이브러리의 도움을 받기 때문에, 스프링 버전에 맞게 AspectJ버전을 변경. 5.0.7.RELEASE 1.9.0 1.7.25 AOP설정과 관련해서 사용하는 라이브러리인, AspectJ Weaver 를 추가 org.aspectj aspectjweaver ${org.aspectj-version} 스프링 프로젝트에 AOP를 설정하는것은, 스프링 2.x버전 이후에는 자동으로 proxy 객체를 만들어주는 설정을 추가(root-context.xml 의 Namespace..
AOP 용어 정리 1.Target 부가기능을 부여할 대상.(핵심기능을 담당하는 Service들 ) 2.Aspect 부가기능 모듈을 Aspect라고 부름(핵심기능에 부가되어 의미를 갖는 모듈) 부가될 기능을 정의한 Advice와, Advice를 어디에 적용할지를 결정하는 Pointcut을 함께 갖고있음. 어플리케이션의 핵심적인 기능에서, 부가적인 기능을 분리해서 Aspect라는 모듈로 만들어서 설계하고 개발하는 방법 3.Advice 실질적으로 부가기능을 담은 구현체. 타겟 오브젝트에 종속되지 않기 때문에, 부가기능에만 집중할 수 있음. Aspect가 무엇을 언제 할 지를 정의 4.PointCut 부가기능이 적용될 대상(method)을 선정하는 방법 Advice를 적용할 JoinPoint를 선별하는 기능을 ..
REST API 사용 하나의 URI는 하나의 고유한 Resource를 대표하도록 설계된다는 개념에, 전송방식을 결합해서 원하는 작업을 지정. @RequestMapping, @ResponseBody 와 같이 REST방식의 데이터 처리를 위한 여러 어노테이션이 있음. @RestController Controller가 REST방식을 처리하기위한 것임을 명시 @ResponseBody 일반적인 JSP와 같은 뷰로 전달되는게 아닌, 데이터 자체를 전달하기 위한 용도로 쓰임 @PathVariable URL 경로에 있는 값을 파라미터로 추출하기 위해 사용 @CrossOrigin Ajax의 크로스도메인 문제를 해결하기 위해 사용 @RequestBody JSON 데이터를 원하는타입으로 바인딩
Controller의 리턴타입 정리 String : jsp를 이용하는경우 jsp파일의 경로와 파일 이름을 나타내기 위해 사용 void : 호출하는 URL과 동일한 이름의 jsp를 의미 (@ResponseBody 가 있어야 함) VO, DTO타입 : 주로 JSON타입의 데이터를 만들어서 반환 (@ResponseBody 가 있어야 함) ResponseEntry타입 : response할 때 http 헤더정보와 내용을 가공하는 용도로 사용 Model, ModelAndView : Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용 HttpHeaders : 응답에 내용없이 http헤더메시지만 전달하는용도로 사용