Spring8 [Spring] JPA μμμ± μ»¨ν μ€νΈ μ΄ν΄νκΈ° π€ μμμ± μ»¨ν μ€νΈλ? JPA μμμ± μ»¨ν μ€νΈ (Persistence Context) λ μν°ν°λ₯Ό μꡬ μ μ₯νλ νκ²½μ΄λΌλ λ»μΌλ‘, μ ν리μΌμ΄μ κ³Ό λ°μ΄ν°λ² μ΄μ€ μ¬μ΄μμ μν°ν°λ₯Ό κ΄λ¦¬νλ λ Όλ¦¬μ μΈ μμμ λλ€. EntityManager λ‘ μν°ν°λ₯Ό μ μ₯νκ±°λ μ‘°ννλ©΄ EntityManager λ μμμ± μ»¨ν μ€νΈμ μν°ν°λ₯Ό 보κ΄νκ³ κ΄λ¦¬ν©λλ€. π« μν°ν°μ μλͺ μ£ΌκΈ° μν°ν°μ μλͺ μ£ΌκΈ° μν°ν°μλ 4κ°μ§ μνκ° μ‘΄μ¬ν©λλ€. λΉμμ(new/transient) : μμμ± μ»¨ν μ€νΈμ μ ν κ΄κ³κ° μλ μν μμ(managed) : μμμ± μ»¨ν μ€νΈμ μ μ₯λ μν (μμμ± μ»¨ν μ€νΈμ μν΄ κ΄λ¦¬λλ€λ λ») μ€μμ(detached) : μμμ± μ»¨ν μ€νΈμ μ μ₯λμλ€κ° λΆλ¦¬λ μν μμ (removed) : μμ λ μν π«§ λΉμμ.. 2023. 6. 27. [Spring] νΌλλλ JPA κ°λ μ 리 (Hibernate, Spring Data JPA) π± μ΄ κΈμ μ°λ μ΄μ μ·¨μ μ€λΉλ₯Ό νλ©° λ©΄μ μ 보λ€λ³΄λ©΄ JPA μ κ°λ μ λ§€λ² λμ¬λ§νΌ λ¨κ³¨ μ§λ¬Έμ΄λΌκ³ λ³Ό μ μμ΅λλ€. νμ§λ§, λ§€λ² Hibernate λ JPA μ ꡬν체μ λλ€! λΌλ λλ΅λ§ ν΄μκ³ , μμ§ν μ°¨μ΄λ₯Ό μ λλ‘ μ΄ν΄νκ³ μμ§ μλ€κ³ λκΌμ΅λλ€. κ·Έλμ μ΄λ² κΈ°νμ JPA, Hibernate, Spring Data JPA μ μ°¨μ΄μ λν΄ κ³΅λΆνκ³ μ 리ν΄λ³΄λ μκ°μ κ°μ Έλ³΄λ € ν©λλ€. π π€ JPA λ? JPA λ Java Persistence API μ μ½μλ‘, μλ° μ ν리μΌμ΄μ κ³Ό κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ μ¬μ΄μ λ°μ΄ν° μμμ±μ κ΄λ¦¬νκΈ° μν νμ€νλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ κΈ°μ μ λλ€. JPA λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°κ³Ό κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ κ°μ λΆμΌμΉλ₯Ό ν΄κ²°νκΈ° μν΄ κ°μ²΄μ λ°μ΄ν°λ² μ΄μ€λ₯Ό λ§€ννλ .. 2023. 6. 27. [Spring] λ©ν° λͺ¨λ νλ‘μ νΈ μ μ© π λ©ν° λͺ¨λμ λμ ν μ΄μ λ©ν° λͺ¨λ μ μ© μ μ μ΄λ―Έμ§λ μ§νμ€μΈ νμ°μ€ νλ‘μ νΈμμ λ©ν° λͺ¨λμ μ μ©νκΈ° μ μ ν¨ν€μ§ ꡬ쑰μ λλ€. κΈ°μ‘΄μλ μλΉμ€μ λͺ¨λ μ½λλ€μ΄ λ¨μΌ λͺ¨λμ ν¬ν¨λ μνμμ΅λλ€. νμ°μ€ νλ‘μ νΈλ νΈμ μλ¦Ό κΈ°λ₯μ ν¬ν¨νκ³ μλλ°, νΈμ μλ¦Όμ μ μ‘νλ μλ²λ₯Ό λΆλ¦¬νκΈ°λ‘ κ²°μ νμ΅λλ€. νμ°μ€ μλ² → νμ°μ€ API μλ², νμ°μ€ μλ¦Ό μλ² μ΄ λ, API μλ²μ μλ¦Ό μλ² λͺ¨λ domain ν¨ν€μ§μ μ½λ, external.client ν¨ν€μ§μ μ½λ, common ν¨ν€μ§μ μ½λλ₯Ό κ·Έλλ‘ μ¬μ¬μ©ν΄μΌ νμ΅λλ€. νμ§λ§ μ μ§ λ³΄μ μΈ‘λ©΄μμ λ°λΌλ΄€μ λ, μλ²κ° λλ‘ λΆλ¦¬λλ©΄μ 곡ν΅λ ν¨ν€μ§μ λ΄μ©μ΄ μμ λλ©΄ λ§€λ² API μλ²μ μλ¦Ό μλ²μ μ½λλ₯Ό ν¨κ» μμ ν΄μ€μΌ νλ λΆνΈν¨μ΄ λ°μν μ .. 2023. 6. 26. [Spring] JPA λΉκ΄μ λ½ μ μ©μΌλ‘ λμμ± λ¬Έμ ν΄κ²°νκΈ° π€ λ¬Έμ μν© μ§νμ€μΈ λΈλΌμΈ νλ‘μ νΈμμ κ²μ κ²°κ³Ό μ‘°ν νμλ₯Ό μ¦κ°μν€λ λ‘μ§μ ꡬννλ κ³Όμ μμ λμμ± λ¬Έμ κ° λ°μν μ μλ μν©μ νμΈνμ΅λλ€. μλ₯Ό λ€μ΄ κ²μ κ²°κ³Όλ‘ κ½ A, B, C κ° μ‘°νλλ©΄ A, B, C μ μ‘°ν νμλ₯Ό κ°κ° 1μ© μ¦κ°μμΌμΌ νλλ°, λ§μ½ A μ νμ¬ μ‘°ν νμκ° 1μΌ λ, λμμ 3λ² μ‘°νλλ€λ©΄ κ²°κ³Όλ 4νκ° λμ΄μΌ νμ§λ§, 2νκ° λλ μν©μ΄μμ΅λλ€. μ΄λ₯Ό μνλ λ°©μλλ‘ λμμν€κΈ° μν΄ λΉκ΄μ λ½μ μ μ©ν΄λ³΄κΈ°λ‘ νμ΅λλ€. π» JPA λμμ± μ μ΄ λ°©μ JPA λ μν°ν°μ λν 무결μ±μ μ μ§ν μ μλλ‘ λμμ± μ μ΄ λ©μ»€λμ¦μ μ§μνκ³ μμ΅λλ€. μ΄ λ©μ»€λμ¦μλ λκ΄μ λ½κ³Ό λΉκ΄μ λ½μ΄ ν¬ν¨λ©λλ€. βοΈ λκ΄μ λ½ (Optimistic Lock) λκ΄μ λ½μ DB κ° .. 2023. 6. 15. Github Actions + AWS S3 + AWS CodeDeploy + Nginx λ₯Ό νμ©ν λΈλ£¨/κ·Έλ¦°(Blue/Green) 무μ€λ¨ λ°°ν¬ - Spring Boot CI/CD ν΄λΉ κΈμμλ μΈλΆμ μΈ AWS μ€μ μ λν΄ λ€λ£¨μ§ μμ΅λλ€. 𫣠ꡬ체μ μΈ μ€μ μ λν΄μλ λ€μ κΈλ€μ μ°Έκ³ ν΄μ£ΌμΈμ! Github Actions, AWS CodeDeployλ₯Ό νμ©ν CI/CD - Node.js(1) π€ CI/CDλ? βοΈ CI CIλ Continuous Integrationμ μ½μλ‘ μ§μμ μΈ ν΅ν©μ μλ―Έν©λλ€. μ½κ² λ§νλ©΄ λΉλ/ν μ€νΈ μλν κ³Όμ μ΄λΌκ³ ν μ μλλ°, CIλ₯Ό μ±κ³΅μ μΌλ‘ ꡬνν κ²½μ° μ ν리μΌμ΄μ μ λν www.devjoon.com Github Actions, AWS CodeDeployλ₯Ό νμ©ν CI/CD - Node.js(2) AWS CodeDeployλ₯Ό νμ©ν΄μ μλ λ°°ν¬λ₯Ό νκΈ° μν΄μλ AWSμμ κ΄λ ¨ μ€μ λ€μ ν΄μ€μΌ ν©λλ€. π AWS S3 λ²ν· μμ± Github A.. 2023. 5. 14. [Spring] MySQLκ³Ό mongoDB λ°μ΄ν°λ² μ΄μ€ 2κ° μ°λνκΈ° π§ μν© νμ¬ μ΄μμ€μΈ Hous- (νμ°μ€) 곡λμν λμ°λ―Έ μλΉμ€μμ κΈ°μ‘΄μλ MySQLλ§μ μ¬μ©νκ³ μμμ΅λλ€. νμ§λ§ λΆνμνκ² μμ΄λ μ€λλ μλ¦Ό λ°μ΄ν°λ₯Ό μ§μ°κΈ° μν λ°©λ²μ κ³ λ―Όν΄μΌνμ΅λλ€. κ°λν λνμμ΄κΈ° λλ¬Έμ.. μ¬μ©μκ° μ½ 200λͺ μ λμ λΆκ³Όνλ° μ 보μ§λ μλ μλ¦Ό λ°μ΄ν°κ° 10,000κ° μ΄μ μμ΄λ.. μ΄λ κ² κ³μ νμμλ λ°μ΄ν°κ° μμ΄λ€ 보면 AWS ν리ν°μ΄ κΈ°μ€μ μ΄κ³Όν κΉλ΄ κ²μ΄λ¬κ±°λ μ π₯² μλ² ννΈ νμκ³Ό λ Όμλ₯Ό ν΅ν΄ Spring Batchλ₯Ό νμ©νλ λ°©λ² μ€μΌμ€λ¬λ₯Ό μ¬μ©ν΄ μ€λλ λ°μ΄ν°λ₯Ό μ§μ°λ λ°©λ² κ·Έλ¦¬κ³ mongoDBλ₯Ό λμ νλ λ°©λ²μ κ³ λ―Όνμ΅λλ€. mongoDBμμλ TTL indexλ₯Ό μ§μνμ¬ λ°μ΄ν°μ μ ν¨κΈ°κ°μ μ€μ ν΄μ μ€λλ λ°μ΄ν°λ λ³λμ μ²λ¦¬ μμ΄ μλμΌλ‘ μ§.. 2023. 5. 10. Spring 무νμ€ν¬λ‘€ ꡬν (2) - μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ μ΄μ κΈμμ 무νμ€ν¬λ‘€, 컀μ κΈ°λ° νμ΄μ§λ€μ΄μ μ λν΄ μκ°νμ΅λλ€. π€ μ€νμ κΈ°λ°μ μΈμ μ¬μ©ν κΉ? μ΄μ κΈμμ μΈκΈνλ λλ‘ μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ μ 컀μ κΈ°λ° νμ΄μ§λ€μ΄μ μ λΉν΄ μ±λ₯μ λ¨μ΄μ§λλ€. νμ§λ§ μ΄λ offset κ°μ΄ 컀μ§μ λ°λΌ λ°μνλ λ¨μ μ΄κΈ° λλ¬Έμ μ‘°νν λ°μ΄ν°μ μμ΄ λ§μ§ μλ€λ©΄ μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ λ μΆ©λΆν νμ©ν μ μμ΅λλ€. 컀μ κΈ°λ° νμ΄μ§λ€μ΄μ μ μ λ ¬ μ‘°κ±΄μ΄ λ³΅μ‘ν΄μ§λ©΄ 볡μ‘ν΄μ§μλ‘ μ»€μλ₯Ό μ μ νλλ° μ΄λ €μμ΄ μμ΅λλ€. νμ§λ§ μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ μ Pageable μΈν°νμ΄μ€λ₯Ό νμ©ν΄ λ°μ΄ν° μ λ ¬μ νΈλ¦¬νκ² ν μ μμ΅λλ€. π μ‘°νν λ°μ΄ν°κ° λ§μ§ μκ±°λ μ λ ¬ μ‘°κ±΄μ΄ λ³΅μ‘ν κ²½μ° μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ μ νμ©ν΄λ³΄μ. π μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ ꡬν μ€νμ .. 2023. 1. 1. Spring 무νμ€ν¬λ‘€ ꡬν (1) - 컀μ κΈ°λ° νμ΄μ§λ€μ΄μ π§ νμ΄μ§λ€μ΄μ μ΄λ? μ½ν μΈ λ₯Ό μ¬λ¬ νμ΄μ§λ‘ λλκ³ , μ΄μ νΉμ λ€μ νμ΄μ§λ‘ λμ΄κ°κ±°λ νΉμ νμ΄μ§λ‘ λμ΄κ° μ μλ λ§ν¬λ₯Ό νμ΄μ§ μλ¨μ΄λ νλ¨μ λ°°μΉνλ λ°©λ² μΌνλͺ° νλ¨, κ²μ κ²°κ³Ό νλ¨μμ μ΅μνκ² μ°Ύμλ³΄μ€ μ μμ΅λλ€. π§ 무νμ€ν¬λ‘€μ΄λ? λΈλΌμ°μ λλ μ€λ§νΈν°μμ μ€ν¬λ‘€ λ§λκ° νλ¨μ λλ¬νλ κ²μ λ°©μ§νλ κ²μ λ§ν©λλ€. μ¬μ©μκ° νμ΄μ§λ₯Ό λ μλλ‘ μ€ν¬λ‘€ ν λλ§λ€ μλ‘μ΄ μ½ν μΈ κ° μΆκ°λ©λλ€. μΈμ€νκ·Έλ¨ νΌλ, μΌνλͺ° μν 리μ€νΈλ₯Ό μλλ‘ μ€ν¬λ‘€νλ€ λ³΄λ©΄ μ κΉμ λ‘λ©μ κ±°μΉκ³ 컨ν μΈ κ° μΆκ°λλ κ²½νμ νμ μ μμ£ ?! 무νμ€ν¬λ‘€μ μ μ©ν κ²½μ°μ λλ€. π§ 컀μ κΈ°λ°μ΄ λλ°? νν 무ν μ€ν¬λ‘€μ ꡬνν λ λ κ°μ§ λ°©λ²μ μ¬μ©ν©λλ€. 1. μ€νμ κΈ°λ° νμ΄μ§λ€μ΄μ 2. 컀μ κΈ°λ° νμ΄μ§λ€μ΄μ .. 2023. 1. 1. μ΄μ 1 λ€μ