이럴땐 이렇게에 해당하는 글 8

  1. Execution failed for task ':compileJava'. 2024.07.29

    Execution failed for task ':compileJava'.> Could not resolve all files for configuration ':compileClasspath'. > Could not find org.mybatis.spring.boot:mybatis-spring-boot-starter:. Required by: project :Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html build.gradle이나 pom.xml..


  2. mybatis xml파일 내 if문에서 단일 문자로 비교되지 않는 문제 2024.07.16

    주어진 state에 따라 WHERE절 내 조건이 변경되는 쿼리를 작성할 일이 있었다.그래서 아래와 같이 state가 'Q' 일 때 어떤 조건을 추가하도록 작성하고 테스트를 진행했다.... AND start_date IS NULL  근데.. 분명 Q를 state에 넣어주고 테스트를 진행했음에도 if문 내의 조건문이 추가되지 않는 이슈가 있었다.원인을 찾아 보니, 작은 따옴표(') 사이에 하나의 문자만 넣으면 string이 아닌 char로 인식하여 숫자로 변환해 버린다.즉, 저 코드로는 숫자 81로 비교가 되고 있는 것이다...   그래서 어떻게 하면 의도대로 작동하는가?작은 따옴표(') 대신 큰따옴표(")를 사용하면 바로 해결된다. ... ..


  3. JSON.parse한 Object 내 프로퍼티가 undefined로 나오는 경우 2024.04.24

    빠른 결론JSON.parse 두번 하거나 정규식으로 이스케이프 문자를 제거하면 된다.  JSON을 문자열화한 값을 서버에서 받아서 프론트에서는 그 문자열을 파싱해서 사용한다고 하자. const original = "{\"type\":\"test\",\"content\":{\"title\":\"타 이 틀\",\"content\":\"내용\"}}";const parsedData = JSON.parse(original); console.log(parsedData); // {"type":"test", "content":{"title":"타이틀", "content":"내용"}}console.log(parsedData.type); // undefined 위처럼 코드를 작성했는데 parsedDat..


  4. ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'A' which is not functionally dependent on columns in GROUP BY clause; 2023.11.29

    이번에 MySQL 버전을 업그레이드하면서 잘 되던 API가 작동하지 않는 이슈가 발생했다. 에러 로그를 보아하니... 문제가 발생한 쿼리는 아래와 같았다. SELECT C.id, C.type FROM PROJECT INNER JOIN GROUP B ON A.group_id = B.group_id INNER JOIN MEMBER C ON C.member_id = B.user_id WHERE A.project_id = #{value} GROUP BY C.id ORDER BY A.reg_date DESC 그리고 에러 메시지는... Cause: java.sql.SQLSyntaxErrorException: Expression #1 of ORDER BY clause is not in GROUP BY clause a..


  5. java.lang.IllegalArgumentException: 이 쿠키를 위해, 유효하지 않은 도메인 ... 2023.11.07

    개인 맥북으로 재택근무를 하다가 사무실에서는 발생하지 않았던 에러가 떴다. 분명 사무실에서는 잘만 테스트 하고 있었는데... 검색해 보니 이번에 톰캣 버전을 올리면서 정책이 바뀌었고, .(dot)으로 시작하는 도메인으로 쿠키를 생성할 수 없게 되었다. 그래서 아래처럼 되어 있던 context.xml 파일에서 sessionCookieDomain 옵션을 지웠고 해결함. WEB-INF/web.xml WEB-INF/tomcat-web.xml ${catalina.base}/conf/web.xml 참고한 블로그(클릭시 새창으로 열립니다.)


  6. java.rmi.server.ExportException: Port already in use: #### 2023.11.07

    평소처럼 업무를 하다 점심 먹고 들어와서 잠자기해뒀던 맥북을 깨웠는데 뭔가.. 평소처럼 일어나지 않았다. 종료했다가 켠 것처럼... 그러면서도 정말 맥북을 종료했다가 켰을 때같지는 않았다. 원래 켜져있던 창들을 복구하듯 잠자기 이전의 프로그램들(기본 시작 프로그램 아님)이 켜졌고, 기본 시작 프로그램도 함께 켜졌다. 아무튼 다시 로컬 서버를 열어서 하던 일을 마저 하려는데... 터미널에 이런 말이 찍히면서 실행이 되지 않았다. 포트를 이미 사용중이라니~.~ 아무래도 맥북에 뭔가 이상이 있었고, 그것 때문에 실행되어 있던 VSCode며 인텔리제이가 강제종료된 듯했다. IDE상에서는 프로세스가 종료됐지만, 실제로는 종료되지 않아서 포트를 계속 물고 있던 것이 원인이었다. 해결방법은 간단하다. 강제종료된 프로..


  7. SSLHandshakeException: PKIX path building failed 2023.08.11

    위와 같은 에러메시지가 뜬다는 건 SSL 보안 등록이 되어 있지 않다는 뜻이다. 브라우저가 아니라 자바 서버에서 https 요청을 보내 주려면 인증서를 추가해야 한다. 자바에서는 아래 경로에서 인증서를 저장해 사용하고, keytool 이라는 명령어로 관리할 수 있다. 인증서 저장소 경로 : ${JAVA_HOME}/lib/security/cacerts 현재 등록된 인증서 조회하기 : keytool -list -v -keystore ${JAVA_HOME}/lib/security/cacerts 1. 인증서 파일을 keystore에 import한다. keytool -import -keystore ${인증서 저장소 경로} -file ${인증서파일 경로} -alias ${alias이름} 예시) keytool -im..