Mission: 쿠키, 세션, 웹스토리지와 배열 관련 질문 정리
📌
1. 쿠키, 세션, 웹스토리지의 차이를 설명해보세요.
- 쿠키(Cookies):
- 저장 위치: 클라이언트(브라우저)에 저장됩니다.
- 용도: 사용자 정보를 클라이언트 측에서 보존하고, 서버와 상호작용할 때 사용됩니다.
- 수명: 설정된 만료 날짜까지 지속됩니다.
- 저장 용량: 일반적으로 작은 데이터만 저장할 수 있으며, 도메인당 제한된 용량을 가집니다.
- 세션(Session):
- 저장 위치: 서버에 저장됩니다.
- 용도: 사용자의 상태를 서버 측에서 관리하고, 인증 및 권한 부여와 같은 보안 관련 작업에 사용됩니다.
- 수명: 사용자 세션이 종료되거나 만료될 때까지 유지됩니다.
- 저장 용량: 서버의 용량 및 설정에 따라 다를 수 있으며, 일반적으로 더 큰 데이터를 저장할 수 있습니다.
- 웹 스토리지(Web Storage):
- 저장 위치: 클라이언트(브라우저)에 저장됩니다.
- 용도: 로컬 저장소로 사용자 데이터를 클라이언트 측에서 보존하고, 세션보다 간단한 데이터 저장에 사용됩니다.
- 수명: 사용자가 지우거나 클리어하지 않는 한, 영구적으로 데이터를 보존합니다.
- 저장 용량: 일반적으로 다수의 데이터를 저장하는 데 사용되며, 도메인당 제한된 용량을 가집니다.
요약하면, 쿠키는 작은 데이터를 클라이언트에 저장하고 서버와 상호작용할 때 사용됩니다. 세션은 서버에 데이터를 저장하여 사용자 상태와 보안을 관리합니다. 웹 스토리지는 브라우저에 데이터를 저장하고 비교적 큰 양의 클라이언트 데이터를 관리합니다.
2. 배열에 대해 설명하세요.
배열은 연속적인 메모리 위치에 데이터를 저장하는 자료구조입니다. 배열은 데이터의 순서를 유지할 수 있으며, 데이터에 빠르게 접근할 수 있습니다. 하지만, 배열의 크기는 고정되어 있기 때문에, 데이터가 많아지면 배열을 재할당해야 합니다.
2-1. 배열의 특징을 말해보세요.
- 순서가 있습니다. (메모리 순서대로)
- 연속된 공간을 '미리' 정해서 사용해야 합니다. (확정된 메모리 공간을 할당받아 써야 하므로)
- N번째 데이터에 접근하기 위해 복잡한 과정 필요없이 그냥 덧셈과 곱셈 한번이면 가능합니다. (n번째 데이터 접근 : 시작 주소 + (n-1) * 해당 자료형 크기)
갯수가 확정된 경우에 배열이 쓰일 수 있다는 점을 알 수 있습니다.
2-2. CRUD에 대해 배열이 어떻게 동작할 지 말해보세요.
- Create : 이미 new int[5];로 만들어져있는 데이터인데 새로운 6번째 데이터를 새로 배열에 넣으려고 한다. 어찌보면 어차피 메모리에 연속된 공간을 사용중이었으니까 메모리에 연속된 공간으로 하나 더 늘리면 되지 않나? 싶을 수 있으나, 이미 해당 공간이 사용중인지 아닌지 알 수 없으므로 그렇게 사용하면 안되기도 하고, 자바에서는 그렇게 할 수도 없습니다.
(C는 raw해서 그렇게 할 수 있지만, 디스크 전체가 비어있는게 아니기 때문에 몇만번 할당하다보면 메모리 충돌나서 뻗습니다. 😢)
유일한 방법은 새로운 연속된 공간을 다시 할당받고 기존에 있던 데이터를 모두 새로운 곳으로 옮기는 방법입니다. 코드로 나타내면 아래와 같습니다.
(예외로 미리 더 큰 크기의 배열을 선언했고, 빈 공간에 넣을 경우엔 당연히 한 번에 넣을 수 있습니다.)int[] arr = new int[5]; arr[0] = 1; ...// 무언가 넣음int[] tmp = new int[6]; for (int i = 0; i < arr.length; i++) { tmp[i] = arr[i]; } arr = tmp;
- Read : 몇번째 데이터라도 덧셈과 곱셈 한번씩이면 접근할 수 있으므로 매우 빠르게 접근할 수 있습니다.
- Update : Read와 마찬가지로 매우 쉽게 접근해서 수정 가능합니다.
- Delete : Create처럼 어렵다. int[] arr = new int[5];에서 arr[3]을 제거하려고 할때, Create의 예시처럼 new int[4]; 를 만든 후 복사해 넣어야 합니다. 혹은 공간 자체는 안줄여도 된다고 해도 arr[3]이후의 모든 값을 한칸씩 앞으로 땡겨줘야합니다. (예외로 배열의 크기를 사용하는 데이터의 갯수와 관계없이 유지해도 되고 마지막 데이터를 삭제하는 경우라면 한방에 가능합니다.)
최종적으로 데이터 갯수가 확정되어 있고, 데이터 읽기와 수정이 많고 새로운 데이터가 추가되거나 삭제되지 않는 경우 배열을 사용하기 적합하다고 알 수 있습니다. 이런식으로 원리를 알면 어떨 때 어떤 자료구조를 사용해야 하는가는 따로 외우지 않아도 유추해서 적합한 자료구조를 사용할 수 있습니다.