TIL 70 - [ Spring 최종 프로젝트 ( Day 6 ) - 테스트 케이스 CRUD + 요구사항 반영, 트러블 슈팅1, .env 파일 ]

2025. 6. 4. 21:22·[내일배움캠프-Sparta]/Spring 6기
반응형

오늘은 이번 프로젝트 주제에 맞게 기본적인 MVP기능을 문제 관리 기능 다음으로 테스트 케이스 기능에 대해서 기능 구현하는 시간을 가졌다.

💬 Testcase CRUD

https://github.com/ezcode-my/backend/pull/29/commits

 

feature: 테스트 케이스 CRUD + 요구사항 반영 by Kimminu7 · Pull Request #29 · ezcode-my/backend

작업 내용 테스트 케이스 등록 / 조회 / 수정 / 삭제 요구사항 반영 ProblemInfo 클래스, Problem 필드 일부 데이터 타입 변경 ( 메모리 제한, 시간 제한 ) 변경 사항 트러블 슈팅 해결해야 할 문제 배열

github.com

테스트 케이스 PR을 올린 커밋 내역 기록들이다. 테스트 케이스 CRUD는 조금 까다로웠다. 한 문제에 여러개의 테스트 케이스가 있다는 전제가 되어야 하기 때문에 일치하지 않는 부분에서 테스트 케이스가 수정이나 삭제가 된다던지 이러한 부분에서 까다로웠다.

📃 요구사항

한 팀원의 요구사항 으로 먼저, timeLimit, memoryLimit의 필드 데이터 타입이 Strinig, Long 타입으로 바뀌었다는 점이다.

 

두번째로는 채점에 쓰일 입력값과 기댓값을 문제 정보 클래스를 만들어서, problemDomainService에 쓰실 메소드를 추가해줬다.

  1. problem id받기
  2. dto projection? 이걸 써서 해당 dto에다가 담는다? ( jpql 또는 querydsl )
  3. 문제 id, 메모리 제한(memoryLimit), 시간제한(tiemLimit), 입력값(input), 기댓값(output) dto 생성
  4. 문제 id를 받아서 문제랑 테스트 케이스랑 join 해서 on 조건을 id로
ProblemInfo problemDomainService.getProblemInfo(Long problemId) {
1. problemRepo.findById(problemId) // 선택 ( 중복 코드 만든다 )
2. Problem problem = getProblem(problemId); // 선택 (기존꺼 쓴다 )
3. List<Testcase>  List = problem.getTestcase(); // 양방향 매핑 일단 해보자..
4. return new Testcase (problem, List ) ;
}

이런 샘플 코드를 줘서 코드를 구현하는데 쉽게 진행 할수 있었다.

⚡ 트러블 슈팅 1

배경

요구사항을 반영해 데이터 타입만 바꾸고, 다시 테스트를 하였을 뿐인데 403 에러는 뜨고, Spring Boot에서는 아무런 에러 로그가 발생하지 않는 현상. ( 원인을 알수 없음 ) → 스프링 시큐리티가 적용이 되기전 상태의 로직이였음.

원인 분석

  • 해당 브랜치에서는 스프링 시큐리티가 적용되어 있지 않으니 라이브러리가 직접 막지는 않는다고 인지.
    • @PreAuthorize("hasRole('ADMIN')") // 관리자만 가능 컨트롤러 내에서 주석처리 했기 때문에 이거는 아니라고 생각
  • JWT필터 부분에서 화이트 리스트에 추가를 해도 실행되지 않음.
  • 디버깅 모드를 컨트롤러나, 서비스단에 잡아서, api를 호출하여도 403에러는 뜨나 집었던 부분에서 멈추지가 않았다. ( 아예 들어오지를 않음 )
    • 튜터님에게 찾아감.

해결

튜터님에게 상황을 설명하고 디버깅 모드로해서 결국 찾아낸 곳이 jwt필터 부분에서 해당하는 로직에 잡혀서 실행이 되지 않았던 것이다.

 

