본문 바로가기

전체 글

(112)
TIL_2024_10_15(분산락) 지난번에 버전을 사용하는 낙관적 락과, 무조건 충돌이 일어난다고 가정하는 비관적 락에 대해서 알아보았습니다. 오늘은 그 두가지의 단점을 보완한 분산락에 대하여 알아보겠습니다. 분산락을 사용하는 이유: 여러 인스턴스나 서버가 동일한 자원에 접근하려고 할 떄 이들이 동시에 동일한 자원에 접근해 데이터가 손상되거나 일관성이 깨지는 문제가 발생 할 수 있습니다. 이를 해결하기 위해 하나의 인스턴스가 해당 자원을 먼저얻고(Lock) 작업이 끝나면 락을 해제해 다른 인스턴스가 자원에 접근할 수 있도록 하는 방식이 필요합니다. 이 과정에서 Redis를 사용할 수 있습니다. 왜 Redis인가?1.속도가 빠릅니다 2.레디스는 단일 스레드로 동작하기 때문에 동시성 문제가 발생할 여지가 적습니다. 3.레디스는 이와 관련된 ..
TIL_2024_10_14(레디스의 장점과 단점) Redis의 특징과 장단점에 대해 알아보자 Redis는 REmote DIctionary Server의 약자로 키-값 쌍의 해시맵과 같은 구조를 가진 NoSQL 데이터베이스 관리 시스템이다. 때문에 별도의 쿼리문이 필요하지 않고, 인-메모리에 저장되기 때문에 상당히 빠른 속도로 처리 할 수 있습니다. 레디스의 가장 큰 장점은 빠른 속도입니다. 데이터가 메모리에 저장되는 구조이기 때문에 빠른 읽기 및 쓰기가 가능합니다. 레디스의 또다른 장점으로는 다양한 구조의 데이터를 지원하는 점도 꼽을수 있습니다. 리스트,셋,해시,정렬된 셋,비트맵,하이퍼로그로그 같은 다양한 데이터 구조를 지원합니다. 또한 JPA와 비슷하게 영속성을 사용할 수 있습니다. 데이터의 지속성을 위해 디스크에 스냅샷(SnapShot)을 저장하는 ..
TIL_2024_10_11(트랜잭션 사용시 주의사항) 트랜잭션 전파속성을 REQUIRES_NEW로 설정하면 부모트랜잭션이 실패해도 자식 트랜잭션의 작업이 롤백 되지않는다. 다만 트랜잭션은 AOP와 같은 방식으로 동작하기 때문에 트랜잭션이 걸려있는 메서드는 해당 클래스의 내부 메서드로 작성하면 안되고 외부메서드로 작성해야한다.
TIL_2024_10_10(left outer join이 뻥튀기 행을 만드는 문제) 쿼리 DSL코드를 작성하다가 문제가 생겨났다. groupBy로 해결했지만 그룹바이를 지우게되면코멘트가 없는녀석들은 문제가없지만코멘트가 5개인 todo_id 가 1인 녀석이 5번이나 반복해서 생성됐다. 찾아보니 쿼리 DSL의 left join은 left outer join이고 left outer join은 이런 문제를 야기한다.todo_id=1에 해당하는 todo는 한개이다. 그런데 todo_id =1 인 댓글이 두개있다면? 조인을 하게되면 행이 하나였던것이 두개로 늘어나게 된다. 그래서 댓글이 없거나 하나만있는 값들은 한번만 조회됐지만 댓글이 5개있는 데이터는 5번이나 조회된것이다.조인순서가 할일과 코멘트를 조회한후 매니저를 조회한다. 만약 매니저도 수가많았다면 곱과 곱으로 늘어난 데이터에 서버가 뻗어버..
TIL_2024_10_08(트랜잭션 락에 관한 정리) 모의면접 피드백: 자기소개는 본인의 강점을 어필하자 강점을 어필하면 질문이 나오게 되어있다. 이런 방식으로 면접의 주도권을 나에게 가져올 수 있음기술 면접 준비할 때는 꼭 왜? 장점과 단점, 이 3개는 무조건 생각하면서 공부하자. 트랜잭션은 락 개념으로 동시성 문제를 해결했음.락은 데이터베이스의 특정 행이나 테이블에 접근하지 못하게 막는 매커니즘을 의미함. 락은 비관적 락과 낙관적 락으로 나뉨 비관적 락 = 데이터베이스 락 매커니즘에 의존하는 동시성 제어 방법>충돌이 자주 일어날 것이라고 판단되는 곳에 적용,코드 실행 시 필요한 데이터 범위에 락을 사용먼저 자원에 접근한 트랜잭션이 락을 획득하게 되고,다른 트랜잭션은 락을 획득하기 전까지 대기합니다.사용방법->사용할 레포지토리 코드에 @Lock(LockM..
기술면접 정리 JPA에서 Lazy Loading과 Eager Loading의 차이점과 각각의 장단점JPA란? Java Persistence API 이다. 자바 ORM 기술에 대한 표준 명세로,자바에서 제공합니다. 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 입니다. ORM기술 이기 때문에 자바 클래스와 데이터베이스 사이를 매핑합니다. ORM(Object-Relational Mapping)이란? 객체 지향 프로그래밍 언어를 사용해 서로 호환 되지 않는 시스템간의 데이터를 변환하는 프로그래밍 기술을 의미합니다. >>이거왜씀? 개발자가 객체 지향언어로 데이터베이스를 관리 할 수 있게 해줍니다.>>뭐가좋음? SQL을 쓰지 않기 때문에 개발자가 객체 지향 프로그래밍에 더욱 집중할 수 있게 해주며..
TIL_2024_10_07 JPA에서 Lazy Loading과 Eager Loading의 차이점과 각각의 장단점JPA에서 N+1 문제를 해결하기 위한 방법단위 테스트와 통합 테스트의 차이점과 각각의 장단점QueryDSL을 사용하여 복잡한 동적 쿼리를 작성하는 방법CS 문제 : 트랜젝션QueryDSL이란?QueryDSL은 SQL을 자바 코드로 안전하고 간결하게 작성할 수 있는 도구로, 타입 안전성과 유연성을 제공합니다. 특히 ORM과 함께 사용할 때, 코드로 SQL을 작성하면서도 컴파일 시점에 오류를 잡아낼 수 있는 장점이 있습니다. QueryDSL은 왜써야하는가? 예를 들어, 여러 조건에 따라 다른 필터링을 적용해야 할때 QueryDSL은 매우 유용합니다. 조건이 있을 때만 해당 조건을 추가하고, 없으면 쿼리에서 제외해야 하는 동..
TIL_2024_10_04(단위 테스트와 통합 테스트의 차이점과 각각의 장단점) JPA에서 Lazy Loading과 Eager Loading의 차이점과 각각의 장단점JPA에서 N+1 문제를 해결하기 위한 방법단위 테스트와 통합 테스트의 차이점과 각각의 장단점QueryDSL을 사용하여 복잡한 동적 쿼리를 작성하는 방법CS 문제 : 트랜젝션 단위 테스트는 개발 과정에서 가장 작으 단위의 코드,예로 함수나 메서드 등을 대상으로 하는 테스트 입니다. 단위테스트는 통합 테스트보다 빠르며 개발 초기 단계에서 버그를 발견하고 수정하는데 매우 효과적입니다.왜냐하면 단위테스트는 소프트웨어의 작은 부분만을 대상으로 하기 때문에 버그의 원인을 빠르게 파악할 수 있습니다.또 단위테스트는 코드의 변경이 다른 부분에 미치는 영향을 확인하는 데에도 유용합니다.단위테스트의 예)함수가 특정값을 받았을때 원하는 값..