오늘도 수업 메모
@ : 어노테이션 = 메타 데이터 (메타데이터 제공 표시)
프록시
@Component는 수명이 긺
@RequestScope나 @SessionScope 등을 위에 덧붙여 수명 줄여줌
이때, 빈 객체가 품고 있는 변수 중에 가장 수명 짧은 것 기준으로 달아준다.
보통 Rq 객체에 @RequestScope 붙이는 거 말고는 잘 사용하지 않음.
: 최초 요청 발생 -> req, res 객체 생성 & Rq 객체가 context에 생성 : req와 res에 연결 -> 매번 요청이 발생할 때마다 프록시(대리자)가 각 Rq 객체와 각 req와 res 객체를 생성하고 연결함
=> Q. Rq객체를 final로 선언해두면 그게 어떻게 매번 요청때마다 새로운 값을 받는지?
A. final 키워드는 변수에 대해 "한 번 초기화되면 다시 할당할 수 없다"는 의미. final로 선언된 변수는 초기화 이후에는 값 변경 불가.
그러나 Spring에서 @RequestScope 어노테이션이 적용된 빈의 경우, 해당 빈은 각각의 HTTP 요청(request) 단위로 새로운 인스턴스가 생성되고 관리됨. 즉, 매번 새로운 요청이 들어올 때마다 해당 빈이 새로 생성됨.
따라서, final로 선언된 멤버 변수가 있다고 해도, 해당 빈이 @RequestScope로 선언되어 있다면 매 요청마다 새로운 인스턴스가 생성되기 때문에 멤버 변수에 새로운 값이 할당된다. final은 변수가 한 번 초기화되면 다시 할당할 수 없다는 제약을 갖고 있지만, 새로운 인스턴스를 생성하는 것은 초기화의 일부로 간주되어 제약을 위배하지 않는다.
=> Q. 앞선 작업의 주체가 프록시인가?
A. 그렇다. @RequestScope와 같은 스프링의 스코프를 관리하는 빈들은 주로 프록시(proxy) 패턴을 사용하여 동작함.
Spring에서 스코프를 지원하는 빈들은 기본적으로 싱글톤 스코프로 생성. 그러나 @RequestScope, @SessionScope, @PrototypeScope 등의 다른 스코프를 사용하려면 프록시가 필요. 프록시는 실제 빈을 감싸고, 빈에 대한 요청이 들어올 때 추가적인 로직을 수행할 수 있도록 해줌. 스코프가 요청(request) 단위일 경우, 각 요청마다 새로운 인스턴스를 생성해야 하는데, 이를 프록시를 통해 구현.
Spring이 @RequestScope를 사용하는 빈을 생성할 때, 해당 빈에 대한 프록시를 만들고 프록시를 통해 실제 빈의 생성과 초기화를 제어함. 이렇게 함으로써 실제 빈은 final로 선언된 멤버 변수를 갖고 있을 수 있으며, 매 요청마다 새로운 인스턴스가 생성됨.
클라이언트 코드 : HTML, CSS, JS
타임리프 thymeleaf = 서버에서 실행되는 클라이언트 코드 생성기
(변수 등 서버의 특정 값을 가져와 클라이언트 코드를 동적으로 만들어냄)
// tip. 에러 메시지 볼 때 타임리프 오류는 맨 밑에서 찾기
타임리프는 객체.getId() → 객체.id, 객체.reversed() → 객체.reversed 등으로 축약해서 쓸 수 있다.
- HttpServletRequest
- HttpServletResponse
- 쿠키
- 세션
- 메시지
- 현재 로그인한 회원
=> 이렇게 비슷한 애들을 class Rq로 묶어두고 사용하자...
(한 요청-응답 과정과 연관이 있어서 비슷한 걸까?)
레이아웃(동일한 틀)과 페이지(다른 알멩이)로 구분하자
gradle에 thymeleat-layout 추가
<th:block layout:fragment="content">
// IntelliJ: Settings > Inspections > unbound 체크 해제
tailwind 사용... 기존 html, css 디자인 싹 무시하고 다시 디자인하는데, style 대신 class로 단축 표현을 적용해서 함.
https://nerdcave.com/tailwind-cheat-sheet
JIT 모드 적용... (Just-In-Time 프로그램이 실행될 때 런타임에 코드를 컴파일하는 컴파일러 기술..?
부트스트랩은 테일윈드랑 호환 잘 안됨... 데이지UI 쓰세요... 넹...
'Study with me > TECH!T back-end shcool 7' 카테고리의 다른 글
week_06 SpringBoot 5/? (0) | 2023.11.22 |
---|---|
week_05 SpringBoot 4/? (1) | 2023.11.17 |
week_05 SpringBoot 2/? (0) | 2023.11.15 |
week_05 SpringBoot 1/? (1) | 2023.11.14 |
week_05 JAVA 11/11 (0) | 2023.11.13 |