기간
2023/3/27 ~ 2023/3/31
수업
실시간 ZOOM 수업
@OneToMany(mappedBy = "board")
→ mappedBy에는 연관관계의 주인(ManyToOne)의 변수명을 적음
@ManyToOne
private **Board board;
변수명인 board를 적는 것(board2면 mappedBy = ”board2”)
@OneToMany(mappedBy = "board", fetch = FetchType.***LAZY***, cascade = CascadeType.***PERSIST***, orphanRemoval = *true*)
OneToMany의 fetch 기본 전략은 Lazy
cascade: 영속성 전이 (해당 객체가 영속성 상태일 때 전이됨)
orphanRemoval: 고아 객체 삭제
양방향 매핑 장단점
영속성 전이나 고아 객체에 대한 개념의 이해가 필요
양방향 때문에 생길 오류(N+1 문제 등?)
대신 심플해짐…
select * from board inner join user
board를 driving, user를 driven
만약 둘의 위치가 바뀌면 pk로 찾아지지 않기 때문에(중복될 수 있어서) full scan…
inner join
만약 게시글과 댓글을 inner join으로 찾으면 댓글 없는 게시글은 조회가 안 됨
left outer join을 하면
없으면 null로
NoSQL은 중복이 됨. join을 안 함. 모든 연관관계를 한 테이블에 넣어버림.
→ insert, select만 된다면 유리
@Transient
→ DB에 컬럼 만들지 않게
예를 들어 Board에 연관관계로 user, reply를 가지고 있다면 json으로 parsing될 때 무한참조가 일어남
→ @JsonIgnore하면 되겠지만 그렇게 하지 않고 service 단계에서 controller로 넘어오기 전에 OSIV 설정을 하면 됨
stateless → stateful
구 버전
자원에 접근할 수 있는 상태가 되었다 = 세션이 생성됨
클라이언트가 서버에 get요청 → 연결을 끊음(끊지 않으면 서버 과부화)
서버 = 갑 = stateless
→ 클라이언트 상태를 기억하지 않는다(트래픽 낮음).
최신(디폴트)
서버에 세션저장소에 세션키와 데이터를 저장 = stateful
서버
1. 클라이언트의 요청 헤더 cookie 값을 검사
2. JSessionID값이 있는지 확인
3. 임의의 중복되지 않는 JSessionID를 생성
4. JSessionID를 세션 메모리 영역에 저장
5. 컨트롤러-서비스-레파지토리 일을 하고
6. 응답 헤더 set-cookie에 세션 키(JSessionID=세션 키)를 담아서 응답
브라우저
쿠키 저장소에 JSessionID를 키값으로 세션 키를 저장
쿠키 값을 헤더에 담아서 요청
정책
javascript로 cookie에 접근하는 걸 막음(HttpOnly로 브라우저만 접근 가능)
멀티 쓰레드 환경에서 싱글톤 객체에 상태 변수(인스턴스 변수) 만들지 말도록
→ 지역변수는 괜찮음(스택에 따라 메모리가 다르니까)
XSS 공격
백엔드에서 xss 필터를 할 필요가 있다(프론트에서 리액트를 써서 막아지더라도).
궁금증)
xssFilter를 사용해서 escape로 html 태그로 변환했을 때(< → <) html 태그가 그대로 text로 출력되는데 데이터를 다시 원래 값(< → <)으로 변환해서 보내줘야 하는지?
CSRF 공격
사실 Spring Security를 쓰면 filter로 쉽게 설정해줄 수 있다.
OAuth
OAuth 쓸 때 내부 서버 데이터베이스에 OAuth에서 받은 회원정보를 저장할 필요가 있는지 아니면 매번 OAuth 서버에서 회원정보를 가져와야 하는지
궁금증)
1. 회원정보를 저장할 필요가 있다면 해당 회원이 OAuth로 가입한 회원인지 체크하고(예를 들면 boolean column을 만들어서 → OAuth로만 로그인 할 수 있게), 비밀번호는 임의로 한 후 내부 서버의 RefreshToken, AccessToken을 발급받아서 로그인 상태를 유지하게 해도 괜찮은지
2. 저장할 필요가 없다면 매번 OAuth 서버에서 회원정보와 토큰을 받아서 인증과 로그인 상태 유지를 해야 하는지