작성
·
250
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예
[질문 내용]
현재 개발을 하다가 @transactional 의 범위에 대해 궁금한 점이 있어서 질문 올립니다.
@Service
class A{
//A 메서드
@transactional
public Response saveShowProgram{
saveTV(Long openapiId);
saveMovie(Long openapiId);
Response = TV 의 일부+ movie의 일부
return response;
}
//B 메서드
@transactional
public Response saveShowMoive{
saveMovie(Long openapiId);
Response = Movie 내용
return response;
}
private Program saveMoview(Long openapiId){
Program program= programRepository.findByOpenAPiId(openapiId).orElseGet(
Program newProgram = apiProgramToProgram;
programRepository.save(newProgrm);
return newProgram;
}
}
현재 문제 코드를 간략하게 나타낸 것입니다.
saveShowProgram 과 saveShowMovie 모두 saveMovie를 호출하고 있습니다.
근데 이게 개발 과정에서 테스트 할 때는 몰랐는데
프론트 쪽에서 동시에 파바바박 둘다 동시에 호출했는데
세상에나... 같은 openapiId를 가지고 있는 프로그램이 두개씩 저장되는 경우가 있는게 아니겠습니까??(원래는 saveMovie 에서 program 에서 openapiId를 통해 조회하고 조회결과가 있는 경우에는 그 조회한 결과를 반환하지만 그렇지 않은 경우 저장해서 반환하고 있습니다).
그래서 @transactional 에 대해 제대로 이해를 못하고 있다고 생각했습니다.
당연하게 여겼던 것
1) @tranactioanl 은 public 에 선언이 가능하고 거기 안에 t사용된 private 함수도 역시 @transactioanl 이다.
2) @transactional 이 붙은 것은 하나가 끝나면 처리되게 lock 이 걸릴 것이다.
이렇게 넘어갔었는데 어느 내용에서 제가 놓치고 있는게 있는지 알려주시면 감사하겠습니다! ㅠㅠㅠㅠㅠㅠㅠㅠㅠ