JPA (Java Persistence API) JAVA์ง„์˜์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€, interface ๋ชจ์Œ Hibernate, EclipseLink, DataNucleus ๋“ฑ์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์กด์žฌ EntityManager Entity : RDB์˜ Table๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด EntityManagerFactory Entity๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” EntityManager๋ฅผ ์ƒ์‚ฐํ•˜๋Š” ๊ณต์žฅ Thread safe: O EntityManager Entity์˜ CRUD๋“ฑ ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌ Thread safe: X ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ Entity๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ EntityManager๋Š” Entity๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋ณด๊ด€ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” Entity๋Š” ์‹๋ณ„์ž๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค (ID) -> key-value๋กœ Entity๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ flush: ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋ณ€๊ฒฝ ๋‚ด์šฉ๋“ค์„ DB์— ๋™๊ธฐํ™”ํ•˜๋Š” ์ž‘์—… ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์  1์ฐจ ์บ์‹œ ๋™์ผ์„ฑ ๋ณด์žฅ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ ๋ณ€๊ฒฝ ๊ฐ์ง€ ์ง€์—ฐ ๋กœ๋”ฉ Entity์˜ Life cycle ๋น„์˜์† (New / Transient): ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ „ํ˜€ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ์ƒํƒœ ์˜์† (Managed): ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋œ ์ƒํƒœ ์ค€์˜์† (Detached): ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ ์‚ญ์ œ (Removed): ์‚ญ์ œ๋œ ์ƒํƒœ ์ €์žฅ 1EntityManager em = emf.
๐ŸŒ Javascript
๋ฐฐ๊ฒฝ ํ•™๋ถ€์—ฐ๊ตฌ์ƒ ์—…๋ฌด ์ค‘์—, dicomํŒŒ์ผ์„ ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋‹ค ๋ณด๋‚ด๋Š” ํ˜•์‹์€ 2๊ฐ€์ง€๋กœ ์ƒ๊ฐํ–ˆ๋‹ค dicomํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ multipart/form-data ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ• ์žฅ์  : ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ํšจ์œจ์ ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค ๋‹จ์  : ํŒŒ์ผ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๊ธฐ ์–ด๋ ต๋‹ค dicomํŒŒ์ผ์„ base64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ application/json ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ• ์žฅ์  : ํŒŒ์ผ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค ๋‹จ์  : ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ธํ•ด์„œ ์›๋ณธ ํŒŒ์ผ๋ณด๋‹ค ์šฉ๋Ÿ‰์ด ์ปค์ง„๋‹ค ํŒŒ์ผ์˜ ์ •๋ณด๋„ ํ•จ๊ป˜ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด jsonํ˜•ํƒœ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ํƒํ•˜์˜€๋‹ค ๊ตฌํ˜„ dicomํŒŒ์ผ -> base64 1// Encode a file to BASE64 2 const readFileAsync = (file) => { 3 return new Promise((resolve, reject) => { 4 // ๋น„๋™๊ธฐ์ ์œผ๋กœ ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด FileReader ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ 5 const reader = new FileReader(); 6 7 // ์ฝ๊ธฐ๊ฐ€ ๋๋‚˜๋ฉด ์ˆ˜ํ–‰ 8 reader.
๐Ÿซ ํ•™๊ณผ ๊ณต๋ถ€
๊ฐœ์š” ์ปดํ“จํ„ฐ์™€ ์ธ๊ฐ„์ด ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ• ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ๋ฒˆ์—ญ๊ธฐ๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ(Assembler)๋ผ๊ณ  ํ•œ๋‹ค cpu์นฉ์…‹์ด ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๊ฐ€ ๋ฐ”๋€๋‹ค ๊ณ ๊ธ‰์–ธ์–ด ๊ณ ๊ธ‰์–ธ์–ด์˜ ๋ฒˆ์—ญ๊ธฐ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)๋ผ๊ณ  ํ•œ๋‹ค ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ •ํ™•ํ•œ ์ •์˜ ์–ด๋–ค ์–ธ์–ด๋กœ ์“ฐ์—ฌ์ง„ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ™์€ ์—ญํ• ์˜ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ 1952๋…„ ๊ทธ๋ ˆ์ด์Šค ํ˜ธํผ(Grace Hopper)๊ฐ€ UNIVAC์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด A-0 ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ œ์ž‘ ์ปดํŒŒ์ผ๋Ÿฌ vs ์ธํ„ฐํ”„๋ฆฌํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์ฒ˜๋ฆฌ๊ณผ์ • ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ฒ˜๋ฆฌ ๊ณผ์ • Lexical analysis (์–ดํœ˜ ๋ถ„์„) token์„ ์ƒ์„ฑํ•˜๋Š”์ผ, token์€ ์–ดํœ˜์˜ ์ตœ์†Œ ๋‹จ์œ„ Syntax analysis (๊ตฌ๋ฌธ ๋ถ„์„) token์„ ์ฝ์–ด์„œ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ƒ‰, ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๋‹ค (์ฃผ๋กœ ํŠธ๋ฆฌํ˜•ํƒœ) Semantic analysis (์˜๋ฏธ ๋ถ„์„) type checking Intermediate code generation (์ค‘๊ฐ„ ์ฝ”๋“œ ์ƒ์„ฑ) ์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ Code optimization (์ฝ”๋“œ ์ตœ์ ํ™”) ์ค‘๊ฐ„ ์ฝ”๋“œ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ๋ณ€ํ™˜ Code generation (์ฝ”๋“œ ์ƒ์„ฑ) ๋ชฉ์  ์ฝ”๋“œ ์ƒ์„ฑ Lexical analysis (์–ดํœ˜ ๋ถ„์„) token : ๋ฌธ๋ฒ•์ ์œผ๋กœ ์˜๋ฏธ์žˆ๋Š” ์ตœ์†Œ ๋‹จ์œ„ FSA (Finite State Automata, ์œ ํ•œ ์ƒํƒœ ์˜คํ† ๋งˆํƒ€) token์„ ์ธ์‹ํ•˜๋Š” ๋ฐฉ๋ฒ• ์‹œ์ž‘ ์ƒํƒœ ํ•œ ๊ฐœ์™€ ๋ ์ƒํƒœ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๊ฐ€์ง DFA (Deterministic Finite Automata) FSA์˜ ํ•œ ์ข…๋ฅ˜ ๊ฐ ์ƒํƒœ์—์„œ ๋ป—์–ด๋‚˜๊ฐ€๋Š” edge๊ฐ€ ํ•˜๋‚˜์”ฉ๋งŒ ์กด์žฌ ฮต๊ฐ€ ๋ถ™์€ edge ์—†์Œ ๋ถ„์„ํ•œ ํ† ํฐ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• Lexeme = <ํ† ํฐ๋ฒˆํ˜ธ, ํ† ํฐ ๊ฐ’>
๐Ÿซ ํ•™๊ณผ ๊ณต๋ถ€
1์žฅ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ ๊ฐœ์š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ข…๋ฅ˜ ์ฃผ๋ฌธํ˜•, ํŒจํ‚ค์ง€ํ˜•, ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ์‹ค์‹œ๊ฐ„ ์†Œํ”„ํŠธ์›จ์–ด, ์ž๋ฃŒ์ฒ˜๋ฆฌ ์†Œํ”„ํŠธ์›จ์–ด ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์˜ ์ •์˜ IEEE : ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฐœ๋ฐœ, ์šด์šฉ, ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ํŒŒ๊ธฐ์— ๋Œ€ํ•œ ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ W.Humphrey : ์งˆ ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฒฝ์ œ์ ์œผ๋กœ ์ƒ์‚ฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ณตํ•™, ๊ณผํ•™, ์ˆ˜ํ•™์  ์›๋ฆฌ์— ์˜ํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•ด์•ผํ•œ๋‹ค ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ (ํšจ-์šฉ-์‹ -์œ -์žฌ-) ํšจ์œจ์„ฑ(efficiency) ์‚ฌ์šฉ์šฉ์ด์„ฑ(usability) ์‹ ๋ขฐ์„ฑ(reliability) ์œ ์ง€๋ณด์ˆ˜์„ฑ(maintainability) ์žฌ์‚ฌ์šฉ์„ฑ(reusability) ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ ์ž‘์—… ์š”๊ตฌ๋ถ„์„๊ณผ ๋ช…์„ธํ™” ๋„๋ฉ”์ธ ๋ถ„์„, ๋ฌธ์ œ ์ •์˜, ์š”๊ตฌ ์ถ”์ถœ, ์š”๊ตฌ ๋ถ„์„, ์š”๊ตฌ ๋ช…์„ธํ™” ์„ค๊ณ„ : ๊ฐ€์šฉํ•œ ๊ธฐ์ˆ ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด์•ผํ•˜๋Š”์ง€ ๊ธฐ์ˆ  ์‹œ์Šคํ…œ ์—”์ง€๋‹ˆ์–ด๋ง, ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ UI ์„ค๊ณ„, DB ์„ค๊ณ„ ๋ชจ๋ธ๋ง : ๋„๋ฉ”์ธ์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ‘œํ˜„์„ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ • ์œ ์Šค์ผ€์ด์Šค ๋ชจ๋ธ๋ง ์ •์  ๋ชจ๋ธ๋ง, ๋™์  ๋ชจ๋ธ๋ง, ํ–‰์œ„ ๋ชจ๋ธ๋ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ’ˆ์งˆ๋ณด์ฆ ๋ฆฌ๋ทฐ, ์ธ์ŠคํŽ™์…˜, ํ…Œ์ŠคํŠธ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ 2์žฅ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์„ธ์Šค ํญํฌ์ˆ˜ ๋ชจ๋ธ (Waterfall Model) ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋‹ค์Œ ์‹œ์ž‘ ์ „์— ๋๋‚˜์•ผ ํ•จ -> ๋Š๋ฆผ ํ”„๋กœํ† ํƒ€์ž…๊ณผ ์žฌ์‚ฌ์šฉ์˜ ๊ธฐํšŒ๊ฐ€ ์ค„์–ด๋“ฆ ํ”„๋กœํ† ํƒ€์ž… ๋ชจ๋ธ (Prototyping Model) ์ธ๊ฐ„-๊ธฐ๊ณ„ ์ƒํ˜ธ์ž‘์šฉ ํ”„๋กœํ† ํƒ€์ž… ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ ๋‹ค - ํ”„๋กœํ† ํƒ€์ž…์„ ํ‰๊ฐ€ํ•œ๋‹ค ์ ์ฆ์  ๋ชจ๋ธ (Incremental Model) ์ ์ฆ์  ๋ฐฉ๋ฒ•: ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋ฐ˜๋ณต์  ๋ฐฉ๋ฒ•: ๋ฆด๋ฆฌ์ฆˆ ํ• ๋•Œ๋งˆ๋‹ค ๊ธฐ๋Šฅ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์ธ๋‹ค ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋”๋ผ๋„ ๋นจ๋ฆฌ ๋ฆด๋ฆฌ์ฆˆ ๊ฐ€๋Šฅ ๋‚˜์„ ํ˜• ๋ชจ๋ธ (Spiral Model) ์ง„ํ™” ๋‹จ๊ณ„ ๊ณ„ํš ์ˆ˜๋ฆฝ ์œ„ํ—˜ ๋ถ„์„ ๊ฐœ๋ฐœ ํ‰๊ฐ€ ๋ฐ˜๋ณต์ ์ธ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ -> ๊ฐ•์ธ์„ฑ ํ–ฅ์ƒ ๊ด€๋ฆฌ, ์œ„ํ—˜ ๋ถ„์„์ด ์ค‘์š” ์ง„ํ™”์  ๋ชจ๋ธ (Evolutionary Model) ์ดˆ๊ธฐ์— ์š”๊ตฌ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๊ณ  ๊ตฌํ˜„์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ, ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„์„ ํ•œ ๋ฒˆ์ด์ƒ ๋ฐ˜๋ณต UP (Unified Process) ๋„์ž… ๋‹จ๊ณ„ : ํ”„๋กœ์ ํŠธ์˜ ๋ฒ”์œ„๋ฅผ ์„ค์ •, ๋ชฉํ‘œ๋ฅผ ๋ช…ํ™•ํžˆ ์ •๋ จ ๋‹จ๊ณ„ : ์š”๊ตฌ๋ฅผ ์ฐพ์•„๋‚ด์–ด ์„ค๊ณ„๋ฅผ ์™„์„ฑ ๊ตฌ์ถ• ๋‹จ๊ณ„ : ์ œ์กฐ ๋‹จ๊ณ„, ์š”๊ตฌ์˜ ํ…Œ์ŠคํŠธ ๋งˆ๋ฌด๋ฆฌ ์ „ํ™˜ ๋‹จ๊ณ„ : ๋ฆด๋ฆฌ์ฆˆ ์• ์ž์ผ ํ”„๋กœ์„ธ์Šค (Agile Process) ํŠน์ง• ์งง์€ ๋ฆด๋ฆฌ์ฆˆ์™€ ๋ฐ˜๋ณต ์ ์ฆ์  ์„ค๊ณ„ ์‚ฌ์šฉ์ž ์ฐธ์—ฌ ๋ฌธ์„œ ์ตœ์†Œํ™” ๋น„๊ณต์‹์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์š”๊ตฌ์™€ ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ • ์ต์ŠคํŠธ๋ฆผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (eXtreme Pragramming) ์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜ Planning : ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž‘์€ ์š”์†Œ๋กœ ๋ถ„ํ•  Analysis Design Execution : Coding, Testing Wrapping : small release, process improvement Closure : launch ์Šคํฌ๋Ÿผ (Scrum) ์กฐ์ง์ ์œผ๋กœ ์• ์ž์ผ ๋ฐฉ๋ฒ•๋ก ์„ ์ ์šฉ
๐Ÿ‘จโ€๐Ÿ’ป ๋ชจ๊ฐ์ฝ”
์ž„์‹œ ํ…Œ์ด๋ธ” ์ง€์—ญ ์ž„์‹œ ํ…Œ์ด๋ธ” (Local Temporary Table) ํ˜„์žฌ connection์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค ํ•ด๋‹น connection์ด ์ข…๋ฃŒ๋˜๋ฉด ํ…Œ์ด๋ธ”์ด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์•ž์— #๋ฅผ ๋ถ™์—ฌ ์‚ฌ์šฉํ•œ๋‹ค ์ „์—ญ ์ž„์‹œ ํ…Œ์ด๋ธ” (Global Temporary Table) ๋‹ค๋ฅธ connection์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค ๋งˆ์ง€๋ง‰ connection์ด ์ข…๋ฃŒ๋˜๋ฉด ํ…Œ์ด๋ธ”์ด ์‚ฌ๋ผ์ง„๋‹ค ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์•ž์— ##๋ฅผ ๋ถ™์—ฌ ์‚ฌ์šฉํ•œ๋‹ค ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• 1 - CREATE ์‚ฌ์šฉ 1CREATE TABLE #temp ( 2 id INT, 3 name VARCHAR(20) 4) ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• 2 - SELECT INTO ์‚ฌ์šฉ 1SELECT * 2INTO #temp 3FROM table ํŠน์ง• ์ธ๋ฑ์Šค, ์ œ์•ฝ ์กฐ๊ฑด ๋“ฑ์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š๋Š”๋‹ค SELECTํ• ๋•Œ ORDER BY๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค LOCK ๋ฐฐํƒ€์  ์ž ๊ธˆ (Exclusive Lock, X) ํ•˜๋‚˜์˜ ํŠน์ • ํŠธ๋žœ์žญ์…˜๋งŒ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค
๐Ÿ‘จโ€๐Ÿ’ป ๋ชจ๊ฐ์ฝ”
ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ• ๋ธ”๋ž™๋ฐ•์Šค ๊ธฐ๋ฒ• ๊ฐœ๋ฐœ์ž์™€ ์‚ฌ์šฉ์ž๋“ค์˜ ๊ฒฐํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋Šฅ์  ํ˜น์€ ๋น„๊ธฐ๋Šฅ์  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋„์ถœํ•˜๊ณ  ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ช…์„ธ ๊ธฐ๋ฐ˜ ๊ธฐ๋ฒ•๊ณผ ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜ ๊ธฐ๋ฒ•์„ ํฌํ•จ ํ™”์ดํŠธ๋ฐ•์Šค ๊ธฐ๋ฒ• ์ปดํฌ๋„ŒํŠธ ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ๊ธฐ๋ฒ• ํฌํ•จ ๋ช…์„ธ ๊ธฐ๋ฐ˜ ๊ธฐ๋ฒ• ํŠน์ง• ํ•ด๊ฒฐํ•  ๋ฌธ์ œ๋ฅผ ๋ช…์„ธํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค ๋ชจ๋ธ์—์„œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‹œ์Šคํ…œ์ ์œผ๋กœ ๋„์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ์ข…๋ฅ˜ ๋™๋“ฑ ๋ถ„ํ•  ๊ฒฝ๊ณ„๊ฐ’ ๋ถ„์„ ๊ฒฐ์ •ํ…Œ์ด๋ธ” ํ…Œ์ŠคํŒ… ์ƒํƒœ์ „์ด ํ…Œ์ŠคํŒ… ์œ ์ฆˆ์ผ€์ด์Šค ํ…Œ์ŠคํŒ… ๊ฒฝํ—˜ ๊ธฐ๋ฐ˜ ๊ธฐ๋ฒ• ํŠน์ง• ํ…Œ์ŠคํŠธ ๊ด€๋ จ ์ธ๋ ฅ์˜ ์ง€์‹์ด๋‚˜ ๊ฒฝํ—˜์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋„์ถœํ•œ๋‹ค ์ข…๋ฅ˜ ํƒ์ƒ‰์  ํ…Œ์ŠคํŒ… ์˜ค๋ฅ˜ ์ถ”์ • ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ๊ธฐ๋ฒ• ํŠน์ง• ์ฝ”๋“œ์™€ ๊ฐœ๋ฐœ ์„ค๊ณ„ ๋“ฑ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋„์ถœํ•œ๋‹ค ์ข…๋ฅ˜ ๊ตฌ๋ฌธ ํ…Œ์ŠคํŒ…๊ณผ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ์ • ํ…Œ์ŠคํŒ…๊ณผ ์ปค๋ฒ„๋ฆฌ์ง€ ์กฐ๊ฑด / ๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€ ๋ณ€๊ฒฝ ์กฐ๊ฑด/ ๊ฒฐ์ • ์ปค๋ฒ„๋ฆฌ์ง€ ๋‹ค์ค‘ ์กฐ๊ฑด ์ปค๋ฒ„๋ฆฌ์ง€
๐Ÿซ ํ•™๊ณผ ๊ณต๋ถ€
๊ณผ๋ชฉ 1 : ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์ดํ•ด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ํ• ๋•Œ ์œ ์˜ ์‚ฌํ•ญ ์ค‘๋ณต : ์—ฌ๋Ÿฌ ์žฅ์†Œ์— ๊ฐ™์€ ์ •๋ณด X ๋น„์œ ์—ฐ์„ฑ : ๋ฐ์ดํ„ฐ์˜ ์ •์˜์™€ ์‚ฌ์šฉ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๋ฆฌ -> ๋ฐ์ดํ„ฐ๊ฐ€ ์ ๊ฒŒ ๋ณ€ํ™”๋˜๋„๋ก ๋น„์ผ๊ด€์„ฑ : ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์ƒํ˜ธ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์˜ ์ข…๋ฅ˜ ๊ฐœ๋…์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง์˜ ํŠน์ง• ์ถ”์ƒํ™”, ๋‹จ์ˆœํ™”, ๋ช…ํ™•ํ™” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์˜ ๊ตฌ์กฐ ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ : ์‚ฌ์šฉ์ž ๊ด€์ ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๊ฐœ๋… ์Šคํ‚ค๋งˆ : ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ ๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ : ๋ฌผ๋ฆฌ์  ์ €์žฅ์žฅ์น˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ์—”ํ„ฐํ‹ฐ์˜ ํŠน์ง• ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ์—…๋ฌด์—์„œ ํ•„์š”ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ •๋ณด์—ฌ์•ผํ•œ๋‹ค.
React์˜ ํŠน์ง• Component ๊ธฐ๋ฐ˜ Virtual DOM JSX ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ Hooks DOM HTML element๋ฅผ treeํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ Virtual DOM DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ , ๊ฐ€์ƒ์˜ DOM์„ ๋งŒ๋“ค์–ด์„œ ์กฐ์ž‘ํ•œ ํ›„, ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹ Diffing : ์ด์ „ Virtual DOM๊ณผ ํ˜„์žฌ Virtual DOM์„ ๋น„๊ต Reconciliation : ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ Batch Update : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•œ๋ฒˆ์— ์—…๋ฐ์ดํŠธ React Component Class Component ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จ ์ƒ์†์„ ํ†ตํ•ด Component๋ฅผ ์ƒ์„ฑ mutable state๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ Functional Component immutableํ•˜๋‹ค stateless Hooks๋ฅผ ์‚ฌ์šฉ LifeCycle Method Mounting constructor : ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ์ž static getDerivedStateFromProps : props๋กœ state๋ฅผ ์„ค์ • render : ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง componentDidMount : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋œ ์งํ›„ Updating static getDerivedStateFromProps : props๋กœ state๋ฅผ ์„ค์ • shouldComponentUpdate : ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€ ๊ฒฐ์ • render : ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง getSnapshotBeforeUpdate : ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ์ง์ „ componentDidUpdate : ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ์งํ›„ Unmounting componentWillUnmount : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋˜๊ธฐ ์ง์ „ React Hooks ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ state์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
๐Ÿซ ํ•™๊ณผ ๊ณต๋ถ€