본문 바로가기

IT/개발

(26)
spring 파일 업로드 매번 프로젝트에 투입될때마다 고민하고 구글링하는걸 방지하고자 작성합니다. 파일 업로드, 다운로드, 삭제에 대한 API를 정의해놓기 파일업로드는 @RequestParam으로 MultipartFile을 파라미터로 받던지 @RequestBody에 받던지 상관없고 파일을 받아서 실제 저장할 물리적 위치를 정의해준다. 1 2 3 4 5 6 7 8 9 10 11 12 13 public String upload(Long orderId, MultipartFile file) throws Exception { //파일 path를 정의해준다. Path saveRepoPath = Paths.get(rootStoragePath, fileStoragePath, String.valueOf(orderId)); //파일 데이터에서 이..
no suitable constructor found for type 에러 분석 Json데이터를 model데이터로 변환할때 no suitable constructor found for type 해당에러가 발생하는데 이유가 되는 좋은 블로그 공유 이유인 즉, Hoge hello = mapper.readValue(json, Hello.class); json데이터가 위의 class로 맵핑되는 시점에 해당 메소드를 호출하면서 default constructor를 호출하게 되는데 없으면 위와같은 에러가 발생하는것!!! interviewbubble.com/jsonmappingexception-no-suitable-constructor-found-for-type-simple-type-class-can-not-instantiate-from-json-object/ [Solved]: com.faste..
spring junit test service단에서 @value annotaion으로 properties파일에 설정되어있는 값을 불러와서 사용하는 경우가 있다. 아래와 같이 service를 하나 만들고 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @Service public class StudentService{ // 이런식으로 불러와서 값을 셋팅 @Value("${host.url}") private String host; private StudentRepository studentRepository; public StudentService(StudentRepository studentRepository){ this.studentRepository = studentRepository;..
JAVA 상대경로 JAVA에서 주로 file작업을 할때 위치를 찾는 작업을 많이합니다. / ==> root 디렉토리 ./ ==> 현재 디렉토리 ../ ==> 현재 디렉토리의 상위경로 예를들어 /var/ssc/classes/com/ssc/controller/MemberControll.class 파일이 있고 /var/ssc/load.txt 라는 파일이 있습니다. MemberController.class 파일에서 load.txt라는 파일을 찾기위해선 new File("./load.txt"); 라고 명시하면 됩니다. JAVA는 HTML에서와 다르게 ssc의 경로 즉, 프로젝트에서 경로가 시작되기 때문에 ./ ==> 현재 디렉토리로 명시하면 됩니다.
JAVA 입력과 출력 stream java.io 패키지의 개요 Provides for system input and output through data streams, serialization and the file system. 데이터 스트림을 통한 시스템 입력 및 출력 제공, 직렬화 파일시스템 stream > byte단위로 파일을 쓰고 읽는다. 즉, 우리가 서버에 업로드와 다운로드시 파일은 byte단위로 작업됩니다. 저는 Spring batch에서 csv파일을 읽어 데이터 작업을 한 후 완료파일을 excel로 만드는 작업을 했습니다. 그 엑셀은 배치완료시점에 다운받는게 아닌 엑셀파일을 FTP올리고(쓰고) 사용자가 언제든지 다운받을 수 있도록 해야했습니다. 일반적인 JSP에서의 엑셀다운로드가 아니였습니다. 1 2 3 4 5 6 7 8 ..
Spring ibatis resultMap 쿼리 2개실행 저는 ibatis에서 주로 resultType으로 resultClass를 사용했습니다. VO에 선언해주고 resultClass에 선언해주면 끝이었으니까요.(간단해서) 주석의 기능은 userVO를 단건 조회할때 user의 subject의 리스트를 가져오는 기능입니다. ex) userVO={userName=홍길동, userSeq=10, userAge=17, userGender=M, userSubjects=[Math,English,Science]} 정리하면 1. resultMap을 사용할땐 column의 값이 property의 값으로 set된다 2. resultMap안에 List변수를 선언해서 또 하나의 쿼리ID를 실행할 수 있다. 3. resultMap안에 List변수를 선언했다면 VO에 List변수를 선언..
Spring(JAVA) 엑셀 대용량 업로드 Spring으로 개발한다면 대부분은 poi 라이브러리를 사용해서 프로젝트를 진행합니다. poi 라이브러리는 너무 좋습니다. 엑셀을 파싱해서 데이터를 불러오기 때문입니다. 하지만 데이터의 건수가 많아지면 당연하게도 서버의 메모리의 사용률은 증가됩니다. 그로인해 서비스의 영향을 줄 수 있습니다. 우선 구글링을 통해 얻은 정보를 공유합니다. 로직의 여러 class들이 어떤 기능을 하는지는 추후 추가하도록 하겠습니다. 아래 소스는 실제 엑셀이 파싱되는 부분을 구현한겁니다.(구글링참고) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46..
스프링 form태그 왜 써야할까? > 편합니다. 불필요한 작업을들 안하게 해줍니다. 어떤 점이 좋은걸까? > 불필요한 작업들 즉, 페이지 이동시마다 selectbox 컴포넌트에 값을 셋팅해줘야 하는 번거로움을 줄여줍니다. > VO(DTO)와 이름을 같게 해주면 자동으로 값이 셋팅됩니다. 사용방법 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Y N /* 여기서의 ${typeCd} 는 controller에서 model을 통해 전달된 리스트 */ 선택 Colored by Color Scripter cs 위의 소스코드를 보시면 아시겠지만 공통적으로 path에 VO와 같이 naming해주면 자동으로 값이 셋팅되서 ajax, submit을 할때 편리합니다. 감사합니다.