Don't Panic
in Spring

[Spring] spring 스터디 3일차 자료

test 코드가 필요한 이유? 메인에서 계속 함수를 바꿔가면서 구현하고 테스트 했느느데 이제 그렇게 하지 않는다. 내가 직접 실행하고 눈으로 확인하는거보다 컴퓨터에게 맡기자는 거.

보아ㅏㄴ적으로 취안

유저로 접근 (관리자, 유저가 쓰는게 다를거) 계층분리 => 코드관리가 또 다를거

A를 출력하던게 B로출력하거나 유저의 하나가 전번에 앞자리 4개를 가졌다 이게 기존이였으면 회사측에서 앞자리4개가 아닌 뒷자리 4개가 고치라 하면 모두 고치기엔 크니까 DTO 고치면 다른데 기존 짤때 비용이 많이 들지만 큰 회사엔 다 분리시킨다.

특정한곳에서 디비로 해서 가공해서 내뱉으는건 dto에서 가공

A라는 값 가지는데 A를 가공하는 값을 자주 씀 순수 A 가지면 디비에서 자리 한 자리 더 차지하는데 가공하는데

DAO가 이해 안될게 엔티티를 데이터베이스에 매칭시켜서 사용 가능

아짘 연관관계 안해서 헷갈. 객체와 디비에 엄청난 차이가 있다. -> orm 자동화.

실제로

dao 가 안에 리포지토리로 처리한다.

자바 jdbc 부분 공부 좀 해보자?

쿼리dsl을 쓰면 jpa를 아예 대체하는게 아니다. jpql도 보자.

쿼리dsl은 쿼리문을 편하게 만들어준다.

쿼리 dsl이 관리하고 자기 안에서 디비 연동하게함 쿼리 dsl만을 위한 컴파일러라고 생각하자고 함(테스트 코드 개념은 아님)

20210501_142858

@Bean 어노테이션은 bean 객체를 정의할 때 사용한다. 메서드의 이름이 bean의 이름이 된다. @Bean(name=이름) : bean의 이름을 새롭게 정의한다. @Lazy : lazy-init 속성을 지정한다.(겟빈 메서드 생성할 때 호출) @Scope : bean의 scope를 설정한다. @Primary : primary 속성을 지정한다.

사용할 빈이 xml에서 하나만 정의되면 사실 id가 필요 없음.

같은 클래스 빈이 여러개 있을때 아이디 써서 구분해야.


xml에서 했던게 위처럼 추가했으면 빈에서는 아래처럼 바꿔주면 된다.

20210501_150304

@Bean(autowire = Autowire.BY_TYPE) //선이 그어지는 건 디플리케이드(그래도 실행은 잘 됨) 스프링 버전을 하위로 하면 디플리케이드 된게 삭제된다. public TestBean3 java4() { return new TestBean3(); }

5.1부터는 스프링에서 권장하지 않는다는 의미

20210501_153541

자바에서 선이 그여진건 디플리케이드 됐다는 의미

2가지 뜻이 있는데

  1. 더는 안쓰거나
  2. 더 좋은게 있으니 그걸 쓰라는 의미

근데 생성자 매개변수 넣으면 값을 반드시 넘겨줘야

스프링 5.1부터 @Required는 아무런 일 안함. 생성자를 통해서 주입받는거로 권장한다.


@Autowired public TestBean1(DataClass2 data4) { this.data4 = data4; }

Autowired 쓰면 클래스 타입으로 주입. 데이터 bean타입이 정의되어있어야한다.

autowire넣으면 반드시 빈 정의해줘야한다.


@Qualifier @Autowired로 주입 시 같은 타입의 Bean이 여러 개 정의 되어 있다면 Qualifier에 설정 되어 있는 bean을 찾아 주입한다.


@Component

@Component 어노테이션을 사용하면 Bean Configuration 파일에 Bean을 등록하지 않아도 자동으로 등록된다.

Xml을 이용하는 방식

Bean에 설정된 설정들을 탐색하기 위해 다음과 같이 작성한다.

<context:component-scan base-package=“kr.co.softcampus.beans”/> <context:component-scan base-package=“kr.co.softcampus.bean2”/>


Bean Configuration Class 사용

@Bean, @Component @Bean : 개발자가 Class의 코드를 수정할 수 없는 경우 같은 클래스 타입의 Bean을 여러 개 등록할 경우

@Component : 개발자가 Class의 코드를 수정할 수 있는 경우


AOP

  • Aspect Oriented Programming : 관점 지향 프로그래밍

  • 하나의 프로그램을 관점(혹은 관심사)라는 논리적인 단위로 분리하여 관리하는 개념

  • 로깅, 감사, 선언적 트랜젝션, 보안, 캐싱 등 다양한 곳에서 사용되고 있다.

  • 여기에서는 메서드 호출을 관심사로 설정하여 AOP에 관한 실습을 진행한다.

  • 관심사를 통해 Spring Framework가 어떤 메서드가 호출되는지 관심있게 지켜보다가 특정 메서드가 호출되면 자동으로 메서드 전과 후에 다른 메서드가 호출 될 수 있도록 한다.


특정 메서드 호출하면 다른 작업 먼저 하고 메서드 하고 다른작업하고 이런식으로 하고 싶다