๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒผ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„_ํ”„๋กœ๋•ํŠธ ๋””์ž์ด๋„ˆ

[01/08 ๋ถ€ํŠธ์บ ํ”„] ๊ฐ•์˜: ๋ฆฌ์•กํŠธ ์ž…๋ฌธ 2์ฃผ์ฐจ, โ‘ขUX์ง‘์ค‘๋ฐ˜: ์˜์นด ๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ œ

by geumsong 2025. 1. 8.
728x90

 

๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ D-54 (12์ฃผ์ฐจ)

 

๐Ÿ“ŒTo Do List

* ๊ฐ•์˜: ๋ฆฌ์•กํŠธ ์ž…๋ฌธ 2์ฃผ์ฐจ  โœ… ๋“œ๋ŽŒ ์™„๋ฃŒ!!!

* UX์ง‘์ค‘๋ฐ˜: โ‘ข๋ฌธ์ œํ•ด๊ฒฐ โœ…

 

 

 

01 ๊ฐ•์˜: ๋ฆฌ์•กํŠธ ์ž…๋ฌธ 2์ฃผ์ฐจ

โœ๏ธ์ปดํฌ๋„ŒํŠธ ๋ฐ ๋ Œ๋”๋ง

๏ผŠ์ปดํฌ๋„ŒํŠธ

- ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ

- UI์š”์†Œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„

- ํ™”๋ฉด์˜ ํŠน์ • ๋ถ€๋ถ„์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์ •ํ•˜๋Š” ์„ ์–ธ์ฒดโ˜…

 

์ „์—” ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ DOM์„ ์‚ฌ์šฉํ•ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์ผ์ผ์ด ์ž‘์„ฑํ•ด์„œ ์–ด๋ ค์› ๋‹ค๊ณ ํ•œ๋‹ค.

ํ˜„์žฌ๋Š” ๋ฆฌ์•กํŠธ(์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋ฅผ ์“ฐ๋ฉด ์–ด๋–ป๊ฒŒ ํ™”๋ฉด์— ๊ทธ๋ ค์•ผํ• ์ง€ ๋ฆฌ์•กํŠธ ๋‚ด๋ถ€์—์„œ ์ถ”์ƒํ™”๋ฅผ ํ•˜๋Š”๋ฐ,  ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๏ผŠ๋ Œ๋”๋ง

- ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜„์žฌ props์™€ state์ƒํƒœ์— ๊ธฐ์ดˆํ•ด ์–ด๋–ป๊ฒŒ UI๋ฅผ ๊ตฌ์„ฑํ• ์ง€ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ์ž‘์—….

์ด๋ ‡๊ฒŒ๋งŒ ๋ดค์„ ๋•Œ ๋ฌด์Šจ ๋œป์ธ์ง€ ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€์•Š์•˜๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ๋Š” ์ด๊ฒƒ์„ ํ•œ ๋ ˆ์Šคํ† ๋ž‘ ์ƒํ™ฉ์— ๋น—๋Œ€์–ด์„œ ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค.

 

UI : ์š”๋ฆฌ

์ปดํฌ๋„ŒํŠธ : ์ฃผ๋ฐฉ์žฅ

๋ฆฌ์•กํŠธ : ์›จ์ดํ„ฐ

 

์ด๋ ‡๊ฒŒ ๋ดค์„ ๋•Œ ๋ Œ๋”๋ง์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

<๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค>

โ‘  triggering: ๋ Œ๋”๋ง ์ผ์œผํ‚ด (UI์ฃผ๋ฌธํ•˜๊ณ  ์ฃผ๋ฐฉ์œผ๋กœ ๋ฆฌ์•กํŠธ๊ฐ€ ์ „๋‹ฌํ•œ๋‹ค)
โ‘ก rendering: ๋ Œ๋”๋ง ํ•จ (์ฃผ๋ฐฉ์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ UI๋ฅผ ๋งŒ๋“ ๋‹ค)
โ‘ข commit: ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ DOM์— ์ปค๋ฐ‹ (๋ฆฌ์•กํŠธ๊ฐ€ ์†๋‹˜ ํ…Œ์ด๋ธ”์— UI๋ฅผ ์˜ฌ๋ฆฐ๋‹ค)

 

trigger๋Š” ํ”ผ๊ทธ๋งˆ๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ๋„ ๋งŽ์ด ๋ฐฐ์›Œ์„œ ์ต์ˆ™ํ–ˆ๋Š”๋ฐ

๋ Œ๋”๋ง๊ณผ ์ปค๋ฐ‹์€ ๊ทธ๋ ‡์ง€ ์•Š์•˜๋‹ค. ๋ ˆ์Šคํ† ๋ž‘ ์ƒํ™ฉ์— ๋น—๋Œ€์–ด์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

๐Ÿค”๋ Œ๋”๋ง์€ ์–ด๋–ค ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ• ๊นŒ?

1) ์ฒ˜์Œ ๋ฆฌ์•กํŠธ ์‹คํ–‰