스프링 시큐리티가 적용되지 않아서 예외처리 되지 안해도 된다고 생각을 하고, 바로 기능 구현에 앞서 나가 개발을 하였기 때문에 이러한 점들을 놓쳤다.

다시 한번 403 에러가 발생한다면 적절한 위치에다가 디버깅 모드로 테스트를 해서 오류를 찾아내는 연습을 해봐야겠다는 생각이 들었다.

🔍 .env 파일 

팀원중 인프라를 담당하시는 분 께서 AWS에서 운영할때 properties 파일이 필요하기 때문에 gitignore에서 관리를 못하게 했던 기능을 풀어줘서 내가 git rebase를 할때 properties까지 같이 초기화되어서 당황했다.

급히 한 팀원을 부르고 한번 properties를 확인해보라고 하고, 본인도 그렇게 되어 있어서 또 다른 팀원에게 찾아갔더니 인프라 담당 쪽에서 수정했다고 해서 다행으로 여겼다. 

그리고 인프라 담당 팀원이 와서, properties를 어떻게 다룰건지 설명을 하는중 .env 파일로 하여서 환경변수 설정을 하여 하는 방법을 알려주셨다. .env 를 다룬 블로그 사이트를 참고해서 다시 DB에 접근 할수 있었다.

스프링 프로젝트에 .env 적용하기(IntelliJ기준)

 

스프링 프로젝트에 .env 적용하기(IntelliJ기준)

최근에 스프링 부트, jdbc를 이용해 crud 실습을 진행하면서 Application.properties에 데이터베이스에 관련한 설정 값들을 추가하였다.spring.application.name=projectNamespring.datasource.url=jdbc:mysql://my-database.examp

famileyj.tistory.com

 

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 72 - [ Spring 최종 프로젝트 ( Day 8 ) - 코드 리팩토링, 5분 브리핑 준비 (1회차) ]  (0) 2025.06.09
TIL 71 - [ Spring 최종 프로젝트 ( Day 7 ) - 문제 기획, 웹 크롤링(Selenium) 공부 ]  (0) 2025.06.05
TIL 69 - [ Spring 최종 프로젝트 ( Day 5 ) - 구현 ( 문제 관리 CRUD ), git rebase ]  (0) 2025.06.02
TIL 68 [ Spring 최종 프로젝트 ( Day 4 ) - 구현 ( 문제 생성 ) + SQLD 공부 ]  (0) 2025.05.30
TIL 67 [ Spring 최종 프로젝트 ( Day 3 ) - S.A피드백 , API명세서, Jira ]  (0) 2025.05.29
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 72 - [ Spring 최종 프로젝트 ( Day 8 ) - 코드 리팩토링, 5분 브리핑 준비 (1회차) ]
  • TIL 71 - [ Spring 최종 프로젝트 ( Day 7 ) - 문제 기획, 웹 크롤링(Selenium) 공부 ]
  • TIL 69 - [ Spring 최종 프로젝트 ( Day 5 ) - 구현 ( 문제 관리 CRUD ), git rebase ]
  • TIL 68 [ Spring 최종 프로젝트 ( Day 4 ) - 구현 ( 문제 생성 ) + SQLD 공부 ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    메모리
    컴퓨터구조
    코딩테스트
    내일배움캠프
    트랜잭션
    웹
    CPU
    개발자
    SQL
    운영체제
    알고리즘
    Python
    Til
    Java
    docker
    db
    web
    spring
    AWS
    cs
    It
    네트워크
    배포
    OS
    백엔드
    SQLD
    세션
    network
    Testcode
    KPT
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 70 - [ Spring 최종 프로젝트 ( Day 6 ) - 테스트 케이스 CRUD + 요구사항 반영, 트러블 슈팅1, .env 파일 ]
상단으로

티스토리툴바