스프링(33)
-
[토비의 스프링 3.1] 2.1 UserDaoTest 다시 보기
스프링이 제공하는 가장 중요한 가치로 객체지향과 테스트를 꼽을 수 있다. 실제로 테스트를 작성할 때 JUnit 프레임워크를 사용했는데 손쉽게 사용할 수 있었다. 2장에서는 테스트의 가치, 활용 전략, 스프링과의 관계를 살펴본다. 2.1.1 테스트의 유용성 기존 1장에서 개발한 UserDao가 잘 동작하는지 확인하기 위해 테스트 코드를 작성했었다. main() 메소드를 이용해 UserDao를 직접 호출해서 add(), get() 메소드의 결과를 System.out.println()으로 콘솔에 출력해 눈으로 확인했었다. 웹을 통한 DAO 테스트 방법의 문제점 DAO를 테스트하고 싶은데 서비스, MVC 프레젠테이션 계층 등을 작성하고 테스트용 웹 서버에 배치한 뒤, 폼을 띄워 값을 입력해야 한다면 당연히 제대..
2022.06.01 -
@PostConstruct와 no EntityManager
에러 메시지 Caused by: javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call 웹 개발중 테스트 데이터를 매 실행마다 입력하기 번거로워서 jpa: hibernate: ddl-auto: create update로 변경할까 하다가, 그냥 애플리케이션이 실행할때마다 샘플 데이터를 저장하기로 했다. 일단 트랜잭션이 걸려있는 Service 단에서 sampleData 메소드를 작성했다. 빈 생성(여기서는 해당 코드가 있는 Service 클래스)과 의존관계 주입이 완료된 다음, sa..
2022.05.31 -
Could not autowire. No beans of 'EntityManager' type found.
Spring, JPA를 실습중인데, 테스트 코드를 작성하다가 제목과 같은 에러가 발생했다. 주입을 하려면 스프링으로 관리하는 Bean이 되어야 하는데, JPA와 스프링은 각자의 방식(영속성 컨텍스트와 스프링 컨테이너)으로 빈을 관리하거나 엔티티를 관리한다. JPA는 EntityManager라는 인터페이스를 주입할 때 고유의 injection annotation이 존재한다. @PersistenceContext EntityManager em; 지금까지 @Autowired로 문제없이 주입했던 것 같은데,, 앞으로는 위의 어노테이션을 사용해야겠다. 물론 @Autowired로 EntityManager를 주입받아도 테스트는 통과했다.. 참고한 링크 https://stackoverflow.com/questions/2..
2022.05.30 -
[토비의 스프링 3.1] 1.7 의존관계 주입(DI)
스프링의 IoC에 대해 좀 더 깊이 알아보자. 1.7.1 제어의 역전(IoC)과 의존관계 주입 DaoFactory처럼 객체를 생성하고 관계를 맺어주는 등의 작업을 담당하는 기능을 일반화 한 것이 스프링의 IoC 컨테이너다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불린다. 스프링이 여타 프레임워크와 차별화돼서 제공해주는 기능은 의존관계 주입이라는 새로운 용어를 사용할 때 분명하게 드러난다. DI의 핵심은 오브젝트 레퍼런스를 외부로부터 제공(주입)받고 이를 통해 다른 오브젝트와 다양하게 의존관계가 만들어진다는 것이다. 1.7.2 런타임 의존관계 설정 의존관계란? 두 개의 클래스 모듈이 의존관계에 있다고 말할 때에는 항상 방향성이 있어야 한다. 즉 누가 누구에게 의존하는 관계에 있다..
2022.05.28 -
[토비의 스터디 3.1] 1.6 싱글톤 레지스트리와 오브젝트 스코프
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 1.6. 싱글톤 레지스트리와 오브젝트 스코프 오브젝트의 동일성(identity)과 동등성(equality) 동일성은 == 연산자 동등성은 equals() 메소드 동일성은 하나의 오브젝트를 두 개의 레퍼런스 변수가 가리키고 있는 상태 동등성은 두 개의 다른 오브젝트가 메모리상에 존재하나, 로직상의 정의에 따라 오브젝트 정보가 같다고 판단 스프링은 기본적으로 빈을 요청했을 때 매번 동일한 오브젝트를 돌려준다. 1.6.1. 싱글톤 레지스트리로서의 애플리케이션 컨텍스트 애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리다. 서버 애플리케이션과 싱글톤 스프링이 적용되는 대상은 자바 엔터프라이즈 기술을 사용하는..
2022.05.27 -
[토비의 스프링 3.1] 1.5 스프링의 IoC
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 이제 스프링을 사용해본다. 기존에 만든 DaoFactory을 스프링이 사용 가능하도록 만들어보자. 간단한 개념을 소개하자면, 스프링이 제어권을 가지고 직접 생성과 관계를 맺어주는 오브젝트를 빈(Bean)이라고 한다. 빈의 생성, 관계 설정 등의 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 하며 애플리케이션 컨텍스트를 사용한다. 애플리케이션 컨텍스트는 별도의 설정 정보를 참고해서 빈에 대한 제어 작업을 총괄한다. 1.5.1 오브젝트 팩토리를 이용한 스프링 IoC 앞서 만든 DaoFactory를 스프링의 애플리케이션 컨텍스트가 사용할 수 있는 설정정보로 만들어보자. 먼저, 설정을 담당하는 클래스는 스프링이 인식할 수..
2022.05.27