2) ๋ฆฌ์•กํŠธ ๋‚ด๋ถ€์— ์–ด๋–ค ์ƒํƒœ(state)๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ

- state ๋ณ€๊ฒฝ, ์ƒˆ๋กœ์šด props ๋“ค์–ด์˜ฌ ๋•Œ → ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด์™€ ๊ฐ™์€ ์ด์œ ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ (์ž์‹ ์ปดํฌ๋„ŒํŠธ๋„ ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋ฆฌ๋ Œ๋”๋ง ๋จ)

 

<๋ฆฌ๋ Œ๋”๋ง>

- ์žฌ์ฃผ๋ฌธํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒˆ๋กœ์šด UI(์š”๋ฆฌ)๋ฅผ ๋งŒ๋“ค๊ณ  ๋‹ค์‹œ ์†๋‹˜ํ…Œ์ด๋ธ”์— ๊ฐ€๋Š” ๊ฒƒ

์ƒˆ๋กœ๊ณ ์นจ์˜ ๊ฐœ๋…์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ ๋ Œ๋”๋ง๊ณผ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™ํ•˜๋ฉด์•ˆ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

<๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค> = ํŽ˜์ธํŒ…์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ํ•จ.

๋ Œ๋”๋ง → ๋ฆฌ์•กํŠธ๊ฐ€ DOM์—…๋ฐ์ดํŠธ → ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™”๋ฉด ๋ณด์—ฌ์คŒ.

 

 

โœ๏ธDOM

๏ผŠDOM (Document Object Model): ๋ฌธ์„œ๊ฐ์ฒด๋ชจ๋ธ

- ๋ฌธ์„œ(document): ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ ์›นํŽ˜์ด์ง€

- ์—˜๋ฆฌ๋จผํŠธ(element): ํŽ˜์ด์ง€ ์ด๋ฃจ๋Š” ์ปดํฌ๋„ŒํŠธ

- ๋…ธ๋“œ(node): ํŠธ๋ฆฌ์˜ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜. ๊ฐ ๋…ธ๋“œ๋Š” ๋…ธ๋“œ์— ์ ‘๊ทผ/์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” API์ œ๊ณต

- API(Application Programming Interface): html ์š”์†Œ์— ์ ‘๊ทผํ•ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜.

: ํด๋ผ์ด์–ธํŠธ(์š”์ฒญ(๋‚˜)) - ์„œ๋ฒ„(๋ณธ์‚ฌ์—์„œ ์‘๋‹ตํ•˜๋Š” ์ปดํ“จํ„ฐ)๋กœ ๊ตฌ์„ฑ

http://sahilsk.github.io/articles/so-youre-writing-api-client/

ํ•˜๋‚˜ํ•˜๋‚˜ ๋ชจ๋“  ์š”์ฒญ์— ๋‹ค ์‘๋‹ตํ•  ์ˆ˜ ์—†์–ด์„œ ๊ทธ ์‚ฌ์ด์— API๊ฐ€ ์žˆ๋Š” ๊ฒƒ.

์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ•ด์•ผํ•˜๋Š”์ง€, ๊ทธ๋Ÿฐ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์–ด๋–ค ํ˜•์‹/๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•œ ๊ทœ๊ฒฉ/์•ฝ์†!

์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›๋Š” ์ฒด๊ณ„! 

์ฆ‰! ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ๋งค๊ฐœ์ฒด.

https://developers.kakao.com/docs/latest/ko/kakaologin/common)

์ด๋Ÿฐ ๋””์Šคํฌ๋ฆฝ์…˜ ์ž์ฒด๊ฐ€ API ๊ทœ๊ฒฉ์ด๋ผ๊ณ  ๋ณด๋ฉด๋œ๋‹ค. ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ์ธํ•ด์„œ ์—ฐ๊ฒฐํ–ˆ์„ ๋•Œ, ๊ฐ€์ž…ํ–ˆ์„ ๋•Œ, ๋กœ๊ทธ์•„์›ƒ ํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์ ˆ์ž๊ฐ€ ์ง„ํ–‰๋˜๋Š”์ง€ ๊ด€๋ จ๋œ ๊ฒƒ์„ API๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ฆ‰. API๋Š” ์›จ์ดํ„ฐ๊ฐ™์€ ๋Š๋‚Œ! 

 

