전체 글118 [JAVA] poi에서 암호화 추가에 따른 버전 업그레이드(SXSSF) 엑셀 파일을 다운로드할 때 관리자가 암호를 설정하여 암호화된 엑셀 파일을 다운로드받고 싶다는 요청이 들어왔다. 현재 엑셀 다운로드 모듈에서는 SXSSF방식을 사용하고 그에 따라 .xlsx 형식을 파일을 생성한다. .xlsx 은 바이너리 포맷이 아닌 xml 포맷이라서 그에 맞는 암호화 방식을 사용해줘야 하기 때문에 새로 코드를 작성해야 했다. SXSSF는 아래 [이미지 1] 에서 보이는 XSSF와 동일선상이므로 표에서 Yes로 보이는 방식을 사용해주면 된다. 아래 [이미지 2]가 암호화 코드다. 코드가 길고 복잡할까 싶었는데 의외로 단순하다. rc4방식은 취약점이 있고 찾아보니 대부분 agile encryption 방식을 사용하는 것 같아 적용해 보았다. "아무 문제 없겠지" 란 마음으로 복붙했는데 현재 .. 2023. 9. 23. [JS] 모던 자바스크립트 딥다이브 15장- var,let,const 키워드 ES5까지는 var 키워드만 사용하여 변수를 선언했지만, ES6에서는 var키워드의 단점을 보완하기 위해 let과 const 키워드를 사용해 변수를 선언할 수 있게 되었다. 먼저 var와 let 키워드의 차이점을 중점으로 살펴보자. var & let 1. 변수 중복 선언 허용 1) var var 키워드로 선언한 변수는 중복 선언이 가능하다. var x = 1; var y = 1; var x = 100; var y; console.log(x); //100 console.log(y); //1 초기화문이 있는 변수 선언문은 자바스크립트 엔진에 의해 var 키워드가 없는 것처럼 동작하고(var x = 100;), 초기화문이 없는 변수 선언문(var y;)은 무시된다. 이처럼 변수의 중복 선언이 허용되는 경우, .. 2023. 8. 19. [Java] enum의 정의와 활용 작년에 엑셀 다운로드 모듈을 만들 때 cell의 속성과 관련한 부분에서 enum을 적용했었다. 올해 엑셀 모듈에 새로운 구현 클래스를 추가해볼까 하고 살펴보던 중, enum에 대해 더 공부하고 블로그로 작성하면 좋을 것 같아 이렇게 정리한다. 🧊 enum(열거형) 이란?열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는다. .java확장자를 사용하며, 클래스이기 때문에 생성자를 가질 수 있다. 생성자의 접근제어자는 private으로 외부에서 인스턴스화할 수 없다. 그리고 마찬가지로 내부에서도 열거형을 인스턴스화할 수 없다. 필드도 추가할 수 있고, 일반 메소드를 생성할 수 있다. 만약 필드.. 2023. 8. 4. [JS] setTimeout에서 delay는 무슨 의미일까? console.log('1'); console.log('2'); setTimeout(()=> console.log('hi~'), 0) console.log('3'); console.log('4'); 위 코드는 콘솔에 [ 1 2 3 4 hi~ ] 으로 나타난다. [ 1 2 hi~ 3 4 ] 일 것 같았지만 다르게 출력된다. 이유가 뭘까? 자바스크립트 동작 원리부터 알아보자. 🧊 자바스크립트 동작 원리 먼저 자바스크립트코드를 실행시키기 위해서는 자바스크립트 엔진이 필요하다. 자바스크립트 엔진은 Call stack(실행컨텍스트 스택) 과 Heap으로 이루어져 있는데, 콜스택은 싱글스레드이므로 한 번에 하나의 작업만 처리하는 동기적 방식으로 처리하게 된다. 자바스크립트 코드에서 코드를 실행할 때, 함수를 호출하.. 2023. 7. 28. [JS] VSCode에서 디버깅 VSCode에서 디버깅(단축키: F5)을 하면 아래와 같이 오류가 났다. 검색해보니 아래 오류의 경우 원인으로 네트워크 오류가 주로 많아 보였다. 그래서 나도 크롬 개발자도구에서 network를 살펴봤으나 문제가 없었다. localhost:8080 에 접속 시도를 하기 때문에 오류가 나는 것으로 생각하고, 그에 관련된 설정을 수정하는 방향으로 검색하니 해결할 수 있었다. 해결방법 launch.json 파일을 수정하면 된다. 기존 파일에서 url 설정이 위와 같이 되어있었는데 수정하지 않으면 계속 저 url로 접속을 시도하기 때문에 주석처리해줘야한다. 그리고 webRoot도 주석처리하고 파일경로를 적어주면 된다. type도 "pwa-chorme"으로 하니 "chrome"으로 대신 사용을 권장하여 바꿔줬다... 2022. 11. 16. 컴파일? 빌드? 배포? 컴파일, 빌드, 배포의 개념 및 차이 위 개념들의 차이를 정확히 알아보고자 검색하던 중 좋은 비유로 설명 및 비교를 해준 글이 있어서 해당 글을 인용하여 설명을 시작하려 한다. (아래 '참고 및 출처' 의 1번) 본인이 번역가라고 생각해보자. 이번에 출판사로부터 일을 하나 받았는데, 영문으로된 글을 한글로 번역하는 일이다. 번역된 글은 출판사에서 적절히 페이지를 나누어 책으로 엮을 것이며, 완성된 책은 출판이 되어 서점에 진열될 것이다. 우리는 방금 컴파일, 빌드, 배포의 모든 과정을 훑어보았다. 1. 영문으로된 글을 한글로 번역하는 것은 '컴파일'이다. 2. 번역한 글을 책으로 엮는 것은 '빌드'이다. 3. 완성된 책을 고객들이 읽을 수 있도록 서점에 진열하는 것은 '배포'이다. 4. 1~2번 과정을 .. 2022. 10. 12. [빌드도구] maven & gradle 이란? 1. 빌드 (Build) 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 일련의 과정 또는 그에 대한 결과물. 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties) 을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물. 프로그래머가 작성한 소스코드를 실행할 수 있는 독립적인 형태(.war, .jar)로 변환하는 과정 및 결과이며 변환하는 과정에는 컴파일 과정도 포함된다. 2. 빌드도구 (Build Tool) 빌드 도구는 이러한 빌드 과정을 자동으로 수행해주는 도구이며, 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이다. 빠른 기간 동안 계속해서 늘어나는 라이브러.. 2022. 10. 11. [protocol] smtp란? 1. SMTP (Simple Mail Transfer Protocol) : 간이 전자 우편 전송 프로토콜은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜. - 사용하는 TCP 포트번호는 25번 - 언제 사용되는가? 1) 메일 서버간의 송수신 [아래 그림에서 ( smtp.gmail.com )--> ( smtp.naver.com )] 2) 메일 클라이언트에서 메일 서버로 메일을 보낼 때 [ 아래 그림에서 ( sender@gmail.com )-->( smtp.gmail.com )] 2. SMTP 서버 & SMTP 클라이언트 예를 들어 메일을 보내는 사람이 sender@gmail.com이고, 메일을 받는 사람이 receiver@naver.com 일 때의 경우이다. 이메일을 보내는 sender@gmail.co.. 2022. 10. 6. [java.lang.ClassNotFoundException] 오류 해결 1. 원인 보통 ClassNotFoundException은 빌드과정에서 문제가 생겨서 발생한다고 한다. 이 오류는 진짜로 해당 클래스가 없어서 발생하기도 하지만 이번에는 아니었다. 2. 해결 (아래 참고 주소 확인) 1) project 에서 clean 하기 실패! project에서 clean을 하면 프로젝트 내에서 컴파일된 클래스를 모두 삭제 후 다시 rebuild하기 때문에 빌드 과정에서 발생한 오류가 해결되게 된다고 한다. 이클립스는 빌드할 때, 컴파일 과정에서 프로젝트의 모든 소스코드를 컴파일 하지 않는다. 빌드 소요 시간을 줄이기 위해서 수정된 java 파일과 그에 관련된 내역들만 컴파일한다. 그래서 이 과정에서 가끔씩 컴파일 충돌 문제가 발생하거나 이클립스 자체 버그가 발생하게 된다. 그래서 c.. 2022. 9. 9. [쿼리 튜닝] 계획 설명(Execution plan) 확인하기 어제 내가 만든 부분을 실서버에서 테스트해봤는데 속도가 좀 느린 것 같았다. 해당 서버가 원래 대량 데이터 처리속도가 느리고 데이터가 많아서 그런 거일 수도 있었지만 그래도 쿼리 튜닝을 해봐야겠다고 생각해서 다른 개발자분께 여쭤도 보고 혼자 공부했다. 기존 쿼리도 괜찮긴 하지만 몇 가지 수정이 필요하다고 하시면서 "계획 설명"에 대해서도 알려주시고, 쿼리도 짜주셨다ㅠㅠ 기존과 수정된 쿼리를 혼자 비교하면서 계획 설명도 보면서 공부했다. 계획 설명(단축키 : F10)에서는 옵티마이저가 어떤 방식으로 쿼리를 실행시키는지를 알 수 있다. 테이블명도 나오기 때문에 어느 위치에서 어떻게 실행되는지 한 눈에 보기 편하다. 나는 속도를 위해 쿼리튜닝을 하는 중이었으므로 스캔방식, cardinality에 중점을 두고 .. 2022. 8. 27. [JavaScript] Uncaught SyntaxError: Unexpected token 자바스크립트 함수 안에서 스크립틀릿 문자열을 비교하려면 따옴표를 써야한다. 익숙한 느낌이 드는데 다음에는 잊지말자... 문제해결에 도움받은 글 1. https://javacatcher.tistory.com/49 2022. 6. 29. 웹 페이지 실행순서 1. https://docu94.tistory.com/37 2. https://www.w3schools.com/js/js_htmldom.asp 3. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dssh87&logNo=222023739537 https://defacto-standard.tistory.com/entry/java-jstl-html-javascript-%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A1%9C%EB%94%A9-%EC%88%9C%EC%84%9C-JSTL%EA%B3%BC-EL-%EA%B0%99%EC%9D%B4-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0 4. https://na.. 2022. 6. 29. 이전 1 2 3 4 ··· 10 다음