[SpringBoot] 백기선/스프링 프레임워크 입문 강의 정리 및 후기
2021. 7. 7. 23:23
1. Report
https://www.notion.so/springboot-46aac7a13b3241eda52a6f873846febe
Spring의 핵심 3가지 IoC, AOP, PSA
Ioc(Inversion of Control) - 제어역전
[일반적인 의존성에 대한 제어권]
class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
- 쓸 생성자를 class안에서 직접 만들어서 사용
- 의존성을 자기 자신이 관리
[IoC 제어역전에 의한 의존성 주입]
class OwnerController {
private OwnerRepository repo;
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
}
class OwnerControllerTest {
@Test
public void create() {
OwnerRepository repo = new OwnerRepository();
OwnerController = new OwnerController(repo)
}
}
- Controller는 밖에서 repo를 만들어서 줄것이다 생각하고 코드 작성 후 사용하는 곳(ex:OwnerControllerTest) 에서 만들어서 주입
- 의존성을 밖에서 관리
- test하기 용이
이런 IoC가 가능하게 해주는 것 = IoC컨테이너
IoC 컨테이너
- 가장 핵심적인 인터페이스 = ApplicationContext (BeanFactory)
Bean이란?
- 스프링 IoC 컨테이너가 관리하는 객체
- 등록방법 : Component ( Repository, Service, Controller 클릭해서 들어가면 Component가 있음)
- @Component 가 붙어있는 것을 찾아서 Bean등록!
bean을 쓰는 법
- @Autowired 또는 @injection
- ApplicationContext에서 getBean()으로 직접 꺼낸다.
의존성 주입(Dependency Injection)
- bean이 되는 class에 생성자가 하나만 있고 그 생성자의 매개변수 type이 bean에 등록되어 있다면 @Autowired 없이 자동 주입 됨.
- @Autowired / @Injection은 생성자, 필드, setter 에 붙힌다. ( 생성자 > setter > 필드 가 더 좋음)
AOP ( Abstract Oriented Programming )
- 관점지향 프로그래밍
- 흩어진 코드를 한 곳으로 모으자
[본래 코드]
class A {
method a {
AAAA
지금은 스프링 부트 입문 공부 중.
BBBB
}
method b {
AAAA
집중하기 힘들다.
BBBB
}
method c {
AAAA
스프링 부트를 마스터하자 아자아자!
BBBB
}
}
[AOP 적용 후]
class A {
method a {
지금은 스프링 부트 입문 공부 중.
}
method b {
집중하기 힘들다.
}
method c {
스프링 부트를 마스터하자 아자아자!
}
}
// 프록시 패턴 사용
class AProxy extends A {
}
class AAAABBBB {
method aaaabbbb(JoinPorint point) {
AAAA
point.exeute()
BBBB
}
}
AOP를 구현하는 방법
- byte코드를 조작: 이미 컴파일 된 메소드에 껴놓기
- 프록시 패턴: A를 상속 받아서 a → Spring AOP는 프록시 패턴 사용
ex) 어노테이션을 이용해 AOP구현
1) 어노테이션을 만들어준다
2) 어노테이션 기능을 구현한다.
3.어노테이션으로 만든 기능을 넣고 싶은 곳에 어노테이션을 붙힌다.
4.결과
PSA
- 잘 만든 인터페이스
- spring의 대부분의 기능들이 추상화 인터페이스로 만들어져있다( mvc, transaction, cache 등)
- 각각의 기능들을 구현할때 세부 기능들을 여러가지 기법으로 구현해놓고 내가 쓰고싶은거에 맞춰서 쓸 수 있음 (대표적인 추상화 기법)
Review
Spring에서 아무것도 모르는 사람이 정말 입문용으로 듣기 좋은 강의는 아니다.
현업에서 Spring을 이용해서 일을 해봤지만 Spring을 제대로 이해하지 못하는 것 같을 때 정리하기 좋은 강의이다.
이 강의는 springboot에서 springclinic이라는 프로젝트를 이용해 진행하고 내용에 대해 깊게 들어가진 않는다.
개념만 주구장창 이해한다고해도 금방 까먹기때문에 한번 springboot을 이용해 프로젝트를 만들어 본 후 다시
이 내용을 깊게 정리하면 좋을 것 같다.
'Web > spring' 카테고리의 다른 글
[JPA] Pageable sort 조건 여러개 주기 (다중 sort) (0) | 2022.08.29 |
---|---|
[Spring] Class Not found / Class 'org.springframework.*' not found [config set: web-context] 오류 해결 (0) | 2021.04.05 |
[Websocket] 웹 소켓 세션을 이용한 웹상에서 통신 (3) - RabbitMQ 띄우기 (0) | 2021.04.01 |
[Spring/Web Socket] 웹 소켓 세션을 이용한 웹상에서 통신 (2) - 단체톡방 (2) | 2021.03.24 |
[Spring/Web Socket] 웹 소켓 세션을 이용한 웹상에서 통신 (1) (1) | 2021.03.19 |