20231116
직접요청하거나 프록시 요청하거나 요청자는 잘 모른다.
다대다 매칭에서, 각각의 쌍이 서로 다이렉트로 통신해도 되고, 매칭매니저(대리자, 프록시)를 통해도 고객 입장에서는 아무 차이도 없다.
요청이 100번있었다면, HttpServeletRequest도 100번 생겼다가 사라진다. HttpServeletResponse도~
그에 해당하는(매칭되는) rq 객체도 100개 생겼다가 사라진다.
그림구림주의
외부에서 리모컨이 없어야 가비지콜렉터가 작동한다
rq는 리모컨 두개 갖고있다
req resp 없어지려면 rq가 사라져야한다
rq는 컴포넌트이니까 객체는 하나만 생긴다
두번째 요청이 올때 그에 맞는 req resp를 만들어줄 rq가 새로 생겨날수 없다.
이렇게 하면 rq객체는 최초에는 0개
요청들어오면 하나 생기고
@RequestScope
세션스코프랑 레퀘스트 스코프 잇으면
어떤 빈이품고있는 변수들 중에서 수명이 가장짧은 기준으로 스프링이 스코프를 붙여준다!!! 중요
Rq는 레퀘스트 스코프 붙여준다~!1 이ㅓㄱ만 기억해라
rq는 어플리케이션 생겨날때 한번 생겨나는데 리모컨 주소는 요청마다 매번 바뀐다.
이상하다!
다른 객체들은 새로고침해도 똑같이 나온다.
결국 private final Rq rq;는 대리자 즉 프록시엿다..?
title body만 있으면 좋겠지만 무한대로 늘어날 코드이다.
클래스에 @Validated 어노테이션을 쓰면 좋다.
메서드 중 하나라도 @NotBlank쓰는 애가 있으면 @Validated지우면 안된다
만약 이런식으로 클래스를 빼버리면 @Validated삭제 가능
@valid는 WriteForm 내부를 작동하게 한다
프록시처리되서~~..?
메소드에
@NotBlank(message= "제목입력해야합니다") String title
위의 그림보다 이렇게 하는게 낫다
@valid
타임리프가 각각의 요소를 치환을 한다.
클라이언트코드 : html css js
클라이언트코드 생성기 : 타임리프
타임리프 템플릿은 서버에서 실행됩니다. 단 1차원적인 치환작업만 하고, HTML, CSS, JS 는 최종적으로 브라우저에서 실행됨
타임리프 오류는 맨 밑으로
th:if="false" 이런식으로 하면 렌더링이안댐
post article/write
redirect 302
새로운 url에 바로 접근
@PathVariable url패스에 있는 변수