EzKorry / spring-summer

0 stars 0 forks source link

배워서 바로 쓰는 스프링 프레임워크 #4

Open EzKorry opened 4 years ago

EzKorry commented 4 years ago

책 공부

hasterprin commented 4 years ago
  1. 지정한 패키지 내에서 애너테이션으로 컨테이너에 빈을 등록하려 할 때 필요한 설정(추가적인 패키지와 제외할 패키지경로 설정방법도)

  2. 빈 자동 연결 시 반드시 1:1로 연결이 되어야 하는가? 1:n 이 가능한 방법은?

  3. @autowired 와 @Qualifier 을 사용했을 때 스프링이 빈을 찾아가는 과정과 @Resource 를 사용했을 때의 과정을 설명하고 반드시 @Resource를 사용해야하는 경우를 설명하시오

  4. 스프링 검증 api와 JSR380 api를 사용성 측면에서 간단히 비교하고 JSR380 의 제약사항 애너테이션을 10가지 이상 나열하라 (알아두면 좋을거같아서ㅋㅋ 구글링 ㄱ)

  5. 구체적인 클래스의 직접 참조가 아닌 인터페이스를 활용한 프로그래밍을 했을 때의 장점과 스프링이 이러한 설계 방식에 적합한 이유(낼게업어성.. chapter2 활용함..)

EzKorry commented 4 years ago
  1. @Autowired, @Inject, @Resource 세 개의 차이점을 설명하세요. (구글링 고)

  2. 스프링 컨테이너가 생성될 때가 아닌, 실제 빈을 사용할 때 빈 객체를 만들고 싶다면 어떤 어노테이션을 활용하면 되는가?

  3. 빌드 종류에 따라서 다른 빈을 만들고 싶다면 어떤 기능을 활용하면 되는가? 예를 들어 개발 모드와 배포 모드에서 다른 종류의 빈을 생성하고 싶다면?

  4. @Autowired(required=false) 설정된 여러 개의 생성자가 있다고 가정했을 때, 스프링은 어떤 생성자를 선택해서 객체를 만들까?

  5. @Component' 어노테이션에value속성을 주면 그게 빈 이름으로 설정되는데, 만약 아무value`도 설정하지 않았다면 해당 빈의 이름은 무엇으로 설정되는가?

