Java/Spring Framework (23) 썸네일형 리스트형 Resource 스프링에서는 Resource 를 추상화하였습니다. 즉, java.net.URL 을 추상화했습니다. 이렇게 추상화를 한 이유는 java.net.URL이 기존에는 classpath를 기준으로 resource 를 가져오는 기능이 없었습니다. 이전 포스팅에서 설명한 ReourceLoader 를 이용해서 resource 를 가져와야했습니다. 이런 방법을 통일시켰습니다. ApplicationContext를 생성할때 ClassPathXmlApplicationContext() 의 parameter가 내부적으로 resource 로 추상화됩니다. 내부에서는 resource 가 사용되고 있습니다. classpath 기준으로 parameter의 파일을 찾는 것입니다. 그 외에도 FileSystemXmlApplicationCo.. MessageSource ApplicationContext 가 상속받고 있는 인터페이스인 MessageSource 는 국제화 기능과 관련된 기능입니다. 즉, 메시지를 다국화하는 기능을 가지고 있습니다. MessageSource 에 있는 getMessage 메소드를 이용하기 위해서 resource 하단에 아래와 같은 파일을 추가해줍니다. 이 파일들은 MessageSource 가 읽어냅니다. 이렇게 getMessage 에 첫번째 파라미터로 입력한 첫번째 값을 두고 뒤에 필요한 부분을 배치하면 됩니다. ApplicationEventPublisher & ResourceLoader ApplicationEventPublisher ApplicationEventPublisher 는 이벤트 프로그래밍에 필요한 인터페이스를 제공하며 옵저버 패턴의 구현체입니다. 이벤트를 발생시킬 수 있는 기능을 ApplicationContext 가 가지고 있습니다. Spring 4.2 이전에는 Event는 Application Event 를 상속받아야하고 Event Handler는 Bean으로 등록 후 ApplicationListener를 구현해서 사용해야 했습니다. 이를 통해 전달받은 이벤트를 가지고 원하는 작업을 수행할 수 있습니다. 4.2 이후부터는 Event는 Application Event를 상속받지 않아도 됩니다. Spring Framework가 추구하는 것은 비침투성입니다. spring fram.. Environment ApplicationContext가 가지고 있는 기능들을 살펴보겠습니다. ApplicationContext 는 Bean Factory 기능 뿐 아니라 다른 기능도 가지고 있습니다. ApplicationContext는 위 그림과 같이 여러 인터페이스들을 상속받고 있습니다. 오늘은 그중에서도 EnvironmentCapable 에 대해서 정리하겠습니다. Profile 빈들의 묶음으로 "환경"이라고 할 수 있습니다. 예를 들어 실제 상용에서는 A 환경을 쓰고 테스트할때는 B환경을 쓰려고 할때 이런 환경을 의미합니다. 각각의 환경에서 다른 Bean을 사용해야하는 경우나 특정 Bean을 사용해야하는 경우 Profile을 사용합니다. 아무런 Profile을 설정하지 않은 경우에는 ApplicationContext.g.. Scope 저희가 만든 모든 bean은 모두 scope을 가지고 있습니다. scope 은 크게 '싱글톤' , '프로토타입'으로 나눌 수 있습니다. 싱글톤: 해당 bean의 인스턴스가 오직 하나뿐입니다. 프로토타입: 매번 새로운 객체를 새로운 인스턴스를 만들어서 사용해야하는 scope입니다. 그림을 통해 프로토타입을 자세히 보겠습니다. 프로토타입의 Proto 클래스와 싱글톤타입의 Single 클래스를 만들겠습니다. 그런 후에 아래와 같이 각 빈을 호출해보면 Proto는 매번 다른 인스턴스를 만들어서 보여주는 것을 볼 수 있으며 Single은 항상 같은 인스턴스를 보여주고 있습니다. Singleton 타입의 Bean에서 Prototype 스콥의 Bean을 사용할때에는 주의를 기울여야합니다. 왜냐하면 Singletone.. Autowired & Component Spring boot 프로젝트에서 여러 annotation이 사용됩니다. 이번 글에서는 annotation에 대해서 정리를 진행하도록 하겠습니다. 객체의 의존성을 가지는 부분에 해당 어노테이션을 사용하여 쉽게 의존성을 주입할 수 있습니다. 의존 객체를 주입하는 방법은 스프링 설정파일에서 혹은 태그로 의존 객체를 명시하는 방법이 있습니다. 의존객체 자동 주입(Automatic Dependency Injection)은 스프링 컨테이너가 자동으로 의존 대상 객체를 찾아 해당 객체에 필요한 의존성을 주입해줍니다. 이를 구현하는 방법은 @Autowired 와 @Resource를 통해 구현가능합니다. 1. Autowired 1.1 설명 @Autowired는 주입하려하는 Bean의 타입이 일치하는지 찾고 의존성 주입.. 기본 개념 Spring Spring 의 기본부터 차근차근 정리해나가겠습니다. 1. IoC 컨테이너 IoC 란 Inversion of Control의 약어로 의존관계 주입이라고도 합니다. 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 것이 아닌, 주입 받아 사용하는 방법입니다. IoC는 Spring 없이도 사용 가능합니다. 그러나 그렇게 사용하지 않고 Spring을 사용하는 이유는 DI 방법의 노하우가 쌓여있는 방법이기 때문입니다. 초기에는 xml 방식으로 주입을 했었지만 현재는 annotation방식으로 주입하고 있습니다. Bean을 담고있는 것을 Container라 합니다. IoC 컨테이너가 관리하는 객체를 Bean이라 합니다. Bean으로 등록하는 이유는 의존성을 주입하고 싶거나 싱글톤으로 관리하고 싶은 경우 등록.. RESTful API 웹서비스 테스트 Spring 의 기본적인 시스템은 Test를 개발과 동일시하여 TDD기반의 개발을 진행합니다. Spring에서 진행하는 test는 사용하기 쉽게끔 만들어져있습니다. TDD는 단위테스트를 보다 편하게만들어줍니다. 단위테스트는 더 나은 코드를 더 빨리 만들어내주며, 상대적으로 더 쉽고 비용이 적게 드는 방식입니다. 단위테스트는 기업의 품질 경쟁력 뿐 아니라 프로그래머들을 보다 편하게 만들어주기 위해 존재하는 것입니다. JUnit JUnit은 단위테스트를 정형화시켜 쉽게 해주는 테스트 지원 프레임워크입니다. 스프링에서 JUnit 프레임워크 사용을 위해선 spring-test 라이브러리가 필요합니다. Service, Repository class는 빌드시 같이 테스트를 수행해야합니다. 단위 테스트란 소스코드의 .. 이전 1 2 3 다음