개발 23

스프링 빈 전역변수는 thread safe 한가?

남이 짜놓은 코드를 이어받아 보고 있는데, 스프링 컨트롤러에 전역변수들이 나옵니다. 일반적으로 이런식으로 코드 작성을 하지 않아서 깊게 생각해 보지 않았는데, thread safe 문제 부터 떠오릅니다. ​ 테스트 코드로 테스트 해보았습니다. 테스트 코드 @Controller public class TestController { // num이라는 전역변수는 thread safe한가? int num = 0; @RequestMapping("/test.do") public String selectMode(HttpServletRequest request, ModelMap model) throws Exception{ model.addAttribute("num", num++); return "test"; } } 결..

개발 2022.07.20

자바스크립트 유니코드 정규식

유니코드 체크 정규식 아스키코드(로마자)와 한글을 제외한 유니코드 구간을 정규식으로 설정 합니다. // 로마자 : 0020(공백)-007F(DEL) // 한글 : 1100-11FF(옛한글) // 한글 : 3130-318F(자음,모음) // 한글 : AC00(가)-D7A3(힣) var regExpUnicode = /[\u0000-\u001F|\u0080-\u10FF|\u1200-\u312F|\u3190-\uABFF|\uD7A4-\uFFFF]/g; 문자열에 유니코드가 있는지 체크 방법 if(str.match(regExpUnicode) != null) { alert('유니코드 포함됨'); } else { alert('유니코드 포함안됨'); } 문자열에 유니코드가 있는 경우 공백으로 치환 방법 str = str..

개발 2022.07.09

React spreadsheet 조사

React에서 사용할 스프레드시트 조사 했습니다. (그리드 아님) 괜찮은 것 같으면 가격이 많이 비쌉니다. 아직 개발 전 단계이므로 내용들이 틀릴 수 있습니다. 1. SpreadJS https://demo.grapecity.co.kr/spreadjs/learn-spreadjs/ 자바스크립트, Angular, Vue, React 모두 지원 엑셀 수준의 기능 제공으로 좋아 보이나 가격이 비쌈 가격 ₩2,332,000 2. Google spreadsheet https://developers.google.com/sheets/api react 지원 안함 무료 3. Jspreadsheet v4 https://bossanova.uk/jspreadsheet/v4/ 자바스크립트, Angular, Vue, React 모두..

개발 2021.10.30

Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]

오류 내용 파일 업로드 기능 구현에서 발생하는 오류 Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest] ​ 원인 FrontEnd 요청이 잘못되었거나, BackEnd 요청을 처리하는 쪽이 잘못 되었을 수 있음 ​ 해결방법 3가지를 모두 확인 3가지 중에 하나라도 잘못되면 위와 같은 오류 발생 ​ ajax type : 'POST', enctype: 'multipart/form-data', processData: false, contentType: false, ​ pom.xml commons-fileupload commons-fileupload 1.3.1 commons-io commons-io..

개발 2021.03.24

RSA - javax.crypto.IllegalBlockSizeException: Data must not be longer than 245 bytes 오류

오류 내용 RSA 2048 크기의 Key로 큰 사이즈의 데이터를 암호화를 할 경우 발생 Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 245 bytes at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:346) at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:391) at javax.crypto.Cipher.doFinal(Cipher.java:2168) at RSA.encrypt(RSA.java:58) at Main.main(Main.java:18) 오류 ..

개발 2021.02.02

JAVA object to byte[] 변환 방법

JAVA에서 object를 byte array로 변환 하는 방법입니다. ​ object를 byte array로 변환하는 가장 쉬운 방법으로는 Object 직렬화 ObjectOutputStream를 사용하는 방법이 있습니다. 하지만 Object 직렬화는 자바에 한해서만 호환이 된다는 문제가 있습니다. Object 직렬화는 이기종 (c언어, .NET 등)과 소켓통신할 때 사용할 수 없습니다. ​ 그래서 찾은 방법이 ByteArrayOutputStream 를 사용하는 것입니다. ​ 아래는 16바이트로 구성한 클래스 객체를 byte[] 로 변환한 예제 입니다. 범용적으로 사용할 수 있게 함수 형태로는 구현하려면 자바 리플렉션 개념을 사용해야 할 것 같습니다. public class ProtocolDto { pu..

개발 2021.01.30

JAVA RSA invalid key format 오류

자바에서 RSA 개인키와 공개키를 사용하려는데 헤맸던 오류입니다. ■ 오류 Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:252) at java.security.KeyFactory.generatePrivate(KeyFactory.java:372) at Main.main(Main.java:43) Caused by: java.security.InvalidKeyException: invalid key f..

개발 2021.01.24

openssl, java에서 RSA 개인키, 공개키 생성, 전자서명 방법

RSA 암호화 알고리즘 사용을 위한 개인키, 공개키 생성 방법입니다. 자바에서 사용하기 위해서는 PEM + PKCS#8 형식으로 하는 것이 간편해 보입니다. ■ PEM vs DER 공개키 기반 알고리즘의 키 파일 인코딩 방식은 PEM, DER이 있습니다. - PEM : BASE64로 인코딩된 아스키 형식 - DER : 바이너리 형식 ■ PKCS#1 vs PKCS#8 PEM형식은 PKCS#1, PKCS#8 형식이 있습니다. 무늬만 차이를 보면 이렇습니다. - PKCS#1 헤더가 BEGIN RSA PRIVATE KEY 으로 시작 자바에서 지원 안함 - PKCS#8 : 헤더가 BEGIN PRIVATE KEY 으로 시작 자바에서 지원함 ■ openssl에서 RSA 개인키, 공개키 생성방법 # 개인키 pkcs#1..

개발 2021.01.24