-
Notifications
You must be signed in to change notification settings - Fork 0
Dev #35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dev #35
Changes from all commits
4110926
8bd53fe
84ebb28
6482ff9
2b68228
9c2a036
b04163d
1b5e861
37490ad
10b30a2
1e4ce71
478416f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| ๏ปฟ dev | ||
| feat/comment-anon-and-delete-modal-dev | ||
| feature-login-signup | ||
| feature/admin-team-profile | ||
| feature/frontend-ui-redesign | ||
| * feature/frontend-ui-updates | ||
| feature/ui-improvement | ||
| feature/ui-save-card-improve | ||
| feature/ๆฟก์๋ ???๋ฏ์ๅชย???์์ ๏งย | ||
| fix/sidebar-layout-text-fix | ||
| main | ||
| remotes/origin/CI/CD | ||
| remotes/origin/HEAD -> origin/main | ||
| remotes/origin/backend | ||
| remotes/origin/dev | ||
| remotes/origin/feat/application-form-migration | ||
| remotes/origin/feat/comment-anon-and-delete-modal-dev | ||
| remotes/origin/feat/dev-deployment | ||
| remotes/origin/feat/pagination-infinite-sync | ||
| remotes/origin/feature/admin-team-profile | ||
| remotes/origin/feature/frontend-ui-redesign | ||
| remotes/origin/feature/frontend-ui-updates | ||
| remotes/origin/feature/full-page-capture | ||
| remotes/origin/feature/ui-improvement | ||
| remotes/origin/feature/ui-save-card-improve | ||
| remotes/origin/feature/?๋ณค? | ||
| remotes/origin/feature/ๆฟก์๋ ???๋ฏ์ๅชย???์์ ๏งย | ||
| remotes/origin/fix/deployment-config | ||
| remotes/origin/fix/sidebar-layout-text-fix | ||
| remotes/origin/fix/ๆฟก์๋ ??id-pw-?์์ -#17 | ||
| remotes/origin/kakao-login-with-backend | ||
| remotes/origin/login-only-comment | ||
| remotes/origin/main | ||
| remotes/origin/sync/dev-into-feature-ui-improvement | ||
| remotes/origin/work/frontend-feature-gap | ||
|
Comment on lines
+1
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ๋ธ๋์น ๋คํ ํ์ผ์ ์ ์ฅ์์ ํฌํจํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. Line 1-35๋ ๋ก์ปฌ/์๊ฒฉ ๋ธ๋์น ๋ชฉ๋ก์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ฐ์ถ๋ฌผ๊ณผ ๋ฌด๊ดํ๋ฉฐ ๋ด๋ถ ์ด์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋ฉ๋๋ค. ์ด๋ฒ PR์์๋ ์ ๊ฑฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ๐ค Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| ๏ปฟOn branch feature/frontend-ui-updates | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| Changes not staged for commit: | ||
| (use "git add <file>..." to update what will be committed) | ||
| (use "git restore <file>..." to discard changes in working directory) | ||
| (commit or discard the untracked or modified content in submodules) | ||
| modified: MSGS_13_F (modified content) | ||
|
|
||
| Untracked files: | ||
| (use "git add <file>..." to include in what will be committed) | ||
| git_status.txt | ||
|
|
||
| no changes added to commit (use "git add" and/or "git commit -a") | ||
|
Comment on lines
+1
to
+12
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ์์ ์ค ๋ก์ปฌ ์ํ ํ์ผ์ PR์์ ์ ์ธํด ์ฃผ์ธ์. Line 1-12๋ ๋ก์ปฌ Git ์์ ์ํ ๋คํ๋ผ์ ์ ํ ์ฝ๋์ ๋ฌด๊ดํ๊ณ , ๋ธ๋์น/์๋ธ๋ชจ๋ ์ํ ๊ฐ์ ๋ด๋ถ ์ ๋ณด ๋ ธ์ถ ๋ฆฌ์คํฌ๊ฐ ์์ต๋๋ค. ์ปค๋ฐ์์ ์ ๊ฑฐํ๋ ํธ์ด ๋ง์ต๋๋ค. ๐ค Prompt for AI Agents |
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,5 +1,5 @@ | ||||||
| <!doctype html> | ||||||
| <html lang="ko"> | ||||||
| <html lang="ko" style="color-scheme: light;"> | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| <head> | ||||||
| <meta charset="utf-8" /> | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -47,6 +47,28 @@ function normalizeApiErrorDetail(detail: unknown): string { | |
| return collapsed.slice(0, 200); | ||
| } | ||
|
|
||
| function parseApiDateTime(raw: string): Date { | ||
| const normalized = raw.includes(' ') ? raw.replace(' ', 'T') : raw; | ||
| const hasTimezone = /(?:Z|[+-]\d{2}:?\d{2})$/i.test(normalized); | ||
| return new Date(hasTimezone ? normalized : `${normalized}Z`); | ||
| } | ||
|
Comment on lines
+50
to
+54
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ๐งฉ Analysis chain๐ Script executed: #!/bin/bash
set -euo pipefail
echo "[1] ๋๊ธ created_at ์์ฑ/์ง๋ ฌํ ์์น ํ์"
rg -n -C3 --type=py --type=ts --type=js '\bcreated_at\b|/comments'
echo
echo "[2] ๋ฐฑ์๋ ํ์์กด ์ค์ ๋ฐ datetime ์์ฑ ํจํด ํ์"
rg -n -C3 --type=py --type=toml --type=yaml --type=env 'Asia/Seoul|UTC|timezone|TZ|USE_TZ|datetime\.now|utcnow|timezone\.utc'
echo
echo "[3] ํ๋ก ํธ์์ created_at ํ์ฒ๋ฆฌ ๋ก์ง ์์น ํ์"
rg -n -C3 --type=ts 'parseApiDateTime|formatCommentDateTime|created_at'Repository: GC-MapleWind/MSGS_13_F Length of output: 2195 ๐ Script executed: #!/bin/bash
set -euo pipefail
echo "[1] api.ts ์ ์ฒด ๋ณด๊ธฐ (lines 50-70)"
sed -n '50,70p' dpbr_front/app/src/lib/api.ts | cat -n
echo
echo "[2] formatCommentDateTime ํจ์ ์ ์ฒด ์ ์ ์ฐพ๊ธฐ"
rg -n -A10 'formatCommentDateTime' dpbr_front/app/src/lib/api.ts
echo
echo "[3] API ๊ณ์ฝ ๋๋ ๋ฌธ์ ํ์"
find . -type f \( -name "*.md" -o -name "*.txt" -o -name "*contract*" -o -name "*api*" \) -not -path '*/node_modules/*' -not -path '*/.git/*' | head -20
echo
echo "[4] ๋ฐฑ์๋ ๋๋ ํ ๋ฆฌ ๋๋ API ๋ฌธ์ ํ์"
git ls-files | grep -iE '(backend|server|docs|api.*\..*md)' | head -20Repository: GC-MapleWind/MSGS_13_F Length of output: 2250 ๐ Script executed: #!/bin/bash
set -euo pipefail
echo "[1] README_API.md ๋ด์ฉ"
cat README_API.md
echo
echo "[2] prompt/API_INTEGRATION.md ๋ด์ฉ"
cat prompt/API_INTEGRATION.md
echo
echo "[3] prompt/docs/backend_requirements.md ๋ด์ฉ"
cat prompt/docs/backend_requirements.mdRepository: GC-MapleWind/MSGS_13_F Length of output: 10990 ๐ Script executed: #!/bin/bash
set -euo pipefail
echo "[1] openapi.json ๋๋ ์คํค๋ง ํ์ผ ์ฐพ๊ธฐ"
find . -type f \( -name "openapi.json" -o -name "*openapi*" -o -name "*schema*" \) -not -path '*/node_modules/*' -not -path '*/.git/*' | head -20
echo
echo "[2] ๋ฐฑ์๋ ์์ค ์ฝ๋ ์กด์ฌ ์ฌ๋ถ ํ์ธ"
git ls-files | grep -iE '(backend|server|\.py|main\.py|fastapi)' | head -20
echo
echo "[3] api.ts์์ ์๊ฐ ์ฒ๋ฆฌ ๊ด๋ จ ๋ชจ๋ ํจ์ ์ฐพ๊ธฐ"
rg -n 'Date|datetime|timezone|parse.*time|format.*time' dpbr_front/app/src/lib/api.tsRepository: GC-MapleWind/MSGS_13_F Length of output: 548 API ๊ณ์ฝ์์ created_at ํ์์กด ๋ช ์๊ฐ ํ์ํฉ๋๋ค.
๋ค์์ ํ์ธํด์ฃผ์ธ์:
API ๊ณ์ฝ์ ๋ช ์ํ๊ณ , ํ์ํ๋ฉด ๋ฐฑ์๋ ์๋ต์ ํ์คํํ๊ฑฐ๋ ํ์ฑ ๋ก์ง์ ์กฐ์ ํด์ฃผ์ธ์. ๐ค Prompt for AI Agents |
||
|
|
||
| export function formatCommentDateTime(raw: string): string { | ||
| const parsed = parseApiDateTime(raw); | ||
| if (Number.isNaN(parsed.getTime())) { | ||
| return raw; | ||
| } | ||
|
|
||
| return parsed.toLocaleString('ko-KR', { | ||
| timeZone: 'Asia/Seoul', | ||
| year: '2-digit', | ||
| month: '2-digit', | ||
| day: '2-digit', | ||
| hour: '2-digit', | ||
| minute: '2-digit', | ||
| }); | ||
| } | ||
|
|
||
| function isExpiredJwt(token: string): boolean { | ||
| try { | ||
| const payload = token.split('.')[1]; | ||
|
|
@@ -128,6 +150,10 @@ interface TeamMemberResponse { | |
| name: string; | ||
| role: string; | ||
| profile_img_url: string | null; | ||
| message: { | ||
| title: string; | ||
| content: string; | ||
| } | null; | ||
| } | ||
|
|
||
| interface TeamMemberDetailResponse extends TeamMemberResponse { | ||
|
|
@@ -328,13 +354,7 @@ export async function getComments(page: number = 1, limit: number = 20): Promise | |
| author: comment.author, | ||
| authorAvatar: '/default-avatar.png', | ||
| content: comment.content, | ||
| createdAt: new Date(comment.created_at).toLocaleString('ko-KR', { | ||
| year: '2-digit', | ||
| month: '2-digit', | ||
| day: '2-digit', | ||
| hour: '2-digit', | ||
| minute: '2-digit' | ||
| }) | ||
| createdAt: formatCommentDateTime(comment.created_at) | ||
| })); | ||
| } | ||
|
|
||
|
|
@@ -380,8 +400,8 @@ export async function getTeamMembers(): Promise<TeamMessageItem[]> { | |
| id: member.id.toString(), | ||
| name: member.name, | ||
| role: member.role, | ||
| title: '', | ||
| content: '', | ||
| title: member.message?.title || '', | ||
| content: member.message?.content || '', | ||
| imageUrl: normalizeAssetUrl(member.profile_img_url) | ||
| })); | ||
| } | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -22,9 +22,7 @@ | |||||||||||||||||||||||||||||||||
| let isLoading = $state(false); | ||||||||||||||||||||||||||||||||||
| let studentIdInputRef: HTMLDivElement | undefined = $state(); | ||||||||||||||||||||||||||||||||||
| let dialogEl: HTMLDivElement | undefined = $state(); | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| // ์๋ฌ ๋ฉ์์ง ์ํ | ||||||||||||||||||||||||||||||||||
| let errorMessage = $state(""); | ||||||||||||||||||||||||||||||||||
| let infoMessage = $state(""); | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| // ์ ๋๋ฉ์ด์ ์ ์ํ ์ํ | ||||||||||||||||||||||||||||||||||
| let isVisible = $state(false); | ||||||||||||||||||||||||||||||||||
|
|
@@ -65,7 +63,7 @@ | |||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| async function handleLogin() { | ||||||||||||||||||||||||||||||||||
| if (!name.trim() || !studentId.trim()) { | ||||||||||||||||||||||||||||||||||
| showToastMessage(); | ||||||||||||||||||||||||||||||||||
| showInfoMessage("์ด๋ฆ ๋๋ ํ๋ฒ์ ํ์ธํด ์ฃผ์ธ์."); | ||||||||||||||||||||||||||||||||||
| return; | ||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
|
|
@@ -74,12 +72,13 @@ | |||||||||||||||||||||||||||||||||
| try { | ||||||||||||||||||||||||||||||||||
| await authStore.login(name.trim(), studentId.trim(), saveName); | ||||||||||||||||||||||||||||||||||
| // ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ฝ๋ฐฑ ํธ์ถ | ||||||||||||||||||||||||||||||||||
| showInfoMessage("๋ก๊ทธ์ธ ๋์์ต๋๋ค."); | ||||||||||||||||||||||||||||||||||
| handleClose(); | ||||||||||||||||||||||||||||||||||
| setTimeout(() => { | ||||||||||||||||||||||||||||||||||
| onSuccess(); | ||||||||||||||||||||||||||||||||||
| }, 300); | ||||||||||||||||||||||||||||||||||
| } catch (error) { | ||||||||||||||||||||||||||||||||||
| showToastMessage(); | ||||||||||||||||||||||||||||||||||
| showInfoMessage("์ด๋ฆ ๋๋ ํ๋ฒ์ ํ์ธํด ์ฃผ์ธ์."); | ||||||||||||||||||||||||||||||||||
| studentId = ""; | ||||||||||||||||||||||||||||||||||
| studentIdFocused = true; | ||||||||||||||||||||||||||||||||||
| setTimeout(() => { | ||||||||||||||||||||||||||||||||||
|
|
@@ -108,10 +107,10 @@ | |||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||
| */ | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| function showToastMessage(message?: string) { | ||||||||||||||||||||||||||||||||||
| errorMessage = message || "์ด๋ฆ ๋๋ ํ๋ฒ์ ํ์ธํด ์ฃผ์ธ์."; | ||||||||||||||||||||||||||||||||||
| function showInfoMessage(message: string) { | ||||||||||||||||||||||||||||||||||
| infoMessage = message; | ||||||||||||||||||||||||||||||||||
| setTimeout(() => { | ||||||||||||||||||||||||||||||||||
| errorMessage = ""; | ||||||||||||||||||||||||||||||||||
| infoMessage = ""; | ||||||||||||||||||||||||||||||||||
| }, 3000); | ||||||||||||||||||||||||||||||||||
|
Comment on lines
+110
to
114
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Line 110-114์์ ์ด์ ํ์ด๋จธ๋ฅผ ์ทจ์ํ์ง ์์, ์ฐ์ ํธ์ถ ์ ๋จผ์ ๊ฑธ๋ฆฐ ํ์ด๋จธ๊ฐ ๋์ค ๋ฉ์์ง๋ฅผ ์ง์ธ ์ ์์ต๋๋ค. ๐ง ์ ์ ์์ ์+ let infoMessageTimer: ReturnType<typeof setTimeout> | null = null;
+
function showInfoMessage(message: string) {
infoMessage = message;
- setTimeout(() => {
+ if (infoMessageTimer) clearTimeout(infoMessageTimer);
+ infoMessageTimer = setTimeout(() => {
infoMessage = "";
+ infoMessageTimer = null;
}, 3000);
}๐ Committable suggestion
Suggested change
๐ค Prompt for AI Agents |
||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
|
|
@@ -164,9 +163,9 @@ | |||||||||||||||||||||||||||||||||
| tabindex="-1" | ||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||
| <div | ||||||||||||||||||||||||||||||||||
| class="w-full shrink-0 h-[72vh] bg-gradient-to-b from-[#FCDDA5] to-[#F1A470] rounded-t-3xl pt-4 pb-8 px-6 flex flex-col items-center shadow-lg transition-transform duration-300 {isVisible | ||||||||||||||||||||||||||||||||||
| ? 'translate-y-0' | ||||||||||||||||||||||||||||||||||
| : 'translate-y-full'}" | ||||||||||||||||||||||||||||||||||
| class="w-full shrink-0 bg-gradient-to-b from-[#FCDDA5] to-[#F1A470] rounded-t-3xl pt-4 pb-8 px-6 flex flex-col items-center shadow-lg transition-all duration-300 {isVisible | ||||||||||||||||||||||||||||||||||
| ? 'h-[72vh] translate-y-0' | ||||||||||||||||||||||||||||||||||
| : 'h-[72vh] translate-y-full'}" | ||||||||||||||||||||||||||||||||||
| onclick={(e) => e.stopPropagation()} | ||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||
| <!-- ๋ซ๊ธฐ ๋ฒํผ --> | ||||||||||||||||||||||||||||||||||
|
|
@@ -192,7 +191,13 @@ | |||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| <!-- ์ ๋ ฅ ํผ --> | ||||||||||||||||||||||||||||||||||
| <div class="w-full flex flex-col"> | ||||||||||||||||||||||||||||||||||
| <form | ||||||||||||||||||||||||||||||||||
| class="w-full flex flex-col" | ||||||||||||||||||||||||||||||||||
| onsubmit={(e) => { | ||||||||||||||||||||||||||||||||||
| e.preventDefault(); | ||||||||||||||||||||||||||||||||||
| handleLogin(); | ||||||||||||||||||||||||||||||||||
| }} | ||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||
| <!-- ์ ๋ ฅ ํ๋ ๊ทธ๋ฃน --> | ||||||||||||||||||||||||||||||||||
| <div class="flex flex-col gap-1 mb-2"> | ||||||||||||||||||||||||||||||||||
| <!-- ์ด๋ฆ ์ ๋ ฅ --> | ||||||||||||||||||||||||||||||||||
|
|
@@ -233,23 +238,23 @@ | |||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| <!-- ๋ก๊ทธ์ธ ๋ฒํผ --> | ||||||||||||||||||||||||||||||||||
| <div class="relative w-full"> | ||||||||||||||||||||||||||||||||||
| {#if errorMessage} | ||||||||||||||||||||||||||||||||||
| {#if infoMessage} | ||||||||||||||||||||||||||||||||||
| <div | ||||||||||||||||||||||||||||||||||
| class="absolute bottom-[calc(100%+8px)] left-0 w-full flex justify-center z-[60] pointer-events-none" | ||||||||||||||||||||||||||||||||||
| class="absolute bottom-full left-1/2 -translate-x-1/2 mb-4 z-[60] pointer-events-none" | ||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||
| <span | ||||||||||||||||||||||||||||||||||
| class="bg-black/60 text-white text-[15px] px-5 py-2.5 rounded-3xl shadow-md font-medium whitespace-nowrap pointer-events-auto" | ||||||||||||||||||||||||||||||||||
| > | ||||||||||||||||||||||||||||||||||
| {errorMessage} | ||||||||||||||||||||||||||||||||||
| {infoMessage} | ||||||||||||||||||||||||||||||||||
| </span> | ||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||
| {/if} | ||||||||||||||||||||||||||||||||||
| <Button | ||||||||||||||||||||||||||||||||||
| label="๋ฉ์๊ฒฐ์ฐ ํก ์ ์ฅ" | ||||||||||||||||||||||||||||||||||
| variant="primary" | ||||||||||||||||||||||||||||||||||
| buttonState={isLoading ? "disabled" : "default"} | ||||||||||||||||||||||||||||||||||
| onClick={handleLogin} | ||||||||||||||||||||||||||||||||||
| type="button" | ||||||||||||||||||||||||||||||||||
| onClick={() => {}} | ||||||||||||||||||||||||||||||||||
| type="submit" | ||||||||||||||||||||||||||||||||||
| class="bg-white !text-[#F87C56] hover:bg-white/90 font-medium py-[14px] rounded-lg w-full" | ||||||||||||||||||||||||||||||||||
| /> | ||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||
|
|
@@ -298,7 +303,7 @@ | |||||||||||||||||||||||||||||||||
| <span>์นด์นด์ค ๋ก๊ทธ์ธ</span> | ||||||||||||||||||||||||||||||||||
| </button> | ||||||||||||||||||||||||||||||||||
| --> | ||||||||||||||||||||||||||||||||||
| </div> | ||||||||||||||||||||||||||||||||||
| </form> | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
| <!-- ํธํฐ ์๋ด๋ฌธ๊ตฌ --> | ||||||||||||||||||||||||||||||||||
| <div class="mt-12 mb-4 flex justify-center"> | ||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ด ํ์ผ์ Git ๋ธ๋์น ๋ชฉ๋ก์ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ๋ฒ์ ๊ด๋ฆฌ ๋์์ ํฌํจ๋์ด์๋ ์ ๋ฉ๋๋ค. ๋ฏผ๊ฐํ ์ ๋ณด๋ ์๋์ง๋ง, ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ๊ธฐ ์ํด ์ญ์ ํ๊ณ
.gitignore์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.