Python 날씨 에이전트의 사용자 상태를 DB에 저장하고, 재시작 후에도 기억하는 과정입니다.
이번 실습의 목표는 단순히 날씨를 알려주는 AI 에이전트를 만드는 것이 아닌, Python으로 에이전트를 작성하고, PostgreSQL을 연결하고, ADK가 대화 상태를 데이터베이스에 저장하도록 만든 다음, 실제로 도시명이 저장되는지 검증하는 것이 핵심입니다.
이번에 성공한 환경을 기준으로 처음부터 다시 따라 할 수 있도록 정리하겠습니다. 코드 작성 순서와 실행·검증 절차에 집중하겠습니다.
[전체 흐름 한눈에 보기]
1. Python 날씨 에이전트 작성
오늘 날씨 / 내일 날씨 / 마지막 도시 상태 관리
2. Python 패키지와 DB 드라이버 설치
Google ADK · SQLAlchemy · asyncpg 등
3. Docker에서 PostgreSQL 실행
DB · 계정 · 비밀번호 · 포트 · 영구 볼륨
4. ADK와 PostgreSQL 연동
DatabaseSessionService를 사용하는 DB 연결 문자열
5. 웹에서 날씨 대화 테스트
“서울 오늘 날씨 어때?” → “내일은?”
6. SQL로 저장 결과 검증
테이블 → 스키마 → JSONB 상태 → 재시작 후 복원
실습의 최종 성공 조건은 다음 네 가지입니다.
-
PostgreSQL 컨테이너가 정상 실행된다.
-
ADK가 PostgreSQL에 연결되고 필요한 테이블을 생성한다.
-
사용자 상태에 서울이 실제로 저장된다.
-
ADK를 재시작해도 같은 앱과 사용자에서 내일은?이라는 후속 질문에 서울의 내일 날씨를 답한다.
1. 실습 환경과 프로젝트 위치 확인
이번에 사용한 환경입니다.(항목과 실습환경)
| 운영체제 | Windows |
| 터미널 | PowerShell |
| Python | 3.13 |
| 프로젝트 경로 | C:\Dev\book_agentic_ai\adk_ |
| 에이전트 폴더 | hello_agent |
| ADK 웹 포트 | 8080 |
| Docker 컨테이너 | adk-postgres |
| PostgreSQL 이미지 | postgres:15 |
| 데이터베이스 | agent_sessions |
| DB 사용자 | adk_user |
| DB 포트 | 5432 |
| SQLAlchemy 비동기 드라이버 | asyncpg |
1-1. PowerShell에서 프로젝트 폴더로 이동
cd C:\Dev\book_agentic_ai\adk_
현재 위치를 확인합니다.
Get-Location
폴더와 파일 목록을 확인합니다.
Get-ChildItem
프로젝트 구조는 다음과 같은 형태로 준비합니다.
adk_/ hello_agent/ agent.py (날씨 도구와 에이전트를 작성하는 파일)
adk web은 이 프로젝트 폴더에서 실행합니다. ADK는 hello_agent 안의 root_agent를 찾아 웹 UI에서 사용할 에이전트를 로딩합니다.
2. Python 패키지와 데이터베이스 드라이버 설치
Python 코드가 PostgreSQL에 접속하려면 단순히 PostgreSQL만 설치되어 있어서는 안 됩니다. Python 측에도 필요한 패키지가 있어야 합니다.
2-1. 패키지 설치 전 Python 확인
python --version
python -m pip --version
두 명령의 Python 경로가 같은 가상환경을 가리키는지도 확인하면 좋습니다.
2-2. 필요한 패키지 설치
처음부터 다시 실습한다면 프로젝트에서 사용하는 Python 환경을 활성화한 다음 아래 명령을 실행합니다.
python -m pip install --upgrade pip
python -m pip install google-adk
python -m pip install sqlalchemy
python -m pip install "psycopg[binary]"
python -m pip install asyncpg
각 패키지의 역할은 다음과 같습니다.
| google-adk | 에이전트와 ADK 웹 실행 환경 |
| sqlalchemy | Python과 관계형 데이터베이스 사이의 DB 접근 계층 |
| psycopg[binary] | PostgreSQL용 Psycopg 드라이버 |
| asyncpg | PostgreSQL 비동기 연결 드라이버 |
이번 실습에서 실제로 사용할 연결 드라이버는 asyncpg입니다. 앞서 Psycopg를 설치했더라도 연결 문자열에 postgresql+asyncpg://를 지정하면 SQLAlchemy는 asyncpg를 사용합니다.
설치가 완료되면 확인합니다.
python -m pip show google-adk
python -m pip show sqlalchemy
python -m pip show asyncpg
python -m pip show psycopg
특정 패키지가 없다는 메시지가 나오면 해당 패키지 설치부터 다시 확인합니다.
2-3. 만날 수 있는 오류와 원인(오류 의미 및 조치)
| adk 명령을 찾을 수 없음 | ADK 설치 여부와 현재 Python 환경을 확인하고, 설치 후 adk web을 실행 |
| No module named 'sqlalchemy' | SQLAlchemy 설치 필요 |
| No module named 'asyncpg' | python -m pip install asyncpg 실행 |
| connect() got an unexpected keyword argument 'sslmode' | 사용한 드라이버가 해당 연결 옵션을 처리하지 못한 문제. 우선 검증된 연결 문자열을 사용하고, SSL 설정은 드라이버 방식에 맞게 별도로 확인 |
성공한 연결 문자열은 아래와 같습니다.
postgresql+asyncpg://adk_user:adk_password@127.0.0.1:5432/agent_sessions
실제 운영 환경에서는 비밀번호를 코드나 명령 기록에 직접 남기지 말고 환경변수 또는 비밀 관리 수단을 사용하는 것이 좋습니다.

