Leehyoungwoo / vacation-study

vacation study
0 stars 0 forks source link

2023-12-18 #19

Open Leehyoungwoo opened 6 months ago

Leehyoungwoo commented 6 months ago
Leehyoungwoo commented 6 months ago

하지만, 이 어노테이션이 실제로 작동하고 있는지 여부는 제공된 코드만으로는 확인할 수 없습니다. 그 이유는 다음과 같습니다:

Spring Security 설정: @PreAuthorize 어노테이션을 사용하려면 Spring Security 설정에서 @EnableGlobalMethodSecurity(prePostEnabled = true)를 설정해야 합니다. 이 설정이 없으면 @PreAuthorize 어노테이션은 무시됩니다. authService 빈: @authService.authorizeToUpdateBoard(#userDetails.getId(), #boardId)에서 authService는 Spring 빈이어야 합니다. 이 authService 빈이 존재하지 않거나 authorizeToUpdateBoard 메소드가 없으면 오류가 발생합니다. 따라서, 이 @PreAuthorize 어노테이션이 실제로 작동하고 있는지 확인하려면 위의 두 가지 요건이 충족되었는지 확인해야 합니다.

Leehyoungwoo commented 6 months ago

예를 들어, 웹 서버는 한 번에 많은 요청을 처리해야 합니다. 각 요청마다 스레드를 생성하여 독립적으로 처리하면, 한 요청이 다른 요청에 영향을 주지 않고 처리될 수 있습니다.

그런데 여러 스레드가 동시에 같은 메모리 영역에 접근하려고 하면 문제가 발생할 수 있습니다. 이를 'race condition'이라고 합니다.

예를 들어, 두 스레드가 동시에 Claims 객체를 읽고 쓰려고 하면, 어떤 스레드가 먼저 접근할지, 어떤 스레드가 나중에 접근하면서 이전 스레드의 변경을 덮어쓸지 예측할 수 없습니다.

이런 문제를 방지하려면, 'synchronization'을 사용하여 한 번에 하나의 스레드만 Claims 객체에 접근하도록 할 수 있습니다. 하지만 이 방법은 추가적인 오버헤드를 발생시키며, 잘못 사용하면 'deadlock' 같은 다른 문제를 유발할 수 있습니다.

따라서 간단하고 안전한 방법은, 각 스레드가 독립적인 Claims 객체를 사용하는 것입니다. 이렇게 하면, 다른 스레드가 Claims 객체를 변경하더라도 해당 스레드에는 영향을 주지 않습니다. 이 방법은 각 메서드에서 Claims 객체를 독립적으로 생성하여 사용하는 것을 의미합니다.

Leehyoungwoo commented 6 months ago