spring


  • 동시성 제어하기(2): Lock

    이 글은 동시성 제어하기(1): Synchronization에서 이어집니다. 🤘🏻 나락도 락이다. 비관적 락도 락인가? Lock은 락이다(아니다). 🔒 Lock Lock은 동시성을 제어하기 위한 하나의 수단이다. Race condition을 막기 위해 공유된 자원 (Shared resource, Critical section)에 접근하는 스레드를 제한한다. 다만 이러한 과정 속에서 높은 정합성은 유지할 수 있지만, Lock을 획득하기 위해 기다리는 시간이 전체 실행 시간에 포함되므로 연산을 완료할 때까지 오랜 시간이 걸린다. 결국 Lock의 범위를 최소화하는 것이 성능에 큰 영향을 미친다. 이전 Synchronized⋯


  • 동시성 제어하기(1): Synchronization

    🍒 앵두랩 파헤치기 스프링 위에서 동시성을 제어해 보자. 망쵸와 감자가 앵두랩이라는 미션 레포지토리를 만들어 두어서 재미있게 공부했다. 우리는 아래와 같은 문제를 해결해야 한다! 아래와 같은 비즈니스 로직이 빠르고 정확하게 돌아가도록 구현해야 한다. 처음부터 문제를 해결하려고 하면 어려우니, 간단한 상황을 제시하고 하나씩 어려운 단계로 들어가 보자. 우선 단일 서버, 단일 DB 상황을 가정하고 문제를 해결하자. 🪨 데드락도 락이다 (아님) 10개의 티켓을 발급한 뒤 5명의 사람이 동시에 두 개의 티켓을 가져가는 시나리오를⋯


  • MockHttpServletResponse에 세션 쿠키 주입하기

    🍪 세션이 만들어주는 쿠키 한 조각 세션을 활용하던 중, 컨트롤러에서 httpServletRequest.getSession()을 통해 세션을 생성하고 있었다. 이렇게 하면 톰캣 내부에서 세션을 생성할 때 응답 헤더에 Set-Cookie 필드를 추가하게 된다. 아래와 같은 예제 코드를 보자! 서버를 실행하고 /session에 접근하면, 아래와 같은 응답 헤더를 확인할 수 있었다. 예상했던 대로 Set-Cookie 필드에 세션 ID가 포함되어 있었고, HttpOnly와 같은 보안 설정도 확인할 수 있었다. 🧙🏻‍♀️ 헨젤과 그레텔 그리고 쿠키 프로젝트를 진행하면서 세션을 추가해야할 일이 생겼다.⋯


  • JPA @Query에서 비트 연산자 (Bitwise AND) 사용하기, 트러블슈팅

    TL;DR @Query 어노테이션이 붙은 친구들은 HQL/JPQL로 작성한다. Hibernate 6.0.0 버전부터 $\texttt{BITAND}$ 함수가 추가돼 이를 사용할 수 있다. 단, $\texttt{BITAND}$ 내부에 우리가 함수 인자로 던져주는 값이 들어있다면, 해당 값을 아래와 같이 적절히 캐스팅해 주어야 한다. 비트 연산 교내에서 진행했던 해커톤에서 비트 연산한 값을 기준으로 데이터베이스에 쿼리를 보내야 할 일이 생겼다. 간단한 요리 레시피들을 필터검색할 때, 특정 조리도구들을 포함한 레시피들을 알아내야 했다. 조리도구의 양이 많지 않았어서 조리도구 하나하나를 비트로 하는 $\texttt{long}$ 타입의⋯


Categories