inblog logo
|
sxias
    트러블슈팅

    [트러블슈팅] 10. 스프링부트 디버깅

    문정준's avatar
    문정준
    Mar 21, 2025
    [트러블슈팅] 10. 스프링부트 디버깅
    Contents
    1. Mapping 불일치2. Query 오류3. 잘못된 URI 요청4. DI (Dependency Injection) 부재5. 트랜잭션 오류6. Form 태그 내 버튼
    ✏️

    디버깅 순서 : View → Controller → Service → Repository

     

    1. Mapping 불일치

    • PostMapping 메서드에 GET 요청이 들어올 경우 : 405 에러 코드 출력
      • Method Not Allowed
    notion image

    Solution

    • View와 Controller를 모두 체크 : Business 파악 후 올바르게 URI 또는 method 수정
      • POST : DB에 데이터를 작성할 때에 사용 (Insert, Update, Delete)
    notion image
    ✏️

    POST 사용 이유

    • HTML 메서드에 POST, PUT, DELETE가 다 구현되어 있으나, GET과 POST 요청으로만 페이지를 구성하였기에 POST 메서드 + URI에서 동사를 적어서 메서드 표현
     

    2. Query 오류

    • 탐색 인수 개수의 차이, 이름 인식 불가, DB 내 탐색 불가 등의 이유로 에러 발생 가능
      • 500 에러 코드 출력 : Internal Server Error
     

    1. DB 참조 오류

    • 쿼리문 내의 테이블 컬럼명 불일치
    notion image
    notion image

    Solution

    • View에 작성한 name, Repository에서 작성한 쿼리 내 name, DB 테이블의 name을 전부 비교 후 일치시켜야 함
      • dummy data 활용 시, insert문 내의 테이블 컬럼명도 일치시켜야 데이터가 정상적으로 삽입
    notion image
    notion image
    notion image
     

    2. 쿼리 문법 오류

    • 쿼리 문법을 이상하게 작성했을 경우
      • SQL Syntax Error 출력
    notion image

    Solution

    • Query 문법 오류 : Repository 확인
      • 올바른 문법으로 다시 작성
    notion image
    notion image
     

    3. 잘못된 데이터 참조

    • 쿼리 문법 오류, 다른 테이블 참조 등으로 가져올 데이터 구조가 맞지 않을 경우
    notion image

    Solution

    • Repository, DB 테이블, View를 모두 비교
      • Repository : Query문 확인 후 제대로 테이블 정보를 가져오는 지 확인
      • DB : 테이블 컬럼명, JPA로 담을 클래스 내의 구조가 Query 문으로 받아오는 데이터와 동일한 구조인지 확인
      • View : 메서드를 통해 받아오는 model의 속성값(컬럼명)을 제대로 입력하였는지 확인
    notion image
     

    3. 잘못된 URI 요청

    • 서버에서 정해두지 않은 URI로 GET 요청을 시도한 경우 : Client가 시도한 오류
      • 404 오류 코드 출력
    notion image
    notion image

    Solution

    1. 예외 처리 : Exception 종류를 모아서 다른 페이지로 연결시키도록 유도
        • Error 페이지 : 404 Not Found 등 출력
        • 에러 메시지(스크립트) 처리 후 메인 홈페이지로 강제 리다이렉트
    1. 더욱 많은 링크 제공 : 리다이렉션을 사용하여, 다른 링크를 입력하였더라도 올바른 페이지로 이동시킬 수 있도록 유도
        • UX 상향 (User Experience)
     

    4. DI (Dependency Injection) 부재

    • Controller, Service, Repository 간에 DI 부재
      • 생성자의 부재
        • IoC는 가능하나, 내부 멤버가 null : 500 에러 코드 출력
        notion image
         
      • Annotation의 부재로 인한 컴포넌트 스캔 불가
        • IoC도 불가 : 서버 실행 불가
    notion image

    Solution

    • 각 Controller, Service, Repository의 Annotation 확인
    notion image
    • 생성자 확인 : 컴포지션
    notion image
     

    5. 트랜잭션 오류

    • Write 동작 시 (Insert, Update, Delete) 트랜잭션 미발동으로 인한 오류
    notion image

    Solution

    • Service 확인 : Write 동작을 수행하는 메서드에는 @Transactional 필수 포함
      • 트랜잭션 추가 : 수행 중 오류 발생 시 데이터 rollback, 정상 수행 시 commit 수행
    notion image
     

    6. Form 태그 내 버튼

    • form 태그 내의 버튼 타입을 설정하지 않으면 기본 타입이 submit으로 설정
      • 다음과 같은 경우, test 버튼을 눌러도 해당 내역이 삭제됨
    notion image
    notion image

    Solution

    • 버튼의 기능을 수행하고 싶으면 type 직접 지정 : type=button
    Share article
    Contents
    1. Mapping 불일치2. Query 오류3. 잘못된 URI 요청4. DI (Dependency Injection) 부재5. 트랜잭션 오류6. Form 태그 내 버튼

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog