일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- java
- 우리카드
- OS
- github
- 자바
- CS
- 운영체제
- 메모리
- 신입사원
- 세마포어
- 컴퓨터과학
- 정보처리기사
- 스프링
- 뮤텍스
- package-private
- Effective Java
- 깃
- 개발
- IT
- 컴퓨터공학
- 프로그래밍
- Public
- 공채
- 스터디
- 이펙티브 자바
- 깃허브
- 디지털
- 알고리즘
- 신입
- spring
- Today
- Total
목록Spring (30)
주니어 개발자 성장기
엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있으면, 변경 포인트가 너무 많아서, 유지보수가 어렵다! 모든 연관관계는 지연로딩으로 설정! (중요) 즉시로딩 (EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다! 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시 로딩이므로 직접 지연로딩으로 설정해야 한다. 컬렉션은 필드에서 초기화 하자. 컬렉션은 필드에서 바로 초기화하는 것이 안전하다. null 문제에서 안전하다. 하이버..
애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다. 다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Qualifier("mainDiscountPolicy") public @interface MainDiscountPolicy { } @Qualifier를 적용할 클래스에 적용 @Component @MainDiscount..
롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 필드에 final 키워드를 사용하게 된다. (final 키워드를 달면 생성자 호출 이후에는 변경이 불가능하다. - 상수) 하지만 생성자를 작성하는 것은 번거롭기 때문에 다음과 같은 방법을 쓴다. 생성자에 @Autowired 생략 생성자가 1개라면 생략 가능하다. 롬복의 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다. 위의 두 방법을 동시에 사용하면 깔끔한 코딩이 가능하다. 조회 빈이 2개 이상 - 문제 @Autowired는 타입(Type)으로 조회한다. 따라서 같은 타입의 Bean이 두 개가 있으면 오류(NoUniqueBeanDefinitionEx..
다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 *중요! 생성자가 1개 있으면 @Autowired를 생략해도 된다! * 물론 스프링 빈에만 해당한다. 생성자 주입은 스프링 빈 등록단계에서 의존 관계 주입이 함께 이루어 진다. 수정자 주입(setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다. 특징 선택,변경 가능성이 있는 의존관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 ..
탐색 위치와 기본 스캔 대상 탐색할 패키지의 시작 위치 지정 모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다. @ComponentScan( basePackages = "hello.core" ) basePackages: 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다. 여러 개의 시작위치를 지정할 수도 있다. 만약 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. 권장하는 방법 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이다. 최근 스프링 부트도 이 방법을 기본으로 제공한다. 참고로 스프링 부트를 사..
컴포넌트 스캔과 의존관계 자동 주입 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 실무에서는 스프링 빈이 수십, 수백개가 되기 때문에 일일이 등록하기가 어렵다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또한 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. AutoAppConfig.java @Configuration // AppConfig.java도 Component이기 때문에 필터링을 통해 자동등록에서 제외시킨다. @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterT..