λΆλ₯ μ 체보기 (9) μΈλ€μΌν 리μ€νΈν μμΈ μ€ν°λ ν¬λ£¨(IT's Study Crew) μ€ν°λ νκΈ° - system design club night μ°Έμ¬ μ΄μ * μλ μ ꡬμλ²λ€μ 리μν€ν μ³λ§ν κ²½νμΌλ‘ μμ€ν λμμΈμ λν΄ κ³΅λΆν΄μΌκ² λ€κ³ μκ°νκ³ , μ€λμ΄κ° λμ΄κ°λ μμ μμ 곡λΆκ° νμνλ€κ³ μκ°νλ€.* κ³΅λΆ νκ²½μ λ§λ€κ³ + λ€μν μ견μ λ£κ³ μΆμ΄μ μ°Έμ¬ νλ€. λλ μ * λ°νμ λν λλ €μμ΄ λ§μ νΈμΈλ°, λ€λ€ μ±κ²©μ΄ λ₯κΈλ₯κΈνμκ³ μ¬μ±λΆλ€μ΄λΌ κ·Έλ°μ§ λ§μμ΄ νΈνλ€. κ·Έλμ λλ νκ³ μΆμ λ§μ ν μ μμ΄μ μ’μλ€..! (μμ¬μμ΄)* μ±λ³μ λν μ μ 견μ μλλ°, μ¬μλ‘λ§ μ΄λ€μ§ μ€ν°λλ μ²μμ΄λΌ μλ‘μ λ€(!)* κ°μ λ‘λΌλ 곡λΆνλ νκ²½μ λ§λ€μ΄μΌ νλ€λ κ²μ λ€μ κΉ¨λ¬μλ€.(γ γ )* μ무κ²λ λͺ¨λ₯΄λ μμ μ μ’μ μμ€ν λμμΈμ λν μ λ΅μ μ°Ύμλλ°, μ΄μ λ μ λ΅μ μλκ±° κ°λ€λ κ±Έ λλΌλ μμ¦μ΄λ€... (μλΉμ€ λ‘μ§μ΄ λ°λλ©΄ κΈ°μ‘΄μ μ’μλ ꡬ.. 곡λΆλ₯Ό ν©μλ€ λ³΄νΈλμ΄ μλ κΈμ λλ€. λ§λ€λ©΄μ λ°°μ°λ ν₯μ¬κ³ λ μν€ν μ³ μ€κ³μ ꡬν λΆμ€ν°λ * μ€ν°λ κΈ°κ° 2023/12/09~ 2024/01/27 * μ°Έμ¬ μ΄μ : 23λ λ΄λ΄ νλ‘μ νΈλ₯Ό λ¬λ¦¬λ©΄μ κ°μΈμ μΌλ‘ 곡λΆν μκ°μ κ°μ§ λͺ»νλ€(λΌκ³ μ°κ³ μνλ€κ° λ§μμ§λ). κ°μ μ μΌλ‘ 곡λΆνλ€λ μ±μ·¨κ°μ μ»κΈ° μν΄μ μ°Έμ¬ :) * μ± κ°μλ¬Έ(?): ν₯μ¬κ³ λ μν€ν μ³λ DDD μ κ΄μ¬μλ€λ©΄ νλ²μ―€ λ€μ΄λ΄€μ κ²μ΄κ³ , μ μ§λ³΄μμ μ’μ μ½λ^-^μ κ΄μ¬μ΄ λ§μ λλ‘μ¨λ ν₯λ―Έλ‘μ΄ μ± μ΄λΌ μκ°νλ€. λ€λ‘κ°μλ‘ μλΏμ§ μλ κΈ°μ (μ€νλ§μλ§ μ΅μν λμκ² μμν μΏΌμ»€μ€ νλ μμν¬ λ±..)μ΄ λ±μ₯νκ³ μ½λ μμκ° μλΉμ€ λλ©μΈκ³Όλ λ©μ΄λ³΄μ¬μ ν¬κ² λμλκ±° κ°μ§ μμλ€. κ·Έλλ νμ¬μ νλ‘μ νΈ κ΅¬μ‘°κ° μ΄ μ± μμ μ€λͺ νλ ꡬ쑰μ λΉμ·ν΄μ κ·Έλλ§ μ΄ν΄κ° κ°λ€. νμ κ³ λ―Όλλ λΆλΆμ κ°μ response λ₯Ό μ£Όλ μ¬λ¬ ap.. [230811] Jpa OSIV κ΄λ ¨νμ¬ κ²ͺμλ λ¬Έμ Jpa OSIV Created: March 26, 2024 2:47 PM Complete: No Category: JPA Date: August 11, 2023 λ¬Έμ μν© μ λ°μ΄νΈ API μμ service λ μ΄μ΄μμ λ€μ λ©μλλ₯Ό νΈμΆνλλ°, read DataSourceλ₯Ό λ³Έλ€. @Transactional A() -> @Transational(readOnly=true) B() -> @Transactional(readOnly=false) C() μμ propagation μ΄ default κΈ° λλ¬Έμ μ²μ νΈλμμ μ΄ μ΄λ¦° DataSource λ₯Ό νμΈν κ²μ΄λ€. REQUIRED(default) λΆλͺ¨ νΈλμμ λ΄μμ μ€ν, μμΌλ©΄ μλ‘μ΄ νΈλμμ μμ± ν΄λΉ λ©μλλ₯Ό νΈμΆν κ³³μμ λ³λμ νΈλμμ μ΄ μ€μ λμ΄ μ.. Kotlin youtube μμ½μΈλ―ν κ°μλ¬Έ μ€νλ§μΊ ν 2018 [TrackB Session2] : μΏ ν‘ Kotlin Backend μ μ©κΈ° μ½νλ¦°μ μ’μμ μλ°μ νΈνμ± 100% (@JvmXXXμ΄λ Έν μ΄μ μ¬μ©μ) Familiar Syntax Smart Casts(’is,’as’) νμ μ μ€μ¬ μΈ μ μλ€. is / !is if instanse of as / as? ? κ° λΆμΌλ©΄ nullable Data Class copy λΌλ ν¨μ μ½νλ¦°μμλ immutable μ΄ κΈ°λ³Έμ΄λ€. νμ λ μ€κ³ μ½κΈ°λ νΈνλ€. Default Argument String Templates fun read(b: ByteArray, offset:Int = 0, length:Int = b.size) { TODO("Not Imlemented") } val s = "abc" val.. @Transactional(readOnly=true) @Transaction(read only=true) λ₯Ό μ μΈκΉ? λ¨Όμ , νΈλμμ μ΄ νμν μ΄μ μ΄λ€ μμμΉ λͺ»ν μν©μμ μμΈ, μ€λ₯κ° λ°μνμ¬ λ°μ΄ν° λΆμ ν©μ΄ λ°μνλ κ²½μ°, λ°μ΄ν° μμ 볡ꡬλ₯Ό ν΄μΌνλ€. μ΄ λ λ°μ΄ν° μμ볡ꡬλ₯Ό μν΄ νΈλμμ μ΄ νμνλ€. λ°μ΄ν° λ² μ΄μ€λ μν λ΄μμ λ‘κ·Έμ μ μ₯ν΄ λλλ°, μ΄λ₯Ό μ΄μ©ν΄ νΈλμμ μ μ§μνλ€. DBμ λ°μλ λ΄μ©μ μ¬λ°μνκΈ° μν Redo log μνμ μ€ν¨ν΄ μ΄μ μ μνλ‘ λλ리λ Undo log readOnly=true μ€μ μ Application μΈ‘λ©΄ DataSourceTranscationManager.java SET TRANSACTION READ ONLY λ Oracle, MySQL, Postresμμ μ μ©λ©λλ€. λ€λ₯Έ λ°μ΄ν° λ² μ΄μ€μμλ μ μ©ν.. [Java] μμ΄ν 5 μμμ μ§μ λͺ μνμ§ λ§κ³ μμ‘΄ κ°μ²΄ μ£Όμ μ μ¬μ©νλΌ ν΄λμ€κ° λ΄λΆμ μΌλ‘ νλ μ΄μμ μμμ μμ‘΄νκ³ , κ·Έ μμμ΄ ν΄λμ€ λμμ μν₯μ μ€λ€λ©΄ μ±κΈν΄(Singleton) κ³Ό, μ μ μ νΈλ¦¬ν°(static util class)λ μ¬μ©νμ§ μλ κ²μ΄ μ’λ€. // μ μ μ νΈλ¦¬ν°λ₯Ό μλͺ» μ¬μ©ν μ - μ μ°νμ§ μκ³ ν μ€νΈνκΈ° μ΄λ ΅λ€ public class SpellChecker{ private static final Lexicon dictionary = ...; // μ¬μ μ μμ‘΄ private SpellChecker() {} // κ°μ²΄ μμ± λ°©μ§ public static boolean isValid(String word){...} public static List suggestions(String typo){...} } // μ±κΈν΄μ μλͺ» μ¬μ©ν μ - μ μ°νμ§ μ.. [spring boot] mock test μ΄λ² νλ‘μ νΈμμλ TDD λ₯Ό μ λλ‘ μκ³ , μ μ©νκ³ μΆμ΄μ μ 리νλ€ :) TDD μ μ©κΈ° : www.notion.so/Shop-api-1-49b80401badf4488b993460357b351a2 @SpringBootTest SpringBootApplicationμ μ°Ύμ ν μ€νΈλ₯Ό μν λΉμ μμ±νκ³ @MockBean μΌλ‘ μ μλ λΉμ μ°Ύμ κ΅μ²΄ @RunWith(SpringRunner.class)μ κ°μ΄ μ¨μΌνλ€ SpringBootTest.WebEnvironment.MOCK → λ΄μ₯ ν°μΊ£ μ¬μ© X RANDOM_PORT, DEFINED_PORT → λ΄μ₯ ν°μΊ£ μ¬μ© WebTestClient webflux λνλμ μΆκ°ν΄μΌνλ€. restTemplate λ³΄λ€ API κ°λ μ±μ΄ μ’λ€. non-blocking κΈ°λ° ν΄.. μ΄μ 1 2 λ€μ