inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

동시성 처리가 된건지 모르겠습니다.

해결된 질문

240

유재선

작성한 질문수 5

0

@Transactional
public boolean enrollCourse(String studentId, Long courseId){

Course findCourse = courseRepository.findById(courseId).get();

if(findCourse.getCurrentNumStudent() == findCourse.getMaxNumStudent())
return false;

Student findStudent = studentRepository.findById(studentId).get();

StudentCourse studentCourse = new StudentCourse();

studentCourse.enrollCourse(findStudent, findCourse);

findCourse.addCurStudentNum();
studentCourseRepository.save(studentCourse);

return true;
}

service의 메소드 입니다.

위의 동시성 처리 시나리오는

수강신청 최대 인원(findCourse.maxNumStudent)이 50명이고

현재 신청인원(findCourse.currentNumStudnet)이 49명일 때 동시에 여러 학생이 수강신청을 할 경우의 동시성 처리입니다.

false를 반환 받으면 controller에서 클라이언트로 신청할 수 없다는 메세지를 전달합니다.

JPAQueryFactory는 Repository마다 생성하고 

JPAQueryFactory에 초기화하는 EntityManager는 주입받아서 전체 Repository에 공통으로 사용하고 있습니다.

@Transactional 에너테이션을 추가했고, JPAQeuryFactory를 사용했으므로 동시성 처리가 되고 있는 건지 궁금합니다.

더 생각 해 본것이 메소드에 synchronized 를 사용하는 것도 괜찮을 까요?

클라이언트의 요청마다 스레드가 생기는 것이니까 가능할 것 같다고 생각합니다.

또, 혼자서 개발할 때 동시성 처리를 테스트 할 수 있는 좋은 방법이 있는지 궁금합니다.

java JPA

답변 1

1

김영한

안녕하세요. 재선님

트랜잭션을 사용한다고 해도 원하시는 동시성 처리를 하기는 어렵습니다.

서버가 딱 1대라면 synchronized를 사용해도 되겠지만, 보통 서버를 2대 이상 사용하기 때문에 이것도 해결방안이 되지 않습니다.

결국 데이터베이스가 제공하는 동시성 처리가 필요한데요. 이 부분은 깊이있는 공부가 필요합니다.

관련해서 다음 링크를 참고해주세요^^

https://www.inflearn.com/questions/17498

감사합니다.

0

유재선

답변 정말 감사합니다. 열심히 공부해서 동시성 처리를 해결해 해보겠습니다.

SpringBoot 4.X에서의 Querydsl 설정

0

63

2

querydsl 오픈소스에 대한 질문

0

65

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

105

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

309

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

67

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

158

1

querydsl sum() 메서드 없어요.

0

156

2

build 디렉터리 생성

0

133

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

112

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

87

1

오타 제보 드립니다.

0

69

2

벌크 연산과 flush, clear

0

75

1

Run As Intellij 로 변경시 Q타입 import 불가

0

84

1

QHello import하기 문제 발생

0

146

2

등록된 함수 보는법(H2Dialect) 질문

0

67

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

189

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

195

1

querydsl 설정 문제

0

220

2

quey dsl 설정부분

0

155

2

count 쿼리 관련 질문입니다!

0

73

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

89

1

답변부탁드리겠습니다.

0

88

2

(OrderSpecifier)관련 내용 어디있을가요

0

60

1

중급문법 벌크연산에서

0

77

2