diff --git a/week2/yunakang/README.md b/week2/yunakang/README.md deleted file mode 100644 index 9e5f5f8..0000000 --- a/week2/yunakang/README.md +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/week2/yunakang/.gitignore "b/week2/yunakang/week2.\352\263\274\354\240\234/.gitignore" similarity index 100% rename from week2/yunakang/.gitignore rename to "week2/yunakang/week2.\352\263\274\354\240\234/.gitignore" diff --git "a/week2/yunakang/week2.\352\263\274\354\240\234/README.md" "b/week2/yunakang/week2.\352\263\274\354\240\234/README.md" new file mode 100644 index 0000000..4e307a8 --- /dev/null +++ "b/week2/yunakang/week2.\352\263\274\354\240\234/README.md" @@ -0,0 +1,133 @@ +# ๐Ÿท๏ธWEEK 2 ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ, ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด ๊ด€๊ณ„ +[์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ] ์„น์…˜ 4-5์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  TIL์„ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. +## ๐Ÿ”Ž ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ +### 1๏ธโƒฃ ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ +--------------------- +๋ฐ์ดํ„ฐ: ํšŒ์›ID, ์ด๋ฆ„ / ๊ธฐ๋Šฅ: ํšŒ์› ๋“ฑ๋ก, ์กฐํšŒ +![์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ](https://github.com/user-attachments/assets/204e3b0c-62b5-4391-a4df-4207910669df) + +![์ธํ„ฐํŽ˜์ด์Šค, ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ](https://github.com/user-attachments/assets/bd7fe7d6-7da1-41ba-94c1-980f5063ca27) + +### 2๏ธโƒฃ ํšŒ์› ๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ +----------------------- +src/main/java/hello.yunakang ์— `domain` ํŒจํ‚ค์ง€ ์ƒ์„ฑ โ†’ ๊ทธ ์•ˆ์— `Member` ํด๋ž˜์Šค ์ƒ์„ฑ + + +๋˜ํ•œ, hello.yunakang ์•ˆ์— `repository` ํŒจํ‚ค์ง€ ์ƒ์„ฑ โ†’ ๊ทธ ์•ˆ์— class๋กœ ํ•˜๋Š”๋ฐ `MemberRepository` ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ƒ์„ฑ + +`Optional` ; java 8์— ๋“ค์–ด๊ฐ, null ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋‹ค๋ฃธ + +repository ํŒจํ‚ค์ง€ ์•ˆ์— `MemoryMemberRepository` ํด๋ž˜์Šค ์ƒ์„ฑ + +### 3๏ธโƒฃ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ +-------------------------- +ํ…Œ์ŠคํŠธ ์‹œ, ์ž๋ฐ”์˜ main ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ or ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‹คํ–‰. + +<= ์ค€๋น„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ค์›€. + +โ‡’ ์ž๋ฐ”๋Š” `JUnit`์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๋ฌธ์ œ ํ•ด๊ฒฐ!! + +test/hello.hellospring์— `repository` ํŒจํ‚ค์ง€ ์ƒ์„ฑ โ‡’ ๊ทธ ์•ˆ์— `MemoryMemberRepositoryTest` ํด๋ž˜์Šค ์ƒ์„ฑ + +`get()` : Optional ์“ธ ๋•Œ ๊ฐ’ ๊บผ๋‚ด๋Š” ํ•จ์ˆ˜, ์ข‹์€ ๋ฐฉ๋ฒ•์€ x + +test๋ณ„๋กœ ๋Œ๋ฆด ์ˆ˜๋„ ์žˆ๊ณ , ์ „์ฒด ๋‹ค test ๋Œ๋ฆด ์ˆ˜ o + +but, ๋ชจ๋“  test๋Š” ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ x โ‡’ ์ˆœ์„œ์— ์˜์กด์ ์ด๋ฉด x, + +`afterEach()` ์‹คํ–‰ : test ๋๋‚  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰, ์—ฌ๊ธฐ์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. + +**์ •์ƒ ์ถœ๋ ฅ** +![์ •์ƒ ์ถœ๋ ฅ](https://github.com/user-attachments/assets/3dfcfdc8-bb2c-4323-bc5c-cfbff5d7b04e) + +**์ฝ”๋“œ ์ˆœ์„œ ์˜์กด์ ์ด์–ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” error** +![์ฝ”๋“œ ์ˆœ์„œ ์˜์กด์ ์ด์–ด์„œ ๋‚˜ํƒ€๋‚œ ์—๋Ÿฌ](https://github.com/user-attachments/assets/b3e60554-6041-4165-89a9-6c5938d4116b) + +**error ์ˆ˜์ • ํ›„ ์ „์ฒด test ๋Œ๋ฆฌ๊ธฐ** +![์ „์ฒด test ๋Œ๋ฆฌ๊ธฐ](https://github.com/user-attachments/assets/54ba1345-931b-44b3-8426-dbd840d1af3d) + +### 4๏ธโƒฃ ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ +main/java/hello.yunakang์—์„œ `service` ํŒจํ‚ค์ง€ ์ƒ์„ฑ โ‡’ ๊ทธ ์•ˆ์— `MemberService` ํด๋ž˜์Šค ์ƒ์„ฑ + +ctrl + t๋กœ ๋”ฐ๋กœ ๋ฉ”์„œ๋“œ ๋ฝ‘์•„๋‚ด๊ธฐ `validateDuplicateMember` ํ•จ์ˆ˜ ๋ฝ‘์•„๋‚ด๊ธฐ + +**โ‡’ service๋Š” ์šฉ์–ด๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฐฉํ–ฅ, repository๋Š” ๋น„๊ต์  ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ์šฉ์–ด** + +### 5๏ธโƒฃ ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ +class ๊ฐ€๋ฆฌํ‚ค๊ณ , `alt+enter` โ‡’ CREATE new test + +testing library : Junit5 ๋ฐ‘์— ํ•จ์ˆ˜ ๋‹ค ์ฒดํฌ! + +test ํ•จ์ˆ˜๋ช…์€ ํ•œ๊ธ€๋กœ ์ ์–ด๋„ ๋จ! + +test ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ given, when, then(๊ฒ€์ฆ) ์ฃผ์„ ๋งŽ์ด ์‚ฌ์šฉ, test๋Š” ์ •์ƒ flow๋ณด๋‹ค ์˜ˆ์™ธ flow๊ฐ€ ๋” ์ค‘์š”ํ•จ + +์ค‘๋ณต_ํšŒ์›_์˜ˆ์™ธ ํ•จ์ˆ˜์—์„œ try-catch๋ฌธ ์ž˜ ์“ฐ์ง€ x + +`@BeforeEach`: ๊ฐ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ „์— ํ˜ธ์ถœ๋œ๋‹ค. + +ํ…Œ์ŠคํŠธ๊ฐ€ ์„œ๋กœ ์˜ํ–ฅ์ด ์—†๋„๋ก ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด๊ด€๊ณ„๋„ ์ƒˆ๋กœ ๋งบ์–ด์ค€๋‹ค + `@AfterEach` ๋„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ + +**ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ** +![ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ](https://github.com/user-attachments/assets/1a47ce18-de91-4a82-a323-b22ffe932b03) + + +## ๐ŸŒฑ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด ๊ด€๊ณ„ +### 1๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด ๊ด€๊ณ„ ์„ค์ • +--------------------- +main/java/hello.yunakang/controller์—์„œ `MemberController` class ์ƒ์„ฑ + +`MemberService`์—์„œ **@Service, @Autowired** ๋„ฃ์–ด์ฃผ๊ณ , `MemoryMemberRepository`์—์„œ๋Š” **@Repository** ๋„ฃ์–ด์ฃผ๊ธฐ + +**์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์ฝ”๋“œ ์ถ”๊ฐ€ ์ดํ›„ ์‹คํ–‰ ํ™•์ธ** +![์ฝ”๋“œ ์ถ”๊ฐ€ ์ดํ›„ ์‹คํ–‰ ํ™•์ธ](https://github.com/user-attachments/assets/13e4a140-ef92-41da-9b97-151382fb12f5) + + +**<์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•>** + +** ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ์ด๋ฏธ์ง€** +![์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก ์ด๋ฏธ์ง€](https://github.com/user-attachments/assets/ed7289d1-1683-4be0-8ec8-4f9a8fe17dac) + +- ์ปดํฌ๋„ŒํŠธ ์Šค์บ”(์œ„์˜ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ @ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•)โ‡’ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ • +- ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ + + **<์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์›๋ฆฌ>** + - @Component ์žˆ์œผ๋ฉด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค. + - @Controller ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ ์ด์œ ๋„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋•Œ๋ฌธ์ด๋‹ค. + - @Component๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹ค์Œ ์• ๋…ธํ…Œ์ด์…˜๋„ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ์ž๋™ ๋“ฑ๋ก๋œ๋‹ค. + - @Controller + - @Service + - @Repository + + ์Šคํ”„๋ง์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ, ๊ธฐ๋ณธ์œผ๋กœ **์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋“ฑ๋ก**(์œ ์ผํ•˜๊ฒŒํ•˜๋‚˜๋งŒ ๋“ฑ๋กํ•ด์„œ ๊ณต์œ ) + + ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์Šคํ”„๋ง ๋นˆ์ด๋ฉด ๋ชจ๋‘ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค! ์„ค์ •์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์ด ์•„๋‹ˆ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ ์‹ฑ๊ธ€ํ†ค์„ ์‚ฌ์šฉ + + +### 2๏ธโƒฃ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ +--------------------------- +ํšŒ์› ์„œ๋น„์Šค์™€ ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ @Service, @Repository, @Autowired ์• ๋…ธํ…Œ์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ณ  ์ง„ํ–‰ + +1. memberservice์™€ memorymemberrepository์—์„œ๋„ ์• ๋…ธํ…Œ์ด์…˜ ๋‹ค ์ œ๊ฑฐ +2. main/java/hello.yunakang์—์„œ `SpringConfig` ํด๋ž˜์Šค ์ถ”๊ฐ€ +3. ์‹คํ–‰ํ•ด๋ณด๊ธฐ + +**์‹คํ–‰ ๊ฒฐ๊ณผ** +![์‹คํ–‰ ๊ฒฐ๊ณผ](https://github.com/user-attachments/assets/28776789-e27c-4777-993e-188bdd05cdb9) + +DI(dependency Injection) ์—๋Š” ํ•„๋“œ ์ฃผ์ž…, setter ์ฃผ์ž…, ์ƒ์„ฑ์ž ์ฃผ์ž… ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์‹คํ–‰์ค‘์— ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฏ€๋กœ **์ƒ์„ฑ์ž ์ฃผ์ž…์„ ๊ถŒ์žฅ!!** + +โ† setter ์ฃผ์ž…์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ, public์œผ๋กœ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ํ›ผ์†๋  ๊ฐ€๋Šฅ์„ฑ o + +์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉ, ๊ทธ๋ฆฌ๊ณ  ์ •ํ˜•ํ™” ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฉด ์„ค์ •์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก; ์ง์ ‘ ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€์งˆ ๋•Œ์˜ ์žฅ์ ! + + +## ๐Ÿงก ์ •๋ฆฌ ๋…ธ์…˜ + + + + + + + + diff --git a/week2/yunakang/build.gradle "b/week2/yunakang/week2.\352\263\274\354\240\234/build.gradle" similarity index 100% rename from week2/yunakang/build.gradle rename to "week2/yunakang/week2.\352\263\274\354\240\234/build.gradle" diff --git a/week2/yunakang/gradle/wrapper/gradle-wrapper.jar "b/week2/yunakang/week2.\352\263\274\354\240\234/gradle/wrapper/gradle-wrapper.jar" similarity index 100% rename from week2/yunakang/gradle/wrapper/gradle-wrapper.jar rename to "week2/yunakang/week2.\352\263\274\354\240\234/gradle/wrapper/gradle-wrapper.jar" diff --git a/week2/yunakang/gradle/wrapper/gradle-wrapper.properties "b/week2/yunakang/week2.\352\263\274\354\240\234/gradle/wrapper/gradle-wrapper.properties" similarity index 100% rename from week2/yunakang/gradle/wrapper/gradle-wrapper.properties rename to "week2/yunakang/week2.\352\263\274\354\240\234/gradle/wrapper/gradle-wrapper.properties" diff --git a/week2/yunakang/gradlew "b/week2/yunakang/week2.\352\263\274\354\240\234/gradlew" similarity index 100% rename from week2/yunakang/gradlew rename to "week2/yunakang/week2.\352\263\274\354\240\234/gradlew" diff --git a/week2/yunakang/gradlew.bat "b/week2/yunakang/week2.\352\263\274\354\240\234/gradlew.bat" similarity index 100% rename from week2/yunakang/gradlew.bat rename to "week2/yunakang/week2.\352\263\274\354\240\234/gradlew.bat" diff --git a/week2/yunakang/settings.gradle "b/week2/yunakang/week2.\352\263\274\354\240\234/settings.gradle" similarity index 100% rename from week2/yunakang/settings.gradle rename to "week2/yunakang/week2.\352\263\274\354\240\234/settings.gradle" diff --git a/week2/yunakang/src/main/java/hello/yunakang/SpringConfig.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/SpringConfig.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/SpringConfig.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/SpringConfig.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/YunakangApplication.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/YunakangApplication.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/YunakangApplication.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/YunakangApplication.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/controller/HelloController.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/controller/HelloController.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/controller/HelloController.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/controller/HelloController.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/controller/MemberController.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/controller/MemberController.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/controller/MemberController.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/controller/MemberController.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/domain/Member.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/domain/Member.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/domain/Member.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/domain/Member.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/repository/MemberRepository.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/repository/MemberRepository.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/repository/MemberRepository.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/repository/MemberRepository.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/repository/MemoryMemberRepository.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/repository/MemoryMemberRepository.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/repository/MemoryMemberRepository.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/repository/MemoryMemberRepository.java" diff --git a/week2/yunakang/src/main/java/hello/yunakang/service/MemberService.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/service/MemberService.java" similarity index 100% rename from week2/yunakang/src/main/java/hello/yunakang/service/MemberService.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/java/hello/yunakang/service/MemberService.java" diff --git a/week2/yunakang/src/main/resources/application.properties "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/application.properties" similarity index 100% rename from week2/yunakang/src/main/resources/application.properties rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/application.properties" diff --git a/week2/yunakang/src/main/resources/static/hello-static.html "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/static/hello-static.html" similarity index 100% rename from week2/yunakang/src/main/resources/static/hello-static.html rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/static/hello-static.html" diff --git a/week2/yunakang/src/main/resources/static/index.html "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/static/index.html" similarity index 100% rename from week2/yunakang/src/main/resources/static/index.html rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/static/index.html" diff --git a/week2/yunakang/src/main/resources/templates/hello-template.html "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/templates/hello-template.html" similarity index 100% rename from week2/yunakang/src/main/resources/templates/hello-template.html rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/templates/hello-template.html" diff --git a/week2/yunakang/src/main/resources/templates/hello.html "b/week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/templates/hello.html" similarity index 100% rename from week2/yunakang/src/main/resources/templates/hello.html rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/main/resources/templates/hello.html" diff --git a/week2/yunakang/src/test/java/hello/yunakang/YunakangApplicationTests.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/test/java/hello/yunakang/YunakangApplicationTests.java" similarity index 100% rename from week2/yunakang/src/test/java/hello/yunakang/YunakangApplicationTests.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/test/java/hello/yunakang/YunakangApplicationTests.java" diff --git a/week2/yunakang/src/test/java/hello/yunakang/repository/MemoryMemberRepositoryTest.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/test/java/hello/yunakang/repository/MemoryMemberRepositoryTest.java" similarity index 100% rename from week2/yunakang/src/test/java/hello/yunakang/repository/MemoryMemberRepositoryTest.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/test/java/hello/yunakang/repository/MemoryMemberRepositoryTest.java" diff --git a/week2/yunakang/src/test/java/hello/yunakang/service/MemberServiceTest.java "b/week2/yunakang/week2.\352\263\274\354\240\234/src/test/java/hello/yunakang/service/MemberServiceTest.java" similarity index 100% rename from week2/yunakang/src/test/java/hello/yunakang/service/MemberServiceTest.java rename to "week2/yunakang/week2.\352\263\274\354\240\234/src/test/java/hello/yunakang/service/MemberServiceTest.java" diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/.gitignore" "b/week2/yunakang/week2.\354\213\244\354\212\265/.gitignore" new file mode 100644 index 0000000..c2065bc --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/.gitignore" @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/build.gradle" "b/week2/yunakang/week2.\354\213\244\354\212\265/build.gradle" new file mode 100644 index 0000000..68d59de --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/build.gradle" @@ -0,0 +1,39 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.3' + id 'io.spring.dependency-management' version '1.1.6' +} + +group = 'week2_practice' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' + runtimeOnly 'com.h2database:h2' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/gradle/wrapper/gradle-wrapper.jar" "b/week2/yunakang/week2.\354\213\244\354\212\265/gradle/wrapper/gradle-wrapper.jar" new file mode 100644 index 0000000..a4b76b9 Binary files /dev/null and "b/week2/yunakang/week2.\354\213\244\354\212\265/gradle/wrapper/gradle-wrapper.jar" differ diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/gradle/wrapper/gradle-wrapper.properties" "b/week2/yunakang/week2.\354\213\244\354\212\265/gradle/wrapper/gradle-wrapper.properties" new file mode 100644 index 0000000..0aaefbc --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/gradle/wrapper/gradle-wrapper.properties" @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/gradlew" "b/week2/yunakang/week2.\354\213\244\354\212\265/gradlew" new file mode 100644 index 0000000..f5feea6 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/gradlew" @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright ยฉ 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions ยซ$varยป, ยซ${var}ยป, ยซ${var:-default}ยป, ยซ${var+SET}ยป, +# ยซ${var#prefix}ยป, ยซ${var%suffix}ยป, and ยซ$( cmd )ยป; +# * compound commands having a testable exit status, especially ยซcaseยป; +# * various built-in commands including ยซcommandยป, ยซsetยป, and ยซulimitยป. +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/gradlew.bat" "b/week2/yunakang/week2.\354\213\244\354\212\265/gradlew.bat" new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/gradlew.bat" @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/settings.gradle" "b/week2/yunakang/week2.\354\213\244\354\212\265/settings.gradle" new file mode 100644 index 0000000..28f0626 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/settings.gradle" @@ -0,0 +1 @@ +rootProject.name = 'yunakang' diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/YunakangApplication.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/YunakangApplication.java" new file mode 100644 index 0000000..d6fde5d --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/YunakangApplication.java" @@ -0,0 +1,15 @@ +package week2_practice.yunakang; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +@SpringBootApplication +@EnableJpaAuditing // JPA Auditing ํ™œ์„ฑํ™” +public class YunakangApplication { + + public static void main(String[] args) { + SpringApplication.run(YunakangApplication.class, args); + } + +} diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/controller/MemberController.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/controller/MemberController.java" new file mode 100644 index 0000000..ac4a826 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/controller/MemberController.java" @@ -0,0 +1,54 @@ +package week2_practice.yunakang.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import week2_practice.yunakang.domain.Member; +import week2_practice.yunakang.dto.MemberRequestDTO; +import week2_practice.yunakang.service.MemberService; + +import java.util.List; +import java.util.Optional; + +@RequiredArgsConstructor +@RestController +@RequestMapping("/members") +public class MemberController { + + private final MemberService memberService; + + @PostMapping + public ResponseEntity createMember(@RequestBody MemberRequestDTO memberRequestDTO){ + Member member = memberService.createMember(memberRequestDTO); + return ResponseEntity.status(201).body(member); + + } + + @GetMapping + public ResponseEntity getMemberList(){ + try{ + List response; + response = memberService.getMemberList(); + if(response.isEmpty()){ + return ResponseEntity.status(200).body("์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."); //200 & ๋นˆ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ + } + return ResponseEntity.ok(response); + }catch(Exception e){ + return ResponseEntity.status(500).body("์„œ๋ฒ„ ๋‚ด๋ถ€ ์—๋Ÿฌ"); + } + } + + @GetMapping("/{memberId}") + public ResponseEntity getOneMember(@PathVariable Long memberId){ + try{ + Optional response = memberService.getOneMember(memberId); + if (response.isPresent()) { + return ResponseEntity.ok(response.get()); + } else { + return ResponseEntity.status(404).body("ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + }catch(Exception e){ + return ResponseEntity.status(500).body("์„œ๋ฒ„ ๋‚ด๋ถ€ ์—๋Ÿฌ"); + } + } +} diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/domain/Member.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/domain/Member.java" new file mode 100644 index 0000000..6797a59 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/domain/Member.java" @@ -0,0 +1,28 @@ +package week2_practice.yunakang.domain; + +import jakarta.persistence.*; +import lombok.*; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; +@Builder +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Getter +@EntityListeners(AuditingEntityListener.class) +public class Member { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="member_id") + private Long id; + + private String name; + + private String email; + + @CreatedDate + private LocalDateTime createdAt; + +} diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/dto/MemberRequestDTO.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/dto/MemberRequestDTO.java" new file mode 100644 index 0000000..ac00032 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/dto/MemberRequestDTO.java" @@ -0,0 +1,18 @@ +package week2_practice.yunakang.dto; + +/*import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Data +public class MemberRequestDTO { + private String name; + private String email; +}*/ + +public record MemberRequestDTO(String name, String email) { +} \ No newline at end of file diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/repository/MemberRepository.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/repository/MemberRepository.java" new file mode 100644 index 0000000..385d540 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/repository/MemberRepository.java" @@ -0,0 +1,8 @@ +package week2_practice.yunakang.repository; +import week2_practice.yunakang.domain.Member; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +public interface MemberRepository extends JpaRepository { +} diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/service/MemberService.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/service/MemberService.java" new file mode 100644 index 0000000..77fe426 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/java/week2_practice/yunakang/service/MemberService.java" @@ -0,0 +1,37 @@ +package week2_practice.yunakang.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import week2_practice.yunakang.domain.Member; +import week2_practice.yunakang.dto.MemberRequestDTO; +import week2_practice.yunakang.repository.MemberRepository; + +import java.util.List; +import java.util.Optional; + + +@RequiredArgsConstructor +//@Transactional +@Service +public class MemberService { + + private final MemberRepository memberRepository; + + public Member createMember(MemberRequestDTO memberRequestDTO){ + Member member = Member.builder() + .name(memberRequestDTO.name()) + .email(memberRequestDTO.email()) + .build(); + + Member savedMember = memberRepository.save(member); + return savedMember; + + } + public List getMemberList(){ + return memberRepository.findAll(); + } + + public Optional getOneMember(Long memberId){ + return memberRepository.findById(memberId); + } +} diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/main/resources/application.yml" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/resources/application.yml" new file mode 100644 index 0000000..4b92f7e --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/main/resources/application.yml" @@ -0,0 +1,20 @@ +spring: + datasource: + url: jdbc:h2:tcp://localhost/~/example + username: sa + password: + driver-class-name: org.h2.Driver + + jpa: + hibernate: + ddl-auto: create + properties: + hibernate: + dialect: org.hibernate.dialect.H2Dialect # H2์šฉ ๋ฐฉ์–ธ ์ถ”๊ฐ€ + format_sql: true + +logging: + level: + org.hibernate.SQL: debug + org.hibernate.orm.jdbc.bind: trace + diff --git "a/week2/yunakang/week2.\354\213\244\354\212\265/src/test/java/week2_practice/yunakang/YunakangApplicationTests.java" "b/week2/yunakang/week2.\354\213\244\354\212\265/src/test/java/week2_practice/yunakang/YunakangApplicationTests.java" new file mode 100644 index 0000000..a03f537 --- /dev/null +++ "b/week2/yunakang/week2.\354\213\244\354\212\265/src/test/java/week2_practice/yunakang/YunakangApplicationTests.java" @@ -0,0 +1,13 @@ +package week2_practice.yunakang; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class YunakangApplicationTests { + + @Test + void contextLoads() { + } + +}