νλ‘μ νΈ/Airbnb Clone (13) μΈλ€μΌν 리μ€νΈν [λ‘κ·ΈμΈ λ° νμκ°μ ] μ¬μ©μ νΈμμ±μ κ³ λ €ν μ΄λ©μΌ μΈμ¦ κΈ°λ° λ‘κ·ΈμΈ/νμκ°μ μκ° μꡬμ¬ν μκ°Airbnb μ¬μ΄νΈμμ λ‘κ·ΈμΈνκΈ° μν΄ μ΄λ©μΌμ μ λ ₯νμ λμ΄λ©μΌμ΄ μ‘΄μ¬νλ€λ©΄ λΉλ°λ²νΈλ₯Ό μ λ ₯νλ μ°½μ λμμ£Όκ³ ,μ΄λ©μΌμ΄ μ‘΄μ¬νμ§ μλλ€λ©΄ ν΄λΉ μ΄λ©μΌμ κ°μ§κ³ νμκ°μ μ νλλ‘ μ§νμν΅λλ€.κ³ λ―Ό ν¬μΈνΈ1. Aμ¬μ©μμ Bμ¬μ©μκ° λμμ κ°μ μ΄λ©μΌλ‘ νμκ°μ μ ν λ, λꡬμ μ΄λ©μΌμ μ ν¨νκ² λ³Ό κ²μΈκ°? μ²μμλ λ‘κ·ΈμΈνκΈ° μν΄ μ΄λ©μΌμ λ¨Όμ μ λ ₯ν μ¬μ©μλ§ μ²λ¦¬λμΌ νλ€ μκ°νμ΅λλ€.κ·Έλμ λμμ μ΄λ©μΌμ μ λ ₯νμ λμ μΌμ΄μ€λ₯Ό μ²λ¦¬νκΈ° μν΄ μ±κΈ μ€λ λμΈ Redis μ λ¨Όμ λ€μ΄μ¨ μ΄λ©μΌμ μ μ₯ ν μ μμ§λ§, μ΄νμ μμ²ν μ¬μ©μ μ μ₯μμλ νμκ°μ νμ§λ μμλλ° λΉλ°λ²νΈλ₯Ό μ λ ₯νλ μ°½μ λμμ£Όλ κ²μ μ¬μ©μλ‘ νμ¬κΈ λΆνΈνλ€κ³ νλ¨νμ΅λλ€. κ·Έλ¬λ, λ©μΌ μλ²μ APIλ₯Ό μ¬μ©νλ€λ©΄.. [νΈλ¬λΈ μν ] jakarta.mail.internet.addressexception: local address contains control or whitespace ꡬκΈλ§ ν΄λ λμ€μ§ μλ μλ¬λ₯Ό ν΄κ²°νλ κ³Όμ μ μκ°νλ©°, μ λ°μνκ³ μ΄λ»κ² ν΄κ²°νλμ§ μκ°νλ κΈμ λλ€.SMTP κΈ°λ₯μ λν΄ μ€λͺ νμ§ μμ΅λλ€.μλ‘ μμ΄λΉμ€λΉμ νμκ°μ ν λ, νμμ΄ μ λ ₯ν μ΄λ©μΌμ΄ μ μ μ΄λ©μΌμΈμ§ νμΈνκ³ μ μΈμ¦λ²νΈλ₯Ό 보λ΄κ³ μ νμ΅λλ€.κ·Έλμ, μλμ κ°μ μ½λλ‘ λ€μ΄λ² μλ²μ λ©μΌμ 보λμΌλ, `jakarta.mail.internet.addressexception: local address contains control or whitespace` μλ¬κ° javaMailSender.send(message) μμ λ°μνμμ΅λλ€.public void sendVerificationEmail(String memberEmail) { try { SimpleMai.. [νΈλ¬λΈ μν ] 20λ§ λλ―Έ λ°μ΄ν° μ½μ μ csvνμΌμ μ΄μ©ν΄μ DB connection timeout → 7μ΄λ‘ μ€μ΄κΈ° βμλ‘ μ½λμ€μΏΌλ μμ΄λΉμ€λΉ ν΄λ‘ μ½λ© νλ‘μ νΈ μ€ μ±λ₯ ν μ€νΈλ₯Ό νκ³ μΆμκ³ ,μ΄λ₯Ό μν΄ λ€λμ μμ, μμ½, νμμ λλ―Έ λ°μ΄ν°λ₯Ό λ§λ€κ³ μ νμμ΅λλ€. λλ―Έ λ°μ΄ν°λ₯Ό μμ 20λ§κ°, μμ½ 100λ§κ°, νμ 1λ§λͺ μ λ§λ€κ³ μ νμμ΅λλ€.μ΄ μ€, μμ 20λ§κ°λ₯Ό λ§λλ κ³Όμ μμ μκΈ΄ μΌμ μκ°ν©λλ€. 20λ§κ° μμ λ°μ΄ν°λ₯Ό Java μ½λλ‘ μμ 1κ°λ§λ€ INSERT INTO 쿼리λ₯Ό DBμ λ λ Έλλ DB connection timeout λ¬Έμ λ₯Ό λ§μ£Όνμ΅λλ€. - κ³ λ €ν λ°©μMySQLμ λ μ½λλ ν μ΄λΈ λ¨μμ νμΌλ‘ μ μ₯λλ€λ μ μ μ°©μν csvνμΌ μ¬μ©λλ μ½μ μ νΉνλ κΈ°μ μΈ Spring Batch - 2κ°μ§ μ΄μ λ‘ csvνμΌμ μ΄μ©νκΈΈ μ ννμ΅λλ€.νλ‘μ νΈ λ¨μ 1μ£Ό λμ μ±λ₯ ν μ€νΈλ₯Ό ν΄μΌλλ€λ μ λλ―Έ .. [λμμ± μ μ΄] μ λν¬ μ μ½μ‘°κ±΄μ νμ©ν΄ 1 건μ μμ½λ§ μ μ₯ βμꡬμ¬νμ½λμ€μΏΌλμ Airbnb νλ‘μ νΈ μ€κ°μ μμμ μ¬λ A μ μ¬λ B κ° λμμ μμ½μ μμ²ν κ²½μ°, ν 건μ μμ½λ§ μ±κ³΅ν΄μΌ ν©λλ€.(κ°μ μμλ₯Ό μ¬λ Aμ μ¬λ Bκ° λμμ μ¬μ©νλ©΄ μλλκΉ!)βκ³ λ―Όκ·Έλμ, λμμ μμ½ μμ²μ λ§κΈ° μν΄λΉκ΄μ λ½λκ΄μ λ½DBμ μ λν¬ μ μ½μ‘°κ±΄μ κ³ λ―Όνκ² λμμ΅λλ€.βν΄κ²° κ³Όμ μμ½μ΄ μ μ₯λλ μ½λλ λ€μκ³Ό κ°μ΅λλ€.@Transactionalpublic BookingResponse create(BookingSaveRequest request) { // μμ²ν μμ½μ΄ κΈ°μ‘΄ μμ½μ μΌμ κ³Ό μ€λ³΅λλμ§ νμΈνλ λ‘μ§ Long bookedStayCount = bookingRepository.countBookedStay(request.getStayId(), re.. [Querydsl] Expressions.dateTemplate, timeTemplate μ¬μ©κΈ° Querydsl μ κΈ°λ³Έ μ¬μ©λ²μ μκ°νμ§ μμ΅λλ€. Querydsl μ νμ΅ μ€μ μμ±ν κΈμ΄κΈ° λλ¬Έμ μκ°ν λ°©λ²μ΄ μ΅κ³ μ λ°©λ²μ΄ μλ μ μμμ μλ €λ립λλ€πβοΈκ°λ°νκ²½JDK 17, Querydsl 5.0.0, Spring boot 3.xβμλ‘ μ½λμ€μΏΌλ μμ΄λΉμ€λΉ ν΄λ‘ νλ‘μ νΈ μ€, μ¬μ©μ 쑰건μ λ°λΌ μμκ° κ²μλλ κΈ°λ₯μ ꡬννκ³ μ νμ΅λλ€.μ¬μ©μκ° 6/19 ~ 6/20 λ₯Ό μμ κ²μ 쑰건μΌλ‘ λ±λ‘νλ©΄,μλ²μμλ 6/19 ~ 6/20 κΉμ§ μ΄μ© κ°λ₯ ν μμ ID(μμ½ λμ΄μμ§ μμ μμ ID) λ₯Ό μ°Ύμ΅λλ€. μλ₯Ό λ€μ΄,μμ IDκ° 1μΈ μμμ `6/19 PM15:00 ~ 6/20 AM11:00` μΈ μμ½μ΄ μλ€κ³ κ°μ ν©λλ€.λ§μ½, μ¬μ©μκ° 6/20 ~ 6/21 μ μ΄μ©κ°λ₯ν μμλ₯Ό μ°Ύλλ€λ©΄.. μ΄μ 1 2 λ€μ