API๋Š” ์†๋‹˜(ํ”„๋กœ๊ทธ๋žจ)์ด ์ฃผ๋ฌธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ”๋‰ด(๋ช…๋ น ๋ชฉ๋ก)๋ฅผ ์ •๋ฆฌํ•˜๊ณ , ์ฃผ๋ฌธ(๋ช…๋ น)์„ ๋ฐ›์œผ๋ฉด ์š”๋ฆฌ์‚ฌ(์‘์šฉํ”„๋กœ๊ทธ๋žจ)์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์š”์ฒญ๋œ ๋ฉ”๋‰ด(๋ช…๋ น์— ๋Œ€ํ•œ ๊ฐ’)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋”์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ๊ณผ ๋น„์Šทํ•˜๊ตฌ๋‚˜..

 

๋‹ค๋ฅธ ํšŒ์‚ฌ์˜ API๋ฅผ ์šฐ๋ฆฌ ํšŒ์‚ฌ์— ๊ฐ€์ ธ์™€์„œ ๊ตฌํ˜„์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๋‹ค๋ฅธ ํšŒ์‚ฌ ๊ฐœ๋ฐœ์ž๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  API → Open API

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ 1: https://yozm.wishket.com/magazine/detail/53/

์ฐธ๊ณ  ์‚ฌ์ดํŠธ 2: https://enjoyinjoanne.tistory.com/56

 

 

 

ํšŒ์‚ฌ์—์„œ APIํ˜ธ์ถœ.. API๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผํ•œ๋‹ค๋Š” ๋ง์„ ๋งŽ์ด ๋“ฃ๊ฒŒ๋๋Š”๋ฐ

์ด๊ฒŒ ๋ฌด์Šจ ๋œป์ธ์ง€ ์•Œ์•„๋ณผ ์ƒ๊ฐ์„ ํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹คใ…‹ใ…‹ใ…‹ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด์ธ๋งŒํผ ์•Œ์•„์•ผํ–ˆ์—ˆ๋Š”๋ฐ..

 

๐Ÿค”API๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ฒ ์–ด. ๊ทธ๋ ‡๋‹ค๋ฉด "API ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค"๋Š” ๋œป์€ ๋ฌด์Šจ ๋œป์ผ๊นŒ?

๊ด€๋ จ๋œ ๋ธŒ๋Ÿฐ์น˜ ํฌ์ŠคํŒ…์ด ์žˆ์–ด ์ฐธ๊ณ ํ–ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌ์ดํŠธ 1: ๊ธฐํš์ž์ธ ๋‚ด๊ฐ€ ์•„์ง๊นŒ์ง€ API๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ์ด์œ  - ์ด๋ก 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ 2: ๊ธฐํš์ž์ธ ๋‚ด๊ฐ€ ์•„์ง๊นŒ์ง€ API๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ์ด์œ  - ์‹ค์ „

 

์šฐ๋ฆฌ๋Š” API๋ฅผ ์‚ฌ์šฉ ํ•˜๊ธฐ ์ „ ๊ผญ ์ง€์ผœ์•ผํ•  ์กฐ๊ฑด/์•ฝ์†์ด ์žˆ๋‹ค.

1) API URL

- ๋ˆ„๊ตฌ์—๊ฒŒ, ์–ด๋–ค ์š”์ฒญ์„ ํ•  ๊ฒƒ์ธ์ง€ ๋ช…์‹œ (์„œ๋ฒ„ ์ฃผ์†Œ/ ๊ธฐ๋Šฅ ์ด๋ฆ„)


2) ๋ฉ”์„œ๋“œ: ์š”์ฒญ์˜ ์ข…๋ฅ˜ (4๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ CRUD๋ผ๊ณ  ๋ถˆ๋ฆผ)

      โ‘  create(=POST): ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•˜๋Š” ์š”์ฒญ

         - ํด๋ผ์ด์–ธํŠธ A ์ •๋ณด → ์„œ๋ฒ„ B ์—…๋กœ๋“œ ๊ฐ€๋Šฅ

       โ‘ก read(=GET): ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์š”์ฒญ

         - create์™€ ๋ฐ˜๋Œ€. ์„œ๋ฒ„ B ์ •๋ณด  → ํด๋ผ์ด์–ธํŠธ A๋กœ ๊ฐ€์ ธ์˜ด.
       โ‘ข update(PUT/PATCH): ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๋Š” ์š”์ฒญ

         - ์„œ๋ฒ„ B์˜ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ A๊ฐ€ ๋‹ค๋ฅธ ์ •๋ณด๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.
       โ‘ฃ delete: ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์š”์ฒญ

         - ์„œ๋ฒ„ B ๋ฐ์ดํ„ฐ ์‚ญ์ œ ๊ฐ€๋Šฅ

๐Ÿ’ก์‘์šฉํ•˜๊ธฐ

๐Ÿ‘จ‍๐Ÿ’ป์ด API ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ญ์ฃ ?
๐Ÿ˜‰create ์ž…๋‹ˆ๋‹ค!

 


3) ํ—ค๋”,๋ฐ”๋””,ํŒŒ๋ผ๋ฏธํ„ฐ(๋งค๊ฐœ๋ณ€์ˆ˜)

