전체 글 (16) 썸네일형 리스트형 로깅: Logback, Log4J, SLF4J, JUL .... 개발자에게는 공기와도 같은 존재인 로깅에 대해 알아보자. 로깅의 역사를 알아보자! Q. 기존에는 어떻게 로그를 남겼을까? System.out.println(), System.err.println() -> 어떤 환경에서든 똑같이 동작 (환경별로 처리 불가😭) Log4J 환경마다 다르게 로그레벨을 설정할 수 있게 되었다! 로그레벨: TRACE/DEBUG/INFO/WARN/ERROR/FATAL java.util.logging (JUL) 자카르타 프로젝트에서 사용하던 로깅 프레임워크 로그레벨: FINEST/FINER/FINE/CONFIG/INFO/WARNING/SEVERE Log4J vs JUL 서로 다른 레벨과 처리로 혼용하기 힘들었음. 이를 해결하기 위해서 Apache Commons 에서 동적 바인딩을 통해.. DB 락: 왜 잠그는거야..? 이번에 프로젝트를 진행하면서, DB락에 대해서 애를 꽤나 먹었다..... 하... 다시금 DB락에 대해 알아보는 시간을 가지려고 한다. 1. 데이터베이스에 잠금이 왜 필요할까? - 동시성 제어 Q. 잠금이 왜 필요할까? 예: 한정판의 물품이 있다고 하자. 이 물품이 1개만 남았는데 동시에 이 물품을 잡으려 한다면? 동시성 제어 트랜잭션들이 동시에 수행될 때, 일관성을 해치지 않도록 데이터 접근을 제어하는 DBMS의 기능 동시성 제어는 어떻게 할까? Lock을 활용하며 낙관적, 비관적으로 나뉜다. 2. Lock의 종류 - 낙관적, 비관적 낙관적 잠금: Qptimisstic Lock 데이터 갱신 시 경합이 발생하지 않을 것이라고 봄 한 사용자가 업데이트를 완료하면, 동시 업데이트 확약을 시도하는 다른 사용자.. JPA N+1 문제: 실무에서 어떻게 다룰까? JPA N+1 이란? 요청이 1개의 쿼리로 처리되길 기대했는데, N개의 추가 쿼리가 발생하는 현상 지연로딩(Lazy) 로딩되는 시점에 Lazy 로딩 설정이 되어있는 연관된 엔티티(그림 기준 team)는 프록시 객체로 가져오는 방법이다. 물론, 즉시로딩을 지연로딩으로 변경해도 N+1에서 자유로울 수는 없다. 즉시로딩이 아니기에 조회와 동시에 해당 건 수만큼 연관된 정보를 조회해오지는 않겠지만, 해당 테이블에서 연관 정보를 사용하는 시점에서는 동일하게 불러오게 된다. 참고로 @OneToMany와 @ManyToMany는 기본이 지연 로딩(LAZY)이다. 보통 이런 경우에서는 Lazy로딩을 사용한다면, SELECT쿼리가 2번 나간다. (DB를 두 번 찌름) 이 때는 용도가 명확하기에 즉시 로딩 (EAGER) 전.. 이전 1 2 3 4 ··· 6 다음