Springboot with JPA - 데어 프로그래밍 유튜브 (13강_ApplicationContext은 무엇인가요?)

치즈말랑이·2021년 10월 21일
0

스프링부트 with JPA

목록 보기
8/9

DispatcherServlet에 의해 생성되는 수 많은 객체들은 어디서 관리될까?

스프링에서 아파치는 동작할 수 없다.
request -> web.xml -> dispatcherSurvlet가 컴포넌트 스캔한다.
dispacherservlet = frontcontroller+requestdispatcher
궁극적으로 주소분배 한다.(어디로 가게 하기때문) 분배할라면 메모리에 떠있어야 한다.(class 들이)
그래서 주소를 분배하기 전에, src폴더 안에 자바파일이 여러개 있을때 얘네들이 메모리에 떠야한다.

static -> main 메소드에 실행되기 전부터 메모리에 떠있음, 첨부터 태초부터 떠있음
자바파일 -> 객체. 특정한 타이밍에 메모리에 떳다가 사라지는게 객체이다.
그래서 new로 자바파일을 메모리에 띄워야 하는데 스트링은 IoC를 하기때문에 내가 new를 안해서 DispatcherServlet이 컴포넌트 스캔을 통해 new를 해준다. -> src 이하 모든 파일 스캔해서 필요한것들은 메모리 위로 올린다. 뭐가필요한지는 어노테이션 기법으로 정해져있다.

@Controller는 controller의 역할
@RestController
@Configuration
@Repository
@Service
@Component

@Hello (만들수있음)

이렇게 메모리 위로 띄우면 분배할 수 있다.

그런데 DispatcherServlet에 진입하기 전에 ContextloaderListener 단계가 있다.
각각의 스레드는 독립적이기 때문에 영향을 받지 않는다. 하지만 컴포넌트 스캔으로 띄울때 각각 띄우면 한번에 관리하기가 힘드니까
request가 공통적으로 쓰일 수 있는게 있다 : db 혹은 모든 스레드가 공통적으로 사용해도되는것들은 미리 ContextloaderListener를 통해서 띄운다. ContextloaderListener는 root_ApplicationContext 파일을 읽는다.
그러면 하나만 있으면 되는것들, 모든 스레드에서 공유해서 사용하면되는것들을 메모리에 띄운다. 그리고 IoC 컨테이너에서 관리해준다.
그런데 db객체에서는 dispatcherservlet에서 메모리에 띄운 것들한테 접근을 못한다. db객체는 메모리에 안떴으므로.
하지만 반대로 dispatcherservlet에서 메모리 위에 띄운 것들은 db에 접근이 가능하다.

https://getinthere.tistory.com/11?category=813090

Bean factory

@configuration

profile
공부일기

0개의 댓글