세션 : 저장소 , 응답과 요청의 묶음
사용 이유 --> R / W
@SessionAttributes : R/W코드를 제거 --> 읽고쓰는 코드를 안써도 되게 해줌
--> R / W에 사용한다 . 세션에서 읽어오기, 세션에 저장하기
W ) session.getAttribute("id",id)
R ) session.getAttribute("id",id)
--> @SessionAttributes("id")
*String.getBoardList(Member member)에 사용가능한 애너테이션
1. RequestParam
2. ModelAttribute
3. sessionAttribute
4.pathVariable
5.cookieValue
1장 SQL 처리 과정과 I/O
1.1 SQL 파싱과 최적화
1. 구조적, 집합적, 선언적 질의 언어
구조적 : 테이블이 2차원 배열
선언적 vs 명령적
선언적 : select * from emp; --> SQL,함수형(람다)
명령적 : for( Emp e : emp) print(e); --> Java
2.SQL 파싱 - 트리 생성, 문법체크, 의미체크(말이되는지, 권한)
3. SQL 최적화 : Optimizer (= 컴파일러) --> 최저 비용의 실행계획 찾기(트리 구조)
4. Optimizer 최적화 = Rule (규칙) --> 변경 어려움(항상 같은 최적화 기준) --> 사용 x
Cost(통계) 이용 --> 통계가 변할수록 최적화 기준 변경
5. 비용(Cost) /= 실제 값
= 예상 소요시간 또는 예상 I/O횟수
1.2 SQL 공유 및 재사용
1. SGA :모든 사람이 공유
2. 캐시의 종류
1. 데이터 캐시(DB Buffer Cache)
2. SQL 캐시(Library Cache)
캐시 사용 이유 : 재사용
캐시는 Map 으로 관리 -> 문자열에 해시코드(4byte)값을 넣어놓고 Key로 사용
해시코드가 문자열보다 비교하기 쉽다
하드파싱 : CPU소모 ↑
컴퓨터 : CPU 와 I/O 중 어느 것을 더 부담시킬 것인지 선택하기
압축 -> CPU 부담 증가
압축 x -> I/O 부담 증가
sql은 이름 이 없다
바인드 변수 = '?' = 계속 달라지는 부분을 추상화 , 쿼리의 재사용
1.3 데이터 저장 구조 및 메커니즘
데이터 저장구조는 논리적 저장구조(테이블스페이스)와 물리적 저장구조 존재 (실제 저장방식)
튜닝 : 디스크를 최대한 덜쓰는 방법 찾기
데이터 파일 : 디스크 상의 물리적인 OS파일
테이블스페이스: 세그먼트를 담는 콘테이너
세그먼트 : 테이블 스페이스를 종류별로 나눈 것 - 테이블, 인덱스, 파티션, LOB
익스텐트 : 세그먼트 확장 단위
블록 : 최소 I/O 단위
익스텐트는 필요에 따라 늘어난다.
LOB : Large Object Block : 큰 객체를 저장. 따로 저장해서 참조 --> CLOB :Char. BLOB : Binary
인덱스 : 테이블 데이터 읽기 위해
읽기 1. 처음부터 읽기 : 시퀀셜 엑세스 (테이블 )
2. 건너뛰어 읽기 : 랜덤 엑세스(인덱스)
논리적 I/O : (SGA에서) 캐시 읽기
물리적 I/O : 디스크 읽기
디스크에서 읽어오는것은 메모리에서 읽어오는(캐시읽기)보다 1000배 느리다.
대용량 은 무조건 MAP으로 관리
I/O CALL : 전체 데이터 중 일부만 캐시에 적재해서 읽을수 있다
1. Single Block I/O = 한번에 한블럭 요청
2. Multiblock I/O = 한번에 여러블럭 요청 - 인덱스 사용하지 않을때 유리
Table full scan(순차) vs Index range scan(랜덤)
'패스트캠퍼스 백엔드 부트캠프 3기' 카테고리의 다른 글
[패스트캠퍼스 백엔드 부트캠프 3기] 11주차 (0) | 2025.02.24 |
---|---|
[패스트캠퍼스 백엔드 부트캠프 3기] 9주차 (0) | 2025.02.14 |
[패스트캠퍼스 백엔드 부트캠프 3기] 8주차 (0) | 2025.02.08 |
[패스트캠퍼스 백엔드 부트캠프 3기] 5주차 (0) | 2025.01.20 |
[패스트캠퍼스 백엔드 부트캠프 3기] 4주차 공부한 내용 (0) | 2025.01.13 |