Skip to content
View OCJune's full-sized avatar

Highlights

  • Pro

Block or report OCJune

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please donโ€™t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this userโ€™s behavior. Learn more about reporting abuse.

Report abuse
OCJune/README.md

์˜ค์ฐฝ์ค€ (Changjun Oh)

Backend & Frontend Engineer ยท Seoul, South Korea ๐Ÿ‡ฐ๐Ÿ‡ท

๐Ÿ™ GitHub ยท ๐Ÿ“ซ cjbormk11@gmail.com


๐Ÿš€ About

Spring Boot ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ๊ฐœ๋ฐœ๊ณผ React ๊ธฐ๋ฐ˜ ์›น ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
API ์„ค๊ณ„ ยท ์ธ์ฆ/๋ณด์•ˆ ยท ๊ด€์ธก ๊ฐ€๋Šฅ์„ฑ(Observability) ยท CI/CD๊นŒ์ง€ ์„œ๋น„์Šค๊ฐ€ ์‹ค์ œ๋กœ ๊ตด๋Ÿฌ๊ฐ€๋Š” ๊ตฌ๊ฐ„์— ๊ด€์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.


๐Ÿ›  Projects

์ผ์ • : 2026.08 ~ 2026.09
๊ธฐ์ˆ  ์Šคํƒ : React 19, TypeScript 6, Vite 8, Tailwind CSS 4, TanStack Router, TossPayments SDK, html-to-image, qr-code-styling, Oxlint, pnpm, AWS Amplify
์ฐธ์—ฌ ์ธ์› : 3์ธ (ํ”„๋ก ํŠธ์—”๋“œ 1์ธ)
์„œ๋น„์Šค : ์˜คํ”„๋ผ์ธ ๋งค์žฅ์˜ ๋„ค์ปท์‚ฌ์ง„ ์ดฌ์˜๋ถ€ํ„ฐ ๊ฒฐ์ œ ยท ํ”„๋ ˆ์ž„ ์ œ์ž‘ ยท ์ธ์‡„ ยท QR ๋‹ค์šด๋กœ๋“œ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ํ‚ค์˜ค์Šคํฌ ์›น ์„œ๋น„์Šค
์„ค๊ณ„ ๊ธฐ์ค€ : ์•„์ดํŒจ๋“œ ํ‚ค์˜ค์Šคํฌ(Safari/WebKit) ๋‹จ์ผ ๋””๋ฐ”์ด์Šค ํ™˜๊ฒฝ, ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์Šคํ… ๋งŒ๋ฃŒ ์ฒ˜๋ฆฌ ๋ฐ ์ด๋ฏธ์ง€ ์บก์ฒ˜ ํŒŒ์ดํ”„๋ผ์ธ ์ตœ์ ํ™”

  • ํ‚ค์˜ค์Šคํฌ(Safari/WebKit)์—์„œ ์˜คํ”„์Šคํฌ๋ฆฐ ํ”„๋ ˆ์ž„ ์บก์ฒ˜ ์‹œ ์‚ฌ์ง„ ยท QR์ด ๋ˆ„๋ฝ๋˜๊ณ  ๋ฐฐ๊ฒฝ๋งŒ ๋ Œ๋”๋ง๋˜๋˜ ๋ฌธ์ œ๋ฅผ, ์บก์ฒ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ -9999px ์ด๋™ ๋ฐฉ์‹์—์„œ ๋ทฐํฌํŠธ ์›์  + w-0 h-0 overflow-hidden ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ๊ณ ์ • setTimeout ๋Œ€๊ธฐ๋ฅผ document.fonts.ready + ๋”๋ธ” requestAnimationFrame ์กฐ๊ฑด ๋Œ€๊ธฐ๋กœ ๊ต์ฒดํ•˜์—ฌ ํ•ด๊ฒฐ, ์ธํ™” ์ด๋ฏธ์ง€ ๋ˆ„๋ฝ ํ˜„์ƒ ์ œ๊ฑฐ
  • ๋А๋ฆฐ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ S3 ์™ธ๋ถ€ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์™„๋ฃŒ ์ „ ์บก์ฒ˜๊ฐ€ ์‹คํ–‰๋˜์–ด toBlob์ด null์„ ๋ฐ˜ํ™˜, ์ตœ์ข… ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์š”์ฒญ ์ž์ฒด๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋˜ ์žฅ์• ๋ฅผ ์บก์ฒ˜ ์ง์ „ ๋…ธ๋“œ ๋‚ด ๋ชจ๋“  <img>์˜ decode() ์™„๋ฃŒ ๋Œ€๊ธฐ ๋กœ์ง์œผ๋กœ ๋ณด์™„ํ•˜์—ฌ ์—…๋กœ๋“œ ์‹คํŒจ ์ฐจ๋‹จ
  • ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ ๋ฐฑ์—”๋“œ ์—๋Ÿฌ ์‘๋‹ต์˜ code ๊ฐ’์ด ์•„๋‹Œ Java enum ์ƒ์ˆ˜๋ช…์„ ๋น„๊ตํ•˜๊ณ  ์žˆ์–ด ์ด๋ฏธ ๊ตฌํ˜„๋œ ์žฌ์‹œ๋„ ยท ์•ˆ๋‚ด ๋กœ์ง์ด ๋ฌด๋ ฅํ™”๋˜์–ด ์žˆ๋˜ ๋ฌธ์ œ๋ฅผ, ์‹ค์ œ ์ฝ”๋“œ(SESSION_404_2, PRINT400_5) ๊ธฐ์ค€์œผ๋กœ ์ •์ •ํ•˜๊ณ  2์ดˆ ๊ฐ„๊ฒฉ ์ตœ๋Œ€ 5ํšŒ ์žฌ์‹œ๋„๋ฅผ ์ ์šฉํ•˜์—ฌ ํŒŒํŠธ๋„ˆ ๋ฐฐ์ • ยท ์ธ์‡„ ์กฐํšŒ ์‹คํŒจ ๋ณต๊ตฌ
  • AWS Amplify ๋นŒ๋“œ๊ฐ€ pnpm: command not found ๋ฐ corepack ์บ์‹œ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ MODULE_NOT_FOUND๋กœ ์‹คํŒจํ•˜๋˜ ๋ฌธ์ œ๋ฅผ amplify.yml ๋นŒ๋“œ ์ŠคํŽ™ ์ž‘์„ฑ ๋ฐ packageManager ๋ฒ„์ „ ๊ณ ์ •(pnpm@11.21.0)์œผ๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์•ˆ์ •ํ™”
  • TossPayments ๊ฒฐ์ œ ๋ฐฉ์‹์„ ์ฃผ๋ฌธ์„œํ˜•(์œ„์ ฏ ์ธ๋ผ์ธ)์—์„œ ๊ฒฐ์ œ์ฐฝํ˜•(์˜ค๋ฒ„๋ ˆ์ด) ์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ , ์Šน์ธ ์™„๋ฃŒ ์‹œ ์ž๋™์œผ๋กœ ๋‹ค์Œ ์Šคํ…(๊ด€๊ณ„ ์„ ํƒ)์œผ๋กœ ์ง„์ž…ํ•˜๋„๋ก ๊ฐœ์„ ํ•˜์—ฌ ํ‚ค์˜ค์Šคํฌ ์กฐ์ž‘ ๋‹จ๊ณ„ ์ถ•์†Œ
  • GET /sessions/{id}/status ํด๋ง ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ๋™๊ธฐํ™” ํƒ€์ด๋จธ(useCountdown, useStepExpiry)๋ฅผ ๋„์ž…ํ•˜์—ฌ ์Šคํ…๋ณ„ ๋งŒ๋ฃŒ ์‹œ ์ž๋™ ์„ ํƒ ยท ์ดˆ๊ธฐํ™” ยท ๊ฒฐ์ œ์ฐฝ ์ทจ์†Œ ๋“ฑ ์ƒํƒœ ์ „์ด ์ฒ˜๋ฆฌ
  • ๊ฒฝ๋Ÿ‰ FSD(Feature-Sliced Design) ์•„ํ‚คํ…์ฒ˜(app โ†’ routes โ†’ features โ†’ shared ๋‹จ๋ฐฉํ–ฅ ์˜์กด)์™€ cva ๊ธฐ๋ฐ˜ ๊ณต์šฉ UI ์ปดํฌ๋„ŒํŠธ ยท ๋””์ž์ธ ํ† ํฐ ์ฒด๊ณ„๋ฅผ ์ˆ˜๋ฆฝํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌ์กฐ ํ‘œ์ค€ํ™”
  • ์ด์Šˆ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ์™€ main/develop 2-๋ธŒ๋žœ์น˜ ๋ฐฐํฌ ์ „๋žต์„ ์ •๋ฆฝํ•˜๊ณ  README ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ฅผ ๋ฌธ์„œํ™”ํ•˜์—ฌ ํ˜‘์—… ๊ทœ์น™ ์ •์ฐฉ