์šฐ๋ฆฌ๊ฐ€ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ผ๋•Œ " ์ €๋Š” ์–ด๋Š์–ด๋Š ํšŒ์‚ฌ์˜ ๋ˆ„๊ตฌ๋ˆ„๊ตฌ์ž…๋‹ˆ๋‹ค~ ์ด๊ฑธ ์š”์ฒญํ•˜๊ณ ์‹ถ์€๋ฐ์š”~" ์ด๋Ÿฐ์‹์œผ๋กœ ๋ณด๋‚ด๋Š”๋ฐ

API์š”์ฒญํ•  ๋•Œ๋„ ๋˜‘๊ฐ™๋‹ค๊ณ  ํ•œ๋‹ค.

      โ‘  Header(ํ—ค๋”) ๋‚ด๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€?

      โ‘ก Body(๋ฐ”๋””) ์–ด๋–ค ๊ฑธ ์š”์ฒญํ•  ๊ฒƒ์ธ์ง€?

์ด๋ ‡๊ฒŒ ์ ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐœ๋…์€ parameter, value.

 

๏ผŠparameter(ํŒŒ๋ผ๋ฏธํ„ฐ): ๋น„๋ฐ€๋ฒˆํ˜ธ์ฒ˜๋Ÿผ ์š”์ฒญํ• ๋•Œ๋งˆ๋‹ค ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ํ•ญ๋ชฉ.

ex. ๋น„๋ฐ€๋ฒˆํ˜ธ = ํŒŒ๋ผ๋ฏธํ„ฐ / ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ’ = value

 

4) ์‘๋‹ต์˜ ๋ช…์‹œํ™”

API๋Š” ์ฒด๊ณ„๋ฅผ ์ •ํ•ด๋†“์€ ๊ฑฐ๋ผ ์‘๋‹ต์—๋„ ์ •ํ•ด์ง„ ๋ฐฉ์‹์ด ์žˆ๋‹ค๊ณ ํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •์˜ํ•ด์„œ ๋‹ค ๋‹ค๋ฅด์ง€๋งŒ

API์š”์ฒญ ์‹œ ์„ฑ๊ณต ์‘๋‹ต/ ์‹คํŒจ ์‘๋‹ต์œผ๋กœ ๋‚˜๋‰œ๋‹ค๋Š” ๊ฒƒ์€ ์ •ํ•ด์ ธ์žˆ๋Š” ๊ฑฐ๋‹ˆ๊นŒ ์•Œ๊ณ ๊ฐ€๊ธฐ!

 

 

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š”์ง€ ์ฝ์–ด๋ดค๋‹ค.

APIํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋“ฑ๋กํ•ด์•ผํ•˜๊ณ 

https://brunch.co.kr/@b30afb04c9f54dc/5

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  URL์„ ์ž…๋ ฅํ•˜๋Š” ๊ฐ€์ด๋“œ๊ฐ€ ์•ˆ๋‚ด๋˜๊ณ ์žˆ๋‹ค.

 

์ด๋Ÿฐ์‹์œผ๋กœ API ํ˜ธ์ถœ์ด ์ด๋ฃจ์–ด์ง€๋Š”๊ตฌ๋‚˜. API๊ด€๋ จํ•ด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฐ ๋ง์„ ํ•˜๋ฉด ์–ด๋Š ์ •๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์˜ˆ์ƒํ•ด๋ณธ๋‹ค.

 

 

- DOM์ด๋ž€? ์—˜๋ฆฌ๋จผํŠธ๋ฅผ tree ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ.

๋‹ค๋ฅธ ์„ค๋ช…์—์„œ ๋ณด๋ฉด DOM์€ html๋ฌธ์„œ๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

์ถœ์ฒ˜: TCP school.com

์ถ”๊ฐ€์ ์œผ๋กœ DOM์„ค๋ช… ํฌ์ŠคํŒ…๋„ ์ฐธ๊ณ ํ•ด์„œ ์ฝ์—ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ์„ค๋ช…์„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ฝ์–ด์„œ ๊ทธ๋Ÿฐ์ง€ DOM์˜ ๊ตฌ์กฐ ๊ฐ™์€ ๊ฑธ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ก ์œผ๋กœ๋งŒ ๋“ค์–ด์„œ๊ทธ๋Ÿฐ์ง€ ์™„์ „ํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง„ ๋ชปํ–ˆ๋‹ค.

๊ทธ๋ƒฅ ์š”์ •๋„๋กœ๋งŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€์•ผ๊ฒ ๋‹ค.

์ฐธ๊ณ  ์‚ฌ์ดํŠธ: DOM์€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ผ๊นŒ? 

 

 

โœ๏ธ๊ฐ€์ƒDOM(Virtual DOM)

