본문 바로가기

학습68

[redis] redisson을 통한 분산 락 저는 입사 후 광고 플랫폼의 어드민 쪽을 담당하여 개발하고 있는데요. 트래픽은 적지만, 다수의 심사자가 동시에 동일한 요청을 할 경우 동시성 문제가 발생할 여지를 안고 있었습니다. 심사의 상태값을 변경할 수 있는 기능을 예로 들어보겠습니다. 해당 기능은 심사자의 잘못된 심사와 같은 휴먼 에러를 해결하기 위해 개발되었습니다. 승인된 심사를 거절로 바꾸거나, 거절된 심사를 승인으로 바꿀 수 있는데요. 이 때 심사 이력을 남기기 위해 기존 심사 데이터의 상태를 변경하지 않고, 원하는 상태의 새로운 심사를 생성하여 기록합니다. 이 때 어떤 심사자가 심사 완료 버튼을 순식간에 여러 번 클릭하면서 동일한 요청을 여럿 보내게 되면 "원하는 상태의 새로운 심사"가 다수 생성되는 동시성 문제가 발생했습니다. 결과적으로는.. 2021. 1. 24.
[Querydsl] 우아한테크콘서트 2020 Querydsl 강의 정리 영상 링크 이 포스트는 우아한형제들에서 2020년 우아한테크콘서트를 진행하며 이동욱님께서 발표해주신 수십억건에서 Querydsl 사용하기를 시청하며 학습하고 정리한 글입니다. 테스트 환경 Java : OpenJDK 1.8.0_252 Querydsl : Querydsl-JPA 4.2.1 Database : AWS Aurora MySQL 5.6 1.19.6 Querydsl의 Custom Repository를 사용하지 않는 방법 보통 Querydsl을 사용할 때 1. JpaRepository와 CustomRepository를 확장(extends)한 Repository Interface 2. Querydsl을 사용하는 메소드 시그니처를 정의하는 RepositoryCustom Inteface 3. 실제로 Quer.. 2021. 1. 10.
[spring] Spring State Machine 스테이트 머신(상태 기계)를 이해하기 위해서는 먼저 오토마타 이론을 간략하게 이해해야 한다. 컴퓨터 공학 수업에선 오토마타를 배운다는데... 나는 컴공이 아니기 때문에 ㅠ_ㅠ 위키피디아에 검색하면 자세하게 학습할 수 있다. 오토마타 이론 계산 능력이 있는 추상 기계와 그 기계를 이용해서 풀 수 있는 문제를 연구하는 컴퓨터 과학 분야 추상 기계 = 오토마타라고 지칭 오토마타는 일반적으로 유한한 상태를 가지며, 입력을 받아 일정하게 상태를 전이하며, 출력을 내놓는다. 유한 상태 기계 유한한 개수의 상태를 가질 수 있는 오토마타 한 번에 오로지 1개의 상태만을 가진다. 현재 상태(Current State) = 임의의 주어진 시간에 기계가 갖고 있는 상태 어떤 사건(Event)에 의해 한 상태에서 다른 상태로 .. 2020. 10. 31.
[java] 멀티스레드 환경과 싱글톤 객체 해당 포스트는 Jungwoon님의 자바 멀티스레드 환경에서 싱글톤 패턴을 이해하며 작성한 글입니다. 결론은 LazyHolder 패턴으로 싱글톤을 구현하자! 입니다. 스프링은 빈이라는 싱글톤(유일한 하나의 인스턴스) 객체를 IOC 컨테이너에 생성하여 사용한다. 스프링의 빈은 일반적으로 1. 상태를 가지고 있지 않게 설계 (@Controller, @Service, @Repository, ...) 2. 어플리케이션 구동 시 ApplicationContext라는 Static Sharing Pool에 싱글톤 인스턴스 생성 2가지 방법으로 멀티스레드에서의 빈 동기화를 신경쓰지 않아도 된다. 하지만 싱글톤 객체는 사실 구현 방법에 따라 Thread-Safe 할 수도, 하지 않을 수도 있다. 구현1 - 정적 팩토리 메.. 2020. 7. 15.
[java] 가비지 컬렉션 DZone의 Java Memory Management 포스팅 YABOONG님의 자바 메모리 관리 - 가비지 컬렉션 포스팅 네이버 D2의 Java Reference와 GC 포스팅 PreamTree님의 가비지 컬렉션 소개 포스팅을 읽고 학습한 내용을 정리한 글입니다. 가비지 컬렉션 프로세스의 이해 스택 변수로부터 참조된 타입에 따라서, 힙의 객체들은 가비지 컬렉션이 적용되는 타이밍이 다르다. 예컨대 해당 사진에서 붉은색 객체들은 가비지 컬렉터에 의해 회수된다 (eligible to be collected) 스택 변수로부터 Strong Referenced되고 있었지만, 참조가 사라져 더 이상 접근할 수 없는 객체들이 그렇다. 가바지 컬렉션 프로세스의 특징 1. Java에 의해 자동으로 시작되며, 가비지 컬렉션.. 2020. 7. 5.