์ผ์ • : 2026.06 ~ 2026.08
๊ธฐ์ˆ  ์Šคํƒ : Java 21, Spring Boot 4.1, Spring Security 7.1, Spring Data JPA, MySQL, AWS S3 (SDK v2), Docker, GitHub Actions, Nginx, Swagger(Springdoc), Prometheus, Grafana, Loki, Tempo
์ฐธ์—ฌ ์ธ์› : 8์ธ (๋ฐฑ์—”๋“œ 4์ธ)
์„œ๋น„์Šค : ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์›ํ•˜๋Š” ์„ ๋ฌผ์„ ๊ณต์œ ํ•˜๋ฉด ์นœ๊ตฌ๋“ค์ด ๋งํฌ๋กœ ์ฐธ์—ฌํ•ด ๋งˆ์Œ๊ณผ ๊ธˆ์•ก์„ ํ•จ๊ป˜ ๋ชจ์œผ๋Š” ์„ ๋ฌผ ํŽ€๋”ฉ ์„œ๋น„์Šค
์„ค๊ณ„ ๊ธฐ์ค€ : ๋ฐ๋ชจ๋ฐ์ด ์‹ค์‚ฌ์šฉ ํŠธ๋ž˜ํ”ฝ ๋Œ€์‘, 100๋งŒ ๊ฑด ๊ทœ๋ชจ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์…‹ ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ๊ฒ€์ฆ ๋ฐ 3-Pillar Observability ์ฒด๊ณ„ ๊ตฌ์ถ•

  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋กœ๊ทธ ยท ๋ฉ”ํŠธ๋ฆญ ยท ํŠธ๋ ˆ์ด์Šค๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์›์ธ ์ถ”์ ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋˜ ๋ฌธ์ œ๋ฅผ Prometheus(๋ฉ”ํŠธ๋ฆญ) + Loki(๋กœ๊น…) + Tempo(๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ) ์—ฐ๋™์œผ๋กœ ํ•ด๊ฒฐ, Logback MDC์— traceId/spanId๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  Grafana Derived Fields๋กœ Logs โ†” Traces ์ƒํ˜ธ ์ด๋™์„ ๊ตฌ์„ฑํ•˜์—ฌ Metrics-Logs-Traces 3-Pillar Observability ์ฒด๊ณ„ ํ™•๋ฆฝ
  • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ํ™•๋ณด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋˜ ๋ฌธ์ œ๋ฅผ CommandLineRunner + JdbcTemplate Batch Insert ๊ธฐ๋ฐ˜ ๋ชฉ ๋ฐ์ดํ„ฐ Runner๋กœ ํ•ด๊ฒฐ, ์ธ๋ฑ์Šค ํ•ด์‹œ ๋ฐ ๋‹ค์ธต ๋ฌด์ž‘์œ„ ์กฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ 100๋งŒ ๊ฑด ๋ฌด์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ฃผ์ž…์„ ๋ณด์žฅํ•˜๊ณ  @Profile("mock-data") + mock-data.scale๋กœ ์Šค์ผ€์ผ(1.0x / 0.1x / 0.01x) ๋™์  ์ œ์–ด
  • ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ„์ขŒ๋ฒˆํ˜ธ๋งŒ ์ž…๋ ฅํ•ด๋„ ์€ํ–‰์„ ์ž๋™ ์ธ์‹ํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ๋ฅผ KFTC ๊ณ„์ขŒ ํ…œํ”Œ๋ฆฟ ๋ฐ Y-Code ๊ณผ๋ชฉ์ฝ”๋“œ ํŒจํ„ด ๊ทœ์น™ ์—”์ง„(BankDetector) ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ 22๊ฐœ ๊ธˆ์œต๊ธฐ๊ด€ ์ถ”๋ก  API(POST /api/v1/banks/detections) ์™„์„ฑ
  • 11-14์ž๋ฆฌ ๊ณ„์ขŒ ์ž…๋ ฅ ์‹œ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๊ฒ€์ฆํ•˜์ง€ ์•Š๋Š” ๊ทœ์น™ ๋•Œ๋ฌธ์— 7-9๊ฐœ ์€ํ–‰์ด ๋™์‹œ ์ถ”์ฒœ๋˜๋˜ ์˜ค์ถ”์ฒœ ํ˜„์ƒ์„, ์ถ”๋ก  ๊ทœ์น™์„ List<DetectionRule> ์„ ์–ธ์  ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์กฐํ™”ํ•˜๊ณ  ์‹ ๋ขฐ๋„(HIGH/LOW) ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง์„ ๋„์ž…ํ•˜์—ฌ ๋‹จ์ผ ์€ํ–‰ ์ถ”๋ก ์œผ๋กœ ์ •์ •, ์ •๋ฐ€๋„ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ(detectPrecisionTest) ์‹ ์„ค
  • ์ „์—ญ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ Exception ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์‘๋‹ต์— ๋…ธ์ถœํ•˜๊ณ  DataIntegrityViolationException์„ ๋ฌด์กฐ๊ฑด 409๋กœ ๋ฐ˜ํ™˜ํ•˜๋˜ ๋ณด์•ˆ ยท ์ •ํ™•์„ฑ ๋ฌธ์ œ๋ฅผ, ๋‚ด๋ถ€ ๋ฉ”์‹œ์ง€ ์ฐจ๋‹จ ๋ฐ ์œ ๋‹ˆํฌ ์ œ์•ฝ ์œ„๋ฐ˜๋งŒ 409๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•˜์—ฌ ์—๋Ÿฌ ์‘๋‹ต ๊ทœ๊ฒฉ ํ‘œ์ค€ํ™”
  • ํšŒ์›๊ฐ€์ž… ์ง„ํ–‰ ์ค‘(๋น„ํšŒ์› ์ƒํƒœ) S3 Presigned URL ๋ฐœ๊ธ‰์ด 401๋กœ ์ฐจ๋‹จ๋˜๋˜ ๋ฌธ์ œ๋ฅผ SecurityConfig permitAll ๋“ฑ๋ก๊ณผ JwtAuthenticationFilter์˜ ํ† ํฐ ์˜ˆ์™ธ ํ—ˆ์šฉ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ๋กœ ํ•ด๊ฒฐ, ์˜จ๋ณด๋”ฉ ์ค‘ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์ •์ƒํ™”
  • ์ƒํ’ˆ ์นดํ…Œ๊ณ ๋ฆฌ ๋‹จ์ผ ์„ ํƒ ๊ตฌ์กฐ์˜ ํ™•์žฅ ํ•œ๊ณ„๋ฅผ product_category N:M ๋งคํ•‘ ์—”ํ‹ฐํ‹ฐ๋กœ ๊ฐœํŽธํ•˜๊ณ  LEFT JOIN ๊ธฐ๋ฐ˜ ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ๋ง ์ฟผ๋ฆฌ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ์ธ๊ธฐ ํ†ต๊ณ„ ์ •๋ ฌ ์ง€์›
  • ์„ ๋ฌผ ์ค€๋น„ ์ž„์‹œ ์ €์žฅ(IndividualFundingDraft, FundingTogetherDraft) Upsert API๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚ ์งœ ์œ ํšจ์„ฑ ยท ๊ณ„์ขŒ ์†Œ์œ ๊ถŒ ๊ฒ€์ฆ ๋ฐ ์—ฐ๊ด€ ์„ ๋ฌผ ๋ฆฌ์ŠคํŠธ Cascade ์‚ญ์ œ ์ฒ˜๋ฆฌ
  • REST API ํ™˜๊ฒฝ์— ๋งž์ถฐ SessionCreationPolicy.STATELESS ์ „ํ™˜ ๋ฐ CORS ยท ์†Œ์…œ ๋กœ๊ทธ์ธ(๊ตฌ๊ธ€/์นด์นด์˜ค) ยท ๋น„ํšŒ์› ๊ณต๊ฐœ API ๊ฒฝ๋กœ๋ฅผ ์„ธ๋ถ„ํ™”ํ•œ SecurityConfig ์„ค๊ณ„
  • Dockerfile ๋ฐ GitHub Actions ๊ธฐ๋ฐ˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ  Nginx ํ”„๋ก์‹œ ํ—ค๋” ์„ค์ •์„ ์ ์šฉํ•˜์—ฌ ๋ฐฐํฌ ์ž๋™ํ™”, v1.0.0 ์ •์‹ ๋ฐฐํฌ ์ˆ˜ํ–‰

