
엔티티 매니저가 계속쓰이네 ? 보통트랜잭션단위로 사용되고 버려야하는데 왜 얜 이렇게쓰여 ?그리고 웨얼절은 뒤에문이 안나오면 오류안나오게 항상참이게되는거구나. 여기의엔티티 매니저는프록시객체,가짜객체. 컴포넌트로만들어져 컨테이너에 올라가있고 주입받아 사용될때마다 가짜객체만 오토와이어됐을뿐 엔티티매니저가 사용되는시점, 엔티티매니저.크리에이트쿼리 이때 이미 커넥션객체가 만들어져있고 그때 엔티티 매니저 실제객체가 주입되는식
jdbc할때 커넥션풀 , 데이터베이스는 연결에 비용이 제일 많이들기에 미리연결해두고 쓰는방식 그게 등장하느것 .그걸 관리해주는애가 커넥션풀객체 .
프로젝트의 메이븐디펜더시즈의 히카리 cp라는애

너무 잘 이해하고 계세요! 말씀하신 내용들 하나하나가 핵심을 짚고 있어요. 제가 조금 더 정리해드릴게요, 이해를 확실하게 도와드릴게요 😊
EntityManager는 왜 계속 쓰이나요?"보통 트랜잭션 단위로 사용하고 버려야 하는데 왜 자꾸 쓰여요?"
정확한 지적이에요!
근데 Spring Boot + JPA 환경에서는 이게 약간 다르게 동작해요:
EntityManager는 다음과 같이 관리돼요:@PersistenceContext로 주입된 EntityManager는 Spring이 관리하는 프록시 객체예요.EntityManager로 바뀌어요.@PersistenceContext 혹은 @Autowired로 꺼내서 계속 써도 문제가 안 생기는 것처럼 보이는 것이에요.EntityManager는 진짜가 아님.where 1=1 다시 정리"뒤에 조건이 안 나오면 오류 안 나게 항상 참이게 만든다"
맞아요! 예를 들어 다음처럼 조건을 붙일 때:
String jpql = "SELECT b FROM Board b WHERE 1=1";
if (title != null) {
jpql += " AND b.title LIKE :title";
}
if (writer != null) {
jpql += " AND b.writer = :writer";
}
이렇게 하면 조건이 하나도 안 붙을 경우에도 "WHERE" 절은 남아 있지만 오류 없이 잘 동작해요.
SQL 문법상 WHERE 뒤에 아무것도 없으면 에러나거든요.
"데이터베이스는 연결이 비싸니까 미리 연결해두고 재사용하는 커넥션 풀 등장, 그걸 관리하는 애가 HikariCP"
👏👏 완벽한 이해입니다!
Connection conn = DriverManager.getConnection(...)application.properties에 설정 가능spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.connection-timeout=30000
| 개념 | 설명 |
|---|---|
EntityManager | 스프링이 관리하는 프록시 객체. 트랜잭션마다 진짜 객체로 바뀜 |
where 1=1 | 쿼리 조립 시 오류 방지를 위한 항상 참 조건 |
| 커넥션 풀 | DB 연결을 미리 만들어두고 재사용 |
| HikariCP | 스프링부트 기본 커넥션풀 라이브러리 (빠르고 효율적) |
혹시 이 내용 바탕으로 더 궁금한 부분이나, 이어서 배우고 싶은 주제 있으신가요?
예를 들어 QueryDSL 심화, HikariCP 설정, 트랜잭션 동작 원리 등도 같이 이어드릴 수 있어요!