EzKorry commented 4 years ago
  • 지정한 패키지 내에서 애너테이션으로 컨테이너에 빈을 등록하려 할 때 필요한 설정(추가적인 패키지와 제외할 패키지경로 설정방법도)
  • 빈 자동 연결 시 반드시 1:1로 연결이 되어야 하는가? 1:n 이 가능한 방법은?
  • @Autowired 와 @qualifier 을 사용했을 때 스프링이 빈을 찾아가는 과정과 @resource 를 사용했을 때의 과정을 설명하고 반드시 @resource를 사용해야하는 경우를 설명하시오
  • 스프링 검증 api와 JSR380 api를 사용성 측면에서 간단히 비교하고 JSR380 의 제약사항 애너테이션을 10가지 이상 나열하라 (알아두면 좋을거같아서ㅋㅋ 구글링 ㄱ)
  • 구체적인 클래스의 직접 참조가 아닌 인터페이스를 활용한 프로그래밍을 했을 때의 장점과 스프링이 이러한 설계 방식에 적합한 이유(낼게업어성.. chapter2 활용함..)
  1. @Configure 어노테이션을 쓴 객체에 @ComponentScan 어노테이션을 추가하여 클래스를 검색하고 등록하도록 할 수 있다. basePackages 속성을 주면 검색해야 하는 패키지를 지정해주며, excludeFiltersincludeFilters 속성으로 각각 제외할 조건과 포함할 조건을 줄 수 있다.

  2. 기본적으로 bean이 싱글톤이니까 @Autowired 등으로 빈을 가져올 때 가져오는 객체는 모두 같을 것이다. @Autowired 설정된 생성자일 경우, required 속성이 True인 오직 하나의 생성자이거나, required 속성이 False인 여러 개의 생성자로 구성할 수 있다. (1:1, 1:n이라는 게 무슨 뜻인지 잘 모르겠음.ㅠ)

  3. @Autowired 는 우선 타입을 찾는다. 만약 @Qualifier 어노테이션이 붙어있다면 일치하는 타입 중에서 2차로 이름을 검색한다. 반면 @Resource는 처음부터 이름으로 바로 찾는다. 타입은 상관이 없다. 빈 자체가 Map 타입인 경우 @Autowired는 제대로 작동하지 않으므로 @Resource 어노테이션을 사용해야 한다.

  4. 스프링 검증 API의 일부인 Validator 인터페이스를 활용하려면, 우선 해당 인터페이스를 구현하는 클래스를 정의해야 하고, 실제 검증 단계에서는 감싼 곳에서 Validator 객체를 만들어서 validate를 호출하고 getErrorCount()로 에러 개수를 센 다음에 분기를 만들어야하고.. 여하튼 복잡해진다. 반면 JSR380 어노테이션을 이용하면 javax.validation.Validator를 이용하여 단순 검증할 수 있다. 새로운 클래스를 정의할 필요가 없다.

    • 종류 원래 있던 것:

      @AssertTrue @AssertFalse @DecimalMax @DecimalMin @Max @Min @Digits @Size @Null @NotNull @Pattern

      새롭게 추가 된 것:

      @NotEmpty @NotBlank @Positive @PositiveOrZero @Negative @NegativeOrZero @Email @Future @FutureOrPresent @Past @PastOrPresent

  5. 인터페이스를 활용한 프로그래밍은 객체간 의존 관계를 느슨하게 해주어 테스트를 편하게 할 수 있고 구현부의 수정이 자유롭다. 스프링이 이러한 설계 방식에 적합한 이유...는 사실 잘 모르게따..ㅎㅎ 그냥 모든 어플리케이션을 통틀어서 클래스를 설계할 때 제약사항과 구현부를 분리하는 건 좋은 전략이라고 생각함..... 파이썬 같은 경우도 사용자 정의 클래스를 만들때 어떤 특별 메소드를 구현하기만 하면 파이썬의 기능을 가져다가 쓸 수 있는 아주 편리한 메커니즘이 있음.

hasterprin commented 4 years ago
  1. @Autowired, @Inject, @Resource 세 개의 차이점을 설명하세요. (구글링 고) @Autowired type으로 자동연결 @inject - 타입으로 연결안되면 name으로 자동연결, 자바에서 지원하는 어노테이션이기 때문에 스프링 프레임워크에 종속적이지 않음. @Resource - 이름으로 연결안되면 타입으로 자동연결. 마찬가지로 자바에서 지원

  2. 스프링 컨테이너가 생성될 때가 아닌, 실제 빈을 사용할 때 빈 객체를 만들고 싶다면 어떤 어노테이션을 활용하면 되는가? @lazy

  3. 빌드 종류에 따라서 다른 빈을 만들고 싶다면 어떤 기능을 활용하면 되는가? 예를 들어 개발 모드와 배포 모드에서 다른 종류의 빈을 생성하고 싶다면? 빈 정의 프로파일

  4. @Autowired(required=false) 설정된 여러 개의 생성자가 있다고 가정했을 때, 스프링은 어떤 생성자를 선택해서 객체를 만들까? 만족하는 의존 관계 개수가 가장 큰 생성자로 인스턴스가 만들어짐

  5. @Component' 어노테이션에 value속성을 주면 그게 빈 이름으로 설정되는데, 만약 아무value`도 설정하지 않았다면 해당 빈의 이름은 무엇으로 설정되는가? 클래스에서 첫번째 글자를 소문자로 바꾼 이름

hasterprin commented 4 years ago

2번 1:n문제는 @autowired 로 자동연결할 때 여러 빈을 한 변수에 담을수 있냐는 말임ㅋㅋ말을 넘 어렵게 했는데 260 페이지 보면 @Qualifier지정자 사용해서 여러 빈을 Set타입 변수에 담는 예제가 있드라고ㅋㅋ