해결하고자 하는 기존 멀티스레드 방식의 문제점하나의 작업이 실패할 경우 자동으로 일괄 취소할 수 없음(각 수동 예외처리 필요)여러 작업 간의 명확한 관계가 표현되지 않음 Java Structured Concurrency 소개동시성 작업을 부모-자식 관계로 구조화하여 작업 그룹을 하나의 단위로 관리하는 프로그래밍 패러다임오류 처리, 리소스 관리, 취소 기능을 단순화하여 안정적이고 예측 가능한 동시성 코드 작성을 목표로 함여러 스레드 작업들이 작업 완료 시 모두 동일한 위치로 돌아온다는 특징Jdk25 기준으로 5th Preview 상태 장점명확성: 일관된 패턴으로 멀티 스레드 코드 작성 가능예외 처리: 하나의 작업 실패로 다른 작업 취소 용이취소 전파: 상위 작업의 취소로 모든 하위 작업 취소 가능오류 원인..
용어 정리스레드 분류 커널 스레드• OS 커널에 의해 생성되고 관리되는 스레드• OS 스레드, 네이티브 스레드 라고도 불림 유저 스레드• 커널 스레드를 프로그래밍 레벨에서 추상화한 스레드• OS가 관리하는 커널스레드와 매핑되어 동작 스레드매핑모델 many-to-one model• 다수의유저스레드를하나의커널스레드와매핑 one-to-one model• 하나의유저스레드를하나의커널스레드와매핑 many-to-many model• 다수의유저스레드를다수의커널스레드가처리• 별도의스케줄러로관리필요 Java 스레드의 발전 과정Jdk 1.1many-to-one model• CPU Core가 1개인 환경에서 설계된 방식, 그린 스레드라는 명칭의 유저 스레드 사용• 단점: 커널스레드가 Blocking 되면 모든 유저 스레드..
지금까지 성능테스트를 위해 써본 툴을 비교해보고자 합니다. 오픈소스이며 자유도가 높은 툴을 사용하고자 하다 보니 3가지 툴을 사용해보았습니다.각각의 "스크립트 작성 방법", "gui 확인 방법"은 다음과 같습니다. locust스크립트 작성 방법: Pythongui 확인 방법: 명령어 실행시 실시간으로 확인할 수 있는 간단한 서버가 실행되어 브라우저로 접속하면 된다.k6스크립트 작성 방법: Javascriptgui 확인 방법: influxdb와 grafana를 연결하여 grafana에 제공되는 대시보드를 import하여 확인한다.다른 방법이 있는지는 모르겠으며, docker를 사용하여 간단히 grafana, influxdb를 사용했었다.artillery스크립트 작성 방법: yamlgui 확인 방법: 모두 ..
soft-delete-hibernatehibernate가 제공하는 @SoftDelete 어노테이션을 알아보자[hibernate 6.4.4 버전 기준으로 MySQL과 함께 테스트 했으며 6.4 버전부터 도입된 어노테이션이다.]@SoftDelete JavaDoc다음 어노테이션을 테스트디폴트로 boolean 타입의 deleted 필드가 추가되며, Entity 내부에 자바코드로 동일한 이름의 필드를 사용할 수 없다.중복 필드 에러가 발생한다.즉, deleted 필드는 자바 코드로 접근 불가하다.필드명은 커스텀하게 설정 가능하며, boolean 타입이 싫은 경우 converter를 사용할 수도 있다. (후술 예정)JpaRepository.deleteAll() 호출시deleted = true 로 update 된다...