Back End (16) 썸네일형 리스트형 [Java] javax.imageio.IIOException: Unsupported Image Type (CMYK타입 이미지 처리 오류) 1. 배경 - 서비스 개발 도중 특정 이미지파일을 처리하면서 에러 발생 (썸네일 생성) - 이미지 파일의 확장자는 jpg이지만 CMYK포맷으로 설정된 걸로 보임. - 에러 문구는 아래와 같다. javax.imageio.IIOException: Unsupported Image Type at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1063) at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1034) at javax.imageio.ImageIO.read(ImageIO.java:1448) at javax.imageio.Image.. [Spring] 서비스 시작 시 특정 로직 수행 - 클래스를 Spring Bean으로 등록하고, 해당 Bean의 생성자로 시작 시 수행하고 싶은 로직을 넣으면 된다. [Spring] java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value (쿠키 에러) 톰캣 서블릿 엔진에서 쿠키에 공백을 넣으려고 하면 제목과 같은 Exception이 발생한다. response 쿠키에 값을 넣을 땐 꼭 공백을 제거하자. 사실 쿠키를 넣을 땐 URI 인코딩 등 인코딩을 해서 넣도록 하자. [Spring] 자바 객체를 json String으로 변환, json String을 다시 객체로 변환 (net.sf.json) ■ 목표 - Spring 안에서 객체를 Json String으로 변환. - 변환된 Json String을 다시 객체로 변환. - 객체는 List와 다른 객체, 인터페이스로 이루어진 복잡한 객체이다. ■ 예제 아래의 간단한 클래스들을 가지고 테스트. Group 클래스의 객체를 생성 후 json String으로 변환, 다시 Group객체로 변환한다. Group은 User인터페이스를 멤버로 가지고 있다. public class Group { private User master; private List userList; //json변환 시 사용할 클래스맵 >> userList의 클래스가 SimpleUser임을 알려준다. public static Map getClassMap() { Map classMap = ne.. [Java] SimpleDateFormat 시간 포맷 HH, kk 차이 (00시가 24시로 표시될 때) ORA-01850: hour must be between 0 and 23 ■ 상황 - 서버에 아래와 같은 로그가 발생하는것을 파악했다. Error querying database. Cause: java.sql.SQLDataException: ORA-01850: hour must be between 0 and 23 ■ 원인 - Java에서 SimpleDateFormat을 통해 시간을 String으로 변환한다. - 변환한 String데이터를 후에 MyBatis를 통해 맵퍼에서 오라클 TO_DATE함수를 통해 비교한다. - 여기서 변환 시 시간 포맷을 HH 대신 kk를 사용했기 때문이다. ㄴ2021-09-23 00:23 을 202109230023 이 아니라 202109232423 으로 변환하게 된다. - 오라클에서는 24시를 지원하지 않기 때문에 에러가 발생했다. ■ 관련 참고자료.. [Linux] 특정 명령어를 특정 주기로 실행하기 ■ 개요 프로젝트 진행 중 특정 쓰레드가 무한 루프에 같혀서 로그 파일의 크기가 엄청 커졌다. 운영중이라 앱을 재시작할 수 없어 5분마다 한번 로그 파일을 삭제하는 조치가 필요했다. 그때 사용한 임시 조치방편을 포스팅한다. 이런 일이 없는 것이 제일 좋으나 어떤 일이 일어날지 모르기 때문에 .. ■ 본문 쉘 스크립트로 무한루프 파일을 만들고 sleep으로 특정 시간마다 명령어가 실행되도록 처리했다. 일단 vi편집기를 통해 autoRemove.sh 파일을 생성한다. vi autoRemove.sh 파일의 본문 내용은 아래와 같이 작성한다. #!/bin/bash while : do ls -lh /logs | grep wrapper_20210902-- 파일 용량 체크를 위해 출력 cat /dev/null > /.. [Spring] @Transactional 이 동작하지 않을 때 ■ 개요 Spring 에선 @Transactional 이라는 아주 놀라운 어노테이션을 제공한다. 트랜잭션을 쉽고 간편하게 사용할 수 있도록 추상화해놓은 어노테이션이다. 함수 머리위에 붙이기만 하면 내부적으로 트랜잭션 처리를 해 준다! --> 라고 생각했지만 @Transcational이 구현되고 동작하는 방식을 모른 채로 무작정 사용하면 원하는대로 동작하지 않는 경우가 많다. 이 글은 동작 방식을 설명하기 위한 것은 아니고,, 내가 원하는대로 트랜잭션이 걸리지 않을 경우 검토할만한 것들을 정리해 보았다. Spring에서의 @Transactional의 동작 방식은 아래 글을 참고하면 자세히 알 수 있다. (본문과도 연관됨) Spring AOP에서 Proxy란 ? (velog.io) Spring AOP에서 P.. [Spring Boot] 파일 업로드 구현(MultipartFile) + Postman을 이용한 파일 업로드 테스트 ■ 목표 - 스프링부트 프로젝트에서 Multipart File을 이용한 파일 업로드 구현. - 로컬에서 Postman을 이용한 테스트. 1. 컨트롤러에 아래의 함수를 생성한다. (내부 로직, Return값 등은 알아서 수정하기) @PostMapping("/upload") public ResponseEntity upload(@RequestPart MultipartFile file) { String originalFileName = file.getOriginalFilename(); File destination = new File("upload/dir" + originalFileName); try { file.transferTo(destination); } catch (IOException e) { retu.. 이전 1 2 다음