• CodeStates BootCamp/Section 3
π μ€λ λ°°μ΄ λ΄μ©! μ ν리μΌμ΄μ
μμ€ μ½λλ₯Ό λΉλ μ ν리μΌμ΄μ
μ€ν νλ‘νμΌ μ μ© μ ν리μΌμ΄μ
λ°°ν¬ βοΈ Spring Boot κΈ°λ°μ μ ν리μΌμ΄μ
μμ€ μ½λλ₯Ό λΉλνλ λ°©λ² β IntelliJ IDEλ₯Ό μ΄μ©ν λΉλ Spring Bootμ Gradle λΉλ ν΄μ μ΄μ©νμ¬ Gradle task λͺ
λ ΉμΌλ‘ λΉλνλ λ°©λ² μ°μΈ‘ μλ¨μ [Gradle] μλμ° ν ν΄λ¦ νλ‘μ νΈ λͺ
> Tasks > build μ :bootJar or :build task λλΈ ν΄λ¦ build/libs λλ ν 리μ μκΈ΄ Jar νμΌλ‘ μ ν리μΌμ΄μ
μ€ν κ°λ₯ π‘ :build vs :bootJar :build νμ€ν¬ μ€ννλ©΄ β Gradleμμ λΉλμ κ΄λ ¨λ λͺ¨λ taskλ€μ μ€νμν΄ β μ€ν κ°λ₯ν Jar νμΌ μ΄μΈμ plain Jar..
• CodeStates BootCamp/Section 3
π μ€λ λ°°μ΄ λ΄μ©! API λ¬Έμν Swagger vs Spring Rest Docs Spring Rest Docs Asciidoc βοΈ API λ¬Έμν (Documentation) ν΄λΌμ΄μΈνΈκ° REST API λ°±μλ μ ν리μΌμ΄μ
μ μμ²μ μ μ‘νκΈ° μν΄μ μμμΌ λλ μμ² μ 보λ₯Ό λ¬Έμλ‘ μ μ 리νλ κ² ( ν΄λΌμ΄μΈνΈ μͺ½μμ μ΄ μ ν리μΌμ΄μ
μ¬μ©μ μν΄ μμ² URL / request body / query parameter λ±μ΄ νμ ) κ°λ°μκ° μ§μ μκΈ°λ‘ μμ±ν μλ μκ³ , μ ν리μΌμ΄μ
λΉλλ₯Ό ν΅ν΄ API λ¬Έμλ₯Ό μλμΌλ‘ μμ±ν μλ μμ ( But, μκΈ°λ‘ μμ±νλ κ²μ μμ£Ό λΉν¨μ¨μ β API λ¬Έμ μλν μ¬μ©) βοΈ REST API HTTP νλ‘ν μ½μ ν΅ν΄ APIλ₯Ό μ€κ³νκΈ° μν μν€ν
μ² μ€νμΌ C..
• CodeStates BootCamp/Section 3
π μ€λ λ°°μ΄ λ΄μ©! Mockitoλ₯Ό μ¬μ©ν ν
μ€ν
λ°©λ² βοΈ Mock not real, but intended to be very similar to a real situation, substance etc ( λ§ κ·Έλλ‘, μ§μ§λ μλμ§λ§ μ§μ§μ μμ£Ό λΉμ·ν κ°μ§) βοΈ λͺ©μ
(Mock-up) μ€μ μ νμ΄ λμ€κΈ° μ μ λ΄λΆμ μΌλ‘ μ¬μ©νκΈ° μν λͺ¨ν(κ°μ§) μ ν ν
μ€νΈ μΈκ³μμλ κ°μ§ κ°μ²΄λ₯Ό μλ―Έ βοΈ Mocking λ¨μ ν
μ€νΈλ μ¬λΌμ΄μ€ ν
μ€νΈ λ±μ Mock κ°μ²΄λ₯Ό μ¬μ©νλ κ² β ν
μ€νΈμμ Mock κ°μ²΄λ₯Ό μ¬μ©νλ μ΄μ Mock κ°μ²΄λ₯Ό μ¬μ©νμ§ μκ³ MemberController ν
μ€νΈ μ€ postMember ν
μ€νΈλ₯Ό μ§ννλ€κ³ νλ©΄, μ΄μ νλ¦μ μλμ κ°μ κ²μ β¬οΈ MemberController..
• CodeStates BootCamp/Section 3
π μ€λ λ°°μ΄ λ΄μ©! ν
μ€νΈ (Test) JUnit Hamcrest λ¨μ ν
μ€νΈ / κ³μΈ΅λ³ μ¬λΌμ΄μ€ ν
μ€νΈ μ€μ΅ βοΈ ν
μ€νΈ (Test) μ΄λ€ λμμ λν μΌμ κΈ°μ€μ μ ν΄λκ³ , κ·Έ λμμ΄ μ ν΄μ§ κΈ°μ€μ λΆν©νλμ§ λΆν©νμ§ λͺ»νλμ§λ₯Ό κ²μ¦νλ κ³Όμ JUnit ν
μ€νΈ νλ μμν¬λ‘ ν
μ€ν
β ν
μ€νΈμ μ’
λ₯ 1. λ¨μ ν
μ€νΈ μμ£Ό μμ λ¨μμ κΈ°λ₯μ ν
μ€νΈ νλ λ°©λ² λλΆλΆ λ©μλ λ¨μμ μ½λλ‘ μμ± λ¨μ ν
μ€νΈλ₯Ό μ μΌ μ½κ³ λΉ λ₯΄κ² μ μ©ν μ μλ λΆλΆ β ν¬νΌ(helper) ν΄λμ€ or μ νΈλ¦¬ν°(utility) ν΄λμ€ π‘ But, μ νΈλ¦¬ν° ν΄λμ€λ€μ λ©μλλ€μ ν΄λμ€μ κ°μ²΄λ‘ μΈμ€ν΄μ€ν λ νμκ° μμ΄ λͺ¨λ μ μ (static)λ©μλλ‘ κ΅¬μ± β κ°μ²΄ μ§ν₯μ μΈ μκ°μΌλ‘ μ¬μ© μ§μ But, λ§μ΄ μ¬μ©ν¨ λ¨μν
μ€νΈ..
• CodeStates BootCamp/Section 3
π μ€λ λ°°μ΄ λ΄μ©! νΈλμμ
λΆμ° νΈλμμ
βοΈ νΈλμμ
(Transaction) μ¬λ¬κ°μ μμ
λ€μ νλμ κ·Έλ£ΉμΌλ‘ λ¬Άμ΄μ μ²λ¦¬νλ μ²λ¦¬ λ¨μ μ¬λ¬ κ°μ μμ
μ΄ νλμ μμ
μΌλ‘ μΈμν΄μ μ λΆ μ±κ³΅νλ κ° μ λΆ μ€ν¨νλ κ°(All or Nothing)μ λ μ€ νλλ‘λ§ μ²λ¦¬λμ΄μΌ νΈλμμ
μ μλ―Έλ₯Ό κ°μ§ β λ°μ΄ν°μ 무결μ±μ 보μ₯νλ ν΅μ¬μ μΈ μν μ λ’°ν μ μλ μ ν리μΌμ΄μ
μ ꡬμΆνκΈ° μν΄μ κ°μ₯ μ€μν λΆλΆ μ€ νλ ( μ ν리μΌμ΄μ
μ μ λ’°μ±μ΄ κΉ¨μ§λ μν©μ΄ λ°μνλ©΄ νΈλμμ
μ΄λΌκ³ λΆλ₯Ό μ μμ ) λΆκ° κΈ°λ₯μ΄κΈ° λλ¬Έμ AOPμ μ μ© λμ μ€ νλ λ‘컬 νΈλμμ
/ λΆμ° νΈλμμ
μΌλ‘ λλ¨ βοΈ λ‘컬 νΈλμμ
- νλμ μμ κ΄λ¦¬μ(λ°μ΄ν°λ² μ΄μ€)κ° μ°Έμ¬νλ νΈλμμ
β βοΈ λΆμ° νΈλμμ
- νλ μ΄μμ μμ ..
• CodeStates BootCamp/Section 3
π μ€λ λ°°μ΄ λ΄μ©! Spring Data JPA JPQL / SQL Audit / Fetch / CustomBeanUtils βοΈ Spring Data JPA Spring Data ν¨λ°λ¦¬ κΈ°μ μ€ νλ ( Spring Data JDBC λ μ΄ μ€ νλ ) JPA κΈ°λ°μ λ°μ΄ν° μ‘μΈμ€ κΈ°μ μ μ’ λ μ½κ² μ¬μ©ν μ μκ² ν΄μ€ β λ°μ΄ν° μ‘μΈμ€ κ³μΈ΅μ ꡬνμ μμ΄ μ¬λ¬λΆμ κ°λ° μκ°μ λ¨μΆ π‘ JPA vs Hibernate ORM vs Spring Data JPA JPA β Jakarta Persistence API(λλ Java Persistence API) β μν°νλΌμ΄μ¦ Java μ ν리μΌμ΄μ
μμ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νκΈ° μν΄ μ ν΄ λμ νμ€ μ€ν(Specification) ( ’μ΄ κΈ°μ ..