- ๋ฆฌ์•กํŠธ๋Š” ๊ฐ€์ƒ๋”์ด๋‹ค. ์‹ค์ œ๋”๊ณผ ๊ฐ€์ƒ๋” ํ˜•ํƒœ๋Š” ๋˜‘๊ฐ™๋‹ค.

์‹ค์ œ ๋”์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐ์ฒดํ˜•ํƒœ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด ๋” ๋น ๋ฅด๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ ํ•œ๋‹ค.

 

๐Ÿค”์‹ค์ œ ๋”์ด ์•„๋‹Œ๋ฐ ๊ฐ€์ƒ๋”์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ™”๋ฉด์ด ๋ฐ”๋€Œ๋Š” ๊ฑด๊ฐ€์š”?

โ‘  ๋ฆฌ์•กํŠธ๋Š” 2๊ฐ€์ง€ ๋ฒ„์ „์˜ ๊ฐ€์ƒDOM ๊ฐ€์ง.

- ํ™”๋ฉด ๊ฐฑ์‹  ์ „/ํ›„์˜ ๊ฐ€์ƒ DOM(๊ฐฑ์‹  ํ›„ ๊ณผ์ •์ด ๋ฆฌ๋ Œ๋”๋ง์ƒํƒœ์ด๋ฉฐ ์ด๋•Œ ๊ฐ€์ƒDOM๋งŒ๋“ค๊ฒŒ๋จ)
โ‘ก diffing: ๊ฐฑ์‹  ์ „,ํ›„ ๊ฐ€์ƒ๋” ๋น„๊ตํ•ด์„œ ์–ด๋Š ์—˜๋ฆฌ๋จผํŠธ์—์„œ ๋ณ€ํ™”๊ฐ€์ƒ๊ฒผ๋Š”์ง€ ๋นจ๋ฆฌ ํŒŒ์•….
โ‘ข ์žฌ์กฐ์ •(reconciliation): ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉ์‹œํ‚ด.

- 5๊ฐœ๊ฐ€ ๋ณ€๊ฒฝ๋๋‹ค๋ฉด? ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณ€๊ฒฝX → ๋ชจ์•„์„œ ํ•œ ๋ฒˆ์— ๋ณ€๊ฒฝ!!! ์ด๊ฑธ Batch Update๋ผ๊ณ ํ•จ.

 

 

โœ๏ธ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง(=ํŽ˜์ธํŒ…)

- ๋ฆฌ์•กํŠธ๊ฐ€ ์œ„์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ Œ๋”๋ง์„ ํ•˜๋ฉด ๊ทธ ๋‹ค์Œ์€ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์œผ๋กœ ์ด์–ด์ง„๋‹ค.

(๋ฆฌ์•กํŠธ)์‹ค์ œ ๋” ์—…๋ฐ์ดํŠธ → ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์—”์ง„ → ํ™”๋ฉด ๋ฐ˜์˜

<๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •>

โ‘  ์Šคํƒ€์ผ ๊ณ„์‚ฐ: html, css๋ถ„์„ํ•ด์„œ ์Šคํƒ€์ผ ๊ณ„์‚ฐ.
โ‘ก ๋ ˆ์ด์•„์›ƒ: ์œ„์น˜, ํฌ๊ธฐ ๊ณ„์‚ฐ
โ‘ข ํŽ˜์ธํŒ…: 2๋ฒˆ๋‹จ๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ™”๋ฉด์— ๋‚˜ํƒ€๋ƒ„.

 

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง๊ณผ ๋ฆฌ์•กํŠธ ๋ Œ๋”๋ง์€ ๋‹ค๋ฅด๋‹ค!!!

 

 

 

๐Ÿฌ์‹ค์Šต: ์นด์šดํ„ฐ ์•ฑ ๋งŒ๋“ค๊ธฐ

๊ฐ‘์ž๊ธฐ ๋งŒ๋“ค๋ผ๋‹ˆ๊นŒ ๋ชปํ•˜๊ฒ ๋‹ค.. ์ด๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ......?ใ… ใ… ใ… 

๊ฐ•์‚ฌ๋‹˜์˜ ๋ฌธ์ œํ’€์ด ์˜์ƒ์„ ๋จผ์ € ๋ณด๊ณ  ๋”ฐ๋ผํ•œ ํ›„ ๋‹ค์‹œ ํ˜ผ์ž ์‹ค์Šตํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

 

import React, { useState } from "react";

const App = () => {
  const [number, setNumber] = useState(0);
  const onMinusButtonClick = () => {
    setNumber(number-1);
  }
  const onPlusButtonClick = () => {
    setNumber(number+1);
  }
  return (
    <div
      style={{
        display: "flex",
        flexDirection: "column",
        alignItems: "center",
      }}
    >
      <div>{number}</div>
      <div>
        <button onClick={onMinusButtonClick}>-1</button>
        <button onClick={onPlusButtonClick}>+1</button>
      </div>
    </div>
  );
};