3. Docker에서 PostgreSQL 구성하기
이 단계에서는 Python과 별개로 데이터베이스 서버를 실행합니다.
이번 실습에서는 Windows에 PostgreSQL을 직접 설치하는 대신, Docker 컨테이너 안에서 PostgreSQL 15를 실행했습니다.
3-1. Docker 실행 여부 확인
PowerShell에서 다음을 실행합니다.
docker --version
docker compose version
docker ps
docker ps는 현재 실행 중인 컨테이너를 보여줍니다.
이미 adk-postgres가 존재한다면 새 컨테이너를 만들지 말고 3-3단계로 이동하세요.
3-2. PostgreSQL 컨테이너 생성
처음 구축하는 환경이라면 다음과 같이 컨테이너를 만들 수 있습니다.
docker volume create adk-postgres_data
docker run -d `
--name adk-postgres `
-e POSTGRES_USER=adk_user `
-e POSTGRES_PASSWORD=adk_password `
-e POSTGRES_DB=agent_sessions `
-p 5432:5432 `
-v adk-postgres_data:/var/lib/postgresql/data `
postgres:15
주의: 기존에 같은 이름의 컨테이너가 있다면 위 명령을 다시 실행하지 마세요. 컨테이너 이름 충돌이 발생할 수 있습니다. 기존 컨테이너를 삭제하거나 초기화할 필요도 없습니다.
명령의 주요 항목을 이해해 두세요.(설정과 의미)
| --name adk-postgres | 컨테이너 이름 |
| postgres:15 | 실행할 PostgreSQL 이미지와 버전 |
| POSTGRES_USER | DB 사용자 생성 |
| POSTGRES_PASSWORD | 해당 사용자 비밀번호 설정 |
| POSTGRES_DB | 초기 데이터베이스 생성 |
| -p 5432:5432 | Windows 호스트의 5432번 포트를 컨테이너의 5432번 포트에 연결 |
| -v adk-postgres_data:/var/lib/postgresql/data | 데이터베이스 파일을 Docker 볼륨에 보관 |
마지막 볼륨 설정은 특히 중요합니다. 컨테이너와 데이터는 같은 것이 아닙니다. 데이터 볼륨을 유지하면 컨테이너를 다시 만들어도 기존 데이터가 남을 수 있습니다. 반대로 볼륨을 삭제하면 데이터가 사라질 수 있으므로 주의해야 합니다.
또한 POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB는 새로운 데이터 디렉터리를 처음 초기화할 때 적용되는 설정입니다. 기존 볼륨을 사용하는 경우에는 이 환경변수를 바꾸는 것만으로 기존 DB 계정이나 비밀번호가 자동 변경되지는 않습니다.
3-3. 컨테이너가 실행 중인지 확인
docker ps
목록에 adk-postgres가 보이는지 확인합니다.
로그도 살펴볼 수 있습니다.
docker logs adk-postgres
PostgreSQL이 준비되었는지 확인하는 가장 직접적인 명령은 다음입니다.
docker exec adk-postgres pg_isready -U adk_user -d agent_sessions
정상적인 결과 예시:
/var/run/postgresql:5432 - accepting connections
이 메시지가 나오면 PostgreSQL 서버가 연결 요청을 받을 준비가 되었다는 뜻입니다.
다만 이것만으로 ADK 연결까지 검증된 것은 아닙니다. DB 서버가 살아 있다는 확인일 뿐, Python 드라이버·계정 인증·ADK 연결은 다음 단계에서 별도로 검증합니다.
4. PostgreSQL에 직접 접속하기
이제 SQL을 직접 실행해 데이터베이스를 살펴보겠습니다.
PowerShell에서 다음을 실행합니다.
docker exec -it adk-postgres psql -U adk_user -d agent_sessions
접속에 성공하면 프롬프트가 다음과 같이 바뀝니다.
agent_sessions=#
이제부터 입력하는 명령은 PowerShell 명령이 아니라 PostgreSQL의 psql 안에서 실행하는 SQL 명령입니다.
4-1. 현재 DB와 사용자 확인
SELECT current_database();
기대 결과:
agent_sessions
현재 접속 사용자를 확인합니다.
SELECT current_user;
기대 결과:
adk_user
4-2. 테이블 목록 확인
\dt
이번 실습에서 확인했던 결과는 다음 5개 테이블이었습니다.
| adk_internal_metadata | ADK 내부 메타데이터 |
| app_states | 애플리케이션 범위 상태 |
| events | 대화 이벤트 |
| sessions | 세션 정보 |
| user_states | 사용자 범위 상태 |
이 테이블들은 ADK의 DatabaseSessionService가 DB를 초기화하면서 생성한 것입니다. 직접 CREATE TABLE을 작성해서 만든 것이 아닙니다.
여기서 기억할 점: PostgreSQL 서버와 데이터베이스를 준비하는 일은 우리가 했지만, ADK 세션 저장용 테이블의 생성과 사용은 ADK가 담당합니다.
4-3. 테이블 구조 확인
테이블 이름만 확인하는 것으로 끝내지 말고, 컬럼과 자료형도 확인합니다.
\d sessions
\d events
\d app_states
\d user_states
이번에 확인한 user_states 구조는 다음과 같았습니다.
Column Type
----------- -----------------------------
app_name character varying(128)
user_id character varying(128)
state jsonb
update_time timestamp without time zone
그리고 기본 키는 다음 두 컬럼으로 구성되어 있었습니다.
PRIMARY KEY (app_name, user_id)
이 구조가 중요한 이유는 같은 앱 안에서도 사용자별 상태를 구분해 저장하기 때문입니다. state의 자료형이 jsonb라는 점도 눈여겨보세요. 단순한 문자열 한 개가 아니라 여러 상태 항목을 JSON 구조로 저장할 수 있습니다.
5. Python 날씨 에이전트 작성 순서
이 단계부터는 실제 Python 코드를 작성합니다. 요청하신 대로 여기서는 각 코드 줄의 상세 설명 대신, 어떤 순서로 작성하고 무엇을 확인할지를 정리합니다.
파일 경로:
C:\Dev\book_agentic_ai\adk_\hello_agent\agent.py
코드는 다음 순서로 작성합니다.
-
필요한 모듈과 타입을 import합니다.
-
실습용 날씨 데이터 WEATHER_DB를 정의합니다.
-
마지막으로 조회한 도시의 상태 키 USER_LAST_CITY_KEY를 정의합니다.
-
오늘 날씨 도구 get_today_weather()를 작성합니다.
-
내일 날씨 도구 get_tomorrow_weather()를 작성합니다.
-
도구를 사용하도록 weather_agent = Agent(...)를 구성합니다.
-
ADK가 검색할 수 있도록 root_agent = weather_agent를 지정합니다.
5-1. 작성할 때 지켜야 할 핵심
-
상태를 저장할 때는 도시 이름 변수를 값으로 기록해야 합니다.
-
user:last_city는 상태의 범위를 지정하는 키 이름이지, 저장할 도시 이름이 아닙니다.
-
사용자가 도시를 생략하고 “내일은?”이라고 물으면, 저장된 마지막 도시를 읽어야 합니다.
-
ADK 웹을 실행할 때 에이전트 폴더 안에 agent.py가 있고, 그 안에 root_agent가 정의되어 있어야 합니다.
특히 상태 저장은 다음 개념을 구분해야 합니다.(구분/예시/의미)
| 상태 키 | user:last_city | 어떤 상태 항목을 저장하고 읽을지 지정 |
| 상태 값 | 서울 | 실제로 기억해야 할 도시 이름 |
| DB의 JSON 키 | last_city | 사용자 상태 JSON 안에서 사용하는 항목명 |
| DB의 JSON 값 | 서울 | 저장된 실제 도시명 |
ADK는 user: 접두어를 사용자 범위 상태를 지정하는 데 사용하므로, DB에서 확인할 때는 키가 last_city처럼 접두어 없이 보일 수 있습니다. 실제 DB 결과를 기준으로 검증해야 합니다.
6. ADK 웹과 PostgreSQL 연결하기
이제 가장 중요한 연동 단계입니다. Python 에이전트가 준비되어 있어도, ADK 웹을 실행할 때 PostgreSQL 연결 정보를 전달하지 않으면 우리가 의도한 DB 기반 세션 저장을 검증할 수 없습니다.
6-1. ADK 웹 실행
PowerShell에서 프로젝트 루트 폴더로 이동합니다.
cd C:\Dev\book_agentic_ai\adk_
다음 명령으로 실행합니다.
adk web --port 8080 --session_service_uri="postgresql+asyncpg://adk_user:adk_password@127.0.0.1:5432/agent_sessions?ssl=disable"
연결 문자열의 구성은 다음과 같습니다.(부분과 의미)
| postgresql+asyncpg | PostgreSQL에 asyncpg 드라이버로 연결 |
| adk_user | 데이터베이스 사용자 |
| adk_password | 데이터베이스 비밀번호 |
| 127.0.0.1 | Windows 호스트에서 접근할 주소 |
| 5432 | PostgreSQL 포트 |
| agent_sessions | 연결할 데이터베이스 |
여기서 127.0.0.1은 ADK 웹과 PostgreSQL 컨테이너가 같은 컴퓨터에 있고, PostgreSQL 포트가 호스트에 노출된 현재 실습 환경을 기준으로 한 주소입니다. 그리고, ssl=disable 을 사용합니다. asyncpg에서 인식하는 SSL 연결 옵션을 지정하는 방식입니다.
성공하면 ADK 웹 서버가 실행됩니다. 브라우저에서 다음 주소로 접속합니다.
http://localhost:8080
6-2. ADK가 에이전트를 찾았는지 확인
실행 로그에서 다음과 같은 메시지를 확인합니다.
Found root_agent in hello_agent.agent
이 메시지는 ADK가 hello_agent의 root_agent를 찾아 로딩했다는 의미입니다.
로그에 오류가 나오면 메시지를 먼저 확인하세요. 특히 다음 오류는 원인이 서로 다릅니다.
-
Python 모듈 오류: 패키지 설치 또는 Python 환경 문제
-
데이터베이스 연결 오류: 서버, 계정, 비밀번호, 포트, 드라이버 문제
-
에이전트를 찾을 수 없음: 프로젝트 폴더나 root_agent 구성 문제
정상적으로 실행되었다고 해서 모든 테스트가 끝난 것은 아닙니다. 실제 대화로 상태를 기록하고 SQL에서 확인해야 합니다.
7. 웹 UI에서 날씨 대화 테스트하기
이제 ADK 웹에서 에이전트와 대화합니다.
7-1. 첫 번째 질문: 오늘 날씨
다음과 같이 입력합니다.
서울 오늘 날씨 어때?
예상 답변:
서울의 오늘 날씨는 맑음, 22도입니다.
실습용 WEATHER_DB에 입력한 데이터를 반환하는 것이므로, 실제 기상청 날씨가 아니라 코드에 정의한 테스트 데이터입니다.
이 질문에서 중요한 것은 답변만이 아닙니다. get_today_weather() 도구가 호출되고, 마지막 도시가 사용자 상태에 기록되어야 합니다.
7-2. 두 번째 질문: 내일 날씨
같은 대화에서 다음을 입력합니다.
내일은?
예상 답변:
서울의 내일 날씨는 비, 18도입니다.
이 테스트가 성공하면 에이전트가 앞선 질문의 도시를 후속 질문에서 유지하고 있다는 뜻입니다.
그러나 아직은 같은 실행 프로세스와 대화 안에서 상태를 활용한 것일 수 있습니다. PostgreSQL에 실제로 저장되었는지, 재시작 뒤에도 유지되는지는 SQL 확인과 재시작 테스트를 거쳐야 합니다.
8. PostgreSQL에서 실제 저장 결과 확인하기
이제 브라우저에서 대화한 상태를 PostgreSQL에서 직접 확인합니다.
ADK 웹을 실행한 PowerShell 창은 그대로 두고, PowerShell 창을 하나 더 열어 다음 명령을 실행합니다.
docker exec -it adk-postgres psql -U adk_user -d agent_sessions
8-1. 테이블이 생성되었는지 확인
\dt
user_states, sessions, events, app_states, adk_internal_metadata 등이 보이는지 확인합니다.
8-2. 사용자 상태 스키마 확인
\d user_states
이전에 확인한 것처럼 app_name, user_id, state, update_time 컬럼이 있어야 합니다.
8-3. 사용자 상태 데이터 조회
SELECT * FROM user_states;
여기서 중요한 값은 다음과 같습니다.
| app_name | hello_agent |
| user_id | user |
| state | {"last_city": "서울"}와 같은 JSON 상태 |
| update_time | 상태가 갱신된 시각 |
이번 실습에서는 다음과 같은 행이 조회되었습니다.
app_name | user_id | state
-----------+---------+---------------------------------
hello_agent| user | {"last_city": "user:last_city"}
이 결과는 테이블 생성과 상태 저장 자체는 진행되었지만, 도시명 대신 상태 키 문자열이 값으로 저장된 상태였습니다.
즉, DB 연결 문제와 Python 상태 값 문제를 구분할 수 있었습니다.
-
테이블이 없다면: ADK의 DB 초기화 또는 연결 문제부터 확인
-
테이블은 있지만 행이 없다면: 상태 변경이 저장됐는지 확인
-
행은 있지만 값이 user:last_city라면: Python 코드에서 저장하는 값을 확인
-
값이 서울이라면: 저장 내용이 기대한 형태인지 확인하고 재시작 테스트로 진행
8-4. state JSON만 간단하게 확인하기
전체 행이 복잡하게 보이면 다음 SQL로 상태 컬럼만 확인할 수 있습니다.
SELECT app_name, user_id, state
FROM user_states;
JSON 안에서 도시 이름만 확인하려면 다음과 같이 조회합니다.
SELECT
app_name,
user_id,
state ->> 'last_city' AS last_city,
update_time
FROM user_states;
정상적인 결과 예시:
app_name | user_id | last_city
-----------+---------+----------
hello_agent| user | 서울
여기서 ->>는 PostgreSQL의 JSON/JSONB 연산자입니다. JSON 안에서 last_city의 값을 텍스트로 꺼내 보여줍니다.
이 SQL 조회가 이번 실습의 핵심 검증 중 하나입니다. 에이전트가 말로 “서울”이라고 답하는지만 보는 것이 아니라, 실제 데이터베이스에 그 값이 저장되었는지 확인하는 것입니다.
9. 저장 값이 잘못되었을 때 수정하기
이번 실습에서 가장 중요한 디버깅 경험이 바로 이 부분이었습니다.
처음 조회한 DB 값은 다음과 같았습니다.
{"last_city": "user:last_city"}
우리가 원한 것은 다음과 같은 값입니다.
{"last_city": "서울"}
왜 이런 차이가 생겼을까요?
상태 키와 상태 값을 혼동했기 때문입니다. 상태 키는 도시 이름을 보관할 위치를 지정하고, 상태 값은 실제로 보관할 도시 이름이어야 합니다.
Python 코드에서 상태 저장 부분을 점검합니다.
tool_context.state[USER_LAST_CITY_KEY] = city
이때 city가 "서울"이어야 합니다. 다음과 같이 키 이름을 다시 값으로 넣으면 안 됩니다.
tool_context.state[USER_LAST_CITY_KEY] = USER_LAST_CITY_KEY
코드를 수정했다면 ADK 웹을 종료한 후 다시 실행하고, 대화를 통해 올바른 값이 기록되는지 확인합니다.
SELECT
app_name,
user_id,
state ->> 'last_city' AS last_city,
update_time
FROM user_states;
last_city가 서울로 나오면 이 단계는 성공입니다.
잘못된 값을 확인했다고 해서 DB 전체를 초기화할 필요는 없습니다. 원인을 수정하고 정상적인 상태가 저장되는지 다시 검증하는 편이 안전합니다.
10. ADK를 재시작한 후에도 기억하는지 확인하기
이제 이번 실습의 최종 목표입니다.
같은 프로세스 안에서 기억하는 것과, 프로그램을 종료했다가 다시 실행해도 기억하는 것은 다릅니다.
10-1. 먼저 저장 상태 확인
SQL에서 다음 결과를 확인합니다.
app_name | user_id | last_city
-----------+---------+----------
hello_agent| user | 서울
10-2. ADK 웹 종료
ADK 웹이 실행 중인 PowerShell 창으로 돌아가 Ctrl + C를 누릅니다.
이것은 ADK 웹 프로세스를 종료하는 것이며, PostgreSQL 컨테이너를 삭제하는 것이 아닙니다.
10-3. ADK 웹 재실행
프로젝트 루트 폴더에서 다시 실행합니다.
cd C:\Dev\book_agentic_ai\adk_
adk web --port 8080 --session_service_uri="postgresql+asyncpg://adk_user:adk_password@127.0.0.1:5432/agent_sessions?ssl=disable"
10-4. 후속 질문 테스트
브라우저에서 같은 앱과 사용자로 접속해 다음 질문을 입력합니다.
내일은?
예상 답변:
서울의 내일 날씨는 비, 18도입니다.
이 답변이 성공하면 DB에 저장된 사용자 상태를 재시작 후에도 활용할 수 있다는 것을 확인한 것입니다.
다만 재시작 후 테스트할 때는 같은 app_name과 user_id를 사용하고 있는지가 중요합니다. 이번 실습에서는 hello_agent와 user가 확인되었습니다. 다른 앱이나 사용자로 접속하면 같은 상태가 조회되지 않을 수 있습니다.
11. 실습 중 사용한 SQL 명령어 모음
다음은 이번 실습을 다시 진행할 때 바로 사용할 수 있는 명령어 모음입니다.
1. PostgreSQL 접속
docker exec -it adk-postgres psql -U adk_user -d agent_sessions
2. 테이블 목록
\dt
3. 사용자 상태 스키마
\d user_states
4. 전체 사용자 상태 조회
SELECT * FROM user_states;
5. 도시명만 조회
SELECT app_name, user_id, state ->> 'last_city' AS last_city, update_time FROM user_states;
6. 현재 데이터베이스
SELECT current_database();
7. 현재 사용자
SELECT current_user;
psql에서 빠져나올 때는 다음 명령을 사용합니다.
\q
\dt, \d user_states, \q는 PostgreSQL의 psql에서 사용하는 메타 명령입니다. 일반 SQL 문장과 달리 세미콜론을 붙이지 않습니다.
12. 다시 실습할 때 사용할 최종 체크리스트
다음 체크리스트를 순서대로 확인하면 처음부터 다시 구축하면서 빠진 단계를 찾기 쉽습니다.
실습 진행 상황
0/16 완료
A. Python 환경
B. PostgreSQL
C. ADK 연동
D. 데이터 저장
E. 영속성
이번 실습에서 꼭 이해해야 할 것
이번 작업은 단순한 날씨 챗봇 만들기가 아니라, 앞으로 만들 AI Agent의 중요한 기초를 연습한 것입니다.
-
Python 에이전트는 도구를 실행하고 상태를 변경합니다.
-
Google ADK는 에이전트와 세션·상태 관리 기능을 제공합니다.
-
**SQLAlchemy와 asyncpg**는 ADK가 PostgreSQL에 접근할 때 사용하는 연결 계층과 드라이버입니다.
-
PostgreSQL은 세션 및 상태 데이터를 실제로 보관합니다.
-
SQL 검증은 에이전트가 말한 내용과 DB에 기록된 실제 값이 일치하는지 확인하는 방법입니다.
-
재시작 테스트는 상태가 현재 실행 중인 메모리에만 있는 것이 아니라 DB를 통해 복원되는지 확인하는 과정입니다.