본문 바로가기

반응형
SMALL

Server/Spring

(24)
[우당탕탕 개발 일지] @Builder의 잘못된 사용 예시, List 필드가 있으면 Builder를 신중하게 사용하자! 에러 발생 🚨 Cannot invoke add 어쩌구 is null 요런 에러는 십중팔구 99퍼 List 필드에 초기화를 안해줘서 발생하는 에러인데,, 나는 Entity 필드 new ArrayList() 초기화 해줬는데 왜 안되지...? 😧 멘탈이 잠깐 나갈 뻔 했다. 에러 로그를 타고 타고 들어가서 고심한 결과,,, 여기!!! Order 생성 메소드에서 Order 생성을 빌더로 하고, orderItems 필드는 초기화를 안 해줬더랬다~ 그러니 orderItems는 null로 초기화 되고, NullPointerException 에러가 발생할 수밖에 😳 그래서 빌더 대신 생성자 방식으로 Entity를 생성해줬고, 그 결과 테스트가 아주 잘 통과된다! 🤩 하하하. 빌더를 잘못 쓰면 안된다고만 듣고 그 사례는..
[우당탕탕 개발 일지] JUnit5로 예외 테스트 JPA 기반의 Spring Boot 활용 관련 강의를 보고 공부하던 중, 예외 처리를 테스트하는 중이었다. @Test 어노테이션에 expected 옵션으로 예외 테스트를 할 수 있다고 배웠다! 테스트하려는 상황은, 중복된 회원을 create 했을 때 예외가 발생하는 상황이었다. 흠..? 🤔 테스트를 돌리기도 전에 입구 컷! 알고보니 강의는 JUnit4를 사용했고, 내 로컬은 JUnit5를 사용하고 있다는 차이가 있었다. >. {예외가 발생할 코드}); 위와 같은 형식으로 사용해주면 된다! Ref..
[날카로운 질문하는 머쓱이] 빈 스코프에 따른 생명 주기 스프링 IoC 컨테이너는 Bean 객체들을 책임지고 의존성을 관리한다. 스프링 Bean은 객체와 같이 초기화 및 종료 작업이 나눠 진행된다. 객체 생성부터 의존 관계 주입 -> 초기화 콜백 메서드 호출 -> 사용 -> 소멸 전 콜백 메서드 호출 -> 스프링 종료 와 같은 생명 주기를 가진다. 여기서 빈 생명주기 콜백은 3가지 방법으로 관리된다. 1. 인터페이스 (InitializingBean, DisposableBean) - InitializingBean 인터페이스의 afterPropertiesSet 메서드로 초기화를 진행한다. - DisposableBean 인터페이스의 destroy 메서드로 소멸을 진행한다. - 스프링 초기에 나온 방식으로 지금은 거의 사용하지 않는다. - 스프링 전용 인터페이스이기 ..
[날카로운 질문하는 머쓱이] N+1 문제 오늘의 질문 빠밤 >~< N+1 문제 ..? 처음 들어봤다! N+1 문제 JPA 연관 관계에서 발생하는 이슈로, 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(n)만큼 연관 관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 되는 것 예를 들어, 주문 내역에서 구매 상품(연관 관계가 설정된 엔티티)들을 조회할 때, 구매 상품 수만큼 조회 쿼리가 발생한다. 발생 이유 JPA는 메서드 이름을 분석하고 JPQL을 생성하여 실행된다.(JPQL은 SQL을 추상화 한 객체지향 쿼리 언어로써 특정 SQL에 종속되지 않고 엔티티 객체와 필드 이름을 가지고 쿼리를 실행한다.) 조회 쿼리(예를 들면 findAll())를 날리면 연관 관계를 무시하고, 해당 엔티티만을 조회하는 쿼리를 실행한다. 그렇기 때문..
[우당탕탕 개발일지] 로그인 가능한 사용자 계정 추가하기 & PasswordEncoder 우당탕탕 강의를 들으며 코드를 작성해가는 중입니다 ㅇㅁㅇ ..!! 오늘의 문제 발생 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user").password("{noop}user123").roles("USER") .and() .withUser("admin").password("{noop}admin123").roles("ADMIN") ; } 어제와 다름 없이 사용 중지된 Adapter에서 오버라이딩 하여 inMemoryAuthentication() 이라는 메서드를 사용하여 사용자와 관리자 계정을 추가했다. 그래서 대체 방..
[우당탕탕 개발일지] WebSecurityConfigurerAdapter 지원 불가 이번 주부터 Spring Security 관련 강의 듣기를 시작했다. ((두근두근)) 어려움의 프레임으로 돌돌 쌓인 보안 관련 친구라 설렘 반 두려움 반 입니다! 그리고 설정에서부터 막혔다. ㅇㅁㅇ !! 강사님은 WebSecurityConfigurerAdapter을 상속해서 쓰셨는데, 찾아보니 지원 중지 됐다고 한다. (WHAT ?!) 2020년까지도 멀쩡했던 친구 같은데,,, 왜,,, ㅠㅅㅠ 해결방법은 따로 Bean을 등록해서 사용해주는 것이었다. 복잡시러워라 ㅇㅅㅇ https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter Spring Security without the WebSecurityCon..
[우당탕탕 개발일지] JPA Repository 오류, Not a managed type: class java.lang.Object java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@31aa9 b01 testClass = com.example.springbootpart4.domain.order.OrderRepositoryTest, locations = [], classes = [com .example.springbootpart4.SpringBootPart4Application], contextInitializerClasses = [], activeProfiles = [], proper tySourceLocations = [], propertySourceProperties = ["org.springfram..
[TIL] 영속성 컨텍스트 (Persistence Context) 오늘 강의에서는 영속성 컨텍스트의 개념과 구조, 기능들을 배울 수 있었다. 구조를 이해한 후, 기능에 대한 설명을 들으니 DB에 어떻게 접근하고 데이터를 어떻게 가져오는지 더 잘 알 수 있어서 좋았다. 먼저, Entity와 EntityManager에 대해 알 수 있었다. 지난 시간에 Bean으로 등록하면서 사용한 몇 패키지들을 몰라서 찾아 공부하면서도 모르는 부분이 모호하게 남아있었는데, 오늘 강의에서 정확히 알고 넘어갈 수 있어서 좋았다. Entity: RDB의 테이블과 매핑되는 객체 EntityManagerFactory: EntityManager을 생산하는 공장으로, Thread safe 해서 여러 Bean이 접근해도 안전하다. EntityManager: CRUD와 같은 모든 트랜잭션을 처리하고, T..

반응형
LIST