이 저장소는 두 단계로 나뉜다.
- v1.0.0 — 팀 공통 최소 요구사항: 팀 3명이 함께 정한 공통 기능(docs/01 Tier A·B·C)을 명세 001~024로 옮겨 모두 구현한 버전.
- v1.0.0 이후 — 개인 확장: 팀은 공통 최소 요구사항만 맞추고, 그 위에 각자 추가만 하기로 했다(문서 저장소 docs/01 §2-4, 원칙 2: 개인 확장을 켜도 공통 완료 기준은 그대로 지킨다). 명세 025부터는 개인 확장이다(1.1.0: 025~036, 1.2.0: 037~044).
[1.25.0] — 2026-10-13 · 개인 확장 (글 화면 velog식·아이디가 주 이름·피드 추천 섞기)
- 080 글 화면: velog처럼 큰 제목 아래 작성자 줄 오른쪽에 팔로우(내 글이면 ⋯ 메뉴), 태그 칩은 작성자 줄 바로 아래. 댓글 다음에 "관심 있을 만한 글"이 카드로 이어지고 내리면 계속 붙는다(같은 태그·같은 작가·관심 태그·최신 순, 관련 글은 여기로 합침)
- 082 아이디가 주 이름: 인스타그램처럼 작성자 줄·카드·댓글·알림 등에는 아이디(@ 없이), 닉네임은 블로그 첫 화면 프로필 줄과 사람 목록에서 아이디 아래 작게
- 081 피드에 추천 글 섞기: 팔로우한 글 사이에 "추천" 표시와 이유를 단 글이 섞이고, 팔로우한 글을 다 보면 추천 글로 이어진다
- DB 바뀜 없음, 테스트 683개 통과
[1.24.0] — 2026-10-13 · 개인 확장 (탐색·미션 화면 정리)
- 079 탐색: 위 메뉴가 홈 · 탐색 · 미션 · 피드(PC·휴대폰 ☰, 비회원도).
/explore에서 인기 태그, 새로 온 작가, 추천 글, 추천 블로그를 한 화면에서 본다 - 미션 화면: 오늘의 주제를 맨 위에 크게, 내 기록·배지·지난 미션은 아래에 접어 둠
- DB 바뀜 없음, 테스트 681개 통과
[1.23.0] — 2026-10-13 · 개인 확장 (화면 다듬기)
- 펼침 메뉴: 프로필·⋯·☰·공유 같은 펼침 메뉴는 바깥을 누르거나 Esc로 닫히고, 한 번에 하나만 열린다
- 사람 목록·블로그 프로필: 아이디를 위에, 닉네임은 아래에 작게
- PC 홈 오른쪽 칸: 아래 링크를 한 줄로
- DB 바뀜 없음, 테스트 680개 통과
[1.22.1] — 2026-10-13 · 개인 확장 (버그 수정)
- PC 홈 오른쪽 칸 위에서 마우스 휠로 화면이 내려가지 않던 문제 고침(
overscroll-behavior제거)
[1.22.0] — 2026-10-13 · 개인 확장 (글 화면 정리·주소에서 @ 빼기·검색창 추천 태그)
- 075 글 화면 정리: 글쓴이 관리(수정·공개 범위·삭제)는 ⋯ 메뉴로, 고정·카테고리·시리즈는 글 설정 창으로. 닉네임 옆 @아이디는 블로그 첫 화면 프로필 줄에만
- 076 블로그 주소에서 @ 빼기: 블로그는
/{주소}로 열리고, 예전/@{주소}링크는 새 주소로 넘겨 준다(301). 예약어와 겹치는 기존 주소는/@주소를 그대로 쓴다 - 077 PC 홈: 꼬리말은 한 번만(프로필 메뉴 안 꼬리말 링크도 숨김), 오른쪽 칸에 추천 글
- 078 검색창 추천 태그: 머리말의 "태그" 대신 🔍를 누르면 검색창과 추천 태그 10개
- 릴리스 노트에서 사람 이름을 뺐다("개인 확장", "팀 3명")
- DB 바뀜 없음, 테스트 680개 통과
[1.21.0] — 2026-10-13 · 개인 확장 (화면 정리 후속)
- 내 글·시리즈 카드: 홈과 같은 카드 조각으로, 공개 범위·예약 같은 관리 정보는 배지, 관리 버튼은 ⋯ 메뉴로
- 홈: 탭 자리 고정, 트렌딩을 다 보면 최신 글이 이어 붙음(더 보기 버튼 숨김), 오른쪽 칸 고정과 추천 블로그
- 머리말·꼬리말: 머리말 왼쪽 위에서 프로필 메뉴와 겹치는 내 글·설정 빼기, 좁은 화면 ☰ 메뉴에 이용약관·개인정보 처리방침·릴리스 노트·문의하기(비회원도)
- 글쓰기: 사진·표 버튼을 위쪽 글쓰기 머리줄로(좁은 화면은 아이콘만), 본문 위 줄 없앰
- DB 바뀜 없음, 테스트 674개 통과
[1.20.0] — 2026-10-13 · 개인 확장 (인스타식 계정·새로 온 작가 한 줄)
- 074 인스타식 계정: 이메일 → 6자리 코드 → 별명·아이디·비밀번호 → 약관 순서로 가입(같은 카드에 Google·GitHub), 이메일이나 아이디로 로그인, 비밀번호 찾기도 6자리 코드. 블로그 주소(아이디)는 14일에 두 번 바꿀 수 있고 옛 주소로 오면 새 주소로 넘겨 주며, 소셜 접두어(go-·gi-) 없이 아무 주소나 고를 수 있다. 닉네임도 14일에 두 번. 블로그 머리말에 숫자 줄(V18: 주소 변경 기록 표·닉네임 직전 변경 시각, 기존 데이터는 그대로)
- 067 화면 정리 후속: 홈 "새로 온 작가"를 한 줄로 가로로 밀어 보기
- 끄기 스위치
blog.insta-account.enabled - 테스트 674개 통과
[1.19.0] — 2026-10-13 · 개인 확장 (친한 친구 후속·비공개 계정·비밀 대댓글·화면 정리 후속)
⚠️ 되돌릴 수 없는 데이터 변경(069 후속, V16): 1.18.0에서 옮긴 친한 친구 중 내가 팔로우하지 않는 사람과, 친구가 아닌 그룹 구성원을 지운다
- 069 친한 친구 후속: 친구는 내가 팔로우하는 사람 중에서 고른다(상대가 나를 팔로우하지 않아도 됨, 설정 > 친구에서 주소·별명으로 찾기). 내가 언팔하면 친구와 내 그룹에서도 빠진다
- 073 비공개 계정: 설정 > 친구 > 🔒 비공개 계정을 켜면 팔로우가 요청이 되고(주인에게 알림), 수락한 팔로워만 글·방명록·시리즈 등을 본다. 수락 전에는 프로필 윗부분과 "비공개 계정이에요"만 보이고, 여러 사람 글 목록(홈·피드·검색 등)에서도 빠진다(V17)
- 072 비밀 대댓글·공유하기 접기: 보통 댓글에도 🔒 비밀 답글(글쓴이·원댓글 쓴 사람·나만 봄), 공유하기는 좋아요 옆 📤 버튼 하나의 메뉴로
- 067 화면 정리 후속: 첫 배너 사진 WebP(230KB → 72KB), 홈 인기 태그는 오른쪽 상자 하나만
- 문서: guide를 지금 코드에 맞춤(조회수 30분 5회, 태그 종류, 테스트 수, 모듈 경계 등), deploy.yml 머리 주석 정리
- 테스트 667개 통과
[1.18.0] — 2026-10-13 · 개인 확장 (화면 정리·기능 다듬기·친한 친구·가입 화면·릴리스 노트)
10-13 목록 15개를 역할 스레드 넷으로 나눠 작업(1·2·6~15번). 3·4·5번(GitHub 관리·블로그 주소·AI 붙이기)은 설명만
⚠️ 되돌릴 수 없는 데이터 변경(069): 서로 친구였던 관계는 양쪽 "친한 친구" 두 줄로 옮기고, 대기 중이던 친구 요청과 그 알림은 지운다(공통
friendship표는 구조를 두고 비움, V15)
- 067 화면 정리: 내 글·시리즈 글을 카드로, 홈 바로가기 카드(최신·트렌딩 탭과 겹침) 빼기, 카드 목록은 내리면 다음 글이 저절로 붙음([더 보기]는 남김), 꼬리말 꽃 장식을 빼고 여백을 줄임, 첫 배너 사진은 미리 받고 사진(
/images)도 주소에 내용 지문을 붙여 1년 보관 - 068 기능 다듬기: 알림 창을 열면 모두 읽음, 피드를 "추천 블로그"(아직 팔로우하지 않은 작가 6명, 팔로우 버튼)와 "팔로잉 블로그 글"로 나눔, AI 태그 추천은 20자부터(전에는 100자), [발행]을 누르면 발행 설정이 팝업으로
- 069 친한 친구: 서로 요청·수락하던 친구(025)를 바꿔, 나를 팔로우하는 사람 중에서 내가 골라 넣으면(수락·알림 없음) 그 사람이 내 친구 공개 글을 본다. 그룹·미션 친구 글·첫 공개 응원 알림도 같은 기준
- 070 가입 화면 덜어내기: 로그인과 같은 그림 카드, 비밀번호 규칙은 칸을 누르면 보이고, 주소 안내는 한 줄, 약관은 "모두 동의"(개인정보 동의 때문에 개별 칸은 남김)
- 071 릴리스 노트 화면:
/releases가 이 CHANGELOG를 그대로 보여 주고 꼬리말에 링크 - 테스트 661개 통과
[1.17.0] — 2026-10-13 · 개인 확장 (/ 명령·표 넣기·미션 배지)
남은 일 6번(기능 추가). 7번(팀 일)은 "최소 요구사항 끝나고 이젠 독립적으로 블로그만드는 단계라 안해도 될듯"으로 하지 않음
- 064 글쓰기 / 명령: 줄 처음에
/를 쓰면 본문·제목·소제목·글머리 목록·번호 목록·할 일 목록·인용·코드 블록·표·구분선·사진을 골라 넣는 창이 뜬다. 글자를 더 쓰면 걸러지고(/목,/표,/h2) ↑↓·Enter로 고르며, Esc로 닫는다. 보이는 대로 쓰기·Markdown 두 칸 모두 - 065 표 넣기: 글쓰기 [표] 버튼과
/표로 3칸 표를 넣는다. 보이는 대로 쓰기 칸에서 Tab은 다음 칸(마지막 칸이면 줄을 하나 더), Shift+Tab은 앞 칸, Enter는 아래 칸·표 밖으로. 저장은 GFM 표 Markdown이고 칸 안|는\|로 지킨다 - 066 미션 배지: 완료한 날 수·최고 연속으로 정하는 배지 7개(🌱 첫 미션, 🔥 3일 연속, 🌿 미션 10번, ⭐ 일주일 연속, 🌳 미션 30번, 👑 한 달 연속, 🏆 미션 100번). 미션 화면 "내 배지"에서 본인만 본다
- 테스트 659개 통과, 로컬 브라우저로 두 칸 확인
[1.16.0] — 2026-10-13 · 개인 확장 (CSS·JS 브라우저 캐시)
- CSS·JS 브라우저 캐시: 화면이 부르는 CSS·JS 주소에 파일 내용 지문을 붙이고(
/css/site-545f….css) 브라우저가 1년 보관하게 함(max-age=31536000, public, immutable). 전에는 새로고침마다 다시 받았음. 배포로 파일이 바뀌면 주소도 바뀌어 바로 새 파일을 받음 - 템플릿은
th:src="@{/js/…}"·th:href="@{/css/…}"로 씀. 지문 없는 주소를 쓰면 테스트(StaticCacheIT)가 실패 - 테스트 658개 통과
[1.15.0] — 2026-10-13 · 개인 확장 (배포 자동 되돌리기)
결정: "일단 서버는 1개만 쓰는걸로" — 앱 두 개를 번갈아 쓰는 무중단 배포는 보류하고, 앱 한 개로 할 수 있는 자동 되돌리기만 넣음
- 배포 자동 되돌리기: 배포 직전에 돌던 앱 이미지를
team-blog:previous로 표시해 두고, 새 버전이 3분 안에 켜지지 않으면 그 이미지로 바로 다시 켠다. 사이트는 전 버전으로 계속 동작하고, GitHub Actions는 새 버전이 실패했다고 알린다(새 버전의 마지막 로그 80줄 포함) - 앱은 한 개라 교체하는 동안 잠깐 끊기는 것은 그대로
- 로컬 도커에서 첫 배포·정상 배포·일부러 망가뜨린 배포로 확인(망가진 배포는 전 버전으로 돌아와 정상 응답). 앱 코드 변경 없음, 테스트 656개 통과
[1.14.1] — 2026-10-13 · 배포 환경 고정
- 배포 워크플로 실행 환경을
ubuntu-24.04로 고정(ubuntu-latest가 2026-10-19부터 Ubuntu 26으로 바뀌어 검증 없이 환경이 달라지는 것을 막음). 앱 변경 없음
[1.14.0] — 2026-10-12 · 개인 확장 (백엔드·프론트 분리, 깃플로우)
피드백: "백엔드 어플리케이션, 프론트 어플리케이션 분리", "배포 전 브랜치를 만들어서 작업 후 머지(깃플로우 전략)"
- 백엔드·프론트 모듈 분리: 저장소를
backend/(Spring Boot 서버·설정·DB 마이그레이션·테스트)와frontend/(Thymeleaf 템플릿·JS·CSS·글꼴·브라우저 라이브러리·화면 JS 검사) 두 Gradle 모듈로 나눔.frontendjar가backend실행 jar에 들어가 배포 단위·서버 설정·사이트 동작은 그대로 - 깃플로우 시작:
main(배포) ·develop·feature/*·release/*·hotfix/*. 이번 릴리스부터 기능 브랜치 → PR →develop→release/X.Y.Z→ PR →main(배포·태그) 순서로 진행. README "작업 방식"에 규칙 - 배포 워크플로:
main·develop으로 가는 PR은 테스트만 돌고 배포는main에 머지될 때만 - 설명 문서(배포 순서·Git 규칙·배포 환경·개발 환경·파일 관리·최적화·AI 사용): 문서 저장소 guide/
- 테스트 656개 통과
[1.13.0] — 2026-10-12 · 개인 확장 (내 글은 발행 글 먼저, 설정은 섹션 메뉴로)
요청: "내 글에서 임시글보다 내글이 더 앞에 나오게 바꿔줘 그리고 설정에서 여러개가 위아래로 나열되어있는데 그거 옆에 섹션별로 묶어주고 누르면 나오는 형식으로 바꿔서 가독성 좋게 만들자"
- 063 내 글은 발행 글 먼저: 내 글 관리 탭이 발행 글 · 임시글 · 휴지통 순서이고, 그냥 열면 발행 글이 보인다
- 설정은 섹션 메뉴로: 프로필 / 계정 / 블로그·사진 / 친구 / 화면 / 알림 / AI로 묶고, 왼쪽 메뉴(휴대폰은 위쪽 줄)에서 누른 섹션만 보인다. 설정 항목과 동작은 그대로
- 테스트 656개 통과
[1.12.0] — 2026-10-12 · 개인 확장 (빈 임시글이 안 생기게)
- 062 빈 임시글이 안 생기게: [새 글]을 누르고 제목·본문을 아무것도 안 쓴 채 다른 화면으로 가면 그 임시글을 바로 지운다(뒤로 가기는 내 글 관리로). 제목이나 본문 중 하나라도 쓰면 지금처럼 남는다
- [새 글]은 아무것도 안 쓴 임시글이 남아 있으면 새로 만들지 않고 그 글을 다시 연다
- 내 글 관리 임시글 목록·개수에서 빈 임시글(만든 지 2분 지남)을 뺀다. 서버 자동 저장 버퍼에 쓰는 중인 글은 지우지 않는다
- 테스트 656개 통과
[1.11.0] — 2026-10-12 · 개인 확장 (화면 테마를 개인 설정으로)
- 061 화면 테마를 개인 설정으로: 머리말 맨 오른쪽의 다크 모드 버튼을 빼고, 설정 → "화면 테마"에서 시스템 설정 / 라이트 / 다크를 고른다. 고르면 바로 바뀌고 이 기기 브라우저에 저장(로그아웃해도 유지)
- 로그인하지 않은 방문자는 기기 설정을 따른다. 그리기 전 적용·인라인 스크립트 없음 등 공통 024의 나머지는 그대로
- 테스트 654개 통과
[1.10.0] — 2026-10-12 · 개인 확장 (보이는 대로 쓰기)
요청: "서식도구 누르면 바로 적용되는 걸 원해, 지금은 ** 이렇게 마크다운형식으로 보여주는데 바꿔줘"
- 060 보이는 대로 쓰기: 글쓰기 본문이 글 화면과 같은 모양으로 보이고, 서식 창 버튼을 누르면
**없이 바로 굵게·색·밑줄·제목·목록·인용·코드 블록이 된다(되돌리기 됨) - 노션식 단축 입력: 줄 처음에
#·-·1.·>·[]·```다음 띄어쓰기. 코드 블록 안 Enter는 줄바꿈, 빈 줄에서 한 번 더 누르면 밖으로 - 사진은 커서 자리에 한 줄로 들어가고(올리는 중 자리표시), 붙여넣은 글은 위험한 태그를 거른 뒤 서식을 살린다. 할 일 칸은 눌러서 켜고 끈다
- [Markdown으로 쓰기]로 예전 Markdown 칸과 오갈 수 있다(이 기기에 기억). 저장은 그대로 Markdown이라 자동 저장·발행·사진·비교 창은 그대로
- marked·Turndown을 우리 서버(/webjars/)에서 내준다
- 테스트 654개 통과
[1.9.0] — 2026-10-12 · 개인 확장 (노션 모양 서식 창·AI로 글 다듬기)
보내 준 노션 선택 메뉴 화면대로 1.8.0의 한 줄 도구를 세로 창으로 바꿨다.
- 058 서식 창: 글을 고르면 넓은 화면은 본문 오른쪽, 좁으면 글 아래에 창이 뜬다
- 맨 위 서식 종류(본문·제목·소제목·글머리/번호/할 일 목록·인용·코드 블록, 섞였으면 "여러 종류")를 눌러 바꾸기
- 글자 색·배경색 9가지(다크 모드 대응), 밑줄, 서식 지우기 새로 — 렌더러가 서식 창이 넣는
<u>·<span class="md-…">만 살리고 정화기가 다시 거른다(RENDER_VERSION 3, XSS 검사 4개 추가) - 링크를 고르면 주소를 바꾸거나 빼기, 단축키에 Ctrl/⌘+U 밑줄
- 059 AI로 글 다듬기: 서식 창 아래 "✨ AI로 고치기" — 글 다듬기·맞춤법 고치기·더 짧게·더 쉽게·AI에게 부탁하기(Ctrl/⌘+J). 결과는 [바꾸기]·[아래에 넣기]를 눌러야 들어가고 되돌릴 수 있다. 021과 같은 동의·전체 공개 글만·하루 30번. Gemini 키가 있을 때만 보인다
- 테스트 653개 통과, 서식 규칙 자체 검사 14개
[1.8.0] — 2026-10-12 · 개인 확장 (글쓰기 서식 도구)
- 058 글쓰기 서식 도구: 노션처럼 본문에서 글을 드래그하면 바로 위에 도구가 뜬다 — 굵게·기울임·취소선·코드·링크 | 제목·소제목·인용·글머리/번호/할 일 목록·코드 블록
- 다시 누르면 서식을 벗기고(버튼이 눌린 모양으로 보임), Ctrl/⌘+Z로 되돌릴 수 있음. 저장은 그대로 Markdown(자동 저장·미리보기 그대로)
- 단축키 Ctrl/⌘ + B·I·K·E, Shift+X(한글 입력 중에도 같은 자리 키)
- 목록 여러 줄을 굵게 하면 줄마다 따로, 목록 표시는 밖에. 링크는 주소만 적으면 https:// 붙여 줌
- 휴대폰에서는 도구가 글 아래에 떠서 기본 복사 메뉴를 가리지 않음
- 테스트 647개 통과, 서식 규칙 자체 검사 11개(
node src/test/js/format-toolbar.test.mjs)
[1.7.0] — 2026-10-12 · 개인 확장 (오늘의 미션)
034 "같은 주제로 쓰기·릴레이"를 요청으로 바꿨다. V14(테이블 2개, 알림 종류 하나).
- 057 오늘의 미션: 매일 주제 3개(0시 1분 AI가 만들고, 없으면 내장 주제 120개에서) → [이 주제로 쓰기]로 글쓰기 창(제목에 주제, 위에 안내) → 그날 안에 발행하면 완료
- 미션 화면: 내 기록(지금까지 N번·연속·최고 연속, 배지는 아직 없음), 친구들의 오늘 글·모두의 오늘 글(댓글 달기), 지난 7일
- 친구가 미션 글(전체·친구 공개)을 올리면 알림 "○○님이 오늘의 미션 글을 올렸어요"(새 글 알림과 겹치지 않음)
- 글 화면에 "🗓 오늘의 미션 · 주제", 글쓴이에게 완료·연속 일수
- 예전 미션 열기·릴레이·글 화면 참여 폼은 없앰(예전 표는 남겨 둠)
- 꼬리말 정원 다듬기(언덕 두 겹, 양 끝 풀숲)
- 테스트 647개 통과
[1.6.0] — 2026-10-12 · 개인 확장 (태그 화면)
- 056 태그 화면 리뉴얼: 고양이 배너, 인기 태그(전체 N개, 글 많은 순·많이 본 순·이름 순), 아이콘 알약
- 태그 아이콘: 아이콘 41개를 그려 두고 태그마다 내장 규칙으로 바로 정함. Gemini 키가 있으면 AI가 30분마다 다시 골라 다듬음. V13
- 꼬리말 아래 작은 정원 장식, 홈 오른쪽 인기 태그도 아이콘 알약
- 테스트 645개 통과
[1.5.0] — 2026-10-12 · 개인 확장 (카드 대표 사진)
- 055 카드 대표 사진: 글쓰기 발행 설정에서 자동(본문 첫 사진) / 본문 사진 고르기 / 새 사진 올리기. 목록 카드·검색·공유 미리보기에 쓰인다. V12(테이블 1개)
- 홈 가로 카드: 사진 칸 폭과 아래 줄 정리
- 테스트 642개 통과
[1.4.1] — 2026-10-12 · 개인 확장 (홈 리뉴얼)
- 시안대로 홈 배치: 바로가기 카드(인기 글·최신 글·관심 태그), 본문 2단(최신 글 가로 카드 2열 + 오른쪽 인기 태그·고양이 카드)
- 머리말: 지금 위치 밑줄, 펜 아이콘 [새 글], 내 프로필 메뉴(내 블로그·내 글 관리·통계·설정·로그아웃)
- 꼬리말: 이용약관(
/terms새로)·개인정보 처리방침·문의하기
[1.4.0] — 2026-10-12 · 개인 확장 (블로그 기능)
개인 확장이다. V11 마이그레이션(테이블 2개).
| 명세 | 기능 |
|---|---|
| 051 | 방문자 수 — 블로그 머리에 오늘·전체 |
| 052 | 읽기 진행 막대 — 스크롤하면 얼마나 읽었는지 맨 위 막대로 |
| 053 | 공유하기 — 링크 복사·X·페이스북·다른 앱(카카오톡 등) |
| 054 | 글 고정 — 블로그 맨 위 📌 고정 글 |
[1.3.0] — 2026-10-12 · 개인 확장 (관리자 화면)
개인 확장이다. 공통 022(신고·회원 정지) 화면 위에 관리 도구를 더했다. V10 마이그레이션(테이블 2개).
| 명세 | 기능 |
|---|---|
| 045 | 대시보드 /admin — 전체·오늘 숫자, 처리할 신고, 최근 7일 그래프 |
| 046 | 회원 관리 강화 — 이메일 검색, 이메일·가입일·글 수 |
| 047 | 글·댓글 관리 — 찾기, 신고 없이 숨기기·해제 |
| 048 | 방명록 관리 — 전체 방명록 보기·지우기 |
| 049 | 사이트 공지 — 모든 화면 위 띠 |
| 050 | 관리 기록·관리자 지정 — 누가 언제 무엇을, ADMIN_EMAILS로 첫 관리자 |
[1.2.0] — 2026-10-12 · 개인 확장 (티스토리 참고)
개인 확장이다. 과제 참고 사이트(티스토리)에 있는 기능 8개를 더했다. 공통 완료 기준(001~024)은 그대로 통과한다. 통합 테스트 635개 통과. 기능마다 끄는 설정이 있다(README 표). DB는 V9 마이그레이션으로 테이블 6개를 더하고
comment에secret칸만 더했다.
| 명세 | 기능 | 상태 |
|---|---|---|
| 037 | 카테고리 — 설정에서 만들고·순서·이름 바꾸기, 글마다 하나, 블로그에서 카테고리별 보기 | 구현 완료 |
| 038 | 이전 글·다음 글 + 관련 글 — 같은 블로그 앞뒤 글, 태그가 겹치는 글 3개 | 구현 완료 |
| 039 | 목차 자동 생성 — 소제목 2개 이상이면 글 위(넓은 화면은 오른쪽)에 목차 | 구현 완료 |
| 040 | 방명록 — 300자 인사, 비밀글, 쓴 사람·주인이 지우기 | 구현 완료 |
| 041 | 시리즈 — 글 묶기, (n/전체)·이전편·다음편, 시리즈 목록 | 구현 완료 |
| 042 | 예약 발행 — 날짜·시각을 정하면 그때 발행, 내 글 관리에 "⏰ 예약" | 구현 완료 |
| 043 | 비밀 댓글 — 글쓴이와 쓴 사람(답글은 위 댓글 쓴 사람도)만 보기 | 구현 완료 |
| 044 | RSS 구독 — 전체·블로그별 공개 글 최신 20개 | 구현 완료 |
그 밖에 (10-10~10-12)
- 사이트 이름 글그린, 학교 서버 도메인
geulgreen.java21.net(포트 8300) - 머리말 정리: 검색은 오른쪽 돋보기 버튼, 알림은 종 아이콘
- 글쓰기 태그 입력을 인스타그램처럼(한 상자, 띄어쓰기·붙여 넣기로 태그)
- 로그인·오류 화면 고양이를 수채화 그림으로
- 학교 공용 DB에서
pg_trgm확장 권한이 없으면 확장·trgm 인덱스 없이 설치(검색은 그대로 동작) - 배포 워크플로는 소스 레포(practicech/blog)에서만 돈다
[1.1.0] — 2026-10-09 · 개인 확장
여기부터는 개인 확장이다. 팀 공통 범위가 아니며, 공통 완료 기준(001~024)은 그대로 통과한다. 통합 테스트 628개 통과. 확장마다 끄는 설정이 있다(README "개인 확장" 표). DB는 V2~V8 마이그레이션으로 테이블만 더하고 공통 테이블은 CHECK 교체만 했다. 후보 전체와 순서:
specs/personal-extensions.md
| 명세 | 기능 | 상태 |
|---|---|---|
| 025 | 친구 공개 — 친구 요청·수락·거절(상대에게 드러나지 않음), 친구만 보는 글, 친구가 보는 블로그 목록, 끊으면 즉시 404, 탈퇴 정리 | 구현 완료 |
| 026 | 공개 전환 — 공개 범위를 넓힐 때 확인 창, 처음 공개되면 홈 맨 위, 친구에게 첫 공개 응원 알림 | 구현 완료 |
| 027 | 조회수 30분 5회 — 같은 사람·같은 글을 30분에 5번까지 센다(공통은 24시간 1회) | 구현 완료 |
| 028 | 답글 무제한 깊이 — 답글에 답글, 3단계까지 펼치고 더 깊으면 "답글 N개 더보기" | 구현 완료 |
| 029 | 링크 공개 — 주소(열쇠)를 아는 사람만 읽기, 목록·검색 노출 없음, 새 링크로 예전 주소 막기 | 구현 완료 |
| 030 | 그룹 공개 — 친구를 그룹으로 묶고, 고른 그룹에만 보이는 글 | 구현 완료 |
| 031 | 잔디·스트릭 — 블로그에 최근 1년 기록 칸, 연속 기록 일수(공개 활동만) | 구현 완료 |
| 032 | 작성자 통계 — 합계, 최근 30일 조회 그래프, 많이 읽힌 글 5개(본인만) | 구현 완료 |
| 033 | 짧은 기록 — 280자 한 줄 기록(전체·친구·나만), 블로그에 최근 3개, 모아 보기 | 구현 완료 |
| 034 | 같은 주제로 쓰기·릴레이 — 미션 열기, 내 공개 글로 참여, 참여 순서대로 릴레이 | 구현 완료 |
| 035 | AI 티저 — AI 제안 또는 직접 쓴 한 줄 소개를 카드 요약 자리에 | 구현 완료 |
| 036 | 홈 "새로 온 작가" — 최근 2주 첫 글을 올린 사람과 그 첫 글 | 구현 완료 |
공통 쪽 고친 것(1.0.0 알려진 문제)
- 저장 공간 초과 안내를 "7일 뒤 돌아와요"로, 휴지통 복구 뒤 "복구했어요" 안내, 입력 칸·버튼 테두리 대비 3:1,
sitemap.xml·robots.txt(공개 글만), 금칙어 기본 목록, 인증 전 댓글 칸의 [인증 메일 다시 보내기], 코드 블록 있을 때만 문법 강조 불러오기, 발행 화면에서 친구·링크·그룹 공개도 고를 수 있게.
그 밖에 한 쪽 카드 12개(시안의 한 줄 4개에 맞춤, 공통은 9개)도 개인 확장이다. 만들지 않은 후보: WYSIWYG 편집기(공통 Markdown 정화 흐름을 흔들어 하지 않음), 태그 글당 5개(공통 10 유지).
[1.0.0] — 2026-10-09 · 팀 공통 최소 요구사항
팀 설계 문서(docs/ 32개)를 Spec Kit 명세 001~024로 옮겨 모두 구현했다. 통합 테스트 607개 통과.
기능 (명세 번호)
- 회원: 이메일 가입·인증, Google·GitHub 로그인(001), 블로그 주소·닉네임(002), 프로필·설정(003), 탈퇴·30일 안 복구(023)
- 글쓰기: 자동 저장 3단계·충돌 비교(004), 발행·다시 발행(005), 공개 범위 전체 공개/나만 보기(006), Markdown 정화(007), 사진 올리기(008), 태그(013), AI 태그 추천(021)
- 읽기: 전체 글·개인 블로그(009), 글 상세(010), 내 글 관리·휴지통 30일(011), 트렌딩(019), 검색(020), 다크 모드(024), 코드 문법 강조
- 반응: 댓글·답글(014), 좋아요(015), 조회수(016), 인앱 알림(017), 팔로우·피드(018)
- 운영: 접근 권한 공통 규칙(012), 신고·관리자 숨김·회원 정지(022), 개인정보 처리방침(
/privacy)
화면 디자인 (10-08)
- 크림 배경·세이지 버튼·둥근 카드 시안 적용, 색 역할 이름은 그대로(다크 배경
#121212유지) - 글꼴 Pretendard·Gaegu를 우리 서버에서 제공(브라우저에 1년 보관)
- 홈 사진 배너 + 검색창, 한 줄 4개 카드, 카드 첫 태그, 사진 없는 카드는 빈 칸 없음
- 로그인·가입 카드, 블로그 머리 띠, 403·404·500 화면, 휴대폰 ☰ 메뉴
운영 준비
- 상태 확인(
/actuator/health), 백업·복구 스크립트, 로그 크기 제한 - 학교 공용 서버 배포: GitHub Actions(테스트 → 이미지 → SSH 실행), Crowfoot PostgreSQL, 서버 공용 Nginx(
deploy/school/) - 사진은 서버 디스크에 먼저 저장, 서버를 늘릴 때 MinIO로 설정만 바꿔 확장
- 데모 데이터(
db/demo/), Crowfoot ERD(테이블 20개·관계 41개, 명세와 연결)
확인한 것
- 성능: 글 10만 건에서 목록·상세·검색 p95 100ms 아래, 20명 동시 접속 p95 49ms·오류 0 (
specs/qa/2026-10-08-performance.md) - 요구사항 반영 점검: 약 485개 중 약 441개 그대로, 약 45개 팀 결정으로 다르게 (
specs/qa/2026-10-09-requirements-audit.md)
알려진 문제 (다음 버전에서 고칠 것)
- 저장 공간 초과 안내가 "다음 날"인데 실제로는 7일 뒤 돌아옴
- 휴지통 복구 뒤 "복구했어요" 안내 없음
- 입력 칸·버튼 테두리 대비가 3:1보다 낮음
- 탈퇴할 때 브라우저 임시 저장본을 지우지 않음
- sitemap 없음, 금칙어 목록이 임시본
- (비공개 → 공개 확인 창은 개인 확장 026에서 다룸)