diff --git a/README.md b/README.md index 896a1bf..60f3487 100644 --- a/README.md +++ b/README.md @@ -125,22 +125,73 @@ ## ๐Ÿ’Ž ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ -- [ํ’€์Šคํƒ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%EA%B2%B0%EA%B3%BC_%ED%92%80%EC%8A%A4%ED%83%9D.md) -- [ํด๋ผ์šฐ๋“œ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%EA%B2%B0%EA%B3%BC_%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C.md) -- [์ธ๊ณต์ง€๋Šฅ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%EA%B2%B0%EA%B3%BC_%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5.md) +- ํ”„๋ก ํŠธ์—”๋“œ [์ž์„ธํžˆ]() + - React๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• + - ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ + - ๋ฐฑ์—”๋“œ API์™€์˜ ํ†ต์‹  +- ๋ฐฑ์—”๋“œ [์ž์„ธํžˆ]() + - RESTful API ์„ค๊ณ„์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์ ์šฉ + - BDDMockito, JUnit5๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ + - ExceptionHandler์„ ํ†ตํ•œ ๊ณตํ†ต ์˜ˆ์™ธ ์ฒ˜๋ฆฌ + - Validation ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ + - Swagger๋ฅผ ์‚ฌ์šฉํ•œ API ๋ช…์„ธ์„œ ์ž‘์„ฑ + - AI ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ ๊ณผ์ • ์Šค์ผ€์ค„๋ง +- ํฌ๋กค๋ง [์ž์„ธํžˆ]() + - Kobis์—์„œ ์ œ๊ณตํ•˜๋Š” ์ง€์—ญ๋ณ„ ๋ฐ ๋‚ ์งœ๋ณ„ ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด๋ฅผ ํฌ๋กค๋ง + - DB ์„ค๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ + - ํฌ๋กค๋ง ์†๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ์ ์šฉ +- ํด๋ผ์šฐ๋“œ [์ž์„ธํžˆ]((https://github.com/KTB-19/movie_chatbot/blob/main/docs/%EA%B2%B0%EA%B3%BC_%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C.md)) + - Terraform์„ ํ™œ์šฉํ•œ ์ธํ”„๋ผ ๊ตฌ์„ฑ + - Ansible์„ ํ™œ์šฉํ•˜์—ฌ Docker, Docker-compose, Node_exporter๋ฅผ ์„ธํŒ… + - Github Actions๋ฅผ ์ด์šฉํ•œ CI/CD + - Prometheus, Grafana๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง + - ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ํ›„ ์—ฐ๊ฒฐ ๋ฐ ๋ฐฐํฌํ™˜๊ฒฝ api ์—ฐ๊ฒฐ +- ์ธ๊ณต์ง€๋Šฅ [์ž์„ธํžˆ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%EA%B2%B0%EA%B3%BC_%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5.md) + - RAG ํ™œ์šฉํ•œ ์˜ํ™”๊ด€ ์ถ”์ฒœ ์ „๋ฌธ ๊ณ ๊ฐ์ง€์› ์ฑ—๋ด‡ ์ปค์Šคํ…€ + - ChatGPT API ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์„ ํ†ตํ•ด ์‘๋‹ต ์ƒ์„ฑ
## โš ๏ธ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… -- [ํ’€์Šคํƒ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85_%ED%92%80%EC%8A%A4%ED%83%9D.md) -- [ํด๋ผ์šฐ๋“œ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85_%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C.md) -- [์ธ๊ณต์ง€๋Šฅ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85_%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5.md) +- ํ”„๋ก ํŠธ์—”๋“œ [์ž์„ธํžˆ]() + - useRef๋ฅผ ์‚ฌ์šฉํ•œ ์ƒํƒœ ๋ฐ˜์˜ +- ๋ฐฑ์—”๋“œ [์ž์„ธํžˆ]() + - AI ์ฝ”๋“œ ๊ตฌ๋™์„ ์œ„ํ•œ ํšจ์œจ์ ์ธ ์•„ํ‚คํ…์ฒ˜ + - stream์„ ํ™œ์šฉํ•œ ๋ณต์žกํ•œ ๋กœ์ง ๋‹จ์ˆœํ™” +- ํฌ๋กค๋ง [์ž์„ธํžˆ]() + - ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ์‚ฌ์šฉํ•œ ํฌ๋กค๋ง ์‹œ๊ฐ„ ๋‹จ์ถ• +- ํด๋ผ์šฐ๋“œ [์ž์„ธํžˆ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85_%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C.md) + - Mysql ๋„์ปค ์ด๋ฏธ์ง€๋กœ EC2์—์„œ Endtrypoint ์—๋Ÿฌ + - Python Crawling ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘ chrome browser ์„ค์น˜ ๋ฌธ์ œ + - ํฌ๋กค๋ง ์ธ์Šคํ„ด์Šค์˜ ์ ์ ˆํ•œ type ์„ค์ • + - ํฌ๋กค๋ง ์ด์™ธ์˜ ์‹œ๊ฐ„์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค + - ์ธ์Šคํ„ด์Šค์™€ ์„œ๋ธŒ๋„ท ๋“ฑ์˜ ๋„คํŠธ์›Œํฌ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ณต๋ถ€์˜ ํ•„์š”์„ฑ + - CI/CD๋Š” ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์ธ๊ฐ€? + - Docker container ๋ฐฐํฌ์‹œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ +- ์ธ๊ณต์ง€๋Šฅ [์ž์„ธํžˆ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85_%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5.md) + - chatgpt api๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ์˜ ์‘๋‹ต ์ƒ์„ฑ ๋ฐฉ๋ฒ• + - ๊ฐ€๊ณต์„ ์œ„ํ•œ ์ •ํ˜•ํ™”๋œ ์•„์›ƒํ’‹ + - chatgpt api๋ฅผ ํ™œ์šฉํ•œ ์—”ํ‹ฐํ‹ฐ ์ถ”์ถœ ๋ฐฉ์‹
## ๐Ÿฅณ ํšŒ๊ณ  -- [ํšŒ๊ณ ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%9A%8C%EA%B3%A0.md) +- ์ข…ํ•ฉ ํšŒ๊ณ  + - ์„ฑ๊ณผ + - ๐Ÿ‘ ์ดˆ๊ธฐ ๊ณ„ํšํ•œ ์ตœ์†Œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์™„๋ฃŒ + - ๐Ÿ‘Ž ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ธฐํš ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ์„ค๊ณ„ํ–ˆ๋‹ค๋ฉด, ์‹œ๊ฐ„ ์ ˆ์•ฝํ–ˆ์„ ๋“ฏ + - ๐Ÿ‘Ž ์‹ค ์„œ๋น„์Šค ์‚ฌ์šฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐœ์„  ํ•„์š” + - ๋ฐฐ์›€ + - ๐Ÿ‘ ์„œ๋กœ ๋‹ค๋ฅธ ์ง๋ฌด ๊ฐ„ ํ˜‘์—… ๋ฐฉ์‹์„ ์ตํž˜ + - ๐Ÿ‘ ์‹ค๋ฌด์— ํ•„์š”ํ•œ ๊ธฐ์ˆ  ์Šต๋“ + - ํ˜‘์—… + - ๐Ÿ‘ ๋งค์ผ ์Šคํฌ๋Ÿผ์„ ํ†ตํ•ด ์ง„ํ–‰์ƒํ™ฉ๊ณผ ๋ฌธ์ œ์  ๊ณต์œ  + - ๐Ÿ‘ ์• ์ž์ผ ๋ฐฉ์‹ ๋„์ž…์„ ํ†ตํ•ด ์ฆ‰๊ฐ์ ์œผ๋กœ ๋…ผ์˜ ๋ฐ ์ˆ˜์ • + - ๐Ÿ‘Ž ์ผ์ • ๋”œ๋ ˆ์ด์™€ ์Šคํ”„๋ฆฐํŠธ ์ง„ํ–‰ ๋ฐฉ์‹ ๋ณ€๊ฒฝ์ด ์•„์‰ฌ์›€ + - ๐Ÿ‘Ž ํƒœ์Šคํฌ ๊ด€๋ฆฌ ๋ฐ ๋ฌธ์„œํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ํ•„์š” +- [๊ฐœ์ธ๋ณ„ ํšŒ๊ณ ](https://github.com/KTB-19/movie_chatbot/blob/main/docs/%ED%9A%8C%EA%B3%A0.md) +
diff --git "a/docs/\352\262\260\352\263\274_\353\260\261\354\227\224\353\223\234.md" "b/docs/\352\262\260\352\263\274_\353\260\261\354\227\224\353\223\234.md" new file mode 100644 index 0000000..4f1ed3a --- /dev/null +++ "b/docs/\352\262\260\352\263\274_\353\260\261\354\227\224\353\223\234.md" @@ -0,0 +1,22 @@ +# ๋ฐฑ์—”๋“œ +> ๊น€์š”ํ•œ ๋‹ด๋‹น + +- RESTful API ์„ค๊ณ„์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์ ์šฉ +- BDDMockito, JUnit5๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ + + + +- ExceptionHandler์„ ํ†ตํ•œ ๊ณตํ†ต ์˜ˆ์™ธ ์ฒ˜๋ฆฌ + - ์ „์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ํ•œ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋†’์ž„ + - ๋กœ๊น…์„ ํ†ตํ•ด, ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋””๋ฒ„๊น…์ด ์ˆ˜์›” + + + +- Validation ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ + - Pattern, Size ์ง€์ •์„ ํ†ตํ•ด ์š”์ฒญ ํ˜•์‹ ์ œํ•œ + - ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™” + + + +- Swagger๋ฅผ ์‚ฌ์šฉํ•œ API ๋ช…์„ธ์„œ ์ž‘์„ฑ +- AI ์›Œ๋“œ ์ž„๋ฒ ๋”ฉ ๊ณผ์ • ์Šค์ผ€์ค„๋ง \ No newline at end of file diff --git "a/docs/\352\262\260\352\263\274_\354\235\270\352\263\265\354\247\200\353\212\245.md" "b/docs/\352\262\260\352\263\274_\354\235\270\352\263\265\354\247\200\353\212\245.md" index 5aba83b..04cef87 100644 --- "a/docs/\352\262\260\352\263\274_\354\235\270\352\263\265\354\247\200\353\212\245.md" +++ "b/docs/\352\262\260\352\263\274_\354\235\270\352\263\265\354\247\200\353\212\245.md" @@ -1,4 +1,7 @@ -## 1. RAG ๊ธฐ์ˆ  ํ™œ์šฉ +# ์ธ๊ณต์ง€๋Šฅ +> ์ •์˜ˆ์€, ๊น€ํ˜„์ค‘ ๋‹ด๋‹น + +## RAG ๊ธฐ์ˆ  ํ™œ์šฉ โ‡’ ์˜ํ™”๊ด€ ์ถ”์ฒœ ์ „๋ฌธ ๊ณ ๊ฐ์ง€์› ์ฑ—๋ด‡์œผ๋กœ ์ปค์Šคํ…€ @@ -6,26 +9,25 @@ - ์‚ฌ์šฉ์ž ์งˆ๋ฌธ์—์„œ NER์„ ์ด์šฉํ•˜์—ฌ Entity ์ถ”์ถœ - 9์›” 11์ผ์— 3์‹œ ๊ฐ•๋‚จ์—์„œ ์—์ผ๋ฆฌ์–ธ ๋ณด๊ณ ์‹ถ์–ด. - {date}: 2024-09-11 {time}: 15:00 {region}: ๊ฐ•๋‚จ{movieName}:์—์ผ๋ฆฌ์–ธ - - koBERT,kiwi๋ฅผ ์ด์šฉํ•œ RAG๊ตฌ์ถ• ํ›„ + - koBERT, kiwi๋ฅผ ์ด์šฉํ•œ RAG๊ตฌ์ถ• ํ›„ - FAISS๋ฅผ ์ด์šฉํ•œ Semantic Search, ๋ฐ Levenshtein distance ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ - {movieName}:์—์ผ๋ฆฌ์–ธ -> ์—์ผ๋ฆฌ์–ธ:๋กœ๋ฌผ๋ฃจ์Šค - LLM ์‘๋‹ต ์ •ํ˜•ํ™” -- LLM ChatGPT api๋ฅผ ํ™œ์šฉํ•œ ์‘๋‹ต ์ƒ์„ฑ - -ex) ์˜ค๋Š˜ ํŒ๊ต์—์„œ ์—์ด๋ฆฌ์–ธ ๋ณด๊ณ  ์‹ถ์–ด + - LLM ChatGPT api๋ฅผ ํ™œ์šฉํ•œ ์‘๋‹ต ์ƒ์„ฑ + ex) ์˜ค๋Š˜ ํŒ๊ต์—์„œ ์—์ด๋ฆฌ์–ธ ๋ณด๊ณ  ์‹ถ์–ด -## 2. ChatGPT API๋ฅผ ํ™œ์šฉํ•œ ์‘๋‹ต ์ƒ์„ฑ +## ChatGPT API๋ฅผ ํ™œ์šฉํ•œ ์‘๋‹ต ์ƒ์„ฑ 1. ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์—์„œ ์ถ”์ถœํ•œ ์ •๋ณด๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์‹œ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ -- ex) โ€˜2024-09-09 18:00์— ์„ฑ๋‚จ์‹œ ๋ถ„๋‹น๊ตฌ์—์„œ ์—์ด๋ฆฌ์–ธ:๋กœ๋ฌผ๋ฃจ์Šค๋ฅผ ๋ณด๊ณ  ์‹ถ์€ ๊ฒŒ ๋งž์œผ์‹ ๊ฐ€์š”? -- {date} {time}์— {region}์—์„œ {movieName}์„ ๋ณด๊ณ  ์‹ถ์€ ๊ฒŒ ๋งž์œผ์‹ ๊ฐ€์š”? + - ex) โ€˜2024-09-09 18:00์— ์„ฑ๋‚จ์‹œ ๋ถ„๋‹น๊ตฌ์—์„œ ์—์ด๋ฆฌ์–ธ:๋กœ๋ฌผ๋ฃจ์Šค๋ฅผ ๋ณด๊ณ  ์‹ถ์€ ๊ฒŒ ๋งž์œผ์‹ ๊ฐ€์š”? + - {date} {time}์— {region}์—์„œ {movieName}์„ ๋ณด๊ณ  ์‹ถ์€ ๊ฒŒ ๋งž์œผ์‹ ๊ฐ€์š”? -1. ์‚ฌ์šฉ์ž์˜ ๋‹ค์–‘ํ•œ ์งˆ๋ฌธ ํ˜•์‹์„ ์ž๋™์œผ๋กœ ์ธ์‹, ์ผ๊ด€๋œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋‹ต๋ณ€ํ•˜๋Š” ๊ธฐ๋Šฅ -- ์‹œ๊ฐ„/๋‚ ์งœ ํ˜•์‹ ์ „์ฒ˜๋ฆฌ(YYYY-MM-DD, HH:MM) -- ์ง€์—ญ๋ช… ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•ด ์˜ํ™”๊ด€ ์กฐํšŒ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ ex) โ€˜ํŒ๊ตโ€™ โ†’ โ€˜๊ฒฝ๊ธฐ๋„ ์„ฑ๋‚จ์‹œ ๋ถ„๋‹น๊ตฌโ€™ +2. ์‚ฌ์šฉ์ž์˜ ๋‹ค์–‘ํ•œ ์งˆ๋ฌธ ํ˜•์‹์„ ์ž๋™์œผ๋กœ ์ธ์‹, ์ผ๊ด€๋œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด ๋‹ต๋ณ€ํ•˜๋Š” ๊ธฐ๋Šฅ + - ์‹œ๊ฐ„/๋‚ ์งœ ํ˜•์‹ ์ „์ฒ˜๋ฆฌ(YYYY-MM-DD, HH:MM) + - ์ง€์—ญ๋ช… ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•ด ์˜ํ™”๊ด€ ์กฐํšŒ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ ex) โ€˜ํŒ๊ตโ€™ โ†’ โ€˜๊ฒฝ๊ธฐ๋„ ์„ฑ๋‚จ์‹œ ๋ถ„๋‹น๊ตฌโ€™ -1. ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋‚ ์งœ, ์žฅ์†Œ, ์˜ํ™”๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์ ์˜ ์˜ํ™”๊ด€, ์˜ํ™”์Šค์ผ€์ค„์„ ์ถ”์ฒœํ•ด์ฃผ๋Š” ๋‹ต๋ณ€ ์ƒ์„ฑ -- ์‚ฌ์šฉ์ž ๋งž์ถค ์˜ํ™”๊ด€ ์ถ”์ฒœ - - ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์œ„์น˜ ๊ทผ์ฒ˜์—์„œ ๊ตํ†ต ์ ‘๊ทผ์„ฑ์ด ์ข‹์€ ์˜ํ™”๊ด€, ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ์˜ํ™”๋ฅผ ๋งŽ์ด ์ƒ์˜ํ•˜๋Š” ์˜ํ™”๊ด€์„ ์ถ”์ฒœ -- ์˜ํ™”๊ด€ ์ฃผ์†Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€: ์˜ํ™”๊ด€ ๊ทผ์ฒ˜ ๊ตํ†ต์ •๋ณด ์ œ๊ณต - - ์ถ”์ฒœ๋œ ์˜ํ™”๊ด€ ๊ทผ์ฒ˜ ์ง€ํ•˜์ฒ ์—ญ์—์„œ ์ด๋™๊ฒฝ๋กœ(๋ช‡ ๋ฒˆ ์ถœ๊ตฌ์—์„œ ๋„๋ณด๋กœ ๋ช‡ ๋ถ„), ์ง€ํ•˜์ฒ ์—ญ์ด ์—†์„ ๊ฒฝ์šฐ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ ์ •๋ณด ์ œ๊ณต \ No newline at end of file +3. ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋‚ ์งœ, ์žฅ์†Œ, ์˜ํ™”๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์ ์˜ ์˜ํ™”๊ด€, ์˜ํ™”์Šค์ผ€์ค„์„ ์ถ”์ฒœํ•ด์ฃผ๋Š” ๋‹ต๋ณ€ ์ƒ์„ฑ + - ์‚ฌ์šฉ์ž ๋งž์ถค ์˜ํ™”๊ด€ ์ถ”์ฒœ + - ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์œ„์น˜ ๊ทผ์ฒ˜์—์„œ ๊ตํ†ต ์ ‘๊ทผ์„ฑ์ด ์ข‹์€ ์˜ํ™”๊ด€, ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ์˜ํ™”๋ฅผ ๋งŽ์ด ์ƒ์˜ํ•˜๋Š” ์˜ํ™”๊ด€์„ ์ถ”์ฒœ + - ์˜ํ™”๊ด€ ์ฃผ์†Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€: ์˜ํ™”๊ด€ ๊ทผ์ฒ˜ ๊ตํ†ต์ •๋ณด ์ œ๊ณต + - ์ถ”์ฒœ๋œ ์˜ํ™”๊ด€ ๊ทผ์ฒ˜ ์ง€ํ•˜์ฒ ์—ญ์—์„œ ์ด๋™๊ฒฝ๋กœ(๋ช‡ ๋ฒˆ ์ถœ๊ตฌ์—์„œ ๋„๋ณด๋กœ ๋ช‡ ๋ถ„), ์ง€ํ•˜์ฒ ์—ญ์ด ์—†์„ ๊ฒฝ์šฐ ๋ฒ„์Šค ์ •๋ฅ˜์žฅ ์ •๋ณด ์ œ๊ณต \ No newline at end of file diff --git "a/docs/\352\262\260\352\263\274_\355\201\254\353\241\244\353\247\201.md" "b/docs/\352\262\260\352\263\274_\355\201\254\353\241\244\353\247\201.md" new file mode 100644 index 0000000..2e2cbdd --- /dev/null +++ "b/docs/\352\262\260\352\263\274_\355\201\254\353\241\244\353\247\201.md" @@ -0,0 +1,14 @@ +# ํฌ๋กค๋ง +> ์ด๋ฏธ๋ฅด ๋‹ด๋‹น + +- **Kobis์—์„œ ์ œ๊ณตํ•˜๋Š” ์ง€์—ญ๋ณ„ ๋ฐ ๋‚ ์งœ๋ณ„ ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด๋ฅผ ํฌ๋กค๋ง** + - 7์ผ์น˜์˜ ์ •๋ณด๋ฅผ ํฌ๋กค๋ง + ์ƒˆ๋กญ๊ฒŒ ์˜ฌ๋ผ์˜จ ๋‚ ์งœ์˜ ์ƒ์˜ ์Šค์ผ€์ค„ ํฌ๋กค๋ง + - ์„ ํƒ๋œ ์กฐ๊ฑด์— ๋งž๋Š” ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด ์ˆ˜์ง‘ + - ๊ด‘์—ญ ์„ ํƒ -> ๊ธฐ์ดˆ ์„ ํƒ -> ์˜ํ™”๊ด€ ์„ ํƒ -> ๋‚ ์งœ ์„ ํƒ ์ˆœ์„œ๋กœ ํฌ๋กค๋ง ์ ˆ์ฐจ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ 3~4ํšŒ์˜ ๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋„๋ก ๊ตฌํ˜„ +- **DB ์„ค๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ** + - ํฌ๋กค๋งํ•œ ์ƒ์˜ ์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก DB ํ…Œ์ด๋ธ” ์„ค๊ณ„ + - ์ƒ์˜ ์ •๋ณด ์กฐํšŒ ์†๋„์™€ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์˜ํ™”๊ด€, ์˜ํ™” ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ์˜์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋„๋ก ํ•จ + ![erd.png](./img/erd.png) +- **ํฌ๋กค๋ง ์†๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ์ ์šฉ** + - ์—ฌ๋Ÿฌ ์˜ํ™”๊ด€์˜ ์ƒ์˜ ์ •๋ณด๋ฅผ ๋™์‹œ์— ์ˆ˜์ง‘ํ•˜์—ฌ ์‹œ๊ฐ„ ์ตœ์ ํ™” + - ์‹œ๊ฐ„ ์ตœ์ ํ™” diff --git "a/docs/\352\262\260\352\263\274_\355\201\264\353\235\274\354\232\260\353\223\234.md" "b/docs/\352\262\260\352\263\274_\355\201\264\353\235\274\354\232\260\353\223\234.md" index c2dc8b9..3760cfe 100644 --- "a/docs/\352\262\260\352\263\274_\355\201\264\353\235\274\354\232\260\353\223\234.md" +++ "b/docs/\352\262\260\352\263\274_\355\201\264\353\235\274\354\232\260\353\223\234.md" @@ -1,4 +1,7 @@ -# ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ +# ํด๋ผ์šฐ๋“œ +> ๊น€๋„๊ฒฝ, ๊น€๋ฏผ์šฐ ๋‹ด๋‹น + +## ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ![Movie-chatbot-architecture.png](./img/Movie-chatbot-architecture.png) diff --git "a/docs/\352\262\260\352\263\274_\355\222\200\354\212\244\355\203\235.md" "b/docs/\352\262\260\352\263\274_\355\222\200\354\212\244\355\203\235.md" deleted file mode 100644 index 727ff1d..0000000 --- "a/docs/\352\262\260\352\263\274_\355\222\200\354\212\244\355\203\235.md" +++ /dev/null @@ -1,54 +0,0 @@ -- ํฌ๋กค๋ง - - **Kobis์—์„œ ์ œ๊ณตํ•˜๋Š” ์ง€์—ญ๋ณ„ ๋ฐ ๋‚ ์งœ๋ณ„ ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด๋ฅผ ํฌ๋กค๋ง** - - 7์ผ์น˜์˜ ์ •๋ณด๋ฅผ ํฌ๋กค๋ง + ์ƒˆ๋กญ๊ฒŒ ์˜ฌ๋ผ์˜จ ๋‚ ์งœ์˜ ์ƒ์˜ ์Šค์ผ€์ค„ ํฌ๋กค๋ง - - ์„ ํƒ๋œ ์กฐ๊ฑด์— ๋งž๋Š” ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด ์ˆ˜์ง‘ - - ๊ด‘์—ญ ์„ ํƒ -> ๊ธฐ์ดˆ ์„ ํƒ -> ์˜ํ™”๊ด€ ์„ ํƒ -> ๋‚ ์งœ ์„ ํƒ ์ˆœ์„œ๋กœ ํฌ๋กค๋ง ์ ˆ์ฐจ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ 3~4ํšŒ์˜ ๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋„๋ก ๊ตฌํ˜„ - - **DB ์„ค๊ณ„ ๋ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ** - - ํฌ๋กค๋งํ•œ ์ƒ์˜ ์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก DB ํ…Œ์ด๋ธ” ์„ค๊ณ„ - - ์ƒ์˜ ์ •๋ณด ์กฐํšŒ ์†๋„์™€ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์˜ํ™”๊ด€, ์˜ํ™” ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ์˜์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋„๋ก ํ•จ - ![erd.png](./img/erd.png) - - **ํฌ๋กค๋ง ์†๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ ์ ์šฉ** - - ์—ฌ๋Ÿฌ ์˜ํ™”๊ด€์˜ ์ƒ์˜ ์ •๋ณด๋ฅผ ๋™์‹œ์— ์ˆ˜์ง‘ํ•˜์—ฌ ์‹œ๊ฐ„ ์ตœ์ ํ™” - - ์‹œ๊ฐ„ ์ตœ์ ํ™” -- ํ”„๋ก ํŠธ์—”๋“œ - - React๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• - - React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ UI ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ• - - UI ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ๋…๋ฆฝ์  ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅ์„ฑ ํ–ฅ์ƒ๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™” - - ![4.png](./img/4.png) - - **์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ** - - useState๋ฅผ ํ™œ์šฉํ•œ ๋™์  ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๋“ฑ) ๊ด€๋ฆฌ - - useEffect๋ฅผ ํ†ตํ•œ ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋ฐ DOM ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ - - useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ ์œ ์ง€์™€ ์ฆ‰์‹œ ์ฐธ์กฐ ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด - - ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ž๋™ ๋ Œ๋”๋ง ๋ฐ ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™”๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ - - Context API๋ฅผ ํ†ตํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„์ž… - - ์ค‘๋ณต๋œ ์ƒํƒœ ์ „๋‹ฌ ์—†์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ - ![3.png](./img/3.png) - - **๋ฐฑ์—”๋“œ API์™€์˜ ํ†ต์‹ ** - - ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ •๋ณด(์˜ํ™” ์ด๋ฆ„, ์ง€์—ญ, ๋‚ ์งœ ๋“ฑ)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„๋™๊ธฐ ํ†ต์‹  ๊ตฌํ˜„ - - fetch API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„ ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด ๋ฐ ์‘๋‹ต๊ฐ’ ๋ฐ˜ํ™˜ - - ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์—†๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ตœ์ ํ™” - ![2.png](./img/2.png) - ![1.png](./img/1.png) - - ํ•ต์‹ฌ ๊ธฐ๋Šฅ - - ์‹ค์‹œ๊ฐ„ ์˜ํ™” ์ƒ์˜ ์ •๋ณด ์ œ๊ณต: ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์‘๋‹ต ์ œ๊ณต ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์˜ํ™”, ์ง€์—ญ, ๋‚ ์งœ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์˜ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ œ๊ณต - - ์ƒํƒœ ๊ธฐ๋ฐ˜ UI ์—…๋ฐ์ดํŠธ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ ๋ฐฑ์—”๋“œ ์‘๋‹ต์— ๋”ฐ๋ฅธ UI ์‹ค์‹œ๊ฐ„ ๋ณ€๊ฒฝ ์ฒ˜๋ฆฌ. ์ง€์—ญ ์„ ํƒ ์‹œ ์ž…๋ ฅ๊ฐ’๊ณผ ์‘๋‹ต๊ฐ’์— ๋”ฐ๋ฅธ ๋™์  ์—…๋ฐ์ดํŠธ. - - ์œ ์—ฐํ•œ ํ•„ํ„ฐ๋ง ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ: ์˜ํ™”, ์ง€์—ญ, ๋‚ ์งœ ๋“ฑ์˜ ์„ ํƒ์— ๋”ฐ๋ฅธ ์œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐ ํ•ญ๋ชฉ ๋ณ€๊ฒฝ ์‹œ ์ฆ‰๊ฐ ์ฒ˜๋ฆฌ. - - - lighthouse ์ง€ํ‘œ -![lighthouse.png](./img/lighthouse.png) - -- ๋ฐฑ์—”๋“œ - - RESTful API ์„ค๊ณ„์— ๋Œ€ํ•œ ์ดํ•ด ๋ฐ ์ ์šฉ (์„ค๊ณ„ ๋ฐ API ๋ช…์„ธ์„œ ์ž‘์„ฑ) - - Swagger๋ฅผ ์‚ฌ์šฉํ•œ API ๋ช…์„ธ์„œ ์ž‘์„ฑ (์„ค๊ณ„ ๋ฐ API ๋ช…์„ธ์„œ ์ž‘์„ฑ) - - BDDMockito, JUnit5๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ (ํ…Œ์ŠคํŠธ ์ž‘์„ฑ) - ![test.png](./img/test.png) - - ExceptionHandler์„ ํ†ตํ•œ ๊ณตํ†ต ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (์˜ˆ์™ธ ์ฒ˜๋ฆฌ) - - ์ „์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ํ•œ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋†’์ž„ - - ๋กœ๊น…์„ ํ†ตํ•ด, ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋””๋ฒ„๊น…์ด ์ˆ˜์›” - ![exception.png](./img/exception.png) - - Validation ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ (๊ฒ€์ฆ ๊ณผ์ • ์ถ”๊ฐ€) - - Pattern, Size ์ง€์ •์„ ํ†ตํ•ด ์š”์ฒญ ํ˜•์‹ ์ œํ•œ - - ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™” - ![validate.png](./img/validate.png) - - AI Vectorize ๊ณผ์ • ์Šค์ผ€์ค„๋ง \ No newline at end of file diff --git "a/docs/\352\262\260\352\263\274_\355\224\204\353\241\240\355\212\270\354\227\224\353\223\234.md" "b/docs/\352\262\260\352\263\274_\355\224\204\353\241\240\355\212\270\354\227\224\353\223\234.md" new file mode 100644 index 0000000..dec1924 --- /dev/null +++ "b/docs/\352\262\260\352\263\274_\355\224\204\353\241\240\355\212\270\354\227\224\353\223\234.md" @@ -0,0 +1,35 @@ +# ํ”„๋ก ํŠธ์—”๋“œ +> ์ด๋ฏธ๋ฅด ๋‹ด๋‹น + +- React๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• + - React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ UI ์„ค๊ณ„ ๋ฐ ๊ตฌ์ถ• + - UI ๋ชจ๋“ˆํ™”๋ฅผ ํ†ตํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ๋…๋ฆฝ์  ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅ์„ฑ ํ–ฅ์ƒ๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™” + + + +- **์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ** + - useState๋ฅผ ํ™œ์šฉํ•œ ๋™์  ๋ฐ์ดํ„ฐ(์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๋“ฑ) ๊ด€๋ฆฌ + - useEffect๋ฅผ ํ†ตํ•œ ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ ๋ฐ DOM ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ + - useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  ์ƒํƒœ ์œ ์ง€์™€ ์ฆ‰์‹œ ์ฐธ์กฐ ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด + - ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ž๋™ ๋ Œ๋”๋ง ๋ฐ ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™”๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ + - Context API๋ฅผ ํ†ตํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„์ž… + - ์ค‘๋ณต๋œ ์ƒํƒœ ์ „๋‹ฌ ์—†์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ + + + + - **๋ฐฑ์—”๋“œ API์™€์˜ ํ†ต์‹ ** + - ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ธฐ๋ฐ˜ ์˜ํ™” ์ •๋ณด(์˜ํ™” ์ด๋ฆ„, ์ง€์—ญ, ๋‚ ์งœ ๋“ฑ)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„๋™๊ธฐ ํ†ต์‹  ๊ตฌํ˜„ + - fetch API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„ ์ƒ์˜ ์Šค์ผ€์ค„ ์ •๋ณด ๋ฐ ์‘๋‹ต๊ฐ’ ๋ฐ˜ํ™˜ + - ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์—†๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ตœ์ ํ™” + + + + + - ํ•ต์‹ฌ ๊ธฐ๋Šฅ + - ์‹ค์‹œ๊ฐ„ ์˜ํ™” ์ƒ์˜ ์ •๋ณด ์ œ๊ณต: ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์‘๋‹ต ์ œ๊ณต ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์˜ํ™”, ์ง€์—ญ, ๋‚ ์งœ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์˜ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ œ๊ณต + - ์ƒํƒœ ๊ธฐ๋ฐ˜ UI ์—…๋ฐ์ดํŠธ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ ๋ฐฑ์—”๋“œ ์‘๋‹ต์— ๋”ฐ๋ฅธ UI ์‹ค์‹œ๊ฐ„ ๋ณ€๊ฒฝ ์ฒ˜๋ฆฌ. ์ง€์—ญ ์„ ํƒ ์‹œ ์ž…๋ ฅ๊ฐ’๊ณผ ์‘๋‹ต๊ฐ’์— ๋”ฐ๋ฅธ ๋™์  ์—…๋ฐ์ดํŠธ. + - ์œ ์—ฐํ•œ ํ•„ํ„ฐ๋ง ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ: ์˜ํ™”, ์ง€์—ญ, ๋‚ ์งœ ๋“ฑ์˜ ์„ ํƒ์— ๋”ฐ๋ฅธ ์œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐ ํ•ญ๋ชฉ ๋ณ€๊ฒฝ ์‹œ ์ฆ‰๊ฐ ์ฒ˜๋ฆฌ. + + - lighthouse ์ง€ํ‘œ + + diff --git "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\353\260\261\354\227\224\353\223\234.md" "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\353\260\261\354\227\224\353\223\234.md" new file mode 100644 index 0000000..cfa6f75 --- /dev/null +++ "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\353\260\261\354\227\224\353\223\234.md" @@ -0,0 +1,53 @@ +# ๋ฐฑ์—”๋“œ +> ๊น€์š”ํ•œ ๋‹ด๋‹น + +## ์ธ๊ณต์ง€๋Šฅ Python ์ฝ”๋“œ๋ฅผ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ, ํšจ์œจ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ• ๊นŒ? + +### ๋ฌธ์ œ1 + +- ์ธ๊ณต์ง€๋Šฅ ํŒ€์—์„œ Python ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๊ตฌ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๊ณ ๋ฏผ๋˜๋Š” ์ƒํ™ฉ +- ์„ ํƒ์ง€ + - Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Jython์„ ์‚ฌ์šฉํ•ด ๊ตฌ๋™ + - Python ์ฝ”๋“œ๋ฅผ ๊ตฌ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌ + +### ํ•ด๊ฒฐ + +- Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Jython์„ ์‚ฌ์šฉํ•ด ๊ตฌ๋™ํ•˜๊ธฐ๋กœ ๊ฒฐ์ • +- ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•  ์‹œ, ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ๊ณผ์ • ์ถ”๊ฐ€๋กœ ์ธํ•ด ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€๊ฐ€ ์˜ˆ์ƒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ + +### ๋ฌธ์ œ2 + +- Jython์ด Python 2.7๊นŒ์ง€ ์ง€์›ํ•ด์„œ, ์ตœ์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ +- ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ + +### ํ•ด๊ฒฐ + +- ์„œ๋ฒ„๋ฅผ ๋‘ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•ด, FastAPI์—์„œ ๊ตฌ๋™ํ•ด์„œ ํ•ด๊ฒฐ +- ํšจ๊ณผ + - ์ฑ…์ž„ ๋ถ„์‚ฐ ๋ฐ ํ™•์žฅ์„ฑ ๊ฐœ์„  + - AI ์ฝ”๋“œ ์‹คํ–‰์— ๋Œ€ํ•œ ์ฑ…์ž„์„ FastAPI๊ฐ€ ๋งก์Œ์œผ๋กœ์จ, Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ ๊ฐ€๋Šฅํ•˜๊ณ , ์ด๋กœ ์ธํ•ด ํ™•์žฅ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ƒ์Šนํ•จ + - ์žฅ์•  ๊ฒฉ๋ฆฌ๋กœ ์•ˆ์ •์„ฑ ๊ฐ•ํ™” + - AI ์ฝ”๋“œ ์‹คํ–‰์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์†Œ๋ชจํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋กœ ์ธํ•œ ์žฅ์•  ๋ฐœ์ƒ ์‹œ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌธ์ œ ์ „์—ผ๋˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จ + - ์„ฑ๋Šฅ ๋ฐ ์ฒ˜๋ฆฌ ํšจ์œจ์„ฑ ์ฆ๊ฐ€ + - FastAPI๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ์ง€์›ํ•ด์„œ, AI ์ž‘์—…์„ ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ + +--- + +## ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ํฉ์–ด์ ธ์žˆ๋Š” ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•œ ๋ฒˆ์— ๋ฌถ์„ ์ˆ˜ ์žˆ์„๊นŒ? + +### ๋ฌธ์ œ + +- ์˜ํ™” ์ƒ์˜ ์ •๋ณด, ์˜ํ™”๊ด€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์˜ํ™”๊ด€ ๋ณ„ ์ƒ์˜์ •๋ณด๋ฅผ ์–ป์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ + +### ํ•ด๊ฒฐ + +- stream์˜ groupingBy, mapping์„ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐ + +```java +Map> timesPerTheaterNameMap = dto.stream() + .collect( + groupingBy( + d -> d.getTheater().getName(), + mapping(d -> d.getMovieInfo().getTime(), toList()) + ) + ); \ No newline at end of file diff --git "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\354\235\270\352\263\265\354\247\200\353\212\245.md" "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\354\235\270\352\263\265\354\247\200\353\212\245.md" index 2093855..b8cb61e 100644 --- "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\354\235\270\352\263\265\354\247\200\353\212\245.md" +++ "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\354\235\270\352\263\265\354\247\200\353\212\245.md" @@ -1,3 +1,6 @@ +# ์ธ๊ณต์ง€๋Šฅ +> ์ •์˜ˆ์€, ๊น€ํ˜„์ค‘ ๋‹ด๋‹น + ## chatgpt api๋ฅผ ํ™œ์šฉํ•œ ์ตœ์ ์˜ ์‘๋‹ต ์ƒ์„ฑ ๋ฐฉ๋ฒ• ๋ฌธ์ œ: ์„œ๋น„์Šค ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ •ํ•ด์ง„ ํ˜•์‹์— ๋งž๊ฒŒ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ llmํŠน์„ฑ ์ƒ ๋งค๋ฒˆ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ๋‹ต๋ณ€์ด ์ƒ์„ฑ๋จ diff --git "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\254\353\241\244\353\247\201.md" "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\254\353\241\244\353\247\201.md" new file mode 100644 index 0000000..fa2fe30 --- /dev/null +++ "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\254\353\241\244\353\247\201.md" @@ -0,0 +1,26 @@ +# ํฌ๋กค๋ง +> ์ด๋ฏธ๋ฅด ๋‹ด๋‹น + +## ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ํฌ๋กค๋ง ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์„๊นŒ? + +### ๋ฌธ์ œ1 + +- ์˜ํ™” ์ƒ์˜ ์ •๋ณด์— ๋Œ€ํ•œ ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋ง ํ•˜๋Š”๋ฐ 120๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ + +### ํ•ด๊ฒฐ1 + +- ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ์‚ฌ์šฉํ•ด 40๋ถ„์œผ๋กœ ๋‹จ์ถ• (3๋ฐฐ) + +### ๋ฌธ์ œ 2 + +- ์ผ์ฃผ์ผ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋ง ํ•˜๋Š”๋ฐ, 40 x 7 = 280๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ +- ์ถ”๊ฐ€ ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์‹œ๋„ ํ–ˆ์œผ๋‚˜ context switching ๋ฌธ์ œ ๋ฐœ์ƒ + +### ํ•ด๊ฒฐ 2 + +- ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ • +- ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™” + - ์ตœ๋Œ€ ๊ฐ€์šฉํ•œ cpu ์ˆ˜์— ๋งž๊ฒŒ ํ”„๋กœ์„ธ์Šค ์ˆ˜ ์„ค์ • + - ํฌ๋กค๋ง ๋Œ€์ƒ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค ๋ณ„ ์‚ฌ์ด์ฆˆ ์„ค์ • +- ์ƒˆ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š” ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋งŒ ํฌ๋กค๋งํ•˜๊ธฐ๋กœ ๊ฒฐ์ • +- โ‡’ 25๋ถ„์œผ๋กœ ๋‹จ์ถ• (11๋ฐฐ) diff --git "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\264\353\235\274\354\232\260\353\223\234.md" "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\264\353\235\274\354\232\260\353\223\234.md" index e843de0..507d17d 100644 --- "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\264\353\235\274\354\232\260\353\223\234.md" +++ "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\201\264\353\235\274\354\232\260\353\223\234.md" @@ -1,3 +1,17 @@ +# ํด๋ผ์šฐ๋“œ +> ๊น€๋„๊ฒฝ, ๊น€๋ฏผ์šฐ ๋‹ด๋‹น + +## ๋ชฉ์ฐจ +1. [Mysql ๋„์ปค ์ด๋ฏธ์ง€๋กœ EC2์—์„œ Endtrypoint ์—๋Ÿฌ](#1-mysql-๋„์ปค-์ด๋ฏธ์ง€๋กœ-ec2์—์„œ-endtrypoint-์—๋Ÿฌ) +2. [Python Crawling ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘ chrome browser ์„ค์น˜ ๋ฌธ์ œ](#2-python-crawling-์ด๋ฏธ์ง€-์ƒ์„ฑ-์ค‘-chrome-browser-์„ค์น˜-๋ฌธ์ œ) +3. [ํฌ๋กค๋ง ์ธ์Šคํ„ด์Šค์˜ ์ ์ ˆํ•œ type ์„ค์ •](#3-ํฌ๋กค๋ง-์ธ์Šคํ„ด์Šค์˜-์ ์ ˆํ•œ-type-์„ค์ •) +4. [ํฌ๋กค๋ง ์ด์™ธ์˜ ์‹œ๊ฐ„์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค](#4-ํฌ๋กค๋ง-์ด์™ธ์˜-์‹œ๊ฐ„์—-์‚ฌ์šฉ๋˜์ง€-์•Š๋Š”-์ธ์Šคํ„ด์Šค) +5. [์ธ์Šคํ„ด์Šค์™€ ์„œ๋ธŒ๋„ท ๋“ฑ์˜ ๋„คํŠธ์›Œํฌ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ณต๋ถ€์˜ ํ•„์š”์„ฑ](#5-์ธ์Šคํ„ด์Šค์™€-์„œ๋ธŒ๋„ท-๋“ฑ์˜-๋„คํŠธ์›Œํฌ-๊ด€๊ณ„์—-๋Œ€ํ•œ-๊ณต๋ถ€์˜-ํ•„์š”์„ฑ) +6. [CI/CD๋Š” ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์ธ๊ฐ€?](#6-cicd๋Š”-๋ชจ๋“ -์ƒํ™ฉ์—์„œ-ํ•„์š”ํ•œ-๊ฒƒ์ธ๊ฐ€) +7. [Docker container ๋ฐฐํฌ์‹œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๋ฏผ](#7-docker-container-๋ฐฐํฌ์‹œ-๊ฐ-์ปจํ…Œ์ด๋„ˆ์˜-์—ฐ๊ฒฐ-๋ฐฉ๋ฒ•์—-๋Œ€ํ•œ-๊ณ ๋ฏผ) + +--- + # 1. Mysql ๋„์ปค ์ด๋ฏธ์ง€๋กœ EC2์—์„œ Endtrypoint ์—๋Ÿฌ ### ๋ฌธ์ œ diff --git "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\222\200\354\212\244\355\203\235.md" "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\222\200\354\212\244\355\203\235.md" deleted file mode 100644 index b8eb71e..0000000 --- "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\222\200\354\212\244\355\203\235.md" +++ /dev/null @@ -1,119 +0,0 @@ ---- - -## ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ํฌ๋กค๋ง ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์„๊นŒ? - -๋ฌธ์ œ1 - -- ์˜ํ™” ์ƒ์˜ ์ •๋ณด์— ๋Œ€ํ•œ ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋ง ํ•˜๋Š”๋ฐ 120๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ - -ํ•ด๊ฒฐ1 - -- ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ์‚ฌ์šฉํ•ด 40๋ถ„์œผ๋กœ ๋‹จ์ถ• (3๋ฐฐ) - -๋ฌธ์ œ 2 - -- ์ผ์ฃผ์ผ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋ง ํ•˜๋Š”๋ฐ, 40 x 7 = 280๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ -- ์ถ”๊ฐ€ ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์‹œ๋„ ํ–ˆ์œผ๋‚˜ context switching ๋ฌธ์ œ ๋ฐœ์ƒ - -ํ•ด๊ฒฐ 2 - -- ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ • -- ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™” - - ์ตœ๋Œ€ ๊ฐ€์šฉํ•œ cpu ์ˆ˜์— ๋งž๊ฒŒ ํ”„๋กœ์„ธ์Šค ์ˆ˜ ์„ค์ • - - ํฌ๋กค๋ง ๋Œ€์ƒ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค ๋ณ„ ์‚ฌ์ด์ฆˆ ์„ค์ • -- ์ƒˆ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š” ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋งŒ ํฌ๋กค๋งํ•˜๊ธฐ๋กœ ๊ฒฐ์ • -- โ‡’25๋ถ„์œผ๋กœ ๋‹จ์ถ• (11๋ฐฐ) - ---- - -## ์ธ๊ณต์ง€๋Šฅ Python ์ฝ”๋“œ๋ฅผ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ, ํšจ์œจ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ• ๊นŒ? - -### ๋ฌธ์ œ1 - -- ์ธ๊ณต์ง€๋Šฅ ํŒ€์—์„œ Python ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๊ตฌ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๊ณ ๋ฏผ๋˜๋Š” ์ƒํ™ฉ -- ์„ ํƒ์ง€ - - Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Jython์„ ์‚ฌ์šฉํ•ด ๊ตฌ๋™ - - Python ์ฝ”๋“œ๋ฅผ ๊ตฌ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌ - -### ํ•ด๊ฒฐ - -- Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Jython์„ ์‚ฌ์šฉํ•ด ๊ตฌ๋™ํ•˜๊ธฐ๋กœ ๊ฒฐ์ • -- ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•  ์‹œ, ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ๊ณผ์ • ์ถ”๊ฐ€๋กœ ์ธํ•ด ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€๊ฐ€ ์˜ˆ์ƒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ - -### ๋ฌธ์ œ2 - -- Jython์ด Python 2.7๊นŒ์ง€ ์ง€์›ํ•ด์„œ, ์ตœ์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ -- ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ - -### ํ•ด๊ฒฐ - -- ์„œ๋ฒ„๋ฅผ ๋‘ ๊ฐœ๋กœ ๋ถ„๋ฆฌํ•ด, FastAPI์—์„œ ๊ตฌ๋™ํ•ด์„œ ํ•ด๊ฒฐ -- ํšจ๊ณผ - - ์ฑ…์ž„ ๋ถ„์‚ฐ ๋ฐ ํ™•์žฅ์„ฑ ๊ฐœ์„  - - AI ์ฝ”๋“œ ์‹คํ–‰์— ๋Œ€ํ•œ ์ฑ…์ž„์„ FastAPI๊ฐ€ ๋งก์Œ์œผ๋กœ์จ, Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ ๊ฐ€๋Šฅํ•˜๊ณ , ์ด๋กœ ์ธํ•ด ํ™•์žฅ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ƒ์Šนํ•จ - - ์žฅ์•  ๊ฒฉ๋ฆฌ๋กœ ์•ˆ์ •์„ฑ ๊ฐ•ํ™” - - AI ์ฝ”๋“œ ์‹คํ–‰์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์†Œ๋ชจํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋กœ ์ธํ•œ ์žฅ์•  ๋ฐœ์ƒ ์‹œ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌธ์ œ ์ „์—ผ๋˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จ - - ์„ฑ๋Šฅ ๋ฐ ์ฒ˜๋ฆฌ ํšจ์œจ์„ฑ ์ฆ๊ฐ€ - - FastAPI๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ์ง€์›ํ•ด์„œ, AI ์ž‘์—…์„ ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ - ---- - -## ์—ฌ๋Ÿฌ ๊ฐ์ฒด์— ํฉ์–ด์ ธ์žˆ๋Š” ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•œ ๋ฒˆ์— ๋ฌถ์„ ์ˆ˜ ์žˆ์„๊นŒ? - -### ๋ฌธ์ œ - -- ์˜ํ™” ์ƒ์˜ ์ •๋ณด, ์˜ํ™”๊ด€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์˜ํ™”๊ด€ ๋ณ„ ์ƒ์˜์ •๋ณด๋ฅผ ์–ป์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ - -### ํ•ด๊ฒฐ - -- stream์˜ groupingBy, mapping์„ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐ - -```java -Map> timesPerTheaterNameMap = dto.stream() - .collect( - groupingBy( - d -> d.getTheater().getName(), - mapping(d -> d.getMovieInfo().getTime(), toList()) - ) - ); -``` - ---- - -## ์˜ํ™” ์ƒ์˜ ์Šค์ผ€์ค„ ํฌ๋กค๋ง ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์„๊นŒ? - -### ๋ฌธ์ œ1 - -- ์˜ํ™” ์ƒ์˜ ์ •๋ณด์— ๋Œ€ํ•œ ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋ง ํ•˜๋Š”๋ฐ 120๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ - -### ํ•ด๊ฒฐ1 - -- ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ์‚ฌ์šฉํ•ด 40๋ถ„์œผ๋กœ ๋‹จ์ถ• (3๋ฐฐ) - -### ๋ฌธ์ œ 2 - -- ์ผ์ฃผ์ผ์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋ง ํ•˜๋Š”๋ฐ, 40 x 7 = 280๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ์ƒํ™ฉ -- ์ถ”๊ฐ€ ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์‹œ๋„ ํ–ˆ์œผ๋‚˜ context switching ๋ฌธ์ œ ๋ฐœ์ƒ - -### ํ•ด๊ฒฐ 2 - -- ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ • -- ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™” - - ์ตœ๋Œ€ ๊ฐ€์šฉํ•œ cpu ์ˆ˜์— ๋งž๊ฒŒ ํ”„๋กœ์„ธ์Šค ์ˆ˜ ์„ค์ • - - ํฌ๋กค๋ง ๋Œ€์ƒ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค ๋ณ„ ์‚ฌ์ด์ฆˆ ์„ค์ • -- ์ƒˆ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋Š” ํ•˜๋ฃจ์น˜ ๋ฐ์ดํ„ฐ๋งŒ ํฌ๋กค๋งํ•˜๊ธฐ๋กœ ๊ฒฐ์ • -- โ‡’ 25๋ถ„์œผ๋กœ ๋‹จ์ถ• (11๋ฐฐ) - ---- - -## ์ƒํƒœ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†์„๊นŒ? - -### ๋ฌธ์ œ - -- React์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ useEffect๋งŒ์œผ๋กœ๋Š” ์ตœ์‹  ์ƒํƒœ ๋ฐ˜์˜ ๋ถˆ๊ฐ€ -- ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฐธ์กฐํ•˜๋ฉด ์ตœ์‹  ๊ฐ’์ด ์•„๋‹Œ ์ด์ „ ๊ฐ’์ด ์ฐธ์กฐ๋˜์–ด ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ - -### **ํ•ด๊ฒฐ** - -- useEffect๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ์—์„œ ์ตœ์‹  ์ƒํƒœ๊ฐ’์„ ๋ฐ”๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ํŒŒ์•… -- ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด useRef๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ์— ๋ฐ˜์˜๋˜๋„๋ก ๊ตฌํ˜„ \ No newline at end of file diff --git "a/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\224\204\353\241\240\355\212\270\354\227\224\353\223\234.md" "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\224\204\353\241\240\355\212\270\354\227\224\353\223\234.md" new file mode 100644 index 0000000..39b7975 --- /dev/null +++ "b/docs/\355\212\270\353\237\254\353\270\224\354\212\210\355\214\205_\355\224\204\353\241\240\355\212\270\354\227\224\353\223\234.md" @@ -0,0 +1,14 @@ +# ํ”„๋ก ํŠธ์—”๋“œ +> ์ด๋ฏธ๋ฅด ๋‹ด๋‹น + +## ์ƒํƒœ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†์„๊นŒ? + +### ๋ฌธ์ œ + +- React์—์„œ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ useEffect๋งŒ์œผ๋กœ๋Š” ์ตœ์‹  ์ƒํƒœ ๋ฐ˜์˜ ๋ถˆ๊ฐ€ +- ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฐธ์กฐํ•˜๋ฉด ์ตœ์‹  ๊ฐ’์ด ์•„๋‹Œ ์ด์ „ ๊ฐ’์ด ์ฐธ์กฐ๋˜์–ด ๋ฐ์ดํ„ฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ + +### **ํ•ด๊ฒฐ** + +- useEffect๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ํ•จ์ˆ˜๋‚˜ ์ด๋ฒคํŠธ์—์„œ ์ตœ์‹  ์ƒํƒœ๊ฐ’์„ ๋ฐ”๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ํŒŒ์•… +- ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด useRef๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ์— ๋ฐ˜์˜๋˜๋„๋ก ๊ตฌํ˜„ \ No newline at end of file diff --git "a/docs/\355\232\214\352\263\240.md" "b/docs/\355\232\214\352\263\240.md" index 33d9765..359724e 100644 --- "a/docs/\355\232\214\352\263\240.md" +++ "b/docs/\355\232\214\352\263\240.md" @@ -26,8 +26,10 @@ - **๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœ ํ•œ๊ฒƒ** - Alyssa - - ๐Ÿ˜ƒย **ChatGPT API๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉ, ๋งค๋ฒˆ ์ผ์ •ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์„ฑ๊ณต โ†’ ์„œ๋น„์Šค ํ’ˆ์งˆ ํ–ฅ์ƒ** - - ๐Ÿฅฒย ๊ธฐํš ๋‹จ๊ณ„์— ์‹œ๊ฐ„์„ ์ข€ ๋” ์Ÿ์•˜๋‹ค๋ฉด ํ•˜๋Š” ์•„์‰ฌ์›€ + - **ChatGPT API๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉ, ๋งค๋ฒˆ ์ผ์ •ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์„ฑ๊ณต โ†’ ์„œ๋น„์Šค ํ’ˆ์งˆ ํ–ฅ์ƒ** + - ๊ธฐํš ๋‹จ๊ณ„์— ์‹œ๊ฐ„์„ ์ข€ ๋” ์Ÿ์•˜๋‹ค๋ฉด ํ•˜๋Š” ์•„์‰ฌ์›€ + +--- ### โ€˜๋ฐฐ์›€โ€™ ์ธก๋ฉด (๋ฐฐ์šด ๊ฒƒ, ํ–ฅํ›„ ์‹ค๋ฌด ํ™œ์šฉ ๊ฐ€๋Šฅ ์ •๋„ ๋“ฑ) @@ -41,8 +43,12 @@ - AI-๋ฐฑ์—”๋“œ-ํ”„๋ก ํŠธ์—”๋“œ/ํด๋ผ์šฐ๋“œ์˜ ํ๋ฆ„๊ณผ, Fast API์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์˜ ์Šต๋“ ๋ฐ langchain์„ ์ด์šฉํ•œ LLM๊ฐ€๊ณต ๊ธฐ์ˆ  ํš๋“ - ์•„์‰ฌ์šด์  - ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ ์˜ ํ๋ฆ„์€ ์•Œ์•˜์ง€๋งŒ ์•„์ง ํ•™์Šต๊ณผ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•จ. -- Alyssa: ๐Ÿ˜ƒย ๋ฐฑ์—”๋“œ-AI-ํ”„๋ก ํŠธ์—”๋“œ ๋“ฑ **์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„**๊ณผ ํ˜‘์—… ๋ฐฉ์‹์„ ์Šต๋“ โ†’ ํ–ฅํ›„ ์‹ค๋ฌด์— ์ ์šฉ ๊ฐ€๋Šฅ -- Eddy : CI/CD์— ๊ด€ํ•œ ์„ค๊ณ„ ๋ฐฉ์‹ ๋ฐ ํšจ์œจ์„ฑ์„ ๋”ฐ์ง€๊ณ  ๋ณด๊ฒŒ ๋จ +- Alyssa + - ์ž˜ํ•œ ์  + - ๋ฐฑ์—”๋“œ-AI-ํ”„๋ก ํŠธ์—”๋“œ ๋“ฑ **์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„**๊ณผ ํ˜‘์—… ๋ฐฉ์‹์„ ์Šต๋“ โ†’ ํ–ฅํ›„ ์‹ค๋ฌด์— ์ ์šฉ ๊ฐ€๋Šฅ +- Eddy + - ์ž˜ํ•œ ์  + - CI/CD์— ๊ด€ํ•œ ์„ค๊ณ„ ๋ฐฉ์‹ ๋ฐ ํšจ์œจ์„ฑ์„ ๋”ฐ์ง€๊ณ  ๋ณด๊ฒŒ ๋จ - Mir - ์ž˜ํ•œ ์  - ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ตฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒฝํ—˜ @@ -58,6 +64,8 @@ - **๋ชจ๋“  ๊ฒƒ์ด ์ฒ˜์Œ์ด๊ณ  ๋ฐฐ์šฐ๋ฉด์„œ ํ–ˆ๊ธฐ์—, ์–‡๊ณ  ๋„“๊ฒŒ ๋ฐฐ์šด๊ฑฐ ๊ฐ™์•„ ์•„์‰ฝ๋‹ค.** - ์‹ค๋ฌด์—์„œ๋Š” ์ด์ •๋„ ๊ทœ๋ชจ๊ฐ€ ์•„๋‹Œ ๋ช‡๋ฐฐ ๋ช‡์‹ญ๋ฐฐ๋Š” ํฐ ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•ด์•ผํ• ํ…๋ฐ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ๋งŒ ์ปค์ ธ๊ฐ”๋‹ค. +--- + ### โ€˜ํ˜‘์—…โ€™ ์ธก๋ฉด (ํŒ€ ์šด์˜ ๊ด€๋ จ ๋“ฑ) - Yohan @@ -92,6 +100,6 @@ - ์•„์‰ฌ์šด ์  - ์‹œ๊ฐ„ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ๋‹ค๋ฅธ ํŒ€์›๋“ค์˜ ์ฝ”๋“œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€๋Š” ๋ชปํ•œ ์  - Alyssa - - ๐Ÿ˜ƒย ๋งค์ผ ์Šคํฌ๋Ÿผ์„ ์ง„ํ–‰ํ•ด ์„œ๋กœ ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ๋ฌธ์ œ์ ์„ ๊ณต์œ ํ•œ ๊ฒƒ - - ๐Ÿ˜ƒย ์• ์ž์ผ ๋ฐฉ์‹์„ ๋„์ž…ํ•ด ๊ฐœ๋ฐœ/๋น„๊ฐœ๋ฐœ ๋ชจ๋“  ์ธก๋ฉด์—์„œ ๋ฌธ์ œ์ ์ด ์žˆ์œผ๋ฉด โ†’ **๋ฐ”๋กœ ๋…ผ์˜ํ•ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ํƒœ๋„๋ฅผ ์œ ์ง€ํ•œ ๊ฒƒ** - - ๐Ÿฅฒย ๊ฐ ์Šคํ”„๋ฆฐํŠธ๊ฐ€ ์›๋ž˜ ๊ณ„ํšํ–ˆ๋˜๋Œ€๋กœ ๊ธฐํšโ†’๊ฐœ๋ฐœโ†’ํ…Œ์ŠคํŠธ, ํ”ผ๋“œ๋ฐฑโ†’ํšŒ๊ณ ๊ฐ€ ํ•œ ์Šคํ”„๋ฆฐํŠธ ๋‚ด์— ์ด๋ค„์กŒ์œผ๋ฉด ์ข‹์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค. ์šฐ๋ฆฌ ํŒ€์—๊ฒŒ ์ ์ ˆํ•œ ์Šคํ”„๋ฆฐํŠธ ์ฃผ๊ธฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์ด**๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ฐพ์€ ์ ์ ˆํ•œ ์ฃผ๊ธฐ๋ฅผ ์•ž์œผ๋กœ ๋” ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์—†์–ด ์•„์‰ฝ๋‹ค.** \ No newline at end of file + - ๋งค์ผ ์Šคํฌ๋Ÿผ์„ ์ง„ํ–‰ํ•ด ์„œ๋กœ ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ๋ฌธ์ œ์ ์„ ๊ณต์œ ํ•œ ๊ฒƒ + - ์• ์ž์ผ ๋ฐฉ์‹์„ ๋„์ž…ํ•ด ๊ฐœ๋ฐœ/๋น„๊ฐœ๋ฐœ ๋ชจ๋“  ์ธก๋ฉด์—์„œ ๋ฌธ์ œ์ ์ด ์žˆ์œผ๋ฉด โ†’ **๋ฐ”๋กœ ๋…ผ์˜ํ•ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ํƒœ๋„๋ฅผ ์œ ์ง€ํ•œ ๊ฒƒ** + - ๊ฐ ์Šคํ”„๋ฆฐํŠธ๊ฐ€ ์›๋ž˜ ๊ณ„ํšํ–ˆ๋˜๋Œ€๋กœ ๊ธฐํšโ†’๊ฐœ๋ฐœโ†’ํ…Œ์ŠคํŠธ, ํ”ผ๋“œ๋ฐฑโ†’ํšŒ๊ณ ๊ฐ€ ํ•œ ์Šคํ”„๋ฆฐํŠธ ๋‚ด์— ์ด๋ค„์กŒ์œผ๋ฉด ์ข‹์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค. ์šฐ๋ฆฌ ํŒ€์—๊ฒŒ ์ ์ ˆํ•œ ์Šคํ”„๋ฆฐํŠธ ์ฃผ๊ธฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์ด**๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ฐพ์€ ์ ์ ˆํ•œ ์ฃผ๊ธฐ๋ฅผ ์•ž์œผ๋กœ ๋” ํ…Œ์ŠคํŠธํ•ด๋ณผ ์ˆ˜ ์—†์–ด ์•„์‰ฝ๋‹ค.** \ No newline at end of file