2025 sql advent calendar를 진행하고 있는데, 계속 같은 형식대로 파일을 생성하고 커밋하는 것이 비효율적이어서 지금이라도 자동화 스크립트를 만들어서 적용해보고자 하였다.
1. 목적
2. 필요한 기능 명시
3. 쉘 스크립트 작성
3.1. LLM 사용 과정 및 프롬프트
3.2. 결과 출력 및 권한 부여
3.3. 결과 및 피드백
4. 후기
1. 목적
https://solvesql.com/collections/advent-of-sql-2025/
https://solvesql.com/collections/advent-of-sql-2025/
solvesql.com
위 사이트에서 sql 어드밴트 캘린더처럼 크리스마스 전까지 1문제씩 풀고 있다. 그리고 푼 문제를 깃헙에 레포를 만들어서 커밋하고 있다.
푼 문제 파일 형식과 커밋 형태가 정해져 있기 때문에 문제 링크와 풀이 코드를 입력받았을 때 자동으로 파일 생성 및 커밋 과정을 자동화하기로 하였다.
2. 필요한 기능 명시
우선 해당 자동화 기능을 분리하면 아래와 같다.
1) sql 파일 생성
input : 문제 링크, sql 쿼리
output : 형식에 맞는 sql 파일 출력
2) 1)에서 만든 파일 깃헙 레포에 커밋.
input : 1)에서 만든 파일
output : 원하는 커밋 메세지 작성한 커밋 생성.
(++ 일단 테스트용이어서 커밋 생성까지만 생성했다. 추후 원격 레포지토리에 업로드 기능을 추가했다.)
템플릿은 아래와 같이 정했다.
파일명 : %Y%m%d.sql (20251214.sql)
파일 형식
--문제 : [문제 링크]
[코드]
커밋 메세지
solve : %y-%m-%d 문제 해결
3. 쉘 스크립트 작성
3.1. LLM 사용 과정 및 프롬프트
LLM을 사용해서 쉘 스크립트를 작성했다. 쉘 스크립트를 직접 작성하는 것도 좋지만, sql 문제에 시간을 더 할애해야 했기 때문에 LLM 중 Gemini를 사용했다.
프롬프트는 아래와 같다.
지금 실행 환경은 맥북이고, advent_of_sql 폴더 안에서 작업이 이루어져.
내가 문제 링크와 정답을 입력하면 현재 날짜에 맞는 sql 파일을 이미 존재하는 현재 년도 폴더 안에 넣어서 만들어.
(2025년 12월 21일이면 2025 폴더 안에 20251221.sql 파일 생성)
생성한 sql 파일에 내가 입력한 문제 링크와 정답을 입력해.
형식은 아래와 같아.
--문제 : 문제 링크
코드
위와 같은 식으로 sql 파일에 내가 만든 입력값을 넣어 저장한 후, 현재 위치하는 폴더에서 깃헙과 연결되어 있을 경우
git add ., git commit -m "solve : 현재년도-현재월-현재일 문제 해결" 이런 식으로 커밋하도록 설정할거야.
위 같은 과정을 구현하려면 어떻게 해야 하는지 자세히 알려줘
3.2. 결과 출력 및 권한 부여
그 결과 출력된 save_sql.sh 파일에서 주석, 이모지를 제외하면 아래와 같다.
#!/bin/bash
# --- 1. 날짜 및 경로 변수 설정 ---
CURRENT_YEAR=$(date +%Y)
CURRENT_DATE=$(date +%Y%m%d)
COMMIT_DATE=$(date +%Y-%m-%d)
TARGET_DIR="./$CURRENT_YEAR"
FILE_PATH="$TARGET_DIR/$CURRENT_DATE.sql"
# --- 2. 연도 폴더 확인 및 생성 ---
if [ ! -d "$TARGET_DIR" ]; then
mkdir -p "$TARGET_DIR"
echo "$CURRENT_YEAR 폴더가 없어서 생성했습니다."
fi
# --- 3. 사용자 입력 받기 ---
echo "문제 링크를 입력하세요:"
read PROBLEM_LINK
echo "정답 SQL을 입력하세요 (입력을 마치려면 줄을 바꾼 뒤 Ctrl+D를 누르세요):"
# 여러 줄 입력을 받기 위해 cat 명령어를 사용합니다.
SOLUTION=$(cat)
# --- 4. 파일 생성 및 내용 작성 ---
# 형식에 맞춰 파일 내용을 작성합니다.
{
echo "--문제 : $PROBLEM_LINK"
echo ""
echo "$SOLUTION"
} > "$FILE_PATH"
echo "$FILE_PATH 파일이 생성되었습니다."
# --- 5. Git 커밋 자동화 ---
# .git 폴더가 있는지 확인 후 진행
if [ -d ".git" ]; then
git add .
git commit -m "solve : $COMMIT_DATE 문제 해결"
echo "Git Commit 완료: solve : $COMMIT_DATE 문제 해결"
else
echo "현재 폴더에 Git 저장소가 연결되어 있지 않아 커밋은 건너뜁니다."
fi
파일의 진행 플로우는 아래와 같다.
원하는 연도 폴더 확인 및 생성 → 문제 링크와 정답 입력 받기 → sql 파일 생성 및 내용 적용 → 해당 파일 포함한 깃 커밋 생성
해당 파일을 advent_of_sql 폴더 내부에서 생성하고, 권한을 부여한다.
chmod +x save_sql.sh
그 결과, 아래 명령어를 입력하면 해당 스크립트를 실행할 수 있다.
./save_sql.sh
3.3. 결과 및 피드백
결과에 대한 피드백 및 작성된 프롬프트에 관한 셀프 피드백을 진행하겠다.
1) 결과에 대한 피드백
* 사용자가 원하는 날짜 입력받도록 수정
파일이 실행되는 날의 날짜만 가능한 것이 아닌, 사용자 입력에 따라 날짜를 조정할 수 있도록 입력 부분을 수정했다.
사용한 프롬프트는 아래와 같다.
오늘 날짜로 진행할지 아닌지 판별해.
오늘 날짜로 진행한다면 이전 과정을 그대로 진행하고,
오늘 날짜로 진행하지 않는다면 원하는 날짜를 입력받아서 해당 날짜에 맞는 형식으로 만들어.
예를 들어 오늘 날짜로 진행하지 않을 경우, 날짜를 입력받아.
20251218을 입력할 경우,
20251218.sql 파일에 커밋 메세지를 solve : 2025-12-18 문제 해결 이런 식으로 설정해야해
그 결과는 아래와 같다.
# --- 2. 날짜 선택 로직 ---
echo -n "오늘 날짜($TARGET_DATE)로 진행하시겠습니까? (y/n) [기본값: y]: "
read USE_TODAY
# 입력이 'n' 또는 'N'인 경우에만 사용자 입력 날짜로 덮어씌움
if [[ "$USE_TODAY" == "n" || "$USE_TODAY" == "N" ]]; then
echo "원하는 날짜를 YYYYMMDD 형식으로 입력하세요 (예: 20251218): "
read INPUT_DATE
TARGET_DATE="$INPUT_DATE"
TARGET_YEAR="${INPUT_DATE:0:4}" # 앞 4자리 (2025)
MONTH="${INPUT_DATE:4:2}" # 중간 2자리 (12)
DAY="${INPUT_DATE:6:2}" # 뒤 2자리 (18)
COMMIT_DATE="$TARGET_YEAR-$MONTH-$DAY"
echo "날짜가 $TARGET_DATE (커밋용: $COMMIT_DATE) 로 변경되었습니다."
fi
# --- 3. 경로 변수 확정 ---
DIR_PATH="./$TARGET_YEAR"
FILE_PATH="$DIR_PATH/$TARGET_DATE.sql"
문제 링크와 코드를 입력받기 전 날짜 선택 로직을 추가하고 이후 경로 변수를 확정하게 되었다.
오늘 날짜로 진행할 경우에는 그대로 진행하지만, 다른 날짜로 진행할 경우 입력받은 후 형식에 맞게 수정하고 날짜를 적용하도록 수정되었다.
* 현재 스크립트를 실행할 때 실행 과정에서 만들어진 파일만 추가
모든 파일을 추가하는 것이 아닌, 실행 과정에서 생성된 sql 파일만 추가되도록 수정했다.
이 부분은 깃 커밋 자동화 과정에서 add 명령어 뒤만 수정하면 되므로 아래와 같이 수정했다.
# --- 5. Git 커밋 자동화 ---
# 중략
git add "$FILE_PATH"
2) 프롬프트에 대한 피드백
전체적으로 틀을 잡는 3.1의 프롬프트에 대해 피드백하겠다.
(다른 프롬프트는 기능 추가 또는 수정이어서 기능 설명 위주로 추가되고 전체적인 플로우를 보기는 길이가 짧다고 판단했기 때문이다.)
프롬프트 내에서 플로우 (입력 → 파일 생성 → 깃 커밋)은 명확하다.
하지만, 구현 세부 사항에 관한 디테일이 부족하다.
부족한 디테일은 아래와 같다.
= 입력 방식 불명확 : sql은 여러 줄이며, 실행 시 인자로 받을 것인지 실행 후 인터랙티브한 입력으로 처리하는지 명시되지 않았다.
= 예외 처리 : 현재 년도 폴더가 없을 경우에 대한 예외처리를 추가로 해야 한다.
(AI가 임의로 처리할 수 있지만 프롬프트 의도와 달라질 수 있기 때문이다.)
(++ 원하는 파일 설정은 이미 수정했고, 푸시는 해당 과정에서 문제가 생겼을 경우, 커밋만 했을 때 해결하는 게 용이하기 때문에 현재는 추가하지 않았다.)
위와 같은 조건으로 3.1의 프롬프트를 수정하면 아래와 같다.
맥북 터미널에서 실행할 Shell Script를 작성해줘.
실행 시 문제 링크와 SQL 코드를 사용자로부터 입력받고, Multi-line을 지원해야 해.
YYYY/YYYYMMDD.sql 경로로 파일을 생성해.
원하는 년도의 폴더가 없으면 생성하고,
파일 작성 후에는 git commit까지 자동으로 수행해줘.
커밋 메세지 형식은 아래와 같아.
--중략--
4. 후기
AI로 쉘 스크립트를 만들고 적용해보니, 반복 작업 자동화는 확실히 편하다고 느껴진다. 더 복잡하고 고도의 작업에서도 적용하면 생산성이 향상될 느낌이다.
그리고 gemini 같은 LLM을 사용하는 경우 본인의 지식 및 질문 수준, 질문 방법에 따라 대답의 질이 명확하게 다르다고 느꼈다.
그래서 코드 리뷰처럼 프롬프트 리뷰도 짧게나마 시간을 가지는 것이 좋다고 느꼈다. 더 적은 메세지 양으로 더 명확한 답을 내고, 내가 원하는 바를 정확하게 정리하는 연습도 지속적으로 할 수 있다고 생각하기 때문이다. 앞으로 프롬프트 리뷰도 꾸준히 해봐야겠다.
현재 AI를 통해 현재 화이트칼라에 대한 접근성이 전체적으로 낮아지고 있어서 AI를 잘 활용해서 질의응답을 통해 지식을 빠르게 흡수하고, 하고 싶은 / 진행 중인 프로젝트에 적용해봄으로써 성장 사이클을 빠르게 굴려야 살아남겠다라는 생각이다.