์ผ์ • : 2026.04 ~ 2026.08
๊ธฐ์ˆ  ์Šคํƒ : React 19, TypeScript, Vite, TanStack Query, TanStack Router, Zustand, React Hook Form, Zod, Tailwind CSS, shadcn/ui, dnd-kit, Motion, AWS Amplify
์ฐธ์—ฌ ์ธ์› : 12์ธ (ํ”„๋ก ํŠธ์—”๋“œ 4์ธ)
์„œ๋น„์Šค : ๋ชจ์ง‘ ๊ณต๊ณ  ๋“ฑ๋ก๋ถ€ํ„ฐ ์ง€์› ยท ์„œ๋ฅ˜/๋ฉด์ ‘ ํ‰๊ฐ€ ยท ํŒ€ ๋งค์นญ ยท ํ™œ๋™ ๊ด€๋ฆฌ๊นŒ์ง€ ๋ฆฌํฌ๋ฃจํŒ… ์ „ ๊ณผ์ •์„ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์›น ํ”Œ๋žซํผ
์„ค๊ณ„ ๊ธฐ์ค€ : ์šด์˜์ง„ ยท Plan ์ฑŒ๋ฆฐ์ € ยท ์ผ๋ฐ˜ ์ฑŒ๋ฆฐ์ € 3์ค‘ ์—ญํ•  ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๋ถ„๊ธฐ, ์ง€๋ถ€/ํ•™๊ต ๋‹จ์œ„ ๋ฉ€ํ‹ฐ ํ…Œ๋„Œ์‹œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

  • ์ง€๋ถ€ ๋ชฉ๋ก์ด ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ ์ „๋ฐ˜์— ์ƒ์ˆ˜๋กœ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์‹ ๊ทœ ์ง€๋ถ€ ์ถ”๊ฐ€ ์‹œ๋งˆ๋‹ค ์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋˜ ๊ตฌ์กฐ์  ๋ฌธ์ œ๋ฅผ, GET /v1/chapters/with-schools ๊ธฐ๋ฐ˜ useSchoolChapterMap ํ›…์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  Chapter ํƒ€์ž…์„ string์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ˆ˜์ • ์—†์ด ์‹ ๊ทœ ์ง€๋ถ€๊ฐ€ ๋™์  ๋ฐ˜์˜๋˜๋„๋ก ๊ฐœ์„ 
  • ํ‰๊ฐ€ ๋‹ด๋‹น์ž ๋ฐฐ์ • ํŽ˜์ด์ง€ ์ง„์ž… ์‹œ ์ ‘์†์ž ์†Œ์†๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ groups[0](ํŠน์ • ํ•™๊ต)์ด ๊ณ ์ • ์„ ํƒ๋˜์–ด ํƒ€ ํ•™๊ต ์šด์˜์ง„์ด ๋…ธ์ถœ๋˜๋˜ ๊ถŒํ•œ ๋ฌธ์ œ๋ฅผ, me.schoolId ๊ธฐ๋ฐ˜ mySchoolGroup ํƒ์ƒ‰ ๋กœ์ง์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์ง„ํ–‰ ์ค‘์ธ ๋ชจ์ง‘ ์ฐจ์ˆ˜๊ฐ€ ์—†์„ ๋•Œ์˜ ๋นˆ ์ƒํƒœ ์•ˆ๋‚ด๋ฅผ ์ถ”๊ฐ€
  • ํ•™๊ต ํšŒ์žฅ ๊ถŒํ•œ ๊ณ„์ •์ด ๋ชจ์ง‘ ์ธ์›(TO)์„ ์ €์žฅํ•  ๋•Œ ๊ถŒํ•œ ์—†๋Š” ํƒ€ ํ•™๊ต API ์š”์ฒญ๊นŒ์ง€ ํ•จ๊ป˜ ์ „์†ก๋˜์–ด 403์œผ๋กœ ์‹คํŒจํ•˜๋˜ ๋ฌธ์ œ๋ฅผ ์š”์ฒญ ๋ฒ”์œ„ ์ œํ•œ์œผ๋กœ ํ•ด๊ฒฐ, ๊ถŒํ•œ๋ณ„ ์ €์žฅ ํ”Œ๋กœ์šฐ ์ •์ƒํ™”
  • OAuth ์ฒซ ๋กœ๊ทธ์ธ ์‹œ ์œ ์ € ์ƒํƒœ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋˜ ํ˜„์ƒ์„ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ์บ์‹ฑ ๊ตฌ์กฐ๋กœ ๋ณด์™„ํ•˜๊ณ , ์ด๋ฉ”์ผ ์ธ์ฆ๋ฒˆํ˜ธ ์˜ค๊ธฐ์ž… ์‹œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ๊ฐ•์ œ ์ด๋™ํ•˜๋˜ ์ธํ„ฐ์…‰ํ„ฐ ์˜ค๋™์ž‘์„ ์ธ์ฆ ์š”์ฒญ ๊ฒฝ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์˜จ๋ณด๋”ฉ ์•ˆ์ •ํ™”
  • ํ•™๊ต ยท ์ง€๋ถ€ ๋ชฉ๋ก ๋“ฑ ๋ณ€๋™์ด ์ ์€ ๋ฐ์ดํ„ฐ์˜ ๋ฐ˜๋ณต API ํ˜ธ์ถœ์„ TanStack Query ์บ์‹ฑ ํ›…์œผ๋กœ ์ผ์›ํ™”ํ•˜๊ณ  ๋‚ด ์ •๋ณด ยท ํ™œ์„ฑ ๊ธฐ์ˆ˜ ์ •๋ณด๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋ Œ๋”๋ง ์‘๋‹ต์„ฑ ๊ฐœ์„ 
  • ํ”„๋กœ์ ํŠธ ํ•„ํ„ฐ ์„ ํƒ ํ›„ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋˜ ํ˜„์ƒ์„ URL Query Parameter ๋™๊ธฐํ™”๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ๋™์ผ ํ•„ํ„ฐ ๋ทฐ ๊ณต์œ  ๋ฐ ํƒ์ƒ‰ UX ๊ฐœ์„ 
  • ํ”„๋กœ์ ํŠธ ์ˆ˜์ • ์‹œ ์ž„์‹œ์ €์žฅ(DRAFT)์—์„œ ๊ฒ€ํ† ๋Œ€๊ธฐ(PENDING REVIEW)๋กœ ์ƒํƒœ ์ „์ด๋˜์ง€ ์•Š๋˜ ์˜ค๋ฅ˜๋ฅผ ์บ์‹œ ๋ฌดํšจํ™” ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ณด์™„์œผ๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ์‹ ์ฒญ/์ˆ˜์ • ์›Œํฌํ”Œ๋กœ์šฐ ์ •์ƒํ™”
  • ์ง€์› ํ˜„ํ™ฉ ์ง‘๊ณ„์—์„œ iOS ยท Android๊ฐ€ ๋ˆ„๋ฝ๋˜๋˜ ๋ฌธ์ œ, ์ง€๋ถ€์žฅ/ํšŒ์žฅ๋‹จ ๊ถŒํ•œ๋ณ„ ์กฐํšŒ ๋ฒ”์œ„ ๋ถˆ์ผ์น˜, ํ”„๋กœ์ ํŠธ ๋ฉค๋ฒ„ ์ˆ˜๋™ ๋ฐฐ์ • ์‹œ ํ•˜์œ„ ํŒŒํŠธ๊ฐ€ Frontend๋กœ ๊ณ ์ •๋˜๋˜ ์˜ค๋ฅ˜ ๋“ฑ ๊ถŒํ•œ ยท ์ง‘๊ณ„ ๋„๋ฉ”์ธ ๋กœ์ง ๊ฒฐํ•จ์„ ์—ฐ์† ์ˆ˜์ •
  • ๊ณต์ง€์‚ฌํ•ญ ๋กœ๋”ฉ ์‹œ Layout Shift๋ฅผ ์ „์šฉ Skeleton UI๋กœ ํ•ด๊ฒฐํ•˜๊ณ , ๊ณต์ง€ ๋ณธ๋ฌธ ๋งˆํฌ๋‹ค์šด(๋ฆฌ์ŠคํŠธ ยท ๋ณผ๋“œ) ๋ Œ๋”๋ง ๋ฐ ํšŒ์›๊ฐ€์ž… ์ด๋ฆ„ ์œ ํšจ์„ฑ ๊ฒ€์ฆ(๊ณต๋ฐฑ trim ยท 10์ž ์ œํ•œ) ๋“ฑ ์‚ฌ์šฉ์„ฑ ๊ฐœ์„  ๋‹ค์ˆ˜ ๋ฐ˜์˜
  • ์™ธ๋ถ€ ํด๋ฆญ ๊ฐ์ง€ ๋กœ์ง์„ useClickOutside ํ›…์œผ๋กœ ์ผ์›ํ™”ํ•˜๊ณ  ๋ฏธ์‚ฌ์šฉ store๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ์ „์—ญ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ ํ†ตํ•ฉ

