본문 바로가기
728x90

Web Development/Spring Legacy15

[Spring / Legacy / JSTL / JSP] Custom Tag를 이용해 JSP에서 사용할 사용자 함수 구현하기(feat. tld파일 작성법) Spring Legacy 프로젝트에서는 JSP를 템플릿 엔진으로 흔히 사용하는데, 이 때 서버단에서 받아온 데이터를 활용하기 위해 EL과 JSTL을 사용한다. 주로 사용되는 것이 core와 functions로 각각 c와 fn으로 prefix를 등록해 , 등을 활용해 데이터를 보여준다. 그런데 가끔 Java에서 제공하는 함수를 JSP에서도 사용하고 싶은데, JSTL에서는 제공되지 않아 아쉬운 경우가 있곤 했다. 예를 들어 Java Collection 중 List는 contains 함수를 제공하는데 JSTL에서는 제공되지 않기 때문에 를 활용해 반복문을 돌려서 찾는 식으로 처리하기도 했다. 그러다 문득, model1방식으로는 Java 코드를 직접 JSP에 작성했는데, 어떤 방법이 있지 않을까하는 생각이 떠올.. 2023. 2. 28.
[Spring / Legacy] 다중 정렬 기능 구현(feat. Mapper XML 파일에서 List 처리 방법) Spring Legacy 프로젝트를 구현하면서, 정렬 기능은 흔하게 구현하는 기능이다. 간단하게는 쿼리에서 ORDER BY를 통해 쉽게 처리 가능하다. 그러나 이번에 구현할 기능은, 다중 정렬 기능이다. 별다른 기능은 아니고 여러 개를 동시에 정렬하는 기능이다. 위 이미지처럼 하나의 컬럼이 오름차순 정렬이 되어 있어도 다른 컬럼의 오름차순 정렬이 동작하는 기능이다. 여기까지만 생각하면, 그냥 리스트에 담아서 처리하거나 null 예외 처리 등으로 바로 쿼리의 ORDER BY에 대입하여 처리하면 될 것이다. 그러나 기능을 좀 더 분석해보기로 했다. 그 결과, 가장 마지막으로 선택한 Column을 최우선 순위로 하여 정렬하는 모습을 발견할 수 있었다. 당연하게도 ORDER BY는 가장 앞 순위의 컬럼부터 정렬.. 2023. 2. 7.
[Spring / API] Spring Legacy 환경에서 API KEY 관리하기(feat.properties 파일 여러 개 관리) 프로젝트를 하면서 팀원들이 각각 개발을 진행하다보니, 동일한 API의 키를 각자 신청해서 사용하고 있는 것을 알게 되었다. 이를 통합적으로 관리할 필요성을 느꼈고, 어떻게 관리하는 게 좋을지 고민했다. 일단 현재 상태에서 중요성은 낮은 편이라 깊게 고민하진 않았고, 그저 스쳐가는 생각으로, class로 처리할지, property 파일로 처리할지. 이 2가지 만을 놓고 고민했다. 둘 다 장단이 있겠지만, 결론만 말하자면 property 파일로 처리하는 방법을 선택했다. 그 이유는 다음과 같다. 1. 형상 관리를 할 때 키 정보를 제외하고 싶은 경우, property 파일만 ignore하면 되도록 설정하면 좋을 것 같았다. 2. 싱글톤 패턴 등으로 디자인한다고 해도 여기저기서 class를 호출해서 쓰는 것보.. 2022. 11. 30.
[Spring Legacy / Javascript / jsPDF] PDF 다운로드 기능 구현 - 2. 테이블 생성 A to Z (feat. jsPDF-autotable) 이 글에서는 jsPDF, jsPDF-AutoTable 라이브러리를 통해 PDF에서 테이블 생성하려고 할 때, 힘들었던 부분에 대한 모든 것을 다루고자 한다. 단순한 PDF 생성, jsPDF 사용법을 알고 싶거나, 아직 jsPDF에 대해 잘 모른다면 아래 링크 글을 참조해주시면 좋겠다. ▼ PDF 다운로드 기능 구현 - 1. 텍스트, Footer 생성 (feat. jsPDF, jsPDF-autotable, error) 에 대해 다룬 글 [Spring Legacy / Javascript / Library] PDF 다운로드 기능 구현 - 1. 텍스트, Footer 생성 (feat. jsPDF, jsPDF-autotabl 프로젝트를 진행하면서 PDF 다운로드 기능을 구현하게 되었다. 처음에는 간단하게 jsPDF.. 2022. 4. 29.
[Spring Legacy / Javascript / jsPDF] PDF 다운로드 기능 구현 - 1. 텍스트, Footer 생성 (feat. jsPDF-autotable, error) 프로젝트를 진행하면서 PDF 다운로드(PDF 작성) 기능을 구현하게 되었다. 처음에는 간단하게 jsPDF와 html2canvas 라이브러리의 조합으로 해결해보려고 했지만, 역시 간단하기만 한 것은 의도대로 사용하기가 참 힘들다. 그래서, PDF 관련 라이브러리에 대해 조사하면서 알게 된 내용을 먼저 간략히 공유하고자 한다. 더 많은 라이브러리가 있겠지만, 내가 접했던 라이브러리 목록은 다음과 같다. 1. jsPDF : PDF 파일을 생성해주는 javascript 라이브러리 2. html2canvas : 현재 브라우저 화면을 캡쳐하여(canvas에 그려) 이미지로 만들어주는 javascript 라이브러리 3. PDFMake : PDF 파일을 생성해주는 javascript 라이브러리 4. iText : PD.. 2022. 4. 29.
[Spring Legacy / Java / Javascript] AJAX로 전달한 JSONArray를 Controller(서버단)에서 파싱하기 A to Z (feat. Generic Type, JSONObject 파싱) 프로젝트에서 Javascript에서 JSON 형식으로 구성된 객체를 Array로 만들어 Controller에서 받아 처리하는 기능을 구현하게 되었다. 예를 들면, [ {num : 1, score : 90}, {num : 2, score : 80}, {num : 3, score : 70} ] 과 같은 형태의 데이터이다. AJAX로 data를 넘길 때 해당 배열 데이터를 넘기고, Controller에서 파라미터에 JSONArray 타입으로 받도록 하면 되지 않을까 싶지만, 아쉽게도 Spring이 거기까지 처리해주진 못한다. 그래서 오늘은 JSONArray 형식의 데이터를 서버단에서 받을 수 있게 처리하는 방법을 공유하고자 한다. 추가적으로, 제너릭 타입(Generic Type)을 이용해 JSONArray에서.. 2022. 4. 21.
[Spring / Legacy / Error] taglib의 http://www.springframework.org/tags 와 dispatcherservlet의 bean이 읽히지 않는 현상 Spring Legacy 프로젝트(특히, 전자정부프레임워크)를 진행하면 뜻하지 않는 많은 오류를 맞이하게 된다. 오늘은 서버 이전으로 인해 기존 프로젝트를 svn으로 내려받는 도중 bean과 uri들이 읽히지 않는 현상이 발생하여 그 해결 방법을 공유하고자 한다. 에러 발생 환경은 다음과 같다. - 사용 환경 - ◆ eGovFramework : 3.9 ◆ JDK/JRE : 1.8 ◆ 형상 관리 도구 : svn ◆ IDE : Eclipse 일단, 필자가 작업한 환경은 eGovFramework의 3.10 버전이었다. 즉, 3.10 버전에서 작업한 프로젝트를 3.9 버전으로 옮겨야하는 상황이었는데, 기존 서버에서는 버전 차이에도 불구하고 문제없이 잘 돌아갔기에 원인을 짐작하면서도 쉽게 찾지 못했다. 서버 이전.. 2022. 4. 5.
[Spring / Legacy] Spring 스케줄러 사용하기 - 2탄. Spring Quartz 이번에는 1탄의 Spring Scheduler 사용에 이어서 Spring Quartz 사용에 대해 알아보고자 한다. Spring Scheduler와 Quartz 별개이므로 Quartz를 바로 사용하고자 한다면 다시 참고할 필요는 없다. ▼ 아래는 1탄의 링크이다. 간단한 Scheduler의 기능만 사용하고 싶다면 아래의 방식으로 하는 것이 가장 빠르다. [Spring / Legacy] Spring 스케줄러 사용하기 - 1탄. Spring Scheduler Spring Scheduler, Spring Quartz에 대한 정보는 많다. 하지만 대부분 Boot 환경에 대한 정보이고, Legacy 환경에서 구축된 정보는 거의 없다. 그래서 그에 대한 정보를 공유하고자 한다. 일단 기본적인 환경 devlifete.. 2022. 3. 23.
[Spring / Legacy] Spring 스케줄러 사용하기 - 1탄. Spring Scheduler Spring Scheduler, Spring Quartz에 대한 정보는 많다. 하지만 대부분 Boot 환경에 대한 정보이고, Legacy 환경에서 구축된 정보는 거의 없다. 그래서 그에 대한 정보를 공유하고자 한다. 일단 기본적인 환경은 다음과 같다. 별다른 이유 없이 진행 중인 프로젝트 환경이 이래서 그대로 사용했는데, 구글링했을 때 Java 8 버전, slf4j가 필요하다고 했으니 필요에 따라 참고하면 될 것 같다. - Java : 1.8 - Spring Fremawork version : 3.1.1 - slf4j : 1.6.6 Spring Batch와 별개로 Scheduler와 Quartz에 대한 설명도 구글링 검색 시 잘 나와있다. 매우 간략하게 설명하자면, Scheduler가 Quartz보다 적.. 2022. 3. 18.
[Spring / Legacy] AbstractView를 활용해 파일 다운로드 기능 구현해보기 웹 프로젝트를 진행하다보면 업로드와 다운로드 기능을 거의 필수적으로 개발하게 된다. 오늘은 그 중에서 다운로드 기능에 대해서 정리해보려고 한다. File Upload 로직이 서버단에서 이루어지는 것에 비해 File Download는 뷰단에서 이루어진다. 하지만, 진짜 View인 jsp 파일을 return 하는 것은 아니다. 대신 AbstractView라는 해석 그대로 추상View 라는 클래스를 이용하여 처리한다. 우리가 AbstractView 클래스를 상속받는 클래스를 만들고 리턴하기만 하면 해당 클래스는 뷰로 취급되어 다운로드 기능이 구현되는 것이다. 바로 알아보도록 하자. [ 구현 과정 ] 우선 위와 같은 방식으로 servlet-context.xml에 ViewResolver와 DownloadView를.. 2022. 1. 21.
[Spring / Legacy / Error] Mybatis 사용 시 java.lang.NumberFormatException: For input string 에러 Spring Mybatis 프로젝트를 진행하는 도중 다음과 같은 메세지가 콘솔에 찍혔다. ### Error querying database. Cause: java.lang.NumberFormatException: For input string: "N" ### Cause: java.lang.NumberFormatException: For input string: "N" NumberFormatException 이었기 때문에 숫자로 사용되는 위치에 'N'이라는 문자열이 입력되어 발생했다는 것을 알 수 있었다. 문제는 해당 위치가 String 으로 처리되는 부분이라는 것이다. @Getter @Setter private int testId; private String testCd; SELECT * FROM TES.. 2022. 1. 12.
[Spring / Legacy / Error] Cause: org.postgresql.util.PSQLException: timestamp without time zone 자료형인데 표현식은 character varying 자료형입니다. Hint: 다시 정의하거나 형변화자를 사용해보십시오 Position: 290 프로젝트에서 PostgreSQL을 사용하면서 가끔 예상치 못한 문제를 맞닥뜨릴 때가 있다. (물론, 오히려 더 쉽게 문제를 해결할 수 있는 경우도 있다) 그 중에서도, 이번에는 나를 처음으로 당황하게 했던 문제가 있어 발생했던 에러와 해결방법을 공유하고자 한다. 해당 에러는 현재 시간을 CURRENT_TIMESTAMP로 간단하게 처리할 수 있는 timestamp 데이터 타입을 사용하게 되었을 때 발생했다. 우선, 에러의 로그는 다음과 같다. timestamp without time zone 자료형인데 표현식은 character varying 자료형입니다. 에러가 발생했던 원인은 다음과 같다. DB에서 timestamp 타입의 컬럼을, Java에서 Java.util.Date 타입으로 처리하고 있었다. te.. 2022. 1. 5.
[Spring / Legacy] Multipart multiple file의 ajax formdata를 이용한 다중 파일 업로드 multiple 속성의 File input 을 업로드하려고 하니, 문제가 발생했다. 파일을 포함한 모든 데이터를 FormData를 통해 담아서 AJAX로 서버로 전송해주는데, 아무리 받으려고 해도, 전송되는 파일 리스트의 사이즈가 계속 0인 것이다. 문제가 되는 코드는 아래와 같다 this.prcAdd = () => { let formData = new FormData(); formData.append('file', $('#file')[0].files); } $.ajax({ type : "POST", enctype : "multipart/form-data", url : "/prcAdd", cache : false, contentType : false, processData : false, data : f.. 2022. 1. 4.
[Spring / Legacy] multiple input file을 이용한 파일 전체/부분 삭제 구현 (Javascript) Spring Legacy 프로젝트를 진행하는 도중, 여러 개의 파일을 한번 에 추가해야 할 일이 있었다. 여러 개의 Single 파일을 한 줄씩 입력하게 하면 편했겠지만, 많은 파일을 한 번에 올릴 확률이 더 크기 때문에 Multiple 속성 ( '' ) 으로 구현하였다. 그러다보니 예상치 못한 문제에 부딪혔었는데, 부딪혔던 문제와 해결 방법을 기록으로 남겨 공유하고자 한다. ※ File 타입의 Input은 반드시 알아두어야 할 점이 있다. value 값을 사용자가 선택하는 것 외에 임의적으로 입력할 수 없도록 되어 있다는 점이다. 생각해보자. 코드에서 파일을 직접 입력할 수 있다면 보안 이슈가 아주 쉽게 발생하게 될 것이다. 그러니 input 밖에서 파일을 따로 처리하고 싶다면, 사용자에게 입력받은 파.. 2021. 12. 31.
[Spring / Legacy] Jasypt Library를 이용한 DB 계정 정보 암호화 프로젝트를 진행하다보면 낮은 버전의 JDK를 사용해야 할 때가 있다. 이 때, DB 계정 정보를 빠르게 암호화할 수 있는 방법이 있다. 바로 Jasypt 라이브러리를 이용하는 것이다. 버전 정보 낮은 버전의 JDK 1.8 버전 예 ) 1.8.0_151 등 (https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html) jasypt-1.9.2 jasypt-1.9.2-dist.zip (SOURCE FORGE에서 다운로드) IDE Eclipse [ 프로젝트 적용 순서 ] 1. 시스템 환경 변수 설정이 되어 있어야 한다( 기존 환경 변수가 낮은 버전이 아니라면 일시적으로 환경 변수를 변경 => cmd로 암호화 값을 받은 후 다.. 2021. 12. 23.
반응형