βοΈ λ°±μλ: Backend8 [Spring] Slack API νμ©νμ¬ μλ¬ λͺ¨λν°λ§νκΈ° μλΉμ€λ₯Ό λ°°ν¬ν ν, νλ‘μ νΈλ₯Ό μ μ§ κ΄λ¦¬νκΈ° μν΄μ μλ¬ λμμ νμμ μ λλ€. μλ¬λ₯Ό λͺ¨λν°λ§νκΈ° μν μλ¨μ λ€μνμ§λ§, μ΄λ² κΈμμλ Spring Boot μμ μ¬λμ νμ©νμ¬ μλ¬λ₯Ό νμΈν μ μλ λ°©λ²μ μκ°νκ³ μ ν©λλ€. ν΄λΉ κΈμμ μκ°ν λ°©λ²μ λ°λΌμ€μλ©΄ λ€μκ³Ό κ°μ΄ μ¬λμΌλ‘ μλ¬λ₯Ό νμΈνμ€ μ μμ΅λλ€! π π― 1. Slack μ°λμ μν ν ν° λ°κΈ λ¨Όμ Slack λ΄μ μμ±νκΈ° μν΄ https://api.slack.com/apps/ μ μ μν©λλ€. Create New App ν΄λ¦ -> From scratch ν΄λ¦ App Name μ μμ λ‘κ² μ€μ νκ³ μ¬λ μλ¦Όμ λ°μ μν¬μ€νμ΄μ€λ₯Ό μ€μ ν©λλ€. Permissions ν΄λ¦ Bot Token Scopes μμ Add an Oauth Scop.. 2023. 8. 3. [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. [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 λ€μ