20231117
final은 변수가 생성될때 초기화안하면 초기화 못한다
final int a;
a=1;
안된다..
자바는 final붙은 코드를 더 높은 수준으로 인식한다
final은 즉 의존성 주입 받겠다! 라고 봐도 무방하다.
작성하는 패턴을 보면 명시적으로 @Autowired를 붙이고 생성자를 작성하는 경우가 많긴함. 나도 그랬던거같다??
이 경우에는 @RequiredArgsConstructor등으로 대체할 시 동일하게 @Autowired가 작동한다.
@RequiredArgsConstructor는 롬복이고 의존성 주입이랑 아무 상관이 없다. 이거 자체가 하는 역할은 의존성 주입이랑 상관이 없지만 기가막히게 그 역할을 하고있다.
생성자가 한개일경우 @Autowired 생략 가능
http://localhost:8020/member/join
GET /member/join
member/member/join.html -> layout 호출
global/layout.html 전반부 부분
member/member/join.html
global/layout.html 후반부 부분
POST /member/join
String join(@Valid WriteForm joinForm) {
WriteForm 객체 생성
HttpServletRequest req
payload
username : aa
password : bbb
writeForm.username = "aa";
writeForm.password = "bbb";
form안에 요소랑 컨트롤러의 페이로드 부분을 변수명 맞춰야한다
5.
유효성 체크 => 통과
해당 정보를 서비스에 넘김
서비스가 객체 조립
조립된 객체를 서비스가 저장하라고 리포지터리에게 넘김
리포지터리가 해당 객체가 새것인지 체크
새 id 부여
저장소에 저장
리포지터리 리턴
서비스 리턴
여기 머물지 말고 당신 브라우저의 주소창에
/member/login?msg=
를 입력하세요.
브라우저가 해당 명령을 수행
GET /member/login
form안에 요소랑 컨트롤러의 페이로드 부분을 변수명 맞춰야한다
옵셔널은 안에 있는 옵셔널과 없는 옵셔널이 있는데 없는데 get하면 프로그램 터진다
비밀번
클라이언트와 서버가 http규약을 지킨다는 가정하에 통신을 한다.
브라우저는 서버 주소를 알아야하지만 클라이언트 주소 알 필요가 없다.
초창기 웹은 단순 정보 제공용으로 많이 사용됨.
그 당시 웹은 프로그램으로도 취급하지 않았다.
설치형 프로그램 개발 대비 웹 개발의 장점
OS 설치형 프로그램 개발에 악몽에 시달리던 개발자들이 웹 브라우저라는 환경에 눈을 돌리게되었다.
쿠키
클라이언트가 기억한다.
서버가 클라이언트 다 기억할 수 없다
종이쿠폰 생각하면된다
인증은 두가지로 이루어짐
1. 인증을 확인하는 행위
2. 인증서 발급
회원이라는것을 기억하는 방식은 서버가 기억 클라이언트가 기억 두가지가있다.
브라우저가 서버에게 요청하면 쓰레드 하나생기고 거기에 req res생긴다
req : 받은 편지
resp : 보낼 편지
중요..
보낼 편지에 .addCookie(new Cookie~~~)
해보니 안되네..
gpt검색
응답헤더에 쿠키는 왓다
나의 요청이 서버에게 요청되는데 이때 페이로드 안에는 내가 쓴 username password와 함께 쿠기 n개를 같이 보낸다
쿠키의 복사본이 전송된다.
브라우저에게 쿠키 만들라는 지시문이다.
브라우저가 리스폰스를 받으면 쿠키 지시문이 이있으니 추가를 한다
처음 로그인시 네임 패스워드 가고
서버가 리스폰스에 쿠키지시문 싫고 브라우저가 받는다
응답헤더에 쿠키 지시문 이제 쿠키 생김
이제 f5하면 요청 헤더에 쿠키가 실렸다. 이후에 모든 요청은 쿠키와 함께간다. 자동으로..
리스폰스에 실으면 무조건 브라우저에게 보내진다.
타임리프가 실행된 html결과물도 실린다
타임리프는 html 생성기~~
브라우저 리퀘스트 httprequest가 고객의 요청사항을 받아와서 서버에서 일 하고 httpresponse에 넣어서 브라우저에게 돌려준다.
쿠키는 브라우저와 서버의 공용어를 써야한다. 문자열로 해야함.
쿠키는 값과 이름으로 되어있다.
req에서 쿠키 value
빼내는 로직
f12에서 쿠키값 임의로 바꿔도 서버가 믿는다
그래서 이문제를 해결하기 위해 세션기술을 쓴다.
로그인후..
초창기 http는 서버 기억력이 없다
웹서버는 http로
스프링부트안에 브라우저랑 통신하는 내장 톰캣이 내장되어있다.ㅈ
Was : 웹 어플리케이션 서버 = 스프링
통신하려면 웹서버와 was가 같이 있어야한다
브라우저랑 바로 소통가능
웹서버 따로 둬도됨 톰캣같은
순수 http로는 한계가 있는데 was덕에 http 이상의 역할을 하고있었다. 서버 기억력을 위해서 이게 필요함
쿠키와 세션은 엮여있다.
쿠키는 클라에 저장하고 세션은 서버에 저장한다고 반대의 개념은 아니다.
was이기 때문에 세션을 운영할 수 있고 세션의 핵심은 서버 사이드 저장소
이렇게 하면 저장소는 구비해놔도 매칭을 못함
그래서!
session.serAttribute여기서 서버에 저장됨