기간
2023/3/27 ~ 2023/3/31

수업
실시간 ZOOM 수업


Day 20(연관관계)

@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 설정을 하면 됨


Day 21(세션과 쿠키)

stateless → stateful

구 버전
자원에 접근할 수 있는 상태가 되었다 = 세션이 생성됨

클라이언트가 서버에 get요청 → 연결을 끊음(끊지 않으면 서버 과부화)

서버 = 갑 = stateless
→ 클라이언트 상태를 기억하지 않는다(트래픽 낮음).

최신(디폴트)
서버에 세션저장소에 세션키와 데이터를 저장 = stateful

서버
1. 클라이언트의 요청 헤더 cookie 값을 검사
2. JSessionID값이 있는지 확인
3. 임의의 중복되지 않는 JSessionID를 생성
4. JSessionID를 세션 메모리 영역에 저장
5. 컨트롤러-서비스-레파지토리 일을 하고
6. 응답 헤더 set-cookie에 세션 키(JSessionID=세션 키)를 담아서 응답

브라우저
쿠키 저장소에 JSessionID를 키값으로 세션 키를 저장
쿠키 값을 헤더에 담아서 요청

정책
javascript로 cookie에 접근하는 걸 막음(HttpOnly로 브라우저만 접근 가능)

멀티 쓰레드 환경에서 싱글톤 객체에 상태 변수(인스턴스 변수) 만들지 말도록
→ 지역변수는 괜찮음(스택에 따라 메모리가 다르니까)


Day 22(OAuth)

XSS 공격
백엔드에서 xss 필터를 할 필요가 있다(프론트에서 리액트를 써서 막아지더라도).

궁금증)
xssFilter를 사용해서 escape로 html 태그로 변환했을 때(< → <) html 태그가 그대로 text로 출력되는데 데이터를 다시 원래 값(< → <)으로 변환해서 보내줘야 하는지?

CSRF 공격
사실 Spring Security를 쓰면 filter로 쉽게 설정해줄 수 있다.

OAuth
OAuth 쓸 때 내부 서버 데이터베이스에 OAuth에서 받은 회원정보를 저장할 필요가 있는지 아니면 매번 OAuth 서버에서 회원정보를 가져와야 하는지

궁금증)
1. 회원정보를 저장할 필요가 있다면 해당 회원이 OAuth로 가입한 회원인지 체크하고(예를 들면 boolean column을 만들어서 → OAuth로만 로그인 할 수 있게), 비밀번호는 임의로 한 후 내부 서버의 RefreshToken, AccessToken을 발급받아서 로그인 상태를 유지하게 해도 괜찮은지
2. 저장할 필요가 없다면 매번 OAuth 서버에서 회원정보와 토큰을 받아서 인증과 로그인 상태 유지를 해야 하는지

profile
웹퍼블리셔의 백엔드 개발자 도전기

0개의 댓글