export default App;

 

+๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ˆซ์ž๊ฐ€ 1์”ฉ ์ถ”๊ฐ€๋˜๊ณ 

-๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ˆซ์ž๊ฐ€ 1์”ฉ ์ค„์–ด๋“ค๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

โœ๏ธ๋ฆฌํŒฉํ† ๋ง

- ๋ฐ˜๋ณต๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ฒ˜๋ฆฌ

- ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ

 

์ด๋ฆ„.map() ์•ˆ์—๋Š”

์ด๋ฆ„.map(function () {}) ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  function๋‹ค์Œ ๊ด„ํ˜ธ์— ์žˆ๋Š”๊ณณ์—” ๋ฐ˜๋ณต๋˜๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ํ• ๋‹น์ด ์ผ์–ด๋‚จ. 

import { useState } from "react";

const App = () => {
  const vegetables = [`๊ฐ์ž`, `๊ณ ๊ตฌ๋งˆ`, `์˜ค์ด`, `๊ฐ€์ง€`, `์˜ฅ์ˆ˜์ˆ˜`];


  return (
    <div style={{ padding: "20px", display: "flex", gap: "20px" }}>
      {vegetables.map((vegetableName) => {
        return (
          <div className="square-style" key={vegetableName}>
            {vegetableName}
          </div>
        );
      })}
    </div>
  );
};

export default App;

 

()map์„ ์ด์šฉํ•ด์„œ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ๋๋‹ค.

css ์Šคํƒ€์ผ์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•ด ์ข€ ๋” ๋’ค์— ์žˆ๋Š” ๊ฐ•์˜๋ฅผ ๋ณด๋ฉฐ ๋”ฐ๋ผํ•ด์•ผ๊ฒ ๋‹ค.

 

 

<๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด map์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ>

import React from 'react';
import './App.css'; // ๐Ÿ”ฅ ๋ฐ˜๋“œ์‹œ App.css ํŒŒ์ผ์„ import ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

//  User ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌํ˜„
function User(props) {
  return (
    <div>{props.user.age}์‚ด - {props.user.name}</div>
  );
}

const App = () => {
  const users = [
    { id: 1, age: 30, name: '์†ก์ค‘๊ธฐ' },
    { id: 2, age: 24, name: '์†ก๊ฐ•' },
    { id: 3, age: 21, name: '๊น€์œ ์ •' },
    { id: 4, age: 29, name: '๊ตฌ๊ตํ™˜' },
  ];
  return (
    <div className="app-container">
      {users.map((user) => {
        return <User user={user} key={user.id} />;
      })}
    </div>
  );
};

export default App;

key: ์—˜๋ฆฌ๋จผํŠธ ๊ณ ์œ  ์‹๋ณ„์ž

- ๋™์ ์ธ ๋ฆฌ์ŠคํŠธ์—์„œ ์—˜๋ฆฌ๋จผํŠธ ๊ณ ์œ ํ•œ ํ‚ค๊ฐ’์„ ๊ฐ€์ ธ๊ฐ€์•ผํ•œ๋‹ค. (์ค‘๋ณตX)

- ์ผ๋ฐ˜์ ์œผ๋กœ map() ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

 

App์—์„œ ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š” ๋ชจ๋“ ๊ฑธ ์ ์œผ๋ ค ํ•˜์ง€ ๋ง๊ณ 

User์ปดํฌ๋„ŒํŠธ์—์„œ propsํ•ด์„œ ์ค‘๊ด„ํ˜ธ ์ด์šฉํ•ด์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ ,

๋งŒ๋“ค์–ด์ง„ User์ปดํฌ๋„ŒํŠธ๋ฅผ App return๊ฐ’์˜ ํƒœ๊ทธํ˜•์‹์œผ๋กœ ๋„ฃ์–ด์„œ ๊ทธ ์†์„ฑ๋งŒ ์กฐ์ ˆํ•˜๋Š” ๋Š๋‚Œ!

์ด๋Ÿฐ์‹์œผ๋กœ๋ผ๋„ ์™ธ์›Œ์•ผ๊ฒ ๋‹ค..ใ…‹ใ…‹ ใ… ใ… 

 

 

์—ฌ๊ธฐ์„œ! ์šฐ๋ฆฌ๋Š” const users๋ฅผ stateํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์„œ

๋ Œ๋”๋ง๋  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค˜์•ผํ•จ.

๊ทธ๋Ÿด๋• ํ•„์š”ํ•œ ๊ฑด ๋ญ๋‹ค? useState๋ฅผ ์จ์ค˜์•ผํ•œ๋‹ค.

 

[value, setValue] = useState(); ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž.

 

import { useState } from "react";

