[개발 일기] 2025.06.09 - 격리 수준
·
개발 일기
💡 개요 오늘은 동시성 제어에 사용되는 격리 수준에 대해 다시 정리해 보자.. (사실 예전에 정리했는데 약간 가물가물해서..) 🛠️ 격리 수준 격리 수준이란 하나의 DB을 여러 트랜잭션이 접근할 때, 특정 트랜잭션이 다른 트랜잭션에서 변경 작업이나 조회 작업을 수행할 때, 데이터에 접근할 수 있게 허용할지 말지를 결정하는 것이다. 다음은 격리 수준이 높은 순서대로 나열한 것이다. ⚙️ SERIALIZABLE 모든 트랜잭션은 작업중인 데이터에 접근할 수 없다. 그렇기 때문에 가장 안전한 방식이지만, 그만큼 동시성이 떨어지기 때문에 성능 측면에선 가장 불리하다. 🔥 이상 현상 ❌ Dirty Read❌ Non-repeatable Read❌ Phantom Read ⚙️ REPEATABLE ..
[개발 일기] 2025.06.08 - 갑자기 ID가 커진다
·
개발 일기
💡 개요 Auto Increment가 설정된 id는 1, 2, 3 이렇게 1씩 증가하는 걸로 알고 있다. 위 사진은 내가 회원 객체를 저장, 삭제, 다시 저장한 결과이다. gudtjr2949@naver.com인 회원 저장id = 1, email = gudtjr2949@naver.comgudtjr0630@nate.com 인 회원 저장id = 2, email = gudtjr0630@nate.comgudtjr0630@nate.com 회원 삭제gudtjr0630@nate.com인 회원 저장id = 52, email = gudtjr0630@nate.com 그런데 id가 3이 되는 게 아니라 52가 된다. 왜 이럴까? 🛠️ allocationSize JPA는 시퀀스를 기반으로 ID(기본키)를 생성할 때..
[개발 일기] 2025.06.07 - 수동으로 만든 객체는 DI을 하지 않아요!
·
개발 일기
💡 개요 수동으로 만든 객체는 DI가 되지 않는다. 오늘 처음 알았다. 반성하자. 🛠️ 수동으로 만든 객체 내가 이 사실을 알게 된 것은 SecurityConfig에 JwtFilter을 적용할 때 알게 되었다. @Componentpublic class JwtFilter extends OncePerRequestFilter { @Autowired private JwtResolver jwtResolver; @Autowired private JwtProvider jwtProvider; @Autowired private UserDetailsService userDetailsService; ... } 보다시피 JwtFilter에서 사용되는 의존성이..
[개발 일기] 2025.06.06 - FilterChainProxy
·
개발 일기
💡 개요 Spring Security 공식 문서를 읽다가 FilterChainProxy라는 것을 보게 되었다. FilterChain은 여러 개의 Filter을 체인처럼 묶어서 요청이 타고 넘어가는 것(Filter1 → Filter2 → …)을 의미한다. 그런데 위 이미지를 보다시피 중간에 끼어있는 FilterChainProxy가 있는게, 이게 뭐지..? 🛠️ FilterChainProxy 아래 글은 Spring 공식 문서에 있는 FilterChainProxy에 대한 내용이다. SecurityFilterChain에 포함된 보안 필터들은 보통 Spring Bean으로 등록되지만, 이들은 DelegatingFilterProxy가 아니라 FilterChainProxy에 등록됩니다. FilterCh..
[개발 일기] 2025.06.05 - 새로운 패키지 구조
·
개발 일기
💡 개요 오늘은 “도메인 주도 개발 시작하기” 서적에서 본 새로운 패키기 구조에 대해 정리해 보자. 🛠️ 패키지 구조 아래 구조는 내가 옛날부터 사용해 오던 방식이다. - member - controller - service - repository- product - controller - service - repository- order - controller - service - repository 서적에서 제안하는 패키지 구조는 다음과 같다. - member - controller - application - ...Service (비즈니스 유스케이스 담당) - domain - ...Repository (Spring Data JPA 기준 인터페이스만..
[개발 일기] 2025.06.04 - H2는 Point 타입을 사용할 수 없다!!
·
개발 일기
💡 개요 보통 위치 좌표를 표현할 때 DB에선 Point 타입을 자주 사용한다. 🛠️ H2에서 Point? …Repository을 테스트 할 땐 보통 @DataJpaTest 을 사용한다.→ 그래야 기본적으로 인메모리 DB인 H2도 사용되고, 트랜잭션도 자동으로 적용되기 때문이다. 그런데, 엔티티에 Point 타입 필드를 사용하게 되면 H2는 기본적으로 Point 타입과 같은 공간(Spatial) 타입을 지원하지 않기 때문에, 테이블 생성 시 DDL 에러가 발생하며 테이블 생성이 실패한다. 그렇기 때문에 어쩔 수 없이 Point가 자주 사용되는 테스트라면 DB에 H2 말고 MySQL이나 PostgreSQL을 사용해야 한다. 다음은 @DataJpaTest 테스트 코드에 실제 MySQL DB을 적..