- JPA 부모 둘인 entity 한쪽 부모에서 cascade.all 시 참조 무결성 오류 발생
- Querydsl 적용 후 실행 시 'cannot find symbol' 에러
- https://husheart.tistory.com/160
- Lombok이 코드를 만들기 전에 QueryDsl 이 먼저 컴파일을 작업하여 롬복이 만들어낼 코드를 찾을수 없다고 에러를 띄운다. 아래와 같이 build.gradle에 Lombok 작업후 QueryDsl 컴파일을 지시하도록 하자
- plugins에
id "io.franzbecker.gradle-lombok" version "3.0.0"
추가
// build.gradle 추가 project.afterEvaluate{ project.tasks.compileQuerydsl.options.compilerArgs =[ "-proc:only", "-processor", project.querydsl.processors()+ ',lombok.launch.AnnotationProcessorHider$AnnotationProcessor' ] }
testCompileOnly("org.projectlombok:lombok") testAnnotationProcessor("org.projectlombok:lombok")
⇒ 됐다가 안됨;;
⇒ IntelliJ gradle 버전과 프로젝트 gradle 버전이 달라서 생긴 문제였다. → gradle/gradle-wraaper.properties의 버전을 수정 7.2→7.3으로 맞춰주니까 괜찮다
멘토님 미팅 피드백
- 주소
- 테이블 → Address 테이블 만들고, 시도 / 시군구 / 구장 이렇게 구분할 수 있도록 필드 하나를 더 만들기
- 네이티브 쿼리로 (객체지향적이지 않음)
- 객체지향 포기하지 않으려면 attributeconverter 사용 - 특정 필드 핸들러
- 파일 업로드
- API를 두 개로 분리 - 하나는 파일업로드 / 정보 따로 만들기(나중에!)
- 생성할 때는 key 내려주는게 좋다
- 토큰 없을 때 만들어 놓는 API는 토큰을 가짜로 만들어놓아보자
- 어노테이션 적게 쓰자 → @Transactional을 클래스 단위로, readOnly 필요한 메서드만 적용
- assertThat(객체).extracting("").isEqualTo();
- 테스트코드를 400 예외 → 파라미터가 터트리는 ex) 팀이름 null이라던지, 길이 오버된거, sports string 터지는 것
- 컨트롤러 테스트는 성공 위주로, 200만 봐도됨
- MySQL 8버전 이후로 groups 키워드 생겼음 (더 찾아봐야됨) → 그래서 테이블 생성이 안됨 → 테이블명 바꾸기
- 순환참조 문제
- User - TeamUser 간 순환참조 문제 발생
- 해결 : 한 곳의 서비스에서 다른 곳의 서비스를 주입받지 않고 바로 repository를 주입받도록 함
- 다른 해결 방법은?
- 타 팀에서는 순환 참조 문제를 Service 레이어 계층을 하나 더 만들어서 해결했음
- LazyInitializationException 문제
- JPA 관리 범위 밖( @Transactional 밖) 에서 LazyLoading 대기 상태이던 필드에 접근할 때 발생
@Transactional
- TeamUser ←→ User N:1 양방향 매핑에서, TeamUser를 제거할 때 User.getTeamUsers.remove(this) 해줘야할지, 안해도되는지?
- 팀 해체 시 HirePost(용병 게시글), TeamUser(팀원), Match(매칭) 에 대해 모두 영향이 가도록 설정했다.
- 다른 부분은 괜찮지만, HomeTeam, AwayTeam 으로 참여한 모든 Match 기록이 제거된다.
- 만약 cascade를 지운다면, 기존 로직에서 .getHomeTeam() 이나 getAwayTeam()에 대한 처리를 해주어야 한다.(공수-비용 필요)
- 배포 후 post 나 PUT 요청시 403 에러
- 원인 :
- 해결 :

로컬에서는 정상 작동하였지만 배포 서버에서는 get을 제외한 http method 요청시 403
HttpSecurity.requestMatchers(CorsUtils::isPreFlightRequest) .permitAll()