본문 바로가기

Development/Diary

(11)
[개발일기]Python은 멀티쓰레딩 언어인데 GIL은 왜멀티쓰레딩을 막도록 설계되었나요? 그리고 Python 3.12 Per-interpreter GIL 인턴 생활을 하면서 Python의 대해 공부를 좀 했었는데, Python은 멀티쓰레딩 언어임에도 GIL라는 장치는 마치 단일 쓰레딩만 가능하도록 설계가 되었다는 것을 알았습니다. 왜 멀티쓰레딩 언어임에도 이를 막고자 설계가 되었는지 시니어 개발자분께 여쭤본 기억이 있는데요, 마침 최근 Python 3.12에는 Interpreter improvements의 사항으로 PEP 684, a unique per-interpreter GIL 가 있더라구요! 이 글에서는 GIL과 per-interpreter GIL 에 대해 다루고자 합니다. GIL 파이썬은 메모리 관리를 위해 참조 계수(reference counting)를 사용합니다. 이는 파이썬에서 생성된 객체가 해당 객체를 가리키는 참조의 개수를 추적하는 참조 ..
[개발일기] 이 코드에서 Semaphore 사용하는 이유가 무엇인가요? Semaphore? 세마포어(Semaphore)는 컴퓨터 시스템 내에서 다수의 프로세스 간의 활동을 조정하기 위해 사용되는 일반적인 변수입니다. 세마포어는 상호 배제(Mutual Exclusion)를 강제하고 경쟁 조건(Race Condition)을 피하며 프로세스 간 동기화를 구현하는 데 사용됩니다. 세마포어를 사용하는 과정에는 "wait"와 "signal" 두 가지 연산이 포함됩니다. wait 연산은 세마포어의 값을 감소시키며, signal 연산은 세마포어의 값을 증가시킵니다. 세마포어의 값이 0인 경우, wait 연산을 수행하는 프로세스는 다른 프로세스가 signal 연산을 수행할 때까지 블록됩니다. 세마포어는 임계 영역(Critical Section)을 구현하는 데 사용되며, 이는 코드의 일부를 ..
[개발 일기][Spring]Spring Security에서 AccessDeniedHandler 와AuthenticationEntryPoint Spring Security는 유저에 대한 인증 및 권한처리를 가능하게 해주는 spring 보안 프레임워크입니다. 저는 프로젝트를 진행하면서 @RestControllerAdvice를 사용해 전역적으로 예외 처리를 하도록 하였으나, 기대한 HTTP status code와 에러 메시지와는 달리 403 Fobidden만 응답받을 뿐이었습니다. 이 문제는 User가 로그인을 하지 않은 채, 서비스의 접근할 경우 발생한 예외였습니다. 즉 인증되지 않은 클라이언트가 서버에 요청을 보냈을 때의 발생한 상황이었습니다. 조사해 보니 Spring Security의 Filter Chain으로 발생한 예외는 서블릿 필터 단계에 속하는 부분이기 때문에 @RestControllerAdvice와 같은 어노테이션으로 예외 처리를 ..