본문 바로가기

공부/트러블슈팅

(7)
아키텍쳐 고민 최종 프로젝트는 3레이어드 아키택쳐를 이용한 프로젝트를 진행했다 발단(순환 참조를 해결하자) Controller, Service, Repository 계층을 이용했다. 이때 우리는 다른 도메인의 Entity를 찾아와야할 때 해당 도메인의 Service에서 예외처리까지 마쳐서 Entity를 얻는 메서드를 public으로 열어두도록 컨벤션을 정했다. 여기에는 장/단점이 존재한다. 장점은 - 코드 중복을 줄일 수 있다. Repository에서 Optional로 Entity를 가져올 때 예외처리를 해줘야 한다. 이를 각 도메인에서 만들어서 public으로 열어두면 다른 도메인의 서비스에서 사용할 수 있어 코드중복을 피할 수 있다. 단점은 - Service끼리 참조를 하기 때문에 순환 참조에 걸릴 수 있다. 우리..
TestSuiteExecutionException 오류(수정) 와! 경남님! 준영님! 구세주다. 테스트를 테스트(?) 하다가 생긴 오류. 내가 진짜 맥을 잘못 짚어서 엉뚱한 것을 찌르고 있었다. 다행히 한시간 정도 고민하고, 동료들에게 질문을 해서 답을 얻었다! 내가 삽질 한 이유는 다른 오류였따. 우선 오류 상황을 보자. 여기 첫줄에 이 오류가 떠있다. 이 오류의 무서운 점은 내가 갖고 있는 프로젝트의 모든 테스트 코드가 똑같은 오류를 갖는 다는 것! 원래 잘 작동하던 기존의 프로젝트도 같은 오류로 인해 테스트가 아예 뜨질 않는 것이였다. 근데.. 나는 맨 윗줄을 보지 않고 아래의 ClassNotFoundException 오류만 계속 공부했다. 첫번째로 https://www.movingjin.com/27 IntelliJ에서 java.lang.ClassNotFoun..
스프링 내부 객체 사용 실수 인증/인가 필터단을 설계하면서 UserDetails를 구현한 UserDetailsImpl을 커스텀해서 사용했다. 이 UserDetailsImpl에 내가 사용하는 Entity인 User와 매칭 시키기 위해 UserRepository의 값을 꺼내와서 UserDetailsImpl에 넣어줘야 한다. 따라서 UserDetailsService 클래스를 사용해야 한다. 근데 여기서 문제가 생겼다. 스프링에서는 UserDetailsService는 이미 존재하는 클래스인 것. 따라서 주의 없이 UserDetailsService 클래스를 필드값으로 갖는 클래스를 사용할 때 잘못된 클래스를 가져올 수 있다. (내가 그랬고, 우리 팀원이 그랬다.) [해결방법] UserDetailsImpl의 로직을 사용하는 클래스의 이름을 U..
빈 생성 오류 트러블 슈팅 Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed 오류가 났다. jwtUtil을 빈으로 만드는데 실패했다는 것 같다. autowired를 해줄 의존성이 없다? 그래서 구글링 한 결과 대부분 @Service와 같이 @Component 어노테이션이 생략이 돼있어서라고 하는데, 나는 JwtUtil이고, @Component 어노테이션도 달려 있었다. 구글링으로는 답이 없어 튜터님께 찾아갔다. [해결방법] 답은 간단했다. @Value("${jwt.secret.key}") // Base64 Encode 한 SecretKey private String secretKey; 이부분에서 문제였다. 왜냐하면 @Value 어노..
[Spring] Could not write JSON: Infinite recursion (StackOverflowError) 으악 이거 뜨면 좀 멘붕이다. 왜냐면 오류난 로그를 올리면 진짜 끝도 없이 계~~속 올라가야 한다. 이 에러의 이유는!! 바로 재귀 호출이다. 내 프로젝트에서 발생한 이유는 다음과 같다. 나는 카드 Entity와 댓글Entity 를 연관관계를 맺어 사용하고 있엇다. 카드 1 : N 댓글의 관계를 맺었다. 따라서 댓글 클래스에는 Card 필드를 ManyToOne으로 가지고 있다. 외래 키의 주인은 댓글! public class Comment extends Time{ ... // 카드 하나에 여러 댓글을 달아야 하니까 N의 관계 @ManyToOne @JoinColumn(name = "card_id") private Card card; ... 카드 클래스에는 댓글이 List형식으로 필드로 갖는다. public..
[Spring] DB 연결 실패 진짜 개멍청이다. DB에 왜 데이터가 들어가지 않을까? 이걸 몰랐다.. 이유는! spring.datasource.url=jdbc:mysql://localhost:3306/todolist 여기 마지막 경로가 잘못됐었다.. 진짜 기본도 안된 상태로 DB를 쓰려니 이런 어처구니 없는 실수에 시간을 자꾸 뺏긴다. 그래도 이번에 확실히 알았으니 다행. 샤라웃 투 규정님.(보자마자 이거 바로 아셨다. 역시 개고수)
[Spring] 406, 500 에러 트러블 슈팅 기본 crud를 구현하고 있었다. 포스트맨을 통해 JSON형식으로 값을 보내는 형식으로 테스트 중. 그중 500번 오류가 났다. 500번 오류는 서버단에서 나는 오류.(아 스크린샷을 못찍었다..) 내가 만났던 오류는 데이터베이스의 칼럼 중 DATE는 "NULL"이여선 안된다 라는 것. 이 오류가 났던 이유는 내가 ENTITY에 DATE값을 NULLABLE = FALSE를 해놓고 넣을 줄을 몰라서 엉뚱하게 넣었고, 그 이유로 NULL값이 들어갔기 때문. 해결방법은 package com.example.to_do_list.entity; import jakarta.persistence.*; import lombok.Getter; import org.springframework.cglib.core.Local; i..