"๋ด ์ทจํฅ์ ํํธ๊ฐ ๋ฑ ๋ง๋ ์ถ์ฌ์ง ๊ณต์ ์" ์ ์ ๋ค์ด ์ฌ์ง์ ๋ณธ์ง์๋ง ์ง์คํ ์ ์๋๋ก ๋๋ Content-First ์ฌ์ง ๋ฐ ํํฐ ์ ๋ณด ๊ณต์ ํ๋ซํผ์ ๋๋ค.
**ํํธ(Pint)**๋ ์ฌ์ง ์ดฌ์ ์ ํผ์ฌ์ฒด๋ฅผ ์ ๋ช ํ๊ฒ ๋ง์ถ๋ ์ด์ (Focus)์ ์๋ฏธํ๋ ์ฌ์ง๊ณ์ ์ค๋ ์์ด์์ ์ฐฉ์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ "์ด ์ฌ์ง ์ด๋์ ์ฐ์์ง?", "์ด๋ป๊ฒ ๋ณด์ ํ์ง?"๋ผ๋ ์ฌ์ฉ์์ ๊ทผ๋ณธ์ ์ธ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๊ณ ์ ํฉ๋๋ค.
- ์ฃผ์ ํ๊ฒ: ๊ฐ์ฑ์ด ํ๋ถํ ์ผ๋ฐ์ธ, ์ฌ์ง์ ๋ ๋์น(Niche)ํ๊ฒ ์ฐ๊ณ ์ถ์ ์๋ง์ถ์ด, ์๊ฐ์ ์ป๊ณ ์ถ์ ์ฌ์ง์๊ฐ
- ๋์์ธ ์ฒ ํ: ๋ฏธ๋๋ฉ๋ฆฌ์ฆ ์ปจ์ ์ ๋ฐํ์ผ๋ก ๋ชจ๋ ์ ์ ๊ฐ ํต์ฌ ๊ธฐ๋ฅ์ ํ ๋ฒ์ ์์๋ณผ ์ ์๋ UX
- ํต์ฌ ๊ธฐ๋ฅ: ์ฌ์ง ์ ์ฅ์ ๋ฐ ํํฐ ์ ๋ณด ๊ณต์ , XMP ๋ฉํ๋ฐ์ดํฐ ํ์ค์ ํ์ฉํ ์นด๋ฉ๋ผ ์ ๋ณด ์๋ ์ถ์ถ
- Core: React, TypeScript
- Styling: Tailwind CSS
- State Management: Zustand
- Animation: GSAP
- Networking: Axios
- Core: Java Spring Boot
- Security: Spring Security (Session & CSRF)
- Database: PostgreSQL, JPA/Hibernate
- Caching: Redis
- Deployment: AWS EC2, Vercel
- Storage: Amazon S3
- CI/CD: GitHub Actions
- Server: Nginx, Docker
- ๋ฌธ์ ์ํฉ: S3 Private ๋ฒํท ๋ณด์ ์ ์ฑ ์ ๋งค๋ฒ Pre-signed URL์ ์์ฑํด์ผ ํ๋ฏ๋ก ๋คํธ์ํฌ I/O ๊ณผ๋ถํ ๋ฐ์.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: ์์ฑ๋ Pre-signed URL์ Redis์ ์บ์ฑ(TTL 55๋ถ)ํ์ฌ ์ ํจ ์๊ฐ ๋์ ์ฌ์ฌ์ฉํ๋๋ก ๊ตฌํ.
- ๊ฒฐ๊ณผ: ๊ฒ์๊ธ ๋ชฉ๋ก ์กฐํ ์ฑ๋ฅ์ด ์ฝ 6๋ฐฐ ํฅ์(279ms โ 41ms)๋์์ต๋๋ค.
- JWT ๋์ ์ธ์ ์ ์ ํํ ์ด์ : ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ์์ ์ํ ์ ์ง๊ฐ ์ฉ์ดํ๋ฉฐ, Refresh Token ๊ด๋ฆฌ ์ ๋ฐ์ํ๋ Stateless ์๋ฐฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ.
- CSRF ๋ฐฉ์ด: Spring Security 6์ ๋ง์คํน๋ ํ ํฐ ํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
CsrfTokenRequestAttributeHandler๋ฅผ ์ปค์คํ ์ค์ ํ์ฌ SPA ํ๊ฒฝ์์์ ๋ณด์์ ๊ฐํํ์ต๋๋ค.
- ๊ตฌํ:
Intersection Observer API๋ฅผ ํ์ฉํด ์ฌ์ฉ์๊ฐ ํ๋ฉด ํ๋จ ๋๋ฌ ์page์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์นญํฉ๋๋ค. - ์ต์ ํ:
useCallback๊ณผSet์ ํ์ฉํด ๋ฐ์ดํฐ ์ค๋ณต ๊ฒฐํฉ์ ๋ฐฉ์งํ๊ณ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ต์ํํ์ต๋๋ค.
- ๋ก๊ทธ์ธ ์ ๋๋ฉ์ด์ : CSS Keyframes๋ฅผ ์ด์ฉํด ์ฌ์ง๋ค์ด ๋์์์ด ํ๋ฅด๋ ๋ฌดํ ๋ฃจํ ์คํฌ๋กค ๊ตฌํ.
- ๋๊ด์ ์ ๋ฐ์ดํธ: ์ข์์(Like) ํด๋ฆญ ์ ์๋ฒ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ UI๋ฅผ ์ฆ๊ฐ ์ ๋ฐ์ดํธํ์ฌ ์ฌ์ฉ์ ์ฒด๊ฐ ์๋๋ฅผ ๋์์ต๋๋ค.
Copyright ยฉ 2026 Team PINT. All rights reserved.