본문 바로가기

전체 글

(37)
[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..
[Intellij] 플러그인 추천 - Key Promoter X (단축키 알림) ■ 개요 - Intellij에서 마우스로 특정 동작을 하면 단축키를 알려주는 플러그인이다. (마우스로 그만 좀 쓰고 단축키도 써봐 하는 느낌) ■ 설치 방법 File > Settings로 이동해서 아래의 사진처럼 플러그인을 설치한다. 설치 후 IDE를 재시작한다. ■ 설치 확인 이제 특정 동작을 수행할때마다 우측 하단에 팝업 알림으로 단축키를 알려준다. (아래는 Pull을 클릭한 예시)
[Intellij] 플러그인 추천 - gitToolBox (마지막 커밋 범인색출) ■ 개요 - 프로젝트에서 여러 사람과 작업을 하다 보면.. 이상한 소스가 눈에 들어올 때가 있다. (누가 한거야?) - 이 때 범인을 찾기 위해 git 히스토리를 뒤적이게 되는데 더 쉽게 범인을 잡을 수 있는 플러그인을 소개한다. ■ 설치 방법 File > Settings로 이동해서 아래의 사진처럼 플러그인을 설치한다. 설치 완료 후 IDE 재시작 ■ 적용 확인 이제 git에 이력이 있는 파일에서 원하는 라인을 클릭하면 옆에 마지막 수정자, 수정일시, 커밋내역이 표시되게 된다. 이제 따지러 가자
[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..