
접속자의 로그를 남기려고 HttpServletRequest 의 getRemoteAddr() 을 호출해보았다. public static String getClientIP(HttpServletRequest request) { ... return request.getRemoteAddr();} 내가 아는 장비에서 테스트 해보면 ... 뭔가 정확한 ip 주소가 나오지 않았다. 그 이유는 getRemoteAddr() 은 직접적인 IP만 반환하며, 프록시나 로드밸런서 또는 그 외 다른 네트워크 장비를 탄다면 실제 ip 주소를 얻기는 힘들다. 그래서 요청헤더의 정보를 받아 아래와 같이 실제 클라이언트의 ip 를 얻을 수 있다. import javax.servlet.http.HttpServletReque..

이번에 poi 라이브러리 버전으로 이슈를 겪어 남겨본다. 내부에 ibSheet8 이라는 그리드를 사용하는데해당기능에서 엑셀다운로드 기능이 포함되어 있어 사용하게 되었다. ibsheet 측 개발문서에 보면poi 3.13 버전과 poi4.1.2 버전에 대해 구분을 지어놓았다. 당연히 나는 poi 3 버전은 보안취약점이 존재하는 버전이라자연스럽게 4.1.2 를 채택하여 디펜던시를 추가하였다.(애초에 인텔리제이에서도 4.1.1 이상으로 업데이트 하라고 표기됨...) 인텔리제이에서 개발하고 테스트할때 까지는 문제가 없었다. 동작을 아주 잘 했기 때문.허나 운영에 배포하자 엑셀 스타일이 적용이 안되는 것을 확인하였다. 처음엔 엑셀 요청자체가 Response 200 으로 응답되서 오류가 없는줄 알았느나로그열..

매번 같은 형태의 데이터를 각 메뉴마다 지속적으로 사용한다면큰 부하는 아니지만 DB에 수시로 접근하여 조회를 해와야 한다. 여기서 복잡도가 올라가게 되고 조회해오는 항목들이 방대해지면 이제 점차적으로 DB에 부하를 야기하게 될 것이다. 그래서 반복 호출 되는 이러한 것들을 기존에 사용하고 있는 Redis 활용하여 cache 로 사용하고자 한다. 심플하게 한번 적용해보자Redis data 를 build.gradle 에 추가한다.implementation 'org.springframework.boot:spring-boot-starter-data-redis' application 프로퍼티에 redis 를 설정한다(필자는 기존에 redis session을 사용하고 있어서 되어있었다.)spr..

운영서버에 로그파일을 계속 만들게 되면언젠가 용량이 너무 많아서 디스크제한에 문제가 발생하게 된다. 그래서 적당한 시점에 로그파일을 압축한 뒤 보관하거나오래된 로그파일을 삭제하도록 설정해줘야 할 필요가 있다. 나는 간단하게 로그파일이 기준 용량을 넘으면 압축해서 보관하고 히스토리 갯수가 일정갯수 넘어가면 지우게끔 처리하였다. // application.yml...---spring: config: activate: on-profile: was1 logging: level: root: info file: name: /data/log/was1.log logback: rollingpolicy: max-file-size: 10MB max-hi..

날짜포맷의 데이터만 있을 때, 날짜형식의 데이터만 있을 때, 주간 요일을 표현해줘야 하는 방법은 아래와 같다. ${#temporals.format(#temporals.createDate(data.today, 'yyyy-MM-dd'), 'EE', 'ko')}${#temporals.format(#temporals.createNow(), 'EE', 'ko')} 문자형식의 날짜는 createDate 를 이용해서 날짜로 변환 해줘야 한다. 날짜 패턴에서 E 는 주간요일을 뜻하는데 EEEE 를 쓸 경우 주간요일 풀네임,EEE, EE, E 를 쓸 경우 주간요일 단축네임이다. locale 을 'ko' 로 하면 한글로 'en' 으로 하면 영문으로 표기 된다. 위 이미지 처럼 사용하기 위해 코드를 ..

Springboot 프로젝트 진행 중에 외부 라이브러리를 빌드시스템 없이 수동 추가하게 되어 남겨본다. 프로젝트 root 하위에 libs 폴더를 만들고 수동 등록할 jar 파일을 추가하였다. build.gradle 에 아래와 같이 작성하고 gradle refresh 해주면 끝. 나는 libs 폴더 하위 라이브러리를 전부 보라고 지정했다. implementation fileTree(dir: 'libs', includes: ['*.jar']) 파일별로 단독 지정하고 싶으면 아래와 같이 작성해줘도 된다.implementation files('libs/ibsheet8-1.1.4.jar') gradle dependency 하위에 directory 'libs' 가 생성된 것을 확인 ..