const [users, setUsers] = useState([
    {
      id: 1,
      age: 30,
      name: `์†ก์ค‘๊ธฐ`,
    },
    {
      id: 2,
      age: 23,
      name: `ํ•œํ˜œ์ง„`,
    },
    {
      id: 3,
      age: 35,
      name: "์‚ฐ๋‹ค๋ผ๋ฐ•",
    },
    {
      id: 4,
      age: 36,
      name: `๊น€์šฐ๋นˆ`,
    },
  ]);

  return (
    <div style={{ padding: "20px", display: "flex", gap: "20px" }}>
      {users.map((user) => {
        return <User key={user.id} user={user} />;
      })}
    </div>
  );


export default App;

const User = (props) => {
  return (
    <div>
      {props.user.age}์‚ด - {props.user.name}
    </div>
  );
};

์ด๋ ‡๊ฒŒํ–ˆ๋”๋‹ˆ ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค. ใ… ใ…  

๋‹ค์‹œ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ๋”ฐ๋ผํ•ด๋„ ๊ฐ•์‚ฌ๋‹˜์€ ๋˜๋Š”๋ฐ ๋‚˜๋Š” ์•ˆ๋จ... ์ผ๋‹จ ์ฝ”๋“œ๋ฅผ ์ฒจ๋ถ€ํ–ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์—˜๋ฆฌ๋จผํŠธ์— ๊ณ ์œ  ์‹๋ณ„ id/key๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•˜๋Š” ์ด์œ !

1,2,3,4๋ผ๋Š” ๊ฐ’์ด ์žˆ๋‹ค๊ณ  ์น˜์ž. ์ด ๋ฐฐ์—ด์˜ length๋Š” 4์ด๋ฏ€๋กœ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด 4์—์„œ +1์ด๋‹ˆ๊นŒ 5.

1,2,3,4,5์—์„œ ์ค‘๊ฐ„์— ์žˆ๋Š” ๊ฐ’์ธ 2๋ฅผ ์‚ญ์ œํ–ˆ๋‹ค๊ณ  ์ณ๋ณด์ž.

๊ทธ๋Ÿฌ๋ฉด 1,3,4,5. ์ด๊ฒƒ์˜ length์—ญ์‹œ 4์ธ๋ฐ ์—ฌ๊ธฐ์„œ ํ•˜๋‚˜๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด

1,3,4,5,5 ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์— ๊ณ ์œ  id๋ฅผ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.

 

๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ๋Š” ๋‚ ์งœ, ์‹œ๊ฐ„์œผ๋กœ ๋ถ„๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ๊ณ  ํ˜น์‹œ๋ผ๋„ ๊ฐ™์€ ๋‚ ์งœ, ๊ฐ™์€ ์‹œ๊ฐ„์— ์—ฌ๋Ÿฌ๋ฒˆ ๋ˆ„๋ฅผ ๊ฒƒ์— ๋Œ€๋น„ํ•˜์—ฌ +1์ฒ˜๋ฆฌ๋ฅผ ํ•ด์คฌ๋‹ค.

 ์ด๋Ÿฐ์‹์œผ๋กœ. 

 

 

๋งˆ์ง€๋ง‰ ๊ฐ•์˜๊นŒ์ง€ ๋ชจ๋‘ ๋ดค์ง€๋งŒ

์ง„๋„๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ผ์š”....

๋‚˜๋จธ์ง€๋Š” ๋‚ด์ผ ํ•  ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

 

 

02 UX์ง‘์ค‘๋ฐ˜: ์˜์นด ๋ฌธ์ œํ•ด๊ฒฐ

ํŒ€ ์ง„ํ–‰์ƒํ™ฉ ๋ณด๊ณ  ๋“œ๋ฆฝ๋‹ˆ๋‹น 
ํฐ ๋ฐฉํ–ฅ์„ฑ์˜ ์†”๋ฃจ์…˜ ์ •๋ฆฌ (์™„๋ฃŒ)
๊ฐ€์„ค ์„ค์ • (์™„๋ฃŒ)
๊ฐ€์„ค ๊ทผ๊ฑฐ ์„œ์น˜ (์ง„ํ–‰์ค‘)
<๊ณต์ง€>
01/08 ๋ชฉ์š”์ผ ์˜คํ›„ 4์‹œ์— ํ”ผ๊ทธ๋งˆ์— ๋ชจ์—ฌ ๋ชป ํ•œ ๋ถ€๋ถ„ ์ถ”๊ฐ€๋กœ ๋” ์ž‘์—…ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค!

 

