open-in-view
μλ‘

νλ‘μ νΈλ₯Ό μ€ννλ κ³Όμ μμ λ€μκ³Ό κ°μ WARN λ©μμ§κ° μΆλ ₯λλ€. open-in-viewκ° νμ±νλμ΄ μλλ° μ΄λ¬λ©΄ λ·° λ λλ§ μ€μ λ°μ΄ν°λ² μ΄μ€ μΏΌλ¦¬κ° μνλ μ μλ€. μ΄λ₯Ό λΉνμ±νν λ €λ©΄ μ€μ ν΄λΌ λ‘ ν΄μν μ μλ€. μ²μ μ΄ λ©μμ§λ₯Ό λ΄€μ λ, λ·° λ λλ§ μ€μ μΏΌλ¦¬κ° λ°μν μ μλ κ²μ΄ μ WARN λ©μμ§μΈμ§ μ λͺ°λλ€. μ΄λ€ μνμ±μ΄ μλμ§ μμλ΄€λ€.
λ³Έλ‘
μ μ
open-in-viewλ₯Ό ν΅ν΄ μμμ± μ»¨ν μ€νΈκ° λ°μ΄ν°λ² μ΄μ€μ 컀λ₯μ μ μΈμ λλ €μ£Όλμ§ μ€μ ν μ μλ€κ³ νλ€.
spring:
jpa:
open-in-view: /* true or false */
- true : μλ²κ° ν΄λΌμ΄μΈνΈμκ² μλ΅ λ©μμ§λ₯Ό λ³΄λΈ μ΄νμ 컀λ₯μ μ λ°λ© (μλ΅μ ν ν)
- false : λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ μ μ¬μ©μ΄ λλλ©΄ λ°λ‘ λ°λ© (νΈλμμ μ΄ λλ ν)
- 컀λ₯μ μ λ°λ©νλ€ = μμμ± μ»¨ν μ€νΈκ° λ«νλ€λ‘ 보면 μ΄ν΄νκΈ° νΈν κ² κ°λ€.
trueμΌ λ μ λ¬Έμ κ° λ κΉ ?
μ ν리μΌμ΄μ μ΄ μμλ λ, λ°μ΄ν°λ² μ΄μ μ 컀λ₯μ μ 미리 νλνμ¬ μ»€λ₯μ νμ μ μ₯μ νλ€. μ΄λ₯Ό ν΅ν΄ μμ²λλ§λ€ λ°μ΄ν°λ² μ΄μ€μ 컀λ₯μ μ νλνλ λΉμ©μ μ€μΌ μ μλ€. 컀λ₯μ νμ μ μ₯λλ 컀λ₯μ μ κΈ°λ³Έ κ°μλ μ£Όλ‘ 10κ°λΌκ³ νλ©°, μ€μ μ ν΅ν΄ λ³κ²½ν μ μλ€.
컀λ₯μ νμ μ μ₯λ 컀λ₯μ 10κ°κ° ν΄λΌμ΄μΈνΈμ νΈμΆμ ν΅ν΄ λ°νλλ€κ³ κ°μ μ νλ€. μ΄μ€ 컀λ₯μ μ μ¬μ©μ΄ λλ λ μ΄μ μ¬μ©νμ§ μλ 컀λ₯μ μ΄ μ‘΄μ¬ν κ²μ΄λ€.
μ΄λ₯Ό λ°λ©νμ§ μκ³ κ·Έλλ‘ κ°μ§κ³ μλ€λ©΄, μ΄νμ λ€μ΄μ€λ μμ²μ λκΈ° μνμ μκ±°λ 컀λ₯μ μ νλνκΈ° μν΄ TCP 3handshakeλ₯Ό μ§νν κ²μ΄λ€. μ΄λ κ² λλ©΄ ν΄λΌμ΄μΈνΈμ λκΈ° μκ°μ΄ μ¦κ°νκ³ , 컀λ₯μ μ νλνκΈ° μν λΉμ©μ΄ λ°μνλ€.
κ·ΈλΌ falseλ‘ μ€μ ν΄μΌ ν κΉ ?
μ¬κΈ°μλ λ¬Έμ κ° λ°μνλ€. trueλ‘ μ€μ μ ν΄μ 컀λ₯μ νμ λ°λ©μ νκ³ , AλΌλ λ°μ΄ν°λ₯Ό κ°μ Έμλ€κ³ κ°μ μ νλ€. Aλ Bμ μ°κ΄κ΄κ³λ₯Ό κ°μ§κ³ μκ³ μ§μ° λ‘λ© κΈ°λ₯μ μ¬μ©νλ€.
Aλ₯Ό κ°μ Έμ€κ³ commitμ΄ λλ©΄, νΈλμμ μ λ«νκ³ μ»€λ₯μ νλ λ°λ©μ΄ λλ€. μ΄ μνμμ Bλ₯Ό μ‘°ννκ² λλ©΄ μ‘°νκ° λμ§ μκ³ μλ¬κ° λ°μλλ€. μλνλ©΄, μ§μ° λ‘λ©μ μ‘°ν λΉμμλ νλ‘μ κ°μ²΄λ₯Ό μ§μ΄ λ£κ³ νμν μκ°μ κ°μ²΄λ₯Ό μ‘°ννλλ° μ»€λ₯μ νμ΄ λ°λ© λ μμ μμ νλ‘μ κ°μ²΄κ° μ΄λ€ κ°μ²΄μ νλ‘μ κ°μ²΄μΈμ§ μ μ μκΈ° λλ¬Έμ΄λ€.
λ μμΈν μ€λͺ νλ©΄, Aλ₯Ό κ°μ Έμ€κ² λλ©΄ μμμ± μ»¨ν μ€νΈμμ μ΄λ₯Ό κ΄λ¦¬νλ€. νΈλμμ μ΄ λλλ²λ €μ μμμ± μ»¨ν μ€νΈκ° λ«νκ² λλ©΄ Aλ μ€μμ μνλ‘ λ³νκ² λλ€. μ¬κΈ°μ Aμ μ°κ΄ κ΄κ³κ° μλ Bμ νλ‘μ κ°μ²΄λ₯Ό ν΅ν΄ Bλ₯Ό μ‘°νν λ €κ³ νλ©΄ μ‘°νκ° μλλ€. μλνλ©΄, μν°ν°κ° μμ μνμ¬μΌ μ‘°νκ° κ°λ₯νλ©° μμμ± μ»¨ν μ€νΈκ° λ«ν μμ μμ μ€μμ μνλ₯Ό μμ μνλ‘ λ°κΏ μ μκΈ° λλ¬Έμ΄λ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄μλ μ΅μ΄μ μ΄λ¦° νΈλμμ μμ μ°κ΄ κ΄κ³κ° μλ λ°μ΄ν°λ₯Ό λͺ¨λ μ‘°νν΄μΌ νλ€.
κ·ΈλΌ trueμ false λ μ€ μ΄λ€κ±Έλ‘ μ€μ μ ν΄μΌ ν κΉ ?
μ λ΅μ μλ κ² κ°λ€. ꡬννλ μ ν리μΌμ΄μ μ λ°λΌ μ€μ μ΄ λ¬λΌμ§λ€κ³ μκ°μ νλ€. trueλ‘ μ€μ νλ©΄ 컀λ₯μ νμ κΈ°λ³Έ ν¬κΈ°λ₯Ό ν¬κ² μ‘κ³ , falseλ‘ μ€μ νλ©΄ νΈλμμ λ΄μμ λͺ¨λ μ²λ¦¬κ° λκ±°λ μ§μ° λ‘λ©μ μ¬μ©ν λ°μ΄ν°λ₯Ό λͺ¨λ λ‘λνλ λ‘μ§μ ꡬμ±νλ©΄ λλ€.
νλ‘μ νΈ μ μ©
μ μ κ° μμ±μ΄ λλ©΄ μλ΅μΌλ‘ μ μ μ μν μ΄ κΈ°λ³Έκ°μΌλ‘ λμμΌνλλ°, null κ°μΌλ‘ λμμ ν΄κ²°μ± μ μ°Ύλ μ€ λ¨Έλ¦¬ ν ꡬμμ μλ open-in-view μ€μ μ΄ μκ°μ΄ λ¬λ€. μμμ± μ»¨ν μ€νΈκ° μ μ§λλ λμ μμλ μ μ μν°ν°μλ μν μ΄ null κ°μ΄μλ€. open-in-viewλ₯Ό falseλ‘ μ€μ νκ³ , λ€μκ³Ό κ°μ΄ μ½λλ₯Ό μμ±νλ©΄ μ μ μ μν μ΄ μ μμ μΌλ‘ μΆλ ₯μ΄ λλ€.
@PostMapping("/user")
public ResponseEntity < ResponseUser > createUser(
@Valid @RequestBody RequestCreateUser requestCreateUser
) {
userService.createUser(requestCreateUser);
ResponseUser user = userService.findUserByUsername(requestCreateUser.username());
return ResponseEntity.ok(user);
}
μμμ± μ»¨ν μ€νΈκ° μ μ§λλ λμμ μ μ λ₯Ό κ²μνλ©΄ μμμ± μ»¨ν μ€νΈμμ μ‘°νλ₯Ό νλ€. μ΄λλ μμ μ λ ₯λ κ°μΌλ‘ ꡬμ±λ μ μ μ μν°ν°κ° μμμ± μ»¨ν μ€νΈμ μ‘΄μ¬νλ€.
μμ±μ΄ λλκ³ μμμ± μ»¨ν μ€νΈλ₯Ό λ«κ³ , λ€μ κ²μμ νκ² λλ©΄ μλ‘ μ΄λ¦° μμμ± μ»¨ν μ€νΈμλ μ μ μν°ν°κ° μκΈ° λλ¬Έμ λ°μ΄ν°λ² μ΄μ€μμ μ‘°νν΄μ κ°μ Έμ¨λ€. κ·ΈλΌ κΈ°λ³Έκ°μ΄ λͺ¨λ λ€μ΄κ° μ μ μν°ν°λ₯Ό κ°μ Έμ¬ μ μλ€.
λ§λ¬΄λ¦¬
μ΄ λ΄μ©μ μ¬μ€ JDBC νμ΅ λ μ ν리μΌμ΄μ μμ κ³Όμ μμ μλ¬ λ©μμ§κ° λμ€κΈΈλ κΆκΈν΄μ ν λ² μ°Ύμλ΄€λ λ΄μ©μ΄λ€. κ·Έ λλ μ΄λ° λ΄μ©μ΄κ΅¬λ νκ³ μΈμ§νκ³ λμ΄κ°λλ°, νλ‘μ νΈ κ΅¬ν κ³Όμ μμ νμνλ€κ³ μκ°λμ μ 리νλ€. 무μ¬μ½ μ§λκ° λ΄μ©μ΄ ν΄κ²°μ± μ΄ λ¨μ μκ² λκ³ , μ¬μν κ² νλνλλΌλ μμλ νμκ° μμμ μκ² λλ€.
μ΄ν νλ‘μ νΈ μ§ν κ³Όμ μμ μ§μ° λ‘λ©μ μ¬μ©νλ κ°μ²΄λ€μ΄ μ‘΄μ¬ν¨μ μκ² λκ³ λ λ€μ μ½μ§μ ν΄μΌνλ€λ νμ€μ λ§μ£Όνλ€. νννν
μ°Έκ³ λ¬Έν
Spring Bootμ open-in-view, κ·Έ μνμ±μ λνμ¬. spring.jpa.open-in-view λ? OSIV(Open Session in view)μ΄λ? μ₯λ¨μ , μ¨μΌν μ§ λ§μμΌν μ§