전체 글(355)
-
[MySQL] 문자 구분 collation
collation 은 인코딩을 기반으로 글자를 비교하기 위한 정해진 규칙입니다.같은 문자에 대해서 어떻게 비교하고 찾을 지 정하는 규칙이라고 볼 수 있으며, 대소문자 구분, 정렬 방식, 문자열 함수 결과 등등, 검색 시 어떤 결과를 도출할지 정해져 있습니다. MySQL을 사용하고 데이터를 조회하는 기능을 개발을 수행할 때 주로 이 collation으로 인해 겪게 되는 문제들이 있습니다.일반적으로 아무런 collation 설정을 하지 않으면 기본적인 ci collation 을 사용하기 때문에 like 조건을 사용하지 않는 이상, 검색하거나 비교하고자 하는 문자가 반드시 일치해야지만 조회할 수 있습니다.따라서, 글 내용을 조회하거나 이모티콘과 같은 문자 비교 후 조회하는 기능이 특화되어있거나 중요한 기능들을..
2024.10.15 -
[이슈] 양방향 암/복호화 이슈
모든 개발 기능들을 마무리하고 기존에 운영중이던 단방향 비밀번호 암호화를 양방향으로 바꿔달라는 요청이 발생되어 진행하는 도중에 복호화가 정상적으로 수행되지 않는 이슈가 발생하였습니다. javax.crypto.BadPaddingException: Given final block not properly padded ~ 에러가 발생하면서 복호화 시 사용되는 키값이 암호화할 때 사용되던 키와 일치하지 않다고 계속해서 에러가 발생되었습니다. 문제 발생 이전 양방향 암호화 Config 클래스@Slf4j@Componentpublic class AES128Config { private static final Charset ENCODING_TYPE = StandardCharsets.UTF_8; privat..
2024.08.22 -
[Spring Boot] 서버 자체에 ssl 적용이 아닌 내장 Tomcat에 ssl 적용하여 https 활성화 (jks 파일 기준)
이번에는 nginx 서버나 다른 외부적인 서버 자체의 https 설정이 아닌 배포하여 운영하는 Spring Boot 프로젝트 내부의 내장 톰캣의 설정을 통해 https 설정을 적용해보는 방법을 정리해보겠습니다.또한 제가 하는 방법은 가지고 있는 인증서 jks 파일을 활용한 방법입니다. (1)application.properties 의 경우server.port={프로젝트 운영 포트}server.ssl.enabled=trueserver.ssl.key-password={ssl 인증서 jks파일 비밀번호(있을 경우에만 활성화)}server.ssl.key-store={ssl 인증서 jks파일명}.jksserver.ssl.key-store-type=PKCS12server.ssl.key-store-password=..
2024.08.14 -
[Linux] jks 인증서 파일에서 pem, key 인증서 추출 후 파일 만들기
리눅스 서버에 https 를 적용하기 위해 가지고 있는 톰캣용 인증서 jks 파일에서 key 및 pem 파일들을 추출해야만 했습니다.일반적으로 jks 파일로 인증서를 등록하기 위해서는 보통 만들고 있는 프로젝트 내부의 server.xml 파일 내부에서 설정해주어야 했으나 제가 운영 중인 프로젝트는 Spring Boot 기반의 maven 프로젝트이기 때문에 해당 server.xml 파일은 존재하지 않았습니다.따라서 key와 pem 파일을 추출할 필요가 있었습니다.오늘은 이 jks파일에서 필요한 key, pem 파일들을 추출하는 방법을 정리해보겠습니다. Keytoolkey, pem 파일들을 추출하기 위해서 keytool 기능을 사용할 것입니다.이 Keytool은 키와 인증서 를 관리하고 키 저장소에 해당 ..
2024.08.14 -
[에러] Invalid character found in the request target [/api/product/search?searchKeyword=[te] ]. The valid characters are defined in RFC 7230 and RFC 3986
[Reason]만든 검색 api에 테스트로 '[', ']' 이 두 개의 특수 기호를 넣어서 호출시켜 보았더니 잘못된 문자가 포함되어있다는 에러가 발생하였다.검색해보니, SpringBoot는 내장 Tomcat(톰캣)을 사용하고 있으며, 이 Tomcat 의 특정 버전 이상에서 RFC 3986 규격이 적용되었다고 한다.RFC 3986에는 영어 문자(a-zA-Z), 숫자(0-9), -. ~4 특수 문자 및 모든 예약 문자만 허용된다.따라서 한글을 URL 쿼리스트링으로 변환하며 생기는 특수문자가 원인이다. 그런데 유독 다른 특수 기호들은 무사히 넘어오는 반면에 '[', ']' 이 두 가지의 특수 기호만이 심하게 허용되지 않아 발생된 이슈이다. [Solution]@Configurationpublic class T..
2024.07.03 -
[Spring Boot] Spring Profile 을 통한 개발 환경 분산 관리
Spring Boot에서 개발 완료 후 어플리케이션을 실행하여 테스트할 때 현재 개발 환경인지, 실제 운영 환경인지에 따라 설정되는 개발 환경이 다 다를 것입니다.이를 일일히 바꾸기에는 수고스럽기 때문에 이를 제어하기 위한 Spring Profile을 활용하여 편리하게 개발 환경을 변경해주는 작업을 해보겠습니다. # yml 파일로 Profile을 관리할 수 있지만 저는 properties 파일로 진행하였습니다. 우선, 앞서 말한 로컬 개발 환경, 운영 개발 환경 처럼 때에 따라 바뀌는 이러한 환경을 Spring Boot 에서는 Profile이라고 말합니다.이 Profile은 기본적으로 Spring Boot 프로젝트의 properties 파일을 통해 관리해줍니다. 기본적으로 application.prope..
2024.06.21