์ผ์ • : 2025.12 ~ 2026.02
๊ธฐ์ˆ  ์Šคํƒ : React, TypeScript, Tailwind CSS, TanStack Query, Framer Motion, Axios, Vite, Vercel
์ฐธ์—ฌ ์ธ์› : 8์ธ (ํ”„๋ก ํŠธ์—”๋“œ 4์ธ)
์„œ๋น„์Šค : ์‚ฌ์†Œํ•œ ์ผ์ƒ๊นŒ์ง€ ๋ฃจํ‹ด์œผ๋กœ ๊ธฐ๋กํ•˜๋ฉด '๋ฃจํ‹ด๋‚˜๋ฌด'์— ์—ด๋งค๊ฐ€ ๋งบํžˆ๊ณ , ํ†ต๊ณ„์™€ ์นœ๊ตฌ ๊ณต์œ ๋กœ ์Šต๊ด€ ํ˜•์„ฑ์„ ๋•๋Š” ๋ชจ๋ฐ”์ผ ์›น ์„œ๋น„์Šค
์„ค๊ณ„ ๊ธฐ์ค€ : ๋ชจ๋ฐ”์ผ ์›น ๋ธŒ๋ผ์šฐ์ € ์ „์šฉ ๋ฐ˜์‘ํ˜• ํ™˜๊ฒฝ, ์ผ๊ฐ„/์ฃผ๊ฐ„/์›”๊ฐ„ ํ†ต๊ณ„ API ์‘๋‹ต ์‹œ๊ฐํ™”

  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ € ์ ‘์† ์‹œ ์ƒํ•˜๋‹จ ์‹œ์Šคํ…œ ๋ฐ” ๋ฐฐ๊ฒฝ์ƒ‰์ด ํŽ˜์ด์ง€์™€ ๋‹ฌ๋ผ ๋ชฐ์ž…๊ฐ์ด ์ €ํ•ด๋˜๋˜ ๋ฌธ์ œ๋ฅผ ๋ทฐํฌํŠธ ๋ฉ”ํƒ€ ํƒœ๊ทธ ๋ฐ ๊ธ€๋กœ๋ฒŒ CSS ํ†ต์ผ ์„ค์ •์œผ๋กœ ํ•ด๊ฒฐํ•˜์—ฌ ์ผ๊ด€๋œ UI ์ œ๊ณต
  • ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ์ด ์—†์–ด ์ดํƒˆ ์œ„ํ—˜์ด ์žˆ๋˜ ๊ตฌ๊ฐ„์— ์ „์šฉ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ UI๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ฒด๊ฐ ๋Œ€๊ธฐ์‹œ๊ฐ„ ๊ฐœ์„ 
  • ๋ฃจํ‹ด ํŠธ๋ž˜์ปค ยท ์„ฑ์ทจ๋„ ํ†ต๊ณ„ API ์‘๋‹ต ์ฒ˜๋ฆฌ๋ฅผ TanStack Query ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ผ๊ฐ„/์ฃผ๊ฐ„/์›”๊ฐ„ ๋‹ฌ์„ฑ๋ฅ  ๋™์  ๋ Œ๋”๋ง ๊ตฌํ˜„
  • ์นœ๊ตฌ ๊ฒ€์ƒ‰ ยท ์‹ ์ฒญ ยท ์ˆ˜๋ฝ ยท ์‚ญ์ œ ๋ฐ ์นœ๊ตฌ ๋ฃจํ‹ด๋‚˜๋ฌด/์•„์นด์ด๋ธŒ ์กฐํšŒ API๋ฅผ ์—ฐ๋™ํ•˜๊ณ  ๋ผ์šฐํŒ…์„ ๊ตฌ์„ฑํ•˜์—ฌ ์†Œ์…œ ๊ธฐ๋Šฅ ์™„์„ฑ
  • ๋ฃจํ‹ด๋‚˜๋ฌด ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ฐ ๋งˆ์ดํŽ˜์ด์ง€ ์ „์ฒด ํผ๋ธ”๋ฆฌ์‹ฑ, Framer Motion ๊ธฐ๋ฐ˜ ์ธํ„ฐ๋ž™์…˜๊ณผ ๊ณต์šฉ ๋ชจ๋‹ฌ(๋กœ๊ทธ์•„์›ƒ ยท ๊ณต๊ฐœ์„ค์ • ยท ์ฐจ๋‹จํ•ด์ œ ยท ํšŒ์›ํƒˆํ‡ด) ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

