일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Java
- 라이프 사이클
- dependency injection
- 로그인
- DB
- cache
- HTTP 메서드
- Kotlin
- vue-cli
- Excel
- Singleton
- VUE
- 의존성 주입
- js
- vuex
- 프로토타입
- Stateless
- 캐시
- BEAN
- 싱글톤
- Spring
- Vue.js
- Setter
- HTTP
- di
- JPA
- thymeleaf
- Repository
- javascript
- Security
- Today
- Total
목록전체 글 (130)
jhhan의 블로그
이번 포스트에서는 제목처럼 2개 이상의 빈이 있을 때 어떻게 처리하는지 알아보겠습니다. 원래 스프링 빈은 하나가 등록되어야 합니다. 하지만 인간이기에 스프링 빈을 2개 이상 등록하는 실수를 할 수 있습니다. 그러면 에러가 발생하겠죠.. 이런 에러가 발생하는 것을 막는 법에 대해 알아보겠습니다. 일단 먼저 스프링 빈이 2개 등록되었을 경우를 알아보겠습니다. 저는 DiscountPolicy 인터페이스로 2개의 구현체를 만들었습니다. 그 중 RateDiscountPolicy에만 @Component 애노테이션이 있었기 때문에 OrderServiceImpl을 실행하는데 문제가 없었습니다. 근데 FixDiscountPolicy에도 애노테이션을 넣는다면 어떻게 될까요? FixDiscountPolicy에도 추가를 한 ..
이번 포스트는 의존관계 주입과 관련해서 약간 부가적으로 더 이야기 해보려 합니다. 의존관계 주입의 경우 스프링 빈에 등록이 되어 있는 경우에만 작동합니다. 하지만 사람이 코드를 만들기 때문에 간혹 스프링 빈에 등록이 되어 있지 않을 수 있습니다. 혹은 주입할 스프링 빈이 없어도 동작이 되어야 하는 경우가 있습니다. (전자의 경우 코드를 수정하면 되겠지만, 후자의 경우는...?) 이 때 @Autowired만 되어있으면 옵션이 required = true로 되어있기 때문에 주입 대상이 없으면 오류가 발생하게 됩니다. 그러면 이런 경우에 대비를 해야합니다. 방법 @Autowired(required = false) @Nullable Optional 3가지를 활용하면 됩니다. 테스트를 해보기 위해 autowire..
오랜만에 다시 포스트를 작성해 봅니다. 이번 포스트에는 의존관계 주입에 대해 작성해 보려고 합니다. 의존관계 주입은 다른 블로그에서도 많이 설명하고 있는 내용이기 때문에 굳이 제 블로그에 오셔서 볼 필요는 없겠지만, 그래도 중요한 내용이므로 정리를 해놓겠습니다. 의존관계 주입은 크게 4가지로 나눌 수 있습니다. 생성자 주입(권장) Setter 주입 필드 주입 일반 메서드 주입 4번째는 처음 들어보는 것 같습니다. 그럼 순서대로 알아보겠습니다. 1. 생성자 주입 생성자를 통해서 주입 받는 방법입니다. 현재 Spring에서 가장 많이 사용되고 있음. Spring 정책 상으로도 가장 권고되는 방법 많이 쓰이므로 꼭 알아놓는 것이 좋습니다. 특징 생성자 호출 시점에서 1번만 생성되는 것이 보장됨 불변 & 필수인..
저번 포스트에 이어서 컴포넌트 스캔에 대해서 계속 알아보겠습니다. 이번엔 필터에 대해 더 알아보죠. 필터의 종류로 2개가 있습니다. includeFilters: 컴포넌트 스캔 대상에 추가함 excludeFilters: 컴포넌트 스캔 대상에서 제외함 단어만으로 바로 예측할 수 있죠. 그러면 이번엔 어노테이션도 만들어보면서 확인해보겠습니다. 전에 만들어놨던 scan 패키지 안에 filter 패키지를 따로 만들고 진행합니다. 2개의 어노테이션은 각각 어노테이션 클래스로 진행합니다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { /** * 이 어노테이션이 사..
이번 포스트에서는 컴포넌트 스캔에 대해서 알아보겠습니다. 지금까지 배운 내용으로는 스프링 빈을 등록할 때는 자바 코드의 @Bean 을 통해 설정 정보에 직접 등록했습니다. (혹은 XML의 을 통해서도 가능) 이렇게 등록하는 것은 등록할 것이 적을 때는 가능합니다. 근데 여기서 조금만 확장을 해보면 10개 등록하는 것이 어려운 일이 아니게 될 것입니다. 그러면 실무에서는 이것보다 훨씬 더 많은 빈이 등록되어야 할텐데 그걸 일일이 등록해야 할까요? 그건 비효율적이라고 생각하고, 아마 중복 등록이나 미등록 같은 오류가 일어날 확률도 높습니다. 그래서 스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록할 수 있게 합니다. 바로 '컴포넌트 스캔' 이라는 기능입니다. (그리고 의존관계 자동 주입으로 @Aut..
이번에는 Singleton 패턴과 @Configuration 어노테이션에 대해서 알아보겠습니다. 이전까지의 예제를 통해서 싱글톤 패턴에 대해서 잘 배운 것 같습니다. 이제 다시 한번 AppConfig 파일을 살펴보겠습니다. @Configuration public class AppConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public MemberService..
이번 포스트에서는 싱글톤 방식에서 주의해야할 점에 대해서 알아보겠습니다. 싱글톤 패턴이나 스프링의 싱글톤 컨터이너이거나 객체 인스턴스를 하나만 생성해서 공유하는 방식에서 주의해야할 점이 있습니다. 바로 상태를 유지하게(stateful) 설계하면 안된다는 것입니다. 상태가 없도록(stateless) 설계해야 합니다. 즉, 특정 클라이언트에서 의존적인 필드가 존재하면 안됨. 특정 클라이언트에서 값을 변경할 수 있으면 안됨. 수정 로직이 있으면 안됨 & 읽기 로직만 존재할 것 공유되지 않는 지역변수, 파라미터 등을 사용해서 진행해야 함 이렇게 하지 않고 스프링 빈의 필드에 공유 값을 설정하면 큰 문제가 발생할 수 있습니다. 문제가 일어나는 예시를 한번 살펴보겠습니다. singleton 패키지 밑에 Statef..
이번 포스트에서는 싱글톤 패턴에 대해서 알아보겠습니다. 싱글톤 패턴은 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴 2개 이상의 객체가 만들어지지 않게 한다! 간단하게 생각하면 private을 이용해서 new로 생성하지 못하게 할 수 있다. 그러면 싱글톤 패턴을 간단하게 적용할 수 있게 해보겠습니다. singleton 패키지 밑에 SingletonService 자바 파일을 만듭니다. public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; } pr..