이전 시간에 배운 것

1. 스프링은 프레임워크이다.
2. 스프링은 오픈소스이다.
3. 스프링은 IoC 컨테이너를 가진다.
4. 스프링은 DI를 지원한다.


5. 스프링은 엄청나게 많은 필터를 가지고 있다.
A 나라 성에는 왕궁이 있다. B나라는 A나라와 전쟁중이다. B나라의 스파이들은 A나라에 진입해서 들어오게된다. 이것을 막기 가장 좋은 방법은 입구에서 막는 것이다. ID카드를 확인하고 A나라 사람이면 들어가고 B나라 사람이면 막는 식으로 검열을 한다.

수많은 A나라 사람들 중에서 특정한 사람은 왕궁으로 가서 용무를 봐야할수도 있음. 이때는 특정 권한을 가진 사람들만 들어오도록 해야한다. 이때도 필터를 하나 걸어준다. 필터는 문지기역할을 한다.(임무) 임무는 우리가 내릴수도 있고 스프링 자체 기능도 있으며 사용되지 않는 필터를 사용하겠다고 할 수도 있다. 이때 위 그림에서 성이 톰캣, 왕궁이 스프링 컨테이너라고 생각하면 된다. (이때 톰캣 안에 스프링 컨테이너가 있는 것이 아닌, 톰캣을 거쳐서 스프링 컨테이너로 들어가는 것) 톰캣이 들고있는 필터는 filter라고 하며 이 기능을 하는 파일이 web.xml  스프링 컨테이너가 들고 있는 필터는 intercepter라고 하며 AOP(아직 배울 단계는 아님)와 관련이 있다고 한다.  

6. 스프링은 엄청나게 많은 어노테이션을 가지고 있다.
어노테이션은 주석인데, 컴파일러에게 힌트를 주는 주석이다. -> 컴파일러가 무시하지 않음
Animal 클래스의 run() 메서드. Dog 클래스가 Animal 상속. run을 재정의 할 수 있는데, @override라고 붙이면 Dog을 컴파일 할 때, 컴파일러는 그 어노테이션을 보고 run() 메서드가 실제로 Animal 클래스에 있는지 확인을 하러 간다. 그런데 만약에 @override fly()라는 메소드가 있는 경우에, Animal 클래스에서 확인을 하고 없다는 것을 알게 되면 컴파일 체킹하면서 에러를 표시해준다.

스프링에서 어노테이션은 주로 객체를 생성한다. @Component, @Autowired, @Controller ... 스프링에서는 이런 어노테이션을 만들어두고 미리 약속을 한다.  Component: 클래스 메모리에 로딩, @Autowired: 로딩된 객체를 해당 변수에 집어넣음, 

스프링은 new방식보다는 IoC를 사용함-> 그래서 Class A { new ~~} 보다는 @Component Class A { ~ }를 통해 스캔시키고 A라는 클래스를 힙 메모리 공간에 로드한다. 

@Component 
Class A { 
	~~~
}

Class B에서 A 객체를 사용하고 싶다면 

Class B {
	A a = new A();
}

로 하면 완벽한 오답이다. 
여기서 A의 주소와 위에서 만든 A 주소가 다르기 때문에(new로 만들었기 때문) 다른 방법을 고민해야한다.

Class B {
	@Autowired
	A a;
}

와 같이 사용하여 참조할 수 있도록 한다. 이때 B 클래스내부에 어떤 애가 있는지 분석하는 기법을 리플렉션이라 하며, 메서드, 필드, 어노테이션을 체킹할 수 있다. 있는지만 체킹하는게 아니라 있다면 무엇을 해라 라고 설정까지 할 수도 있다. 
Autowired를 통해서 로딩된 객체들을 쭉 읽는다. 읽으면서 A와 동일한 타입의 객체가 떠있는지를 확인한다. 만약 A가 없다면 null이 들어간다. 만약에 있다면 a에 A가 들어간다. 이를 DI라고 한다.

