🍒 오늘 공부한 내용
max-age Public으로 한 이유
CDN에서도 저장하려고 그런거 아닌가요?
HTTP는 Stateless 맞는가?
맞다 -> 쿠키, 세션으로 구별함
### Cookie
쿠키는 사용자를 식별하고 세션을 유지하는 웹 기술
웹 서버는 사용자를 식별하기 위한 유일한 값을 쿠키에 할당한다.
응답 헤더 Set-Cookie에 이름=값; 형태로 반환한다.
클라이언트 측 상태
브라우저는 쿠키 정보를 저장할 책임이 있다.
### Session
세션은 서버에서 값을 저장하고 id를 발급한다.
클라이언트와 서버는 Cookie를 통해 Session Id를 주고 받는다.
session 문제점
-> SCALE OUT 될 때 세션이 존재하지 않는 상황 발생
1. Session clustering
클러스터 - 여러 개 컴퓨터를 하나로 쓰는 느낌
replication을 해서 똑같이 사용 <- all-to-all 이라고 함
Tomcat - Clustering/Session Replication
2. Sticky session
어느 서버였는지 기억해서 거기에 보내주는 것
AWS ALB에서 설정 가능
* ALB : Application LB <- 프로그램으로
* ELB : Elastic LB <- 물리적으로
3. Shared Session Storage
JDBC, Redis, MongoDB 등을 활용
다른 해결 방법
JWT
REST 아키텍쳐 스타일
Refresh Token 사용하면 어차피 stateful 하게 됨
MDN 참고
## Thread
동시성 작업할 때 쓰레드 사용한다
Method Area - static 영역, 필드 및 메서드 데이터(메서드 실행하는 것이 아니라 메서드 자체에 대한 정보) <- 메타 데이터라고 함
메서드 및 생성자 코드
Heap
인스턴스 관리
배열
쓰레드 안에는
JVM Stack
PC Register
Native Method Stack
지역 변수들 각 개별 쓰레드에서 관리
프로세스 VS 쓰레드
동시에 여러 작업할 때 쓰레드 사용
Race Condition
하나의 객체 인스턴스를 여러 스레드가 참조할 수 있다
-> 아래 두가지 문제가 생김
스레드 간섭
메모리 일관성 오류
그걸 해결하기 위해 동기화를 사용한다
Thread-safe class
-> Instance에 final 붙이는 이유
상태 변수를 쓰레드 간에 공유하지 않는다.
상태변수를 변경할 수 없도록 만든다.
상태 변수에 접근할 떈 언제나 동기화를 사용한다.
캡슐화나 데이터 은닉은 스레드 안전한 클래스 작성에 도움이 된다
atomic 단점은 없나? - Atomic 클래스들은 특정 연산만 지원하기 때문에 복잡한 연산을 사용하기는 어렵고, 여러 스레드가 동시에 atomic 변수를 업데이트할 때 같이 업데이트를 시도할 때 한 스레드가 성공할 때까지 다른 스레드는 계속 실패하며 반복해야 하기 때문에 성능 저하가 있을 수도 있다고 하네요
🎶 느낀 점 & 배운 점
오늘 계획 한 것 :
* 강의 [O]
* 프로젝트 회의 (2개) [O]
* 톰캣 컨트리뷰트 PR 리뷰반영[O]
* 알고리즘 스터디 [O]
* 실습 [O]
* 페이지네이션 공부
* 블로그 글 작성
* 이력서 정리
* 깃헙 리드미 정리
* 이분탐색 문제 더 풀기
* 냅색 문제 더 풀기
* 미션 3,4단계
오늘 한 것 :
* 강의 [O]
* 프로젝트 회의 (2개) [O]
* 톰캣 컨트리뷰트 PR 리뷰반영[O]
* 알고리즘 스터디 [O]
* 실습 [O]
공부할 것 :
스프링 부트에서 tomcat 커넥션과 스레드 개수 설정이 둘 다 존재하는 것 같은데, 둘은 어떤 차이가 존재하는지 궁금해요
completable future
Spring Web Flux
자바의 Synchronized -> monitor lock
@PostConstruct
@HandlebarsHelper
cache max-age public 설정 이유
WebContentInterceptor
Cache Public, Cache private
REST한 요청
DNS
CORS - Preflight
CDN
CAS (Compare and Swap) 알고리즘
쿠키 세션
Configuration Property Scan
static field 언제 올라감?
Mozilla
ClassLoader가 어떻게 읽음?
spring boot project build package 생기는 이유랑 왜 거기서 클래스패스 찾는지
오찌 로깅
https://velog.io/@saint6839/Controller%EC%97%90%EC%84%9C-HttpRequest-Body-%EA%B0%92%EC%9D%80-%EC%99%9C-%EB%B9%84%EC%9B%8C%EC%A0%B8-%EC%9E%88%EC%9D%84%EA%B9%8C getBody 왜 비워져있는지
필터 인터셉터 빈등록
StatementInspector
쿼리카운터 -> ThreadLocal
로그인 -> 인터셉터 or 필터
Join Column 공부
createdDate CreationTime
entity listener
MappedSuperClass
웹소켓
블루그린, 레드블랙, 롤링
flyway -> 롤백하는 경우 스키마 관리에 문제 생김
@Retention -> https://jeong-pro.tistory.com/234
composite 패턴
decorate 패턴
검프 도커 테코톡 실습편
Paging, Pagination
@Valid 에서 잡은 예외 허브가 해 놓은거 이해하기
ssh 설정
propagation, isolation 직접 설정 (https://velog.io/@kdhyo/JavaTransactional-Annotation-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-26her30h) -> 이거 보고 감 잡기
팬텀리드 예시 다시 보기
DB에서 B-Tree 쓰는 이유
복합키
Unique 동시에 걸기
커버링 인덱스
인덱스 스킵 스캔
springfox, springdoc
queryDSL
CQRS
LAZY Loading (Transactional 사용하지 않으면 못 쓰는 이유)
Fetch Join
@ContextConfiguration(classes = TestSyncConfig.class)
TransactionTemplate
나아가팀 배포 스크립트문제 -> 쉘 스크립트 프로세스 물고 있는 문제
동욱님 JPA Exists 쿼리 성능 개선 블로그
동욱님 예외레벨 블로그
나아가팀 AuthInterceptor에서 터지는 예외가 ControllerAdvice에서 처리도 되고, 콘솔에 에러라고 찍히기도 함 -> 해결못함
CD 할 때 도커 허브
queryDSL 동적쿼리
토큰 암호화
self-join
certbot
jpa bulk insert 할 때 auto increment 이면 안됨
토큰 세션 장단점
syncronized, 비관적 락 장단점
비동기와 트랜잭션
@AttributeOverride
레디스
메세지 큐
R-Tree
페이징
커버링인덱스
대칭키 암호화 비대칭키 암호화 복호화
모든 엔티티의 변수를 VO로
🌸 감정회고
톰캣 컨트리뷰터가 되었다...! 감격......
ㅋㅋㅋㅋ 정말 별 거 아닌 수정이지만, 오픈소스에 기여하는 것이 처음이라고 적어놔서 그런지 킹갓엠퍼러제너럴사람좋게생긴 Mark가 무려 'A lot easier to follow'라고... 격려도 해줬다.. 하하!
재미를 느끼게 되어서 다행이고, 덕분에 Http11Processor도 열심히 뜯어보고 있다
아 개발 재밋다 재밌어서 더 잘 하고 싶다 욕심나네
+
주책 다 받아주고 멋지다고 해줘서 고맙습니다!