Oct 13, 2021 - kcp res_msg

KCP 에서 본인인증 성공 시, 보내는 메시지가 EUC-KR 로 인코딩되서 오는데,

서버의 스프링부트가 자동으로 UTF-8 로 인코딩되면서 발생하는 오류.

res_msg=%C1%A4%BB%F3%C3%B3%B8%AE

해당값을, 그대로 복사해서 인코딩 작업을 하게 되면,

String message = "%C1%A4%BB%F3%C3%B3%B8%AE";
String encodeData = URLDecoder.decode(message,"EUC-KR");
System.out.println("URL 인코딩 : "+encodeData);

‘정상처리’라는 글을 볼 수 있으나, 실제 넘어오면 이상한 인코딩 (흡사 UTF-8로 인코딩했을 때 발생하는 오류처럼 보이는 메시지가 보입니다.

URL 인코딩 : ����ó��

원인은, 스프링부트에서 form POST 방식(application/x-www-form-urlencoded)으로 데이터를 보낸 경우 RequestBody는 자동으로 UTF-8로 urlEncoding 되기 때문입니다.

spring.http.encoding.force=false
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.filter.OrderedCharacterEncodingFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
 
@Configuration
public class filterConfig {
    
    @Bean
    public FilterRegistrationBean encodingFilterBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setForceEncoding(true);
        filter.setEncoding("UTF-8");
        registrationBean.setFilter(filter);
        registrationBean.addUrlPatterns("/xxxxx/*");
        return registrationBean;
    }
}
 

참고 주소 : https://m.blog.naver.com/PostView.nhn?blogId=duco777&logNo=220605479481&proxyReferer=https:%2F%2Fwww.google.com%2F

12/13 결과적으로 서버에서 KCP측에 한번더 검증 API 를 호출하여 서버에서 안전하게 인코딩처리함. (이 문제는 프론트에서 처리된 KCP 인코딩 문자를 백엔드에서 변환하여 처리하려다보니 생긴 이슈였음.)

Mar 20, 2021 - git shortlog


git shortlog -s -n --all --no-merges

모든 브랜치에서 작성자 당 커밋 수를 확인하는 명령어입니다.
(–no-merges 병합 커밋 통계를 제외.)

Jan 19, 2021 - multiple points

2018년도에 발생했던 이슈에 대해 추가 설명이 필요해보여, 이력을 남깁니다.

simple

위 에러는,

java.lang.NumberFormatException: multiple points

란 에러로, SimpleDateFormat 가 Thread safe 하지 않은 데, 여러곳에서 동시 호출될 때 발생하는 경우입니다.

멀티 스레드에서 안전하지 못하므로, 해당 클래스를 내부 메소드로 이동하거나,

synchronized 처리하여야 할것으로 판단됩니다.

private static final DateFormat formatter = new SimpleDateFormat 
private static final SimpleDateFormat formatter = new SimpleDateFormat

로 되어있는 로직이 존재할 경우 해당 클래스 수정이 필요하게 됩니다.

Java 8부터는 스레드로부터 안전 DateTimeFormatter 라는 새로운 Date API를 지원합니다.

private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");

참고 주소 : https://stackoverflow.com/questions/6137548/can-we-declare-simpledateformat-objects-as-static-objects/30106763