프로그래밍 노트/트러블슈팅

어떠한 문제가 발생하였고, 그 원인을 찾아 헤맬때는 왜 이런 현상이 발생했는지 이해가 되지 않고 막막할 때가 많다. 하지만 문제가 발생한 원인을 생각하면서 차근차근 하나씩 의심가는 부분들을 확인하다보면 의외로 아주 간단하고, 아주 창피하고, 아주 어이없는 실수인 경우가 대부분이다. 오늘은 내가 겪은 창피하면서도 어이없는 실수를 기록해보려 한다. 상황 설명 상황을 아주 디테일하게 설명하진 못하지만, 아래 같은 기능을 갖는 시스템이 있다. A시스템에서 B시스템을 호출하는 API가 있다. B시스템에서는 장애가 자주 나기 때문에, 응답값을 받지 못하는 경우 별도의 Front화면에서 사람이 재시도를 할 수 있는 기능이 있다. Front에서 실패한 API건을 체크하여 재시도 버튼을 클릭하면 B시스템이 제공하는 AP..
개발 환경 ㄴ springBoot : 2.4.13 ㄴ spock : 1.2 ㄴ groovy : 2.4.1 ㄴ gradle : 3.7 PR을 올리면 CI 서버에서 자동으로 테스트 코드를 수행하게 되는데, 어느날 배포나간 테스트 코드를 IDE에서 실행해보니 깨지는 것을 발견했다. 애초에 테스트가 통과되지 않는 코드인 것인데 CI 서버에서는 어찌 통과를 했던 것일까? 한참을 삽질을 하던 나는 IDE 에서의 직접 테스트코드 실행이 아닌 그래들 래퍼로 test task를 실행하였을 때 재현이 되는 것을 발견했다. ./gradlew test 실행시 테스트코드가 실행되지 않고 SUCCESS가 되는 것...! $ ./gradlw test BUILD SUCCESSFUL in 10s 테스트할 클래스를 명시적으로 지정을 하..
Spock을 이용하여 MockBean을 생성하였는데, 정의한 행위대로 동작하지 않는 이슈를 발견했다. 간단히 작성해보자면 아래와 비스무리한 코드였다. @Autowired private SimpleMapper simpleMapper; ... @TestConfiguration def setup() { def factory = new DetachedMockFactory() @Bean SimpleMapper simpleMapper() { return factory.Mock(SimpleMapper) } } def "test"() { given: simpleService.selectSomething(_) >> "SUCCESS" expect: "SUCCESS" == simpleService.selectSomethin..
Mybatis 동적 쿼리 DBMS별 Like 문 DB는 MySql을 쓰고 있고, Mybatis에서 WHERE절에 LIKE 검색을 하였는데 데이터가 모두 나오는 기이한 현상이 있었다. 찾아보니, DBMS별로 Mybatis LIKE문이 다른것을 발견했다. (Oracle만 쓰다보니 당연히 되겄거니 하고 하였는데 안되었음) MySql SELECT * FROM TABLE WHERE column_name LIKE CONCAT('%', #{keyword}, '%') Oracle SELECT * FROM TABLE WHERE column_name LIKE '%' || #{keyword} || '%' MsSql SELECT * FROM TABLE WHERE column_name LIKE '%' + #{keyword} +..
maven plugin을 설정하고 mvn test 명령을 실행하였더니, 아래와 같은 오류가 났다. [ERROR] Error resolving version for plugin 'org.apache.maven.plugins:maven-dependency' from the repositories [local (C:\Users\xxx\.m2\repository), central (https://repo.maven.apache.org/maven2)]: Plugin not found in any plugin repository -> [Help 1] plugin을 찾을 수 없다는 오류인데, 처음에는 repository의 설정 문제라고 생각하였으나.. pom.xml plugin 설정에 version이 빠질때 발생할 ..
AES256 암호화시, Exception이 발생 암호화 확장 정책과 관련된 exception으로 아래 같은 이슈가 존재한다. [자바 암호화 확장 정책 설정 이유] Java의 기본 정책으로 JCE가 128비트만 지원하여 16바이트(128bit)키가 넘어갈 시 오류가 발생 (미 통상법에 의해 자국내에서만 AES256 방식 허용) 오류내용 Unsupported keysize or algorithm parameters. 또는, Illegal key size or default parameters. AES256를 사용하기 위해선 무제한 강도 정책(Unlimited Strength Jurisdiction Policy)을 설정해줘야함 [자바 암호화 확장 정책 설정 방법] jdk 1.6 첨부된 jce_policy-6...
Jar안에 있는 resource파일 읽기 내가 만든 코드 기능 중에 classpath안에 있는 resource를 읽어들이는 기능이 있었다.(server.config.json을 읽는다.) 그런데 그 프로젝트를 Jar(Executable jar) 로 묶은 후 실행을 하니, resource를 찾을 수 없다는 에러가 났다. (IDE에서는 오류 안남) => java.io.FileNotFoundException 자세한 로그는 아래와 같다. file:/C:/workspace/web-server-project/target/web-server-project-0.0.1-SNAPSHOT.jar!server.config.json java.io.FileNotFoundException: class path resource [se..
svn 사용시 해당 패키지 및 파일을 삭제하고 commit을 하려다보니 아래와 같은 오류가 났다. 구글링을 해보니, 파일이나 폴더를 삭제하거나 이름을 변경할 때 자주 발생하는 에러라고 한다. 클라이언트가 가지고 있는 svn 파일의 정보가 너무 오래되어서 그렇다고하여, 헤더정보를 업데이트 후 커밋을 하면 된다는 정보를 얻었다. 해당 프로젝트를 Update to Head 한 후, commit을 하니 오류 없이 commit이 됬다.
RSA 개인키 PEM문자열을 PrivateKey 객체로 변환할 때 exception이 났다. java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence //PKCS#8 privateKey PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded); KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey prkey = kf.generatePrivate(keySpec);​ (위 코드를 사용 했는데, exception을 내뱉음) 원인은 pem문..
깡냉쓰
'프로그래밍 노트/트러블슈팅' 카테고리의 글 목록