1-6 Springboot 클래스 하나씩 테스트 하면서 디버깅(Debugging) 해보기

Springboot
홍윤's avatar
Aug 16, 2024
1-6  Springboot 클래스 하나씩 테스트 하면서 디버깅(Debugging) 해보기
💡
디버깅(Debugging)은 소프트웨어 개발 과정에서 코드의 오류나 버그를 찾고 수정하는 작업을 의미합니다. 이 과정은 소프트웨어의 신뢰성과 품질을 높이기 위해 필수적인 단계입니다. 디버깅은 일반적으로 다음과 같은 단계를 포함합니다:
  1. 문제 식별:
      • 프로그램이 예상과 다르게 작동하거나 오류를 발생시키는 부분을 찾습니다. 사용자나 테스트에서 발생한 문제를 분석합니다.
  1. 문제 분석:
      • 문제의 원인을 파악하기 위해 코드의 동작을 분석합니다. 변수의 값, 로직의 흐름, 함수의 호출 등을 점검하여 오류가 발생하는 지점을 찾습니다.
  1. 문제 재현:
      • 오류가 발생하는 조건을 재현하여 문제를 명확히 이해합니다. 이를 통해 문제의 정확한 원인을 좁히고, 수정해야 할 부분을 파악합니다.
  1. 코드 수정:
      • 발견된 문제를 수정하기 위해 코드를 변경합니다. 수정한 후에는 문제 해결 여부를 확인하기 위해 수정된 코드를 다시 테스트합니다.
  1. 테스트 및 검증:
      • 수정된 코드가 문제를 해결했는지 확인하기 위해 테스트를 수행합니다. 또한, 다른 기능에 영향을 미치지 않았는지 검증합니다.
  1. 문서화:
      • 문제와 해결 과정을 문서화하여 향후 유사한 문제를 빠르게 해결할 수 있도록 합니다. 이를 통해 팀원들과 지식을 공유합니다.

디버깅 도구

디버깅에는 다양한 도구와 기술이 사용됩니다:
  • 디버거: 코드의 실행을 단계별로 추적하고, 중단점을 설정하여 변수의 값을 실시간으로 확인할 수 있는 도구입니다.
  • 로그: 프로그램의 실행 흐름과 변수 값을 기록하여 오류를 추적하는 데 도움을 줍니다.
  • 단위 테스트: 각 코드 단위를 개별적으로 테스트하여 문제가 발생하는 부분을 신속히 찾아낼 수 있습니다.
디버깅은 코드의 품질을 높이고, 소프트웨어의 안정성을 보장하는 데 중요한 역할을 하며, 개발자에게는 필수적인 기술입니다.
 
💡
1.테이블 명 post_tb 바꾸기 2.title -> subtitle (엔티티 변수명_)
3.Controller 매게변수 변경 4.content -> postContent (엔티티 변수명) 5. 글쓰기가 잘 동작하게 (1)form 태그에 name 값을 변경
1.테스트 클래스
notion image
  1. 테이블 명 post_tb로 바꾸기
Board
notion image
notion image
BoardRepository
notion image
notion image
💡
테이블 명을 변경 하고 난 후 테스트를 해보면 오류없이 pass했다.
notion image

 
2-1 엔티티 변수명(title -> subtitle, content -> postContent) 변경하기
board 변경 전
notion image
 
 
board 변경 후
notion image
💡
테스트 결과
board 클래스 엔티티 변경 후 테스트를 돌렸지만 Colume “TITLE” 를 찾을 수 없다고 나온다. 내가 아직 다른 파일들 수정을 안 해서 그런 거 같다.
notion image

 
BoardController 변경 전
notion image
 
BoardRepository 변경 후
notion image
💡
테스트 결과
Controller 변수명 변경을 하였지만 아직까지 똑같은 오류가 나왔다. 변수명을 변경 안 한 파일이 있는 거 같으니 한번 다시 찾아보자!
notion image

BoardRepository 변경 전
notion image
 
BoardRepository 변경 후
notion image
💡
테스트 결과
분명히 insert query문에서 변수명을 변경 하였지만 정상적으로 변경한 postContent 에서 오류가 나왔다! 왜 그런 건가?
고민을 하다가 코드를 자세히 보았다.
notion image
notion image
notion image
자바의 카멜 기법과 DB의 언더스코어 기법의 문제인걸 알게되었다. 그래서 query 문을 수정 하였다.
notion image
변경 후 테스트는 성공 하였다. 다음으로 넘어가자!
notion image
  • DB 언더스코어 기법
언더스코어(underscore) 기법은 데이터베이스와 일부 프로그래밍 언어에서 변수명, 메소드명, 테이블명, 컬럼명 등을 작성할 때 사용하는 명명 규칙입니다. 이 기법은 단어를 구분할 때 언더스코어(_)를 사용하는 방식으로, 가독성을 높이고 일관성을 유지하는 데 도움을 줍니다.

언더스코어 기법의 규칙

  1. 모든 단어를 소문자로 작성합니다.
  1. 단어 사이에 언더스코어(_)를 삽입하여 구분합니다.

주요 용도

  • 데이터베이스: 테이블 및 컬럼 이름을 명확하게 구분하기 위해 사용됩니다. SQL 쿼리와 스키마에서 가독성을 높이고, 대소문자 문제를 피할 수 있습니다.
  • 프로그래밍 언어: 일부 언어에서는 변수명, 함수명 등에 언더스코어 기법을 사용합니다.

