(작성중) 에러 모음

박선우·2025년 3월 13일
0

아래는 오류 메시지의 각 부분에 대한 자세한 설명입니다.


1. 예외 클래스 및 기본 설명

  • org.springframework.jdbc.BadSqlGrammarException:

    • Spring JDBC가 SQL 문법에 문제가 있다고 판단했을 때 발생하는 예외입니다.
    • “Bad SQL Grammar”라는 표현은 작성된 SQL 쿼리에 문법 오류나 잘못된 컬럼/테이블 명 등이 있을 때 발생합니다.
  • java.sql.SQLSyntaxErrorException:

    • JDBC 드라이버가 SQL 구문을 실행하는 도중 문법 에러나 참조할 수 없는 컬럼/테이블 등의 문제가 발생했음을 나타냅니다.

2. 에러 원인 상세

  • Unknown column 'e.img' in 'field list':
    • SQL 쿼리에서 e.img라는 컬럼을 선택하려고 하는데, 데이터베이스의 테이블(여기서는 Estate 테이블)에 해당 컬럼이 없음을 의미합니다.
    • 즉, SELECT ... SUBSTRING_INDEX(e.img, ',', 1) AS img ... 구문에서 e.img를 참조하고 있는데, 실제로 Estate 테이블에는 'img' 컬럼이 존재하지 않는 상황입니다.

3. MyBatis 및 매핑 파일 관련

  • The error may exist in com/kb/home/mapper/PopularEstateMapper.xml:

    • 오류가 MyBatis의 매퍼 XML 파일인 PopularEstateMapper.xml에서 발생했음을 알려줍니다.
    • 이 파일 내에 작성된 SQL 쿼리 구문에서 문제가 있을 가능성이 높습니다.
  • The error may involve defaultParameterMap:

    • MyBatis가 SQL 쿼리에 파라미터를 바인딩할 때 기본 파라미터 매핑에 문제가 있을 수 있음을 나타냅니다.
    • 그러나 이 경우는 주로 SQL 자체의 컬럼 참조 문제가 더 큰 원인입니다.
  • The error occurred while setting parameters:

    • MyBatis가 쿼리 실행 전에 파라미터를 설정하는 과정에서 오류가 발생했다는 의미입니다.
    • 이는 SQL 구문이 올바르지 않기 때문에 파라미터를 적용하는 단계에서 실패하는 것입니다.

4. SQL 쿼리 분석

SELECT 
  e.address, 
  e.tradetype, 
  e.roomSize, 
  e.floor, 
  e.deposit, 
  e.monthlyPee, 
  SUBSTRING_INDEX(e.img, ',', 1) AS img, 
  COUNT(w.wished_id) AS wishCount
FROM Wish w
JOIN Estate e ON w.wished_id = e.eno
GROUP BY 
  e.eno, 
  e.address, 
  e.tradetype, 
  e.roomSize, 
  e.floor, 
  e.deposit, 
  e.monthlyPee, 
  e.img
ORDER BY wishCount DESC
LIMIT 4
  • e alias:

    • Estate 테이블에 e라는 별칭(alias)이 부여되어 있습니다.
    • 쿼리 내에서 e.address, e.tradetype 등으로 컬럼을 참조하는데, e.img 컬럼을 사용하고 있습니다.
  • SUBSTRING_INDEX(e.img, ',', 1) AS img:

    • 여기서 e.img 컬럼의 값을 쉼표(,)를 기준으로 나누고 첫 번째 값을 선택합니다.
    • 그러나 Estate 테이블에 img 컬럼이 실제 존재하지 않으면 이 부분에서 오류가 발생합니다.
  • GROUP BY 및 ORDER BY:

    • 그룹핑 및 정렬에 사용되는 컬럼 중에도 e.img가 포함되어 있습니다.
    • 동일한 문제로, 해당 컬럼이 없으면 SQL 에러가 발생합니다.

5. 요약 및 해결 방법

  • 원인:

    • Estate 테이블에 'img'라는 컬럼이 존재하지 않는데, SQL 쿼리에서 이를 참조하고 있기 때문에 발생한 오류입니다.
  • 해결:

    1. 테이블 스키마 확인: Estate 테이블에 'img' 컬럼이 실제로 존재하는지 확인합니다.
    2. 컬럼명 수정: 만약 컬럼 이름이 다르다면, 쿼리에서 올바른 컬럼명으로 변경합니다.
    3. 테이블 수정: 'img' 컬럼이 있어야 한다면, ALTER TABLE 명령어를 사용하여 해당 컬럼을 추가합니다.

이처럼, 오류 메시지 각 부분은 SQL 문법 오류, 잘못된 컬럼 참조, 그리고 MyBatis 매퍼 파일의 문제 가능성을 알려주고 있습니다. 이를 토대로 스키마와 SQL 쿼리를 점검하면 문제를 해결할 수 있습니다.

profile
개발 관련 궁금한 점이나 새로 알게된 내용을 적는 곳

0개의 댓글