서버가 만들어질때, 데이터베이스를 연결할 거란 말이야? 이 데이터베이스와 서버는 '바이트스트림'으로 통신을 한다. 통신을 할때 이 데이터베이스에는 스레드가 없다. (자바는 있다)
*웹서버는 Stateless 방식! → 연결이 끊기지 않고 계속 되면 부하가 걸려 힘들다.
연결 후 필요한 데이터가 오면 연결 끊는다.
'사과' 데이터를 요청하는 클라이언트가 등장했다. 서버는 데이터를 들고있는 데이터베이스한테 요청해서 찾아서 사과를 준다.(응답) 요청과 응답이 끝나면 연결은 끊긴다.
근데 만약 사과를 10만개를 달라고했고, 주는데 1초가 걸린다고 치자. 근데 동시에 '딸기'를 달라는 클라이언트가 들어왔다. 사과가 쬐끔 더 먼저 요청했다고 치면, 딸기는 사과가 응답받는 동안 1초를 기다려야한다.
cpu가 들고 있는 데이터는 모두 하드나 메모리에 들어있다. 메모리에 적재시킨 데이터는 최근에 사용한 것이나 자주 쓰는 것이다. (LRU : 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법)
캐싱/ cpu 레지스터에 데이터가 있으면 메모리까지 가지 않아도 되니까 이게 캐싱, 메모리에 데이터가 있으면 하드까지 가지 않아도 되니까 이게 캐싱 → 캐싱은 상대적인 개념이다. 근데 하드디스크에 접근 하는 것을 IO(입출력)라고 하는데, 이는 프로그램에서 가장 줄여야할 것이다.
메모리는 랜덤 엑세스, 필요한 정보를 다이렉트로 가져올 수 있다.(HashMap)
→ 전류로 데이터를 저장함. 빠르지만 휘발성
하드디스크는 순차적으로 풀 스캔을 해서 찾는다. (ArrayList)
→ 물리적으로 데이터를 저장함. 느리지만 비휘발성 /데이터베이스는 하드에 저장됨.
사과를 요청하고 응답받는데 일초가 걸린다. 이때 CPU는 놀고있다. 데이터 찾아올때까지 기다려야되니까.. 이때 딸기를 처리하게 한다. 이때 스레드가 필요하게 된다. 서버의 커넥션 갯수는 config 폴더에 저장이 되어있을 것이다.(이게 설정파일임 like web-INF)