분류 전체보기28 [DB] 행 단위 잠금에 대한 생각 정리. 들어가며최근 Real MySQL 8.0 1권을 읽으면서, 행단위 잠금에 대해 한번 더 생각하게 되었습니다.이전 인턴 업무를 진행할 때에 상품 재고를 업데이트하는 트랜잭션을 작성할 때에도, Update 할 때 발생하는 행 잠금을 활용하여 이슈를 해결하였습니다.이때 특정 행에 대한 잠금을 획득하는 경쟁 상태가 발생할 수 있다는 것을 간과하였습니다.데드락 발생 가능 상황위의 그림을 보시면 아시겠지만, 이를 예방할 수 있는 방법이 존재하였습니다. 바로 잠금 발생의 순서를 오름차순 또는 내림차순으로 강제하는 것입니다. 그렇게 되면, 교착 상태에 빠지는 경우는 사라지게 됩니다.그렇다면 행 단위 잠금만으로 동시성 문제를 해결할 수 있을 것 같은데, 왜 분산락과 같은 기법을 사용할까..?vs 분산락.이전 프로젝트에서 .. 2025. 2. 14. [팀 프로젝트] 유니크 제약 조건과 동시성 문제 들어가며이전에 작성한 글(https://kongdevlog.tistory.com/16)에서 유니크 키 제약 조건에 대한 이해가 부족하여 오버 엔지니어링(+ 잘못된 작업)을 하게되었습니다.해당 과정에 대한 원인을 분석하고 개념을 정리하기 위해 글을 작성합니다.이전 구현@Transactional public MemberLoginServiceDto login(String phoneNumber) { Member member = createOrFindMemberByPhoneNumber(phoneNumber); if (member.isBanned()) { throw new BannedMemberException(); } ... .. 2025. 2. 1. [팀 프로젝트] 트랜잭션의 커밋 시점과 동시성 관리 상황@Transactional public MemberLoginServiceDto login(String phoneNumber) { Member member = createOrFindMemberByPhoneNumber(phoneNumber); if (member.isBanned()) { throw new BannedMemberException(); } ... return new MemberLoginServiceDto(accessToken, refreshToken, member.isProfileSettingNeeded()); } private Member createOrFindMemberByPhoneNumbe.. 2025. 1. 28. [팀 프로젝트] queryDsl 도입과 테스트 코드 들어가며팀 프로젝트에서 CQRS 패턴을 적용하게 되면서, 조인과 같은 JPQL을 손쉽게 사용함과 직접적인 도메인 노출을 피하기 위해 queryDsl 을 도입하고 query 계층을 사용하기로 하였습니다. 따라서 이에 맞게 queryDsl 코드를 작성함과 동시에 그에 따른 테스트 코드를 작성하는 과정을 기록하기 위해 글을 작성하게 되었습니다.@ElementCollection 을 사용함에 따른 불편함!@ElementCollection @CollectionTable(name = "member_hobbies", joinColumns = @JoinColumn(name = "member_id")) @Column(name = "hobby_id") private Set hobbyIds = new Hash.. 2025. 1. 21. [Kong's Blog] 프로젝트 회고와 리팩토링 (4) - 스케쥴링 적용 목적이전까지 구현한 배치 작업(내 티스토리 게시글을 읽어온 후, DB에 저장.)을 매일 한번씩 실행하기 위해 도입하기로 하였습니다.이를 위한 방법으로 Spring 에서 지원하는 Spring Scheduler를 선택하였습니다.Quertz 라는 또 다른 Scheudling 라이브러리가 있다고 하지만, 현재 제 스펙에서는 단순히 작업 실행만 있어도 될 것 같아 배제하였습니다!초기 세팅@SpringBootApplication@EnableSchedulingpublic class BlogApplication { public static void main(String[] args) { SpringApplication.run(BlogApplication.class, args); }} @Enabl.. 2025. 1. 17. [Kong's Blog] 프로젝트 회고와 리팩토링 (3) - 배치 사용해보기 들어가며이전에 구현하였던 크롤링 작업을 통해 가져온 게시글 (제목, 내용)을 Post 엔티티로 생성하여 저장하는 기능을 사용하는 Spring Batch . 를 구현하고자 합니다. 단순히 Scheduler 를 통해 해당 작업 지정된 시간마다 수행할 수 있지만, 왜 대용량 데이터를 처리하는데 Spring Batch 를 사용하는지에 대해 궁금함이 생겨 이를 직접 느껴보고자 도입하게 되었습니다!Batch 는 뭘까?Spring Batch provides reusable functions that are essential in processing large volumes of records, including logging/tracing, transaction management, job processing sta.. 2025. 1. 15. 이전 1 2 3 4 5 다음