# 202121010 - Key-Value store project by ypilseong

**202121010 양필성**

## 프로젝트 개요

이 프로젝트의 목적은 C 프로그래밍 언어를 사용하여 간단한 키-값 저장소를 개발하는 것이다. 이 저장소는 기본 데이터베이스 관리 기능을 통해 사용자가 데이터를 저장, 검색, 삭제할 수 있게 한다.

## 기능 설명

사용자는 다음과 같은 기능을 사용할 수 있다

- put: 새로운 키-값 쌍을 데이터베이스에 추가. 형식: `p,key,value`
- get: 키에 해당하는 값을 검색합니다. 키가 있으면, 키와 값을 출력. 형식: `g,key`
- delete: 키-값 쌍을 데이터베이스에서 삭제. 형식: `d,key`
- clear: 데이터베이스의 모든 키-값 쌍을 제거. 형식: `c`
- all: 데이터베이스의 모든 키-값 쌍을 출력. 형식: `a`

## 설계 방향

1. 데이터 저장 방법

   - 프로젝트는 key와 value를 일반 텍스트 파일(database.txt)에 저장한다. 데이터는 `key`,`value` 형식으로 한 줄에 하나씩 저장되며, 여러 데이터를 관리하기 위해 파일을 읽고 쓰는 작업을 수행한다.

2. 핵심 데이터 구조

   - 프로그램 실행 시, 파일의 내용은 메모리 내의 데이터 구조(예: 연결 리스트, 해시 테이블)로 로드된다. 사용자에 의한 데이터 조작은 주로 메모리 내의 데이터 구조에 대해 수행되며, 프로그램 종료 전 파일에 데이터를 다시 쓰기로 반영한다.

3. 오류 및 예외 처리
   - 잘못된 명령 처리: bad command 오류를 출력하고 다음 명령으로 넘어간다.
   - 예기치 않은 오류: 메모리 할당 실패나 파일 열기 실패와 같은 예기치 않은 오류가 발생하면, 적절한 오류 메시지를 출력하고 프로그램을 종료한다.

## 개발 방법론

1. 점진적 개발

   - 먼저 하나의 기능에 대해 간단한 구현을 시작으로, 점차 다른 기능을 추가한. 각 단계를 테스트하며 완성도를 높여간다.

2. 테스팅 중요성

   - 기능을 개발함에 있어 테스팅을 중요시한다. 주요 기능 단위 테스트를 생성하여 다양한 시나리오에서의 동작을 확인한다.

3. 버전 관리

- 코드의 각 단계는 버전 관리 시스템(Git)에 기록되어, 필요한 경우 이전 버전으로 쉽게 되돌아갈 수 있다. 이렇게 하여 개발 과정에서 발생할 수 있는 리스크를 최소화한다.

5. 결론
   이 프로젝트는 C 프로그래밍 및 시스템 프로그래밍의 기본에 대한 실용적인 이해를 높이는 데 중점을 두고 있다. 키-값 저장소 구현을 통해, 학생들은 데이터 관리 및 파일 시스템 작업에 대한 근본적인 개념을 익히고, C 언어의 기능을 보다 깊이 탐구할 수 있을 것이다.
