WEB URL: ν€μ¦μΈμ»΄νΌλ μ¬μ΄νΈ
μμ±μ: κΉνκ²Έ
FE & BE λ‘컬νκ²½ μ€ν λ°©λ²
- νλ‘μ νΈ μκ°
- ν΅μ¬ κΈ°λ₯
- μ€ν λ°©λ²
- ERD
- μμ€ν μν€ν μ²
- μ΅μ νν μ¬ν
- νλ©΄ ꡬμ±
- κ°λ° κΈ°κ°
- ν & μλΉμ€ μκ°
- νμ μκ°
- κΈ°μ μ€ν
μ¬λ΄ μ΄λ¦°μ΄μ§μ μ§μλ€μκ² μ€μν λ³΅μ§ μμ€μ λλ€. νμ§λ§ μμκ° λ§μ λͺ¨λ μ§μμ μλ κ° μ΄λ¦°μ΄μ§μ μ΄μ©ν μ μλ κ²½μ°κ° λ°μν©λλ€.
μ΄λ μ§μλ€ μ¬μ΄μμ λΆλ§μ μΌμΌν€κ³ , 곡μ μ±κ³Ό ν¬λͺ μ±μ λν λ¬Έμ λ₯Ό μ κΈ°νκ² λ§λλλ€.
β κ·Έλμ μ ν¬ Cloviderνμ 곡μ ν κ°μ€μΉ μ μ©νκ³ μ΄λ₯Ό λ°νμΌλ‘ λΉμ²¨ νλ₯ μ 곡νμ¬ κ³΅μ νκ³ ν¬λͺ ν μλΉμ€λ₯Ό λ§λ€κ³ μ ν©λλ€.
곡μ μ± ν보: κ·Όμλ μ, μ¬λ΄ λΆλΆ, λ€μλ κ°μ λ± μ¬λ¬ νλΉν κ°μ€μΉλ₯Ό ν΅ν΄ μΆμ²¨μ μ§νν©λλ€.
ν¬λͺ μ± ν보: μ μ²ν μ΄λ¦°μ΄μ§ λͺ¨μ§μ λΉμ²¨ νλ₯ μ 곡κ°νμ¬ μΆμ²¨ κ³Όμ κ³Ό κ²°κ³Όλ₯Ό ν¬λͺ νκ² ν΄ μ λ’°μ±μ ν보ν©λλ€.
ν¨μ¨μ± ν₯μ: μμμ μΌλ‘ μ§νλλ μΆμ²¨ κ³Όμ μ μκ°μ΄ λ§μ΄ μμλκ³ μ€λ₯κ° λ°μν κ°λ₯μ±μ΄ λμ΅λλ€. μ΄λ₯Ό μλννμ¬ ν¨μ¨μ±μ λμ λλ€.
λμΌμ΄ν ν¬μΈ λ΄λΆμ 곡μ νκ³ ν¬λͺ ν μ¬λ΄ μ΄λ¦°μ΄μ§ μΈμ λ°°μ μ μν΄ μ΄λ¦°μ΄μ§ λͺ¨μ§κ³Ό μΆμ²¨μ μλνν μλΉμ€μ λλ€.
- 1κ°μ μ μ²μλ‘ μ¬λ¬ κ°μ μ¬λ΄ μ΄λ¦°μ΄μ§ μΆμ²¨ ν΅ν© μ μ²
- μ§μν μΆμ²¨ νμ€ν 리 μ‘°ν, λΉμ²¨ νλ₯ μ‘°ν
- 곡μ§μ¬ν μ‘°ν, μ§μμλ΅ μμ±
- μ¬λ΄ μ΄λ¦°μ΄μ§ μ 보 μ‘°ν
- κ΄λ¦¬μ λμ보λ μ‘°ν (μλΉμ€ ν΅κ³ μ 보)
- μ¬λ΄ μ΄λ¦°μ΄μ§ λͺ¨μ§ μμ± λ° μ μ²νν© κ΄λ¦¬
- μ¬λ΄ μ΄λ¦°μ΄μ§ μΆμ²¨ μ§ν & κ²°κ³Ό κ΄λ¦¬
- Google SMTPλ₯Ό ν΅ν μ¬μ©μ μΈμ¦ λ° μΆμ²¨ κ²°κ³Ό μ μ‘
- 곡μ§μ¬ν, μ§μμλ΅ κ΄λ¦¬
- μ¬λ΄ μ΄λ¦°μ΄μ§ μ 보 κ΄λ¦¬
- λ²λ€ μ¬μ΄μ¦κ° ν° Editorμ μ§μ°λ‘λ©μ μ μ©ν΄ λΈλΌμ°μ μ μ λ¬λλ JS ν¬κΈ°λ₯Ό μ΅μ ν νμ΅λλ€.
unpacked size3.5MB -> 0MBλ‘ κ°μν μ μμμ΅λλ€.
import dynamic from 'next/dynamic'
const BlockNoteEditor = dynamic(() => import('./BlockNoteEditor'), {
ssr: false,
loading: () => <LoadingSpinner />,
})useCallback,useMemoλ₯Ό μ κ·Ήμ μΌλ‘ νμ©νμ¬ λΆνμν 리λ λλ§μ λ°©μ§νμ΅λλ€.- μ±λ₯μ΄ μ’μ§ μμ λͺ¨λ°μΌ νκ²½μμλ μΎμ ν UXλ₯Ό μ 곡ν μ μλ νκ²½μ ꡬμΆνμ΅λλ€.
export default function useCreateQuery() {
const searchParams = useSearchParams()
const createQueryString = useCallback(
(name: string, value: string) => {
const params = new URLSearchParams(searchParams.toString())
params.set(name, value)
return params.toString()
},
[searchParams],
)
return createQueryString
}package.jsonμμ μλμ κ°μ΄ μ μ©νμ¬ νΈλ¦¬μ °μ΄νΉμ μ μ©νμ΅λλ€.- λΆνμνκ² λ€μ΄λ‘λλλ ν¨ν€μ§λ₯Ό μμ ν΄, λΈλΌμ°μ μ μ λ¬λλ λ²λ€ μ¬μ΄μ¦λ₯Ό 25% κ°μνμ΅λλ€.
"sideEffects": false- NextJsλ₯Ό νμ©ν μ΅μ νλ₯Ό μννμ¬, JS λ€μ΄λ‘λλ‘ μΈν UI blocking νμμ μ΅μννμ΅λλ€.
display: swapμ€μ μ ν΅ν΄ μ μ λ ν°νΈκ° λ€μ΄λ‘λλλ λμ λΉνλ©΄μ λ³΄κ³ μμ§ μμλ λ©λλ€.- μΉ μ±λ₯μ§ν μ€ FCP, TTIλ₯Ό κ°μ νμ΅λλ€.
const Pretendard = localFont({
src: './fonts/PretendardVariable.woff2',
display: 'swap',
weight: '45 920',
})framer-motionμtransformκΈ°λ°μ μ λλ©μ΄μ μΌλ‘ reflow, repaintλ₯Ό μ΅μνν©λλ€.- GPU κ°μμ μ¬μ©νλ―λ‘, μΉ μ±λ₯μ μ ν΄νμ§ μκ³ κ³ μ¬μμ μ λλ©μ΄μ μ μ¬μ©νμ΅λλ€.
<motion.div
initial={{ y: 0 }}
animate={{ y: [0, -20, 0] }}
transition={{
duration: 2,
ease: 'easeInOut',
repeat: Infinity,
repeatType: 'loop',
}}
>useDeferredValueλ₯Ό μ¬μ©ν΄ κ²μμ΄λ₯Ό μ λ ₯νλ κ²½μ°, UI λ λλ§λ³΄λ€ κ²μμ΄ μ λ ₯μ΄ μ°μ μ μΌλ‘ μ²λ¦¬λλλ‘ νμ΅λλ€.msλͺ μμ μΌλ‘ μ¬μ©νμ§ μλ λλ°μ΄μ€λ₯Ό μ¬μ©ν΄ λΆνμν 리λ λλ§μ μ΅μ ννμ΅λλ€.
const [searchInput, setSearchInput] = useState<string>('')
const deferredSearchInput = useDeferredValue(searchInput)3. Redis μΊμ±μ ν΅ν νμ¬ μ§ν μ€μΈ λͺ¨μ§ μ 보, μ¬μ©μ μ 보 μ‘°ν μλ κ°μ λ° μ΅μ ν
4. λΉλκΈ° ν΅μ μ νμ©ν κ΄λ¦¬μ λͺ¨μ§ κ²°κ³Ό μ΄λ©μΌ μ μ‘(SMTP) κΈ°λ₯ μ¬μ©μ κ²½ν κ°μ
6. Aws Lambdaλ₯Ό ν΅ν λ€μ μ¬μ©μμ κ°μ€μΉ κΈ°λ° λΉμ²¨ νλ₯ μκ³ λ¦¬μ¦ μ²λ¦¬ -> μλ κ°μ
2. Java μ ν리μΌμ΄μ
- JRE μ΄λ―Έμ§ λΉλλ₯Ό ν΅ν 보μμ± κ°ν λ° μ΄λ―Έμ§ 2.5λ°° κ²½λν
| μμ κΈ°κ° | νλ‘μΈμ€ λ¨κ³ | μμ λ΄μ | μ°μΆλ¬Ό |
|---|---|---|---|
| 24.07.01 ~ 07.14 | μλΉμ€ κΈ°ν | π μꡬμ¬ν λμΆ, μ μ, κ²ν π νλ‘μ νΈ λͺ©ν μ€μ , μλΉμ€ λλ©μΈ μ‘°μ¬ |
μꡬμ¬ν μ μμ, WBS, μ©μ΄ μ¬μ |
| 24.07.12 ~ 07.21 | μ€κ³ λ¨κ³ | π UI/UX μ€κ³, λ©λ΄ ꡬ쑰λ, μ
무 νλ¦λ π λ°μ΄ν°λ² μ΄μ€ μ€κ³, ν μ΄λΈ λͺ μΈμ π μΈν°νμ΄μ€ μ€κ³, μμ€ν μν€ν μ² μ€κ³ κΈ°μ μ€ν μ μ |
νλ©΄ μ€κ³μ, λ©λ΄ ꡬ쑰λ, μ
무 νλ¦λ ERD, ν μ΄λΈ λͺ μΈμ, μΈν°νμ΄μ€ μ€κ³μ μμ€ν μν€ν μ², μννΈμ¨μ΄ ꡬμ±λ |
| 24.07.22 ~ 08.16 | ꡬν λ¨κ³ | π κ³΅ν΅ μ»΄ν¬λνΈ μ€κ³ λ° μ½λ κ°λ°, UI μ€κ³ λ° κ°λ° π Request, Response DTO μ€κ³ λ° κ°λ° π Restful API κ°λ°, Infra κ΅¬μΆ |
νλ‘μ νΈ μ½λ, λ컀 μ΄λ―Έμ§, μΈνλΌ νκ²½ |
| 24.08.11 ~ 08.17 | ν μ€νΈ λ¨κ³ | π λ¨μ ν
μ€νΈ π λΈλΌμ°μ μλ ν μ€νΈ, Lighthouse λΆμ JMeter μ±λ₯ ν μ€νΈ |
ν΅ν© ν μ€νΈ λ³΄κ³ μ |
| 24.08.17 ~ 08.23 | μ’ λ£ | μ¬μ©μ λ° κ΄λ¦¬μ νλ©΄ λ°λͺ¨ μμ ν μ€νΈ μλλ¦¬μ€ μμ± π νλ‘μ νΈ νκ³ μ§ν π μ’ λ£ λ³΄κ³ μ μμ± λ° λ°ν μ€λΉ |
νκ³ λ‘, λ°λͺ¨μμ λ°νμλ£, μ’ λ£ λ³΄κ³ μ |
| Team: Clovider | Service: KIC |
|---|---|
![]() |
![]() |
| No.1 | No.2 | No.3 |
|---|---|---|
| κΉνκ²Έ | κΆλ―Όμ° | μ μ€ν¬ |
| PM, BE | PL, BE | BE |
| kylo-dev | MINUUUUUUUUUUUU | sungsil0624 |
| No.4 | No.5 | No.6 |
|---|---|---|
| μ ν¬μ°¬ | μ΄μ£Όμ | κΉκ΄μΌ |
| BE, Infra | BE, Infra | BE |
| anselmo228 | leejuae | KIM-KWAN-IL |
| No.1 | No.2 | No.3 |
|---|---|---|
| κΉμ±λ―Ό | 곡μμ | μμ©μ€ |
| PL, FE | FE | FE |
| Collection50 | yeyounging | mango0422 |














