본문 바로가기

Spring6

[스프링 부트 + JPA] 잘 되던 테스트가 갑자기 안되는 경우 JPA metamodel must not be empty! 향로님의 프리렉 책을 따라 학습하던 도중, JPA Auditing을 추가한 다음 전체 테스트를 돌려봤더니, MockMvc를 이용한 테스트가 빨간줄이 뜬다. 오류 원인 원인은 위와 같이 Application 클래스에 @SpringBotoApplication과 함께 @EnableJpaAuditing을 붙인 것이다. Spring 컨테이너를 요구하는 테스트를 실행하면, 자동으로 기본이 되는 Application 클래스를 로딩한다. jpa 다른 슬라이스 테스트(참고 : 테코블 파피님)들까지 JPA 관련 빈을 요구하게 되면서 문제가 생긴다. 해결 1 실력이 미천하여 이해를 할 수 없었다. 갑자기 왜 jpa metamodel이 비었다는 것인지.. 구글과 블로거분들이 해결해줬다. 예시 1 Application에 있던 .. 2022. 11. 9.
스프링 핵심 원리 기본편 - 컴포넌트 스캔 인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리이며, 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다. 컴포넌트 스캔과 의존관계 자동 주입 @ComponentScan 여태 @Bean 또는 XML의 등을 통해서 설정정보에 직접 등록한 스프링 빈을 나열했다. 그런데 서비스가 엄청나게 크다면 일일히 해당 키워드들을 추가해야할 것이다. 스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 지원한다. 위와같은 번거로움을 없애준다. @ComponentScan을 클래스에 붙여주면, @Component 어노테이션을 붙인 타입(클래스)들을 빈으로 등록해준다. 여기서 주의할 점은 @Configuration를 붙여준 클래스들도 자.. 2022. 9. 6.
스프링 핵심원리 기본편 - 싱글톤 컨테이너 인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리이며, 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다. 웹 애플리케이션과 싱글톤 대부분의 스프링 애플리케이션은 웹 애플리케이션이며, 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 하는 구조이다. 그렇다면 수 많은 고객들이 요청할때마다 객체가 생성된다면 메모리 낭비가 심해질 것이다. 예시로 초당 트래픽이 100이라면, 객체가 100개씩 생성되고 소멸할 것이다. 해결책 : 싱글톤 패턴 그것을 해결하는 방법이 싱글톤 패턴이다. 클래스 인스턴스가 1개만 생성되도록 보장하는 디자인 패턴이다. 수많은 고객들은 하나의 인스턴스를 공유하는 것이다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴을 .. 2022. 9. 5.
스프링 핵심원리 기본편 - 스프링 컨테이너와 스프링 빈 인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리이며 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다. 스프링으로 전환 ApplicationContext에서 (@Configuration이 적힌) 구성정보 활용하여 컨테이너 생성 @Configuration : 해당 어노테이션을 달아주면 해당 구성 정보를 사용한다. 해당 강의에서는 AppConfig에 달아줬다. @Bean 이 표시된 메서드들을 모두 호출해서 반환된 객체들을 스프링 컨테이너에 등록 getBean으로 꺼내와서 Service를 사용한다. 스프링 컨테이너 ApplicationContext를 보통 스프링 컨테이너라고 한다. BeanFactory는 그 위에 최상위 클래스인데, 사실 직.. 2022. 9. 2.
스프링 핵심 원리 기본편 - 주문과 할인 도메인 설계, IoC 인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리로 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다. 실제 강의에는 리팩터링 과정이나 세부과정과 좋은 설명들이 많습니다. 강의를 꼭 들어보시길 추천드립니다. 주문 도메인 먼저 위와 같은 설계가 있다. Member객체는 번호, 이름, 등급(id, name, grade)을 가진다. 서비스에서는 들어온 주문을 바탕으로 MemberRepository에 저장된 내용에서 회원등급을 읽어오고, 해당 등급에 따른 할인 정책을 찾아서 적용시킨다. 여기서 주안점은 이전 글에 서술한 SOLID를 지키면서 프로그래밍 하는 것이다. 그래서 인터페이스의 다형성을 활용한다. OrderService를 추상화(인터페이.. 2022. 8. 30.
스프링 핵심 원리 기본편 - SOLID란 무엇인가? 인프런 김영한님의 스프링 핵심원리 - 기본편을 학습하고 정리한 내용입니다. 학습 목적의 정리이며 모든 강의 내용을 정리하진 않습니다. 틀린 부분 지적해주시면 감사하겠습니다. 해당 강의에서는 순수 자바로 도메인을 설계하고 구현한다. 앞에 나올 SOLID 원칙을 지키면서 순수 자바로 구현하면, 자연스레 스프링의 원리에 다가가게 된다고 한다. 우선 SOLID 원칙이 무엇인지 알아보자. 역할과 구현 : 운전자 - 자동차 SOLID를 알아보기전에 자동차 역할과 구현에 대해 먼저 공부하면 이해를 도울 수 있다. 위와 같이 자동차의 역할과 그의 구현으로 분리해보자. K3, 아반떼, 테슬라 모델3는 자동차라는 역할을 가지지만 구체적인 구현방식은 제각각 다르다. 어떤 연료를 쓰는지, 어떤 방식으로 작동하는지 디테일한 부.. 2022. 8. 30.