<ํ•  ์ผ ๋ชฉ๋ก>
1. ๊ฐ€์„ค 1๋ฒˆ์— ๋Œ€ํ•œ ๊ทผ๊ฑฐ ์ž๋ฃŒ ์ˆ˜์ง‘
- ๊ฐ€์„ค 1๋ฒˆ ๊ทผ๊ฑฐ๋งŒ ์ฐพ๋Š” ์ด์œ ๋Š” ์šฐ์„ ์ˆœ์œ„ 1๋ฒˆ์งธ์ธ ์ , ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„์ƒ์˜ ๋ฌธ์ œ๋กœ ํ•ด๋‹น ๊ทผ๊ฑฐ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ฐพ์•„๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค!
- ํ•  ์ผ: ์‚ฌ์šฉ์ž ํ•ต์‹ฌ ํ–‰๋™, ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ, ํŠนํžˆ ใ…ˆใ…Ž๋‹˜๊ป˜์„œ ์ฐพ์•„์ฃผ์‹  ๊ฒฝ์Ÿ์‚ฌ ์‚ฌ๋ก€ ๋ฐ์ดํ„ฐ ์„œ์น˜


2. ์žฅํ‘œ ์ œ์ž‘
- ๋””์ž์ธ์— ๊ตฌ์•  ๋ฐ›์ง€ ๋ง๊ณ  ํ•ฉ์‹œ๋‹น~!
- ํ•  ์ผ: ํฐ ๋ฐฉํ–ฅ์˜ ์†”๋ฃจ์…˜, ๊ฐ€์„ค ์„ค์ •, ๊ฐ€์„ค ๊ทผ๊ฑฐ, ๊ตฌ์ฒด์ ์ธ ์†”๋ฃจ์…˜, ์™€์ด์–ดํ”„๋ ˆ์ž„ (์ˆœ์„œ ๋…ผ์˜ ํ•„์š”)


<์ž‘์€ ์ด์Šˆ>
์–ด์ œ ํ”ผ๋“œ๋ฐฑ ๋ฐ›์€ ๋Œ€๋กœ ํฐ ๋ฐฉํ–ฅ์„ฑ์˜ ์†”๋ฃจ์…˜,  ๊ฐ€์„ค ์„ค์ • ๋…ผ์˜ ์ค‘,
๊ฐ€์„ค์˜ ๊ธฐ์ค€์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด๊ฒฐ์ด ๋˜์ง€ ์•Š์•„์„œ ๊ฐ€์„ค ๊ด€๋ จ ์งˆ๋ฌธ์„ ์œ„ํ•ด ํŠœํ„ฐ๋‹˜๊ป˜ ๋ฐฉ๋ฌธ.
ํ”ผ๋“œ๋ฐฑ1 : ๊ฐ€์„ค์€ ์ตœ๋Œ€ํ•œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ๊ทธ๋ž˜์•ผ ๋ช…ํ™•ํ•œ ๊ฐ€์„ค์ด ๋‚˜์˜ฌ ๊ฒƒ.
ํ”ผ๋“œ๋ฐฑ2 : ๊ทœ๋ฒ”ํ™” ๋œ ํ”„๋กœ์„ธ์Šค(์ˆœ์„œ)์— ์–ฝ๋งค์ด์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์ž.
ex) ๊ผญ ๊ฐ€์„ค์„ '๋จผ์ €' ์„ค์ •ํ•˜๊ณ  '์†”๋ฃจ์…˜'์„ ๋‚ด์•ผํ•ด. โŒ
์†”๋ฃจ์…˜์„ ๋จผ์ € ๋„์ถœํ–ˆ๋„ค? ๋‹ค์Œ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ๊นŒ? ๊ฐ€์„ค์„ ์„ค์ •ํ•ด๋ณด์ž! โญ•

 

 

์˜ค๋Š˜ UX์ง‘์ค‘๋ฐ˜์— ์ฐธ์—ฌํ•˜์ง€ ๋ชปํ•œ ์ธ์›์„ ์œ„ํ•ด ์ •๋ฆฌํ•œ dm์ธ๋ฐ

์˜ค๋Š˜์€ ์ฒด๋ ฅ์ด ์—†์–ด์„œ ์ด ์ •๋„๋กœ๋งŒ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค.

 

 

 

 

 

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ...

ํ•  ์ผ์ด ์™œ ์ด๋ ‡๊ฒŒ ๋งŽ์„๊นŒ!

  • ๋ฆฌ์•กํŠธ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ
  • UX์ง‘์ค‘๋ฐ˜
  • ์ตœ์ข… ํ”„๋กœ์ ํŠธ ๊ณ„ํš

 

๊ฐœ์ธ ๋…ธ์…˜๋„ ์ •๋ฆฌํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž

+ ์‹œ๊ฐ„์„ ์ž˜ ํ™œ์šฉํ•˜์ž.. ์š”์ƒˆ ๋„ˆ๋ฌด ํ’€์–ด์ง

728x90

์ตœ๊ทผ๋Œ“๊ธ€

์ตœ๊ทผ๊ธ€

skin by ยฉ 2024 ttutta