어노테이션: 주석 + 힌트
리플렉션: 분석하는 기법 -> 런타임시 분석

다음 시간에 배울 것

7. 스프링은 MessageConverter를 가지고 있다. 기본값은 현재 Json이다.

8. 스프링은 BufferedReader와 BufferWriter를 쉽게 사용할 수 있다.

9. 스프링은 계속 발전중이다.

이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

1. 스프링은 프레임워크이다.
Frame(틀) Work(동작하다) -> 틀 안에서 동작을 한다.
프레임워크가 왜 나왔냐 -> 이 틀을 벗어나지 말고 만들어라 라는 의미가 있음.

2. 스프링은 오픈소스이다.
오픈소스란 소스코드를 공개한 것이다. 스프링의 내부를 볼 수 있는 것.-> 내부를 뜯어 고칠수 있는 것.
스프링을 공부하다가 깊숙한 곳까지 알게되었다. -> 불편한 점을 찾는다. -> 불편한 점을 고쳐서 컨트리뷰트(기여)할 수 있다. 

3. 스프링은 IoC 컨테이너를 가진다.
IoC(Inversion of Controll, 제어의 역전). -> 주도권을 스프링이 가지고 있다.
Class -> 설계도
Object -> 실체화가 가능한 것
Instance -> 실체화 된 것

class 누누 {
	변수
	변수
}

abstract class 캐릭터 {
	추상적인 의미
} ->  실체화가 불가능, object가 아님

가구는 실체화가 불가능함. 추상적이기 때문.
실체화 가능한 것은 의자, 침대 등이고 이것들이 object임.
그리고 주변에 있는 진짜 의자, 침대가 instance임.

오브젝트를 heap이라는 메모리 공간에 올리게 되면(new) 

public void make() {
    의자 s = new 의자();
}

의자를 new했기 때문에 의자 오브젝트를 실체화 시킨거임. 의자를 실체화시켜서 메모리에 띄움. 주소는 s가 가리키고 있음. 근데 s는 메서드가 실행되는 순간에만 메모리에 떠있음.

public void use(){
	의자 s = new 의자();
}

이렇게 하는 경우 make의 의자와 use의 의자는 서로 다른 주소값을 갖게 된다.

make의 의자를 쓰려면 어떻게든 넘겨 받아야함. 근데 이런 로직을 짜기가 굉장히 힘들다.

수많은 오브젝트들 (의자, 붕어빵, 사자, 기린 ....) 을 스프링이 스캔을 해서 읽고 객체들을 직접 heap에 넣는다.

4. 스프링은 DI를 지원한다.
Dependency Injection (의존성 주입): 내가 원하는 모든 클래스의 모든 메소드에서 오브젝트를 가져와서 사용할 수 있다. 만들어진 오브젝트 (의자)가 있으면 어느 클래스에서든 같은 의자를 사용하는 것이다. (싱글톤 패턴) 한번 뜬 의자를 어디서든 공유해서 쓸 수 있다. 

다음 시간에 배울 것

5. 스프링은 엄청나게 많은 필터를 가지고 있다.

6. 스프링은 엄청나게 많은 어노테이션을 가지고 있다.

7. 스프링은 MessageConverter를 가지고 있다. 기본값은 현재 Json이다.

8. 스프링은 BufferedReader와 BufferWriter를 쉽게 사용할 수 있다.

9. 스프링은 계속 발전중이다.

이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다. 
다음은 강사님의 강의 링크입니다. 무료 강의라서 가입만 하면 볼 수 있습니다. (강의 링크)

'웹 개발 > Spring Boot' 카테고리의 다른 글

영속성 컨텍스트란 무엇인가요?  (0) 2023.07.31
ORM이란 무엇인가요?  (0) 2023.07.31
JPA란 무엇인가요?  (0) 2023.07.30
메시지 컨버터가 무엇인가요?  (0) 2023.07.30
필터란 무엇인가요?  (0) 2023.07.29

+ Recent posts