예시

데이터베이스에서 언더스코어 기법 적용

  • 테이블 이름: user_account, order_details, product_inventory
  • 컬럼 이름: first_name, last_login_date, email_address

자바스크립트 또는 Python에서 언더스코어 기법 적용

  • 변수명: user_name, total_amount, order_id
  • 함수명: calculate_total(), get_user_name()

    장점

    • 가독성: 단어 사이에 언더스코어를 넣어 단어의 경계를 명확하게 구분함으로써 읽기 쉬운 코드와 테이블 이름을 제공합니다.
    • 표준화: 많은 데이터베이스 시스템과 일부 프로그래밍 언어에서는 이 명명 규칙을 표준으로 사용하여 일관성을 유지할 수 있습니다.
    • 대소문자 문제 해결: 언더스코어 기법은 대소문자 구분을 하지 않거나 대소문자 구분에 따른 문제를 방지할 수 있습니다.

    주의사항

    • 일관성 유지: 프로젝트 내에서 언더스코어 기법을 사용할 때는 일관되게 적용하는 것이 중요합니다. 데이터베이스와 프로그래밍 코드에서 모두 같은 규칙을 사용하여 혼동을 방지합니다.
    • 명명 규칙의 차이: 일부 프로그래밍 언어에서는 카멜 케이스를 표준으로 사용하는 반면, 데이터베이스에서는 언더스코어 기법을 선호할 수 있습니다. 따라서 상황에 따라 적절한 규칙을 선택하고 적용해야 합니다.
    언더스코어 기법은 특히 데이터베이스에서 스키마와 쿼리의 가독성을 높이기 위해 널리 사용되며, 명확한 명명 규칙을 통해 데이터의 관리와 접근을 용이하게 합니다.

     
    • 자바 카멜기법
    • *카멜 케이스(Camel Case)**는 변수명, 메소드명, 클래스명 등에서 사용되는 명명 규칙으로, 가독성을 높이고 코드의 일관성을 유지하기 위해 널리 사용됩니다. 이 명명 기법은 단어들이 결합될 때 대문자와 소문자를 사용하여 단어 사이를 구분합니다. 주로 프로그래밍 언어에서 사용되며, 특히 자바(Java)와 같은 객체 지향 프로그래밍 언어에서 자주 사용됩니다.

    카멜 케이스의 규칙:

    1. 첫 번째 단어: 소문자로 시작합니다.
    1. 후속 단어: 각 단어의 첫 글자는 대문자로 시작합니다.
    1. 단어 구분: 단어들 사이에 공백이나 구분 기호 없이 연속해서 작성합니다.

    종류

    1. 로워 카멜 케이스 (lower camel case):
        • 용도: 변수명, 메소드명
        • 규칙: 첫 번째 단어의 첫 글자는 소문자, 그 이후 단어는 대문자로 시작합니다.
        • 예시:
          • userName
          • totalAmount
          • calculateTotal
          • getUserName
    1. 어퍼 카멜 케이스 (Upper Camel Case) 또는 파스칼 케이스 (Pascal Case):
        • 용도: 클래스명, 인터페이스명
        • 규칙: 모든 단어의 첫 글자를 대문자로 시작합니다.
        • 예시:
          • UserAccount
          • OrderDetails
          • ProductInventory
          • 카멜 케이스의 장점:

          • 가독성: 단어 사이에 공백이 없지만, 대문자로 시작하는 각 단어 덕분에 단어의 경계가 명확하게 구분됩니다.
          • 일관성: 변수명, 메소드명, 클래스명 등에서 일관된 스타일을 유지하여 코드를 읽고 이해하기 쉽게 만듭니다.
          • 표준화: 많은 프로그래밍 언어와 프레임워크에서 카멜 케이스를 표준으로 사용하고 있어, 개발자들 간의 협업이 용이합니다.
          • 카멜 케이스는 코드의 일관성을 유지하고 가독성을 높이기 위해 널리 채택된 명명 규칙입니다. 이를 통해 코드 작성과 유지 보수가 더욱 효율적이고 체계적으로 이루어질 수 있습니다.

             

    2.2 글쓰기 잘 작동 하는지 알아보기
    Action 폼에서 name값을 변경하였다.
    notion image
    변경 후
    notion image
     
    결과가 잘 나오는 지 해보자!
    notion image
    이렇게 하고 글쓰지 완료를 누른 후 입력값이 들어 갔다는 걸 알았다. 이제 Hibernate에 들어가서 입력값을 확인 해보자!
    notion image
     
    localhost:8080/board/save-form
    notion image
    notion image
    결과: 잘 등록되었다.
    💡
    소감: 클래스 하나하나 디버깅을 하면서 예상치 못한 문제와 오류를 발견하며, 코드의 세부적인 동작을 깊이 이해할 수 있었습니다. 작은 실수나 예상과 다른 동작이 전체 시스템에 영향을 미친다는 것을 깨달았습니다. 이 과정을 통해 테스트의 중요성과 코드의 신뢰성을 높이는 방법을 배우게 되었고, 문제를 해결하며 얻는 성취감이 매우 보람찼습니다.
    Share article

    Uni