Releases: STH-1-Class-One-Group/JamIssue
JamIssue 1.3.2
요약
1.3.2는 KTO 관광장소 contract를 Web Front가 Worker public API로 소비하도록 정리한 릴리즈입니다.
이 릴리즈는 PR #391 구현과 PR #394/#395 문서화를 포함한 typescript-coverage-95 기준 릴리즈입니다. 현재 main 병합 릴리즈로 표기하지 않습니다.
사용자 변경
- 기존 하단 탭 구조는 유지합니다.
행사탭 내부에서행사 / 관광장소축을 분리해 KTO 관광장소를 렌더링할 수 있게 했습니다.- KTO 관광장소는 기존 curated map 화면과 섞지 않습니다.
- curated 연결 여부는
isCurated와curatedPlace만 사용합니다.
Public API Contract
GET /api/tourism/placesGET /api/festivals -> FestivalCard[]GET /api/banner/events -> PublicEventBannerResponse
GET /api/tourism/places 지원 필터:
categorydistrictktoContentTypeIdktoFacetlimit, 기본50, 최대100
Front는 KTO/OpenAPI/Supabase를 직접 호출하지 않고 Worker public API만 소비합니다.
포함된 Web Front 변경
- PR #391: KTO tourism contract consumption 구현
#391 - PR #394: 1.3.2 release note 및 wiki 문서화
#394 - PR #395: GitHub Release 링크 문서 반영
#395
병합 기준
- Release tag:
release-v1.3.2 - Target commit:
e6fd3517e5ea1a8f98ba2793037b092d0efc086b - Base branch:
typescript-coverage-95 - PR #391 merge commit:
514a6689f0d217548c3cf6af473af12ba11aae54
주의: 이 릴리즈는 현재 main 기준 릴리즈가 아닙니다.
검증
npm.cmd run test:unit: 통과npm.cmd run typecheck: 통과npm.cmd run smoke: 9/9 통과npm.cmd run smoke:worker-tourism: deployed Worker 기준 통과- PR #391 CodeQL checks: 통과
- PR #394/#395 문서 PR: 병합 완료
운영 기준
- Web Front: https://daejeon.jamissue.com
- API base URL: https://api.daejeon.jamissue.com
- Backend/API, Worker runtime secret, DB schema, provider-side contract 정본은
ClarusIubar/JamIssue_admin에서 관리합니다.
JamIssue 1.3.1
요약
1.3.1은 소셜 로그인과 계정 연동 contract를 정리한 Web Front 릴리즈입니다.
Backend/provider repo ClarusIubar/JamIssue_admin에서 provider contract가 확정된 뒤, Web Front는 비로그인 로그인과 로그인 상태 계정 연동을 명확히 분리했습니다.
사용자 변경
- 비로그인 상태의 네이버/카카오 로그인 버튼은 계속 일반 로그인용
loginUrl로 이동합니다. - 로그인 상태의 설정 화면에는 소셜 계정 연결 상태가 표시됩니다.
- 이미 연결된 provider는
연결됨상태로 보이고, 다시 연동 버튼으로 노출되지 않습니다. - 미연결 provider 중
linkUrl이 제공되는 항목만계정 연동버튼으로 표시됩니다. - 계정 연동 버튼은
/api/auth/{provider}/link기반 URL로 이동합니다.
Contract 기준
loginUrl: 비로그인 일반 로그인용linkUrl: 로그인 상태 계정 연동 시작용SessionUser.linkedProviders: 연결된 provider 상태의 source of truth- Backend Worker의 authenticated
/api/auth/{provider}/loginguard는 오사용 방어입니다. Web Front 정상 연동 UI는 계속linkUrl을 사용합니다.
포함된 Web Front 변경
- PR #358: linkUrl 기반 소셜 계정 연동 contract 반영
#358 - PR #360: 설정 화면 소셜 계정 상태/액션 UI 분리
#360 - PR #363: backend login guard 계약 문서화와 회귀 테스트 보강
#363
Backend/provider 참조
- PR #37:
/api/auth/{provider}/link,providers[].linkUrl추가
ClarusIubar/JamIssue_admin#37 - PR #39:
auth.user.linkedProviderscontract 추가
ClarusIubar/JamIssue_admin#39 - PR #57: authenticated
/login오사용 방어 guard 추가
ClarusIubar/JamIssue_admin#57
검증
- PR #363 checks:
frontend,deploy-pages, CodeQL 통과 - main
ci: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26670622854 - main
production-smoke: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26670622851 - main CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26670622576
- main CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26670622574
운영 기준
- Web Front: https://daejeon.jamissue.com
- API base URL: https://api.daejeon.jamissue.com
- Backend/API, Worker runtime secret, DB schema, provider-side contract 정본은
ClarusIubar/JamIssue_admin에서 관리합니다.
JamIssue 1.3.0
요약
1.3.0은 STH-1-Class-One-Group/JamIssue를 JamIssue 공개 Web Front SPA 전용 레포로 전환한 릴리즈입니다.
Backend/API, Cloudflare Worker, DB migration, 관리자 페이지, provider-side API contract의 정본은 ClarusIubar/JamIssue_admin으로 이동했습니다.
주요 변경
- backend/provider 구현 제거
- Cloudflare Worker/API 배포 책임 제거
- backend/container/image workflow 제거
- Web Front CI를 frontend-only 기준으로 정리
- production smoke에서 Cloudflare challenge 상황 처리
- CodeQL 분석 대상을 Web Front 기준으로 재검증
- Web Front wiki를 SPA 운영 문서 중심으로 개편
검증
- PR #342: #342
- PR #343: #343
- ci: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26153344927
- production-smoke: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26153344933
- CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26153344173
- CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/26153344200
운영 기준
- Web Front: https://daejeon.jamissue.com
- API base URL: https://api.daejeon.jamissue.com
- 이 repo에는 public Web Front env와 Pages deploy 권한만 유지합니다.
- backend secret, service-role key, Worker runtime secret은 이 repo에 두지 않습니다.
JamIssue 1.2.10
JamIssue 1.2.10
요약
1.2.10은 1.2.9 이후의 리팩터링과 회귀 방지 작업을 하나로 묶은 정식 릴리즈입니다. 기존에 1.2.10 후보로 관리하던 TSK-004와 1.2.11 후보로 분리했던 TSK-005를 모두 1.2.10에 포함했습니다.
사용자 관점 변화
- 화면 문구, API 응답, 로그인 흐름, 지도/리뷰/스탬프/알림 사용 흐름은 기존과 동일합니다.
- 리뷰 목록과 마이페이지 리뷰 계산 경로에서 불필요한 상태 업데이트와 중간 배열 allocation을 줄였습니다.
- 신규 기능 릴리즈가 아니라 운영 안정성과 유지보수성을 높이는 정식 리팩터링 릴리즈입니다.
운영/보안/품질 변화
- Worker festival domain의 import/query/cache/response 책임을 repository/mapper/import/cache/use-case로 분리했습니다.
- review/community/my mapper의
any[],Map<any, any>row 계약을 domain-local 타입으로 대체했습니다. - admin/stamp/notification/auth/review-interaction handler contract를 명시 타입으로 축소했습니다.
- architecture/interface-locality 회귀 방지 gate를 추가했습니다.
- Naver map SDK
any를 local contract 내부로 격리했습니다. - review/stamp/notification persistence와 notification realtime broadcast를 repository/publisher 경계로 이동했습니다.
getKnownMyReviews의 중간 배열 allocation을 제거하고 회귀 테스트를 추가했습니다.
포함 PR
- #278 review collection 상태 업데이트 최적화
- #279 Worker residual boundary audit와 source-quality gate 기준선
- #280 festival service boundary split
- #281 Worker domain mapper row contract typing
- #282 Worker service handler contract typing
- #283 Worker boundary traceability docs
- #284 1.2.10 후보 문구 정리
- #293 Architecture regression audit gates
- #294 Naver map SDK local contract
- #295 Worker review read persistence boundary
- #298 Worker stamp persistence boundary
- #299 Worker notification persistence and realtime publisher boundary
- #300 Architecture regression traceability docs
- #301
getKnownMyReviewsintermediate allocation 제거와 회귀 테스트
검증 근거
최종 기준 commit: 3984be45ca5b292c4e0bef7482f87fdf74159e86
- main CI: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25714942439
- production-smoke: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25714942430
- CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25714941975
- Code Quality CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25714942006
- 열린 PR: 0
- 열린 이슈: 0
- Dependabot open alert: 0
- Code scanning open alert: 0
제외 범위
- 신규 사용자 기능 추가 없음
- API path/response shape 변경 없음
- DB schema 변경 없음
- OAuth provider 성공 경로 변경 없음
- 사용자-facing copy 변경 없음
- Node.js 20 GitHub Actions deprecation warning 정리는 별도 CI maintenance 범위
JamIssue 1.2.9
요약
JamIssue 1.2.9는 1.2.8 이후 리팩터링 릴리즈입니다. TSK-002의 레포 전역 config hardening과 TSK-003의 interface-locality hardening을 같은 1.2.9 범위로 묶었습니다.
이번 재발행은 문서 기준이 아니라 실제 코드 기준 재검증에서 발견된 Worker interface-locality 미완료 항목을 보정한 뒤 새 final main SHA로 다시 발행한 것입니다.
포함 범위
- PR #237: Naver marker selection 최적화 이후 수치/config hardening 필요성 확인
- PR #246~#253: TSK-002 config hardening 구현 및 문서 추적성
- PR #262~#269: TSK-003 interface-locality 1차 구현 및 문서 추적성
- PR #270: 실제 코드 기준 미완료 항목 보정
- PR #271: 1.2.9 재발행 추적성 문서 보정
사용자 관점 변화
- 사용자-facing copy, API path, response shape, DB schema, Kakao/Naver OAuth 성공 경로는 변경하지 않았습니다.
- 지도/마커/리뷰/커뮤니티 동작은 기존 계약을 유지합니다.
운영/보안/품질 변화
- Worker RouteRuntime에서 Supabase row/mapper/static row 로딩 노출을 제거했습니다.
/api/courses/curated는 runtime-owned use-case인loadCuratedCourses(env)경계로 감쌌습니다.- Worker service constructor dependency의
any회귀를 source-quality gate로 차단했습니다. - 테스트가 global Worker type barrel에서 local contract를 import하지 못하도록 source-quality gate를 추가했습니다.
- RouteRuntime이 Supabase row/mapper를 다시 노출하지 못하도록 source-quality gate를 추가했습니다.
검증 근거
- Final main SHA:
6385c2172d17bb3e22794dd21619409ebef00acd - CI: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25646085108
- production-smoke: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25646085079
- CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25646084766
- CodeQL: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25646084919
- Dependabot open alert: 0
- Code scanning open alert: 0
- Local validation on PR #270:
npm.cmd run check:numeric-literals,npm.cmd run lint,npm.cmd run typecheck,npm.cmd run test:unit,npm.cmd run build,git diff --check, UTF-8 integrity check, backendpytestall passed
제외 범위
- 기능 추가 없음
- DB migration 없음
- OAuth flow 변경 없음
- 사용자-facing 문구 변경 없음
JamIssue 1.2.8
JamIssue 1.2.8
릴리즈 메타
| 항목 | 값 |
|---|---|
| 상태 | 정식 릴리즈 |
| 릴리즈 날짜 | 2026-05-10 |
| 태그 | release-v1.2.8 |
| 기준 commit | ee7bde3f76f0d700ff774e2527b2061ce68d0108 |
| GitHub Release | JamIssue 1.2.8 |
| 비교 기준 | 1.2.7 / c6e1db0f36baeb7232c475ba35639a29133a12e9..ee7bde3f76f0d700ff774e2527b2061ce68d0108 |
요약
1.2.8은 1.2.7 이후 렌더링 낭비를 더 줄이고, production secret 검증과 GitHub Security alert 대응을 포함해 Worker-first 백엔드 안정성을 보강한 릴리즈입니다.
사용자 관점 변화
- 피드, 코스, 리뷰 탐색 흐름에서 불필요한 배열 복사와 렌더링 비용을 줄여 화면 반응성을 개선했습니다.
- 리뷰 목록과 마이페이지 편집 화면의 render-skip 경계를 보강해 입력 중 주변 카드가 함께 흔들리는 상황을 줄였습니다.
- 사용자-facing API path, 응답 shape, DB schema는 변경하지 않았습니다.
운영/보안/품질 변화
- Worker runtime contract, base data read-model, review domain, account/community/admin, routing runtime 경계를 route, service/use-case, repository/adapter, mapper/assembler 기준으로 정리했습니다.
- production/staging 환경에서 session/JWT secret을 명시적으로 요구하도록 검증을 강화했습니다.
postcss를8.5.10으로 올리고 Worker error response에서 stack/Error detail 노출을 차단해 Dependabot과 CodeQL open alert를 0건으로 정리했습니다.- 리뷰 상세 이동 로딩 가드와 auth-cookie 환경 동작 문서를 보강했습니다.
- Worker tracked-source one-line blob 방지, route boundary, response shape, owner/403/security 회귀 테스트를 보강했습니다.
포함 PR / 커밋
렌더링/성능 개선
아래 항목은 별도 closing issue 없이 PR 단위로 병합했습니다.
- PR #214: 리뷰 목록 자동 로드 콜백 안정화 (
e20d7c7) - PR #217: ReviewList item active-state props 안정화 (
0efabf0) - PR #219:
filterPlacesByCategory단위 테스트 추가 (24e1d8e) - PR #220: route preview place lookup 최적화 (
9f51bbc) - PR #223:
reviewNavigation.ts배열 lookup 최적화 (cc1e2d1)
Worker-first SOLID hardening
- PR #224: Worker SOLID 기준선 게이트 기록 (
64bd982) / #200 - PR #225: Worker runtime dependency 타입 경계 정리 (
4583b15) / #201 - PR #226: Worker base data read model 분리 (
cdf774a) / #202 - PR #227: Worker review domain service 분리 (
93d13f7) / #203 - PR #228: Worker account/community/admin 경계 분리 (
21dd8d5) / #204 - PR #229: Worker routing runtime 경계 정리 (
3da0fdd) / #205 - PR #230: Worker SOLID hardening 추적성 문서화 (
0507f77) / #206
보안/품질 보강
- PR #218: production auth secret 명시 설정 요구 (
dd3dc62) - PR #233: GitHub security alerts 1차 대응 (
b1171d1) / #232 - PR #235: 남은 Dependabot/CodeQL alerts 정리 (
90fa884) / #234 - PR #236: 리뷰 상세 이동 로딩 가드와 auth-cookie 환경 문서 보강 (
ee7bde3)
검증 근거
- main CI 성공: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25618502792
- production-smoke 성공: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25618502786
- CodeQL 성공: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25618502650
- CodeQL 성공: https://github.com/STH-1-Class-One-Group/JamIssue/actions/runs/25618502554
- GitHub Security API 기준 open Dependabot alert 없음, open code scanning alert 없음.
제외 범위
- 1.2.7에 포함된 PR #207~#213은 이번 릴리즈 범위에서 제외합니다.
- 정식 GitHub Release/tag 생성 이후 문서화한 릴리즈이며, 앱 코드 변경은 포함하지 않았습니다.
관련 문서
JamIssue 1.2.7
요약
1.2.7은 피드, 코스, 마이페이지 리뷰 편집 화면의 불필요한 렌더링을 줄이고,
리뷰 상태 갱신 및 네이버 로그인 콜백 구조를 정리한 성능/유지보수 패치입니다.
변경사항
- 피드 리뷰 카드의 불필요한 재렌더를 줄였습니다.
- 피드 화면의 callback/object props 안정성을 개선해
React.memo가 실제로 동작하도록 정리했습니다. - 코스/커뮤니티 경로 카드의 stable props 경계를 보강했습니다.
- 마이페이지 내 피드 수정 중, 입력 중인 카드 외의 다른 리뷰 카드가 함께 재렌더되는 문제를 줄였습니다.
- 리뷰 수정/좋아요 반영 시 컬렉션 갱신 로직을 더 효율적으로 개선했습니다.
- 네이버 로그인 콜백 파라미터를 구조화해 백엔드 auth route/service 유지보수성을 높였습니다.
useEventCallback계약 테스트와 render-skip 회귀 테스트를 추가했습니다.
포함 PR
- #207 ReviewListItem 렌더 최적화
- #208 Naver login callback 구조화
- #209 Review collection patch 최적화
- #210 Feed review list callback 안정화
- #212 Feed/Course render prop stability
- #213 My Feed edit render stability
검증
- Frontend checks passed
- Backend checks passed
- CodeQL checks passed
- Worker validation passed
deploy-worker는 PR 조건상 skipped
제외 범위
- 사용자-facing copy 변경 없음
- 외부 API shape 변경 없음
- DB schema 변경 없음
JamIssue 1.2.6
개요
JamIssue 1.2.6은 운영 백엔드 안정화 릴리즈입니다. Cloudflare Worker를 운영 기준 백엔드로 명확히 하고, FastAPI fallback 경로의 보안/테스트 계약과 Worker 인증·라우팅·데이터 로딩 경계를 정리했습니다.
변경 사항
- FastAPI JWT 디코딩 전 unsupported
crit헤더를 거부하도록 보안 회귀를 복구했습니다. user_routes_normalized.py의 실제 경로 로직을 repository 계층으로 이동하고 기존 파일은 호환 facade로 축소했습니다.- repository 예외 계약을
NotFound,Validation,Permission계열로 정리해 문자열 기반 HTTP 매핑을 줄였습니다. - Worker
index.ts에서 base data loading, route dispatch, bootstrap 책임을 분리했습니다. - Worker 세션 secret 누락 시 OAuth/session 발급을 503으로 차단했습니다.
- Kakao/Naver provider 설정, OAuth state mismatch, admin 403, public event import token 검증 테스트를 추가했습니다.
- Worker TypeScript 소스가 다시 긴 한 줄 blob으로 퇴행하지 않도록 품질 게이트를 추가했습니다.
- 배포 런북과 리팩터 로드맵을 Worker-first 운영 기준으로 최신화했습니다.
검증
- PR #198 merged
- main 배포 체크 통과
backend,frontend,deploy-pages,deploy-worker,smoke,protected-smoke성공- CodeQL Python / JavaScript-TypeScript 분석 성공
포함 PR
JamIssue 1.2.5
이번 1.2.5는 상단 유틸리티 진입 구조와 모바일 화면 배치를 다듬은 패치 릴리즈입니다.
알림과 피드백 진입점이 더 일관되게 정리되었고, 지도 화면에서 겹치거나 경계에 너무 붙어 보이던 문제를 함께 안정화했습니다.
주요 변경 사항
- 우측 상단 전역 유틸리티 영역에 설정 톱니바퀴 진입점을 다시 배치했습니다.
- 설정 메뉴 아래에
알람과피드백을 한 단계 구조로 정리했습니다. - 메뉴 순서는
알람 -> 피드백순으로 맞췄습니다. - 상단 톱니바퀴 버튼 위치를 화면 경계에서 살짝 안쪽으로 조정해 시각적 여유를 확보했습니다.
UI 및 동작 안정화
- 알림 패널이 열릴 때 지도 상단 바나 NAVER 마크/컨트롤이 위로 튀어 보이던 레이어 충돌을 정리했습니다.
- 전역 알림 패널과 설정 메뉴의 z-index 및 배치를 조정해 지도 화면과의 겹침 문제를 줄였습니다.
- 알림/피드백 관련 일부 깨진 UTF-8 문자열과 라벨도 함께 복구했습니다.
빌드 및 품질
-
프론트 빌드 과정에서 발생하던
esbuild spawn EPERM문제를 우회하도록 빌드 경로를 안정화했습니다. -
메인 브랜치 반영 후 아래 항목 기준으로 정상 동작을 확인했습니다.
-
backend -
frontend -
deploy-pages -
deploy-worker -
smoke -
protected-smoke -
Analyze (python) -
Analyze (javascript-typescript)
비고
이번 1.2.5는 새로운 기능 추가보다는, 실제 모바일 사용감에 직접 영향을 주는 상단 진입 구조와 레이아웃 안정성을 다듬은 패치 릴리즈입니다.
JamIssue 1.2.4
이번 1.2.4는 구조 리팩토링과 설계 정리를 마감한 유지보수 릴리즈입니다.
1.2.3까지 이어진 리팩토링 흐름을 마무리하면서, 남아 있던 결합도와 혼합 책임을 더 줄이고, 운영 배포와 검증 흐름까지 안정적으로 유지되는 상태로 정리했습니다.
주요 변경 사항
- 백엔드 API 계약을 도메인별 모델 모듈로 분리했습니다.
- 공공 행사 처리 경로를 import, matching, banner assembly 단위로 분리했습니다.
- 프론트 부트스트랩 효과를 session bootstrap과 festival bootstrap 책임으로 나눴습니다.
- SQLAlchemy ORM 모델 선언을 auth, public-data, content, route 도메인으로 분리했습니다.
- 샘플 장소 데이터 생성 스크립트를 parse, derive, SQL emit 단계로 분리했습니다.
- 남아 있던 coordinator/facade indirection 일부를 제거해 상위 계층의 책임을 더 선명하게 만들었습니다.
구조 개선
models.py,db_models.py,event_service.py,useAppBootstrapEffects.ts같은 핵심 혼합 책임 지점을 정리했습니다.- 기존 import 표면은 가능한 한 유지해, 내부 구조는 개선하면서 외부 사용 코드는 흔들리지 않도록 정리했습니다.
- 과분할로 남을 수 있었던 일부 façade/wrapper도 마지막 패스에서 줄였습니다.
- UTF-8 깨짐이 남아 있던 공공 행사 및 부트스트랩 경로 문자열도 함께 복구했습니다.
품질 및 검증
메인 브랜치 반영 후 아래 항목 기준으로 정상 동작을 확인했습니다.
backendfrontenddeploy-pagesdeploy-workersmokeprotected-smokeAnalyze (python)Analyze (javascript-typescript)
비고
이번 1.2.4는 신규 사용자 기능보다는, 설계 품질과 유지보수성을 한 단계 더 끌어올린 패치 릴리즈입니다.
현재 구조는 SOLID 원칙을 실무적으로 우수한 수준에서 따르는 상태로 정리되었고, 이후에는 대규모 구조 개편보다는 기능 개발과 유지에 집중할 수 있는 단계로 들어갔습니다.
현재 기준 SOLID 평가는 이렇게 정리하는 게 가장 정확합니다.
- SRP: 우수
큰 혼합 책임 파일을 대부분 정리했고, 상위 훅/서비스/리포지토리가 orchestration과 실행 책임으로 꽤 잘 나뉘었습니다. - OCP: 양호~우수
provider, repository, loader, banner/event 경계가 개선돼서 확장 지점이 더 명확해졌습니다. - LSP: 양호
타입/모델/응답 계약은 호환 façade를 유지한 채 정리돼서 치환 안정성은 괜찮은 편입니다. - ISP: 우수
프론트 훅과 DTO 경계가 얇아져서 필요한 인터페이스만 노출하는 방향으로 많이 정리됐습니다. - DIP: 양호
완전한 추상화 기반까지는 아니지만 service/repository/helper 경계가 분명해져서 이전보다 훨씬 나아졌습니다.
한 줄 평:
- 지금은 “SOLID를 상당히 잘 지키는 구조”, 실무적으로는 우수 판정 가능한 상태입니다.
- 다만 앞으로도 기능 추가 시 이 수준을 유지해야 해서, “영구 완료”보다는 “유지 단계 진입”이라고 보는 게 맞습니다.