๐ŸŽ“ Education

๋™๊ตญ๋Œ€ํ•™๊ต ์„œ์šธ์บ ํผ์Šค (Dongguk University, Seoul, South Korea)

  • ์ „๊ณต: ์ปดํ“จํ„ฐ๊ณตํ•™์ „๊ณต
  • ๊ธฐ๊ฐ„: 2021.03 ~ 2027.08 (ํ•™์‚ฌ ์กธ์—… ์˜ˆ์ •)

๐Ÿ“š Activities

  • UMC (University MakeUs Challenge) 9th: Web Challenger | 2025.09 ~ 2026.02
  • UMC (University MakeUs Challenge) 10th: Spring Boot Challenger | 2026.03 ~ 2026.08
  • UMC (University MakeUs Challenge) 10th: Product Team Web Part | 2026.03 ~ 2026.08

๐Ÿ’ป Skills

Languages

ย  ย  ย  ย 

Backend

ย  ย  ย  ย  ย 

Frontend

ย  ย  ย  ย  ย 

Database

ย 

Infra & Observability

ย  ย  ย  ย  ย  ย  ย  ย 

GitHub Stats

Contact

Pinned Loading

  1. UMC-PRODUCT/umc-product-web-v2 UMC-PRODUCT/umc-product-web-v2 Public

    ๐Ÿ•ธ๏ธ UMC Web 2๊ธฐ ํŒ€

    TypeScript 3 1

  2. UMC-toget/BE UMC-toget/BE Public

    Java

  3. umc-9th-scorpio-project-lived/project-FE umc-9th-scorpio-project-lived/project-FE Public

    TypeScript