Study/Java91 [TIL] ๋จ์ํ ์คํธ ๐๐ป ๋จ์ ํ ์คํธ ๐ ํ ์คํธ - ์ด๋ค ๋์์ ๋ํ ์ผ์ ๊ธฐ์ค์ ์ ํด๋๊ณ ๊ทธ ๋์์ด ์ ํด์ง ๊ธฐ์ค์ ๋ถํฉ ํ๋์ง ๋ถํฉํ์ง ๋ชปํ๋์ง๋ฅผ ๊ฒ์ฆํ๋ ๊ณผ์ - ํ ์คํธ๋ฅผ ์ ๋๋ก ์ ๊ฑฐ์ณ์ ํ ์คํธ ๋์์ด ๊ฒ์ฆ ๊ณผ์ ์ ์ ํต๊ณผํ๊ฒ ๋ง๋ค์ด ์ต๋ํ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๐ ํ ์คํธ ๋ถ๋ฅ : ๊ธฐ๋ฅ ํ ์คํธ > ํตํฉ ํ ์คํธ > ์ฌ๋ผ์ด์ค ํ ์คํธ > ๋จ์ ํ ์คํธ โช๏ธ ๊ธฐ๋ฅ ํ ์คํธ - ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ ์ฅ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ ํ๋์ง ํ ์คํธ - ์ผ๋ฐ์ ์ผ๋ก QA ๋ถ์, QA ์ ์ฒด์์ ๊ธฐ๋ฅ ํ ์คํธ ์ํ : ๊ฐ๋ฐ์ ์ด์ธ ์ 3์ ! - API ํด์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ์ฐ๊ด๋์ด ์์ด HTTP ํต์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฑ ๋จ์ํ ์คํธ๋ก ๋ณผ ์๋ ์์ โช๏ธ ํตํฉ ํ ์คํธ - ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ ๊ฐ๋ฐ.. 2022. 7. 12. [TIL] ํธ๋์ญ์ ๐๐ป ํธ๋์ญ์ Transaction - ์ฌ๋ฌ ๊ฐ์ ์์ ๋ค์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌํ๋ ์ฒ๋ฆฌ ๋จ์ - ๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ ผ๋ฆฌ์ ์ผ๋ก๋ ํ๋์ ์์ ์ผ๋ก ์ธ์ํ์ฌ ์ ๋ถ ์ฑ๊ณต or ์คํจ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํจ ( All or Nothing ) → ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ ๐ ํธ๋์ญ์ ํน์ง : ACID ์์น โ Atomicity : ์์์ฑ - ์์ ์ ๋ ์ด์ ์ชผ๊ฐค ์ ์์ - ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋์ ์์ ์ผ๋ก ์ธ์๋๋ฉด ์ด๋ค ์์ ์ ์ฒ๋ฆฌํ๊ณ ์ด๋ค ์์ ์ ์ฒ๋ฆฌ ํ์ง ์์๋ ๋๋ ์์ผ๋ก ์ชผ๊ฐ์ ์ฒ๋ฆฌ X → ๋ ๋ค ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ๋ ๋ฑ์ ํ๋๋ก๋ง ์ฒ๋ฆฌ๊ฐ ๋ณด์ฅ๋์ด์ผ ํจ - ex) ์๋ฃ ์ฃผ๋ฌธ์ ํ๋ฉด ์๋ฃ ์ ๋งํผ ์คํฌํ ํ์๊ฐ ์ฆ๊ฐ๋๋ ์์ ์ด ์์ ๋ ์๋ฃ ์ฃผ๋ฌธ๊ณผ ์คํฌํ ์ฆ๊ฐ๋ ๋ ๋ค ์ฑ๊ณตํ๊ฑฐ๋ ๋ ๋ค ์คํจ๋ก ์ฒ๋ฆฌ ๋์ด์ผ ํจ.. 2022. 7. 12. [TIL] Spring Data JPA ๐๐ป Spring Data JPA - ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์กฐํ, ์ญ์ ๋ฅผ ์ข ๋ ์ฝ๊ฒ ํจ - Spring Data ํจ๋ฐ๋ฆฌ ๊ธฐ์ ์ค ํ๋๋ก์จ JPA ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ธฐ์ ์ ์ข ๋ ์ฝ๊ฒ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์๊ฐ ๋จ์ถ ๐JPA vs Hibernate ORM vs Spring Data JPA โช๏ธ JPA : ๊ธฐ์ ๋ช ์ธ - Java ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ํด ๋์ ํ์ค ์คํ - ORM ๊ธฐ์ ํ์ค์ผ๋ก ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ๋ชจ์ → ์ด ๊ธฐ์ ์ ๋ฌด์์ด๊ณ ์ด ๊ธฐ์ ์ ์ด๋ ๊ฒ ๊ตฌํํด์ ์ฌ์ฉํ๋ฉด ๋ผ ๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ (1) ๋ฐ๋ณต์ ์ธ CRUD SQL ์ฒ๋ฆฌ - JPA๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ๋ ์ง์ SQL ์.. 2022. 7. 12. [TIL] JPA ๋งคํ โ๐ป JPA๋ฅผ ํตํ DB์ ํ ์ด๋ธ๊ณผ ์ํธ์์ฉ(์ ์ฅ, ์์ , ์กฐํ, ์ญ์ ๋ฑ) → ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ์ํฐํฐ ํด๋์ค ๊ฐ ๋งคํ ์์ ์ด ์ ํ๋์ด์ผ ํจ ( Spring Data JDBC๋ ๋จ๋ฐฉํฅ ๋งคํ๋ง ์ง์ / JPA๋ ๋จ๋ฐฉํฅ + ์๋ฐฉํฅ ๋ชจ๋ ์ง์ ) ๐ ์ํฐํฐ ๋งคํ ์์ โ ์ํฐํฐ์ ํ ์ด๋ธ ๊ฐ ๋งคํ : @Entity๋ฅผ ๋ถ์ด๋ฉด JPA๊ฐ ๊ด๋ฆฌํ๋ ๋์ ์ํฐํฐ๊ฐ ๋จ @Table์ ๋ถ์ด๋ฉด ์ํฐํฐ์ ๋งคํํ ํ ์ด๋ธ ์ง์ @Entity @Table public class Coffee{ @Id private Long coffeeId; } - @Entity(name = "BEVERAGE")๋ก ์ง์ ํ๋ฉด ์ํฐํฐ ์ด๋ฆ์ ์ค์ ํ ์ ์์ → ๋ง์ฝ name๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ํด๋์ค ์ด๋ฆ์ ์ํฐํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ - @T.. 2022. 7. 5. [TIL] JPA ๐ซฐ๐ป JPA (Java Persistence API) - Java ์ง์์์ ์ฌ์ฉํ๋ ORM ๊ธฐ์ ์ ํ์ค ์ฌ์ - ์ฆ, JPA ํ์ค ์ฌ์์ ๊ตฌํํ ๊ตฌํ์ฒด - Hibernate ORM, EclipseLink, DataNucleus ๋ฑ ๐ Hibernate ORM - JPA์์ ์ ์ํด ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด ๐ JPA์ P : Persistence ๐ก Persistence : ์์์ฑ, ์ง์์ฑ - ๋ฌด์ธ๊ฐ๋ฅผ ๊ธ๋ฐฉ ์ฌ๋ผ์ง์ง ์๊ณ ์ค๋ ์ง์๋๊ฒ ํ๋ ๊ฒ ๐ก ORM - ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋งคํ์ ํตํด ์ํฐํฐ ํด๋์ค ๊ฐ์ฒด ์์ ํฌํจ๋ ์ ๋ณด๋ฅผ ํ ์ด๋ธ์ ์ ์ฅํ๋ ๊ธฐ์ ๐ก Persistence Context : ์์์ฑ ์ปจํ ์คํธ - ํ ์ด๋ธ๊ณผ ๋งคํ ๋๋ ์ํฐํฐ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์์์ฑ ์ปจํ ์คํธ๋ผ๋ ๊ณณ์ ๋ณด๊ดํด์ ์ ํ.. 2022. 7. 5. [TIL] Spring Data JDBC ๊ตฌํ ๐ก Spring Data JDBC ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต ์ฐ๋์ ์ํด ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ : ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋๋ฉ์ธ ์ํฐํฐ ํด๋์ค์ ์ค๊ณ ๐ DDD(Domain Driven Design) : ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ : ๋๋ฉ์ธ ์์ฃผ์ ์ค๊ณ ๊ธฐ๋ฒ ๐ธ Domain : ๋๋ฉ์ธ - ์ฃผ๋ก ๋น์ฆ๋์ค์ ์ธ ์ด๋ค ์ ๋ฌด ์์ญ = ํ์ค์ธ๊ณ์์ ์ ํ๋ ์ ๋ฌด์ ํ ์์ญ - ๋๋ฉ์ธ ์ง์๋ค์ ์๋น์ค๊ณ์ธต์์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ๊ตฌํ - ex) ๋ฐฐ๋ฌ์ฃผ๋ฌธ ์ฑ์ ๊ฐ๋ฐํ ๊ฒฝ์ฐ ๋๋ฉ์ธ : ํ์ / ์ฃผ๋ฌธ / ์์ / ๊ฒฐ์ ๐ธ Aggregate : ์ ๊ทธ๋ฆฌ๊ฑฐํธ - ๋น์ทํ ์ ๋ฌด ๋๋ฉ์ธ์ ๋ฌถ์ - ex) ํ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ : ํ์ ์ ๋ณด / ํ์ ํฌ์ธํธ ์ฃผ๋ฌธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ : ์ฃผ๋ฌธ ์ ๋ณด / ๋ฐฐ๋ฌ ์์ ์ ๋ณด / ๋ฐฐ๋ฌ ์ฃผ์ ์ ๋ณด / ๋ฐฐ๋ฌ ์ฃผ๋ฌธ์ ์ ๋ณด ๊ฒฐ์ .. 2022. 7. 4. [TIL] JDBC ๐๐ป JDBC ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต ๐ JDBC : Java Database Connectivity - Java ์ฝ๋ ๋ ๋ฒจ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์ ๋ฐ์ดํธ ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Java ์ฝ๋ ๋ ๋ฒจ์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ํ์ค API - Java ๊ฐ๋ฐ์๋ JDBC API๋ฅผ ์ฌ์ฉํด์ ๋ค์ํ ๋ฒค๋(Oracle, MS SQL, MySQL ๋ฑ) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ ๊ฐ๋ฅ ๐๐ป JDBC API๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ Spring Data JDBC๋ Spring Data JPA ๊ธฐ์ ๋ก ๋ฐ์ดํฐ ์์ธ์ค ๋ก์ง์ ์ข ๋ ์ฝ๊ฒ ๊ตฌํ ๐ก Connection Pool : Connectio์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ณด๊ดํ๊ณ ํ์์ Connection์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ ๊ด๋ฆฌ์ - JDBC.. 2022. 6. 30. [TIL] ์์ธ์ฒ๋ฆฌ ๐ก ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌํ์์ ๋ง๋ ์ ์๋ ์์ธ โ ํด๋ผ์ด์ธํธ ์์ฒญ ๋ฐ์ดํฐ์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฆ์์ ๋ฐ์ํ๋ ์์ธ โก ์๋น์ค ๊ณ์ธต์ ๋น์ฆ๋์ค ๋ก์ง์์ ๋์ ธ์ง๋ ์๋๋ ์์ธ โข ์น ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค์์ ๋ฐ์ํ๋ ์์ธ ๐๐ป Spring MVC ์์ธ์ฒ๋ฆฌ โช๏ธ @ExceptionHandler๋ฅผ ์ด์ฉํ ์์ธ ์ฒ๋ฆฌ - Spring ์์์ ์์ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฌธ์ ๋ฐ์ ๋ฟ๋ง ์๋๋ผ ์ ํจ์ฑ ๊ฒ์ฆ ์คํจ ์์๋ ํ๋์ ์์ธ๋ก ๊ฐ์ฃผํ์ฌ ์์ธ ์ฒ๋ฆฌ ์ ๋ @ExceptionHandler public ResponseEntity handleException(MethodArgumentNotValidException e) { final List fieldErrors = e.getBindingResult().getFieldErrors().. 2022. 6. 29. [TIL] MVC : ์๋น์ค ๊ณ์ธต ๐๐ป Spring MVC : ์๋น์ค ๊ณ์ธต ๐ ์๋น์ค ๊ณ์ธต - API ๊ณ์ธต์์ ์ ๋ฌ ๋ฐ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ง์ ์ธ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ฒ๋ฆฌํ๋ ๊ณ์ธต - Spring DI๋ฅผ ํตํด API ๊ณ์ธต๊ณผ ๋น์ฆ๋์ค ๊ณ์ธต ์ฐ๋ - API ๊ณ์ธต์์ ์ ๋ฌ๋ฐ์ DTO ๊ฐ์ฒด๋ฅผ ๋น์ฆ๋์ค ๊ณ์ธต์ ๋๋ฉ์ธ ๋ชจ๋ธ ๊ฐ์ฒด๋ก ๋ณํํด์ ์ ๋ฌ ๐ก Spring MVC - ์น ๊ณ์ธต์ ๋ด๋นํ๋ ๋ชจ๋๋ก ์๋ธ๋ฆฟ API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ ์ฒ๋ฆฌํ๋ ๋ชจ๋ - ํด๋ผ์ด์ธํธ ์์ฒญ์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํด์ฃผ๋ ํ๋ ์์ํฌ - Model : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ - View : Model ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ์น ๋ธ๋ผ์ฐ์ ๊ฐ์ ํด๋ผ์ด์ธํธ ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋ฆฌ์์ค ์ ๊ณต - Controller : ํด๋ผ์ด์ธํธ ์ธก ์์ฒญ์ ์ง์ ๋ฐ๋ ์๋ํฌ์ธํธ๋ก Mo.. 2022. 6. 27. ์ด์ 1 2 3 4 5 6 ยทยทยท 11 ๋ค์