JWT Access Token과 Refresh Token의 필요성 JWT(JSON Web Token)는 사용자의 신원이나 권한 정보를 담고 있는 데이터 조각이다. JWT 인증 방식에서는 비밀키(개인키 또는 대칭키)를 사용해 토큰을 암호화하여 보안을 유지한다. 하지만 JWT 토큰이 탈취당하면 문제가 발생할 수 있다. 탈취한 공격자는 마치 정상 사용자처럼 인증을 통과할 수 있으며, 서버는 원래 사용자와 공격자를 구분할 방법이 없다. 따라서 JWT에는 유효 기간(expiration time)을 설정하는 것이 필수적이다. 💡 그러나 유효 기간을 짧게 설정하면 사용자가 자주 로그인을 해야 하고, 너무 길게 설정하면 보안상 위험이 커진다. 이를 해결하기 위해 Access Token과 Refresh Token이라는..
지난번에 스프링의 멀티스레딩 활용 방식을 알아봤다. 여러 가지 방식 중에서 멀티스레딩을 활용한 비동기 처리 방식을 내 프로젝트에 적용시켜보고자 한다. 동기 처리를 했을 때와 비동기 처리를 했을 때의 성능 차이를 분석하여 비동기 처리 방식이 어떻게 활용될 수 있는지 살펴보자. 스프링의 비동기 처리 적용 방법 우선 스프링에서 비동기 처리를 적용시키기 위한 간단한 방법을 알아보자. @Configuration@EnableAsyncpublic class AsyncConfig {} 스프링에서 비동기 처리를 적용하려면 먼저 비동기 설정 클래스를 생성하고, @EnableAsync 어노테이션을 사용해 비동기 기능을 활성화해야 한다. 그 후, 비동기 처리를 적용할 메서드에 @Async 어노테이션을 추가하면 해당 메서드가..
1. CORS Cross-Origin-Resource-Sharing의 줄임말로, 교차 출처 리소스 공유라는 뜻 브라우저에서 요청 시 (Origin)이 다르면 발생하는 브라우저 정책CORS는 허가되지 않은 외부 요청을 막고, 악의적으로 정보가 탈취되는 것을 막아줌 CORS의 기본 개념과 동작 방식(부제: Preflight 요청이란?)우선 Preflight request를 이해하기 위해선 CORS에 대해서 알아야한다. CORS란 Cross-Origin Resource Sharing 의 줄임말로, 직역하면 교차 출처 리소스 공유라는 뜻이다. CORS는 “다른 출처”에 리소스를 요청할velog.io CORS(Cross-Origin Resource Sharing, 크로스 오리진 리소스 공유)는 웹 브라우저에서 ..
1. CSRF란?CSRF는 웹사이트의 취약점을 이용하여 사용자가 의도하지 않는 행동을 유도하는 공격 Spring Security는 기본적으로 CSRF 보호를 제공하는데, 이는 Ajax 요청에도 적용됨. 따라서, 각 Ajax 요청에 CSRF 토큰을 포함해야 하며, 이를 누락하면 Spring Security는 해당 요청을 거부할 수 있음 Ajax : Asynchronous JavaScript and XML의 약자로, 웹 개발 기술의 하나입니다. Ajax를 사용하면 웹 페이지를 다시 로드하지 않고도 서버와 비동기적으로 데이터를 주고받을 수 있습니다. 이 기술을 통해 웹 애플리케이션은 사용자 경험을 더 동적이고 반응성이 뛰어나게 만들 수 있습니다. CSRF에 대한 사용 방식 사용자가 뱅킹 웹 사이트에 로그인하여..
3-2학기에 운영체제 과목에서 배운 프로세스와 스레드 개념을 복습해 보고, 이를 Spring Boot에서 어떻게 활용하는지 알아볼게요. 프로세스란? 프로세스는 실행 중인 프로그램의 가장 작은 단위로, 하나의 실행 흐름을 가진 프로그램을 의미해요. 즉, 프로그램이 메모리에 로드되어 실행되고 있는 상태를 프로세스라고 부릅니다. 예를 들어, 실행 중인 카카오톡이나 크롬 브라우저는 각각 하나의 프로세스로 동작합니다.각 프로세스는 자신이 소유한 자원을 보호하기 때문에, 다른 프로세스의 자원이나 메모리 영역에 접근할 수 없습니다. 실제 상용 시스템에서는 이러한 프로세스보다 더 작은 단위인 스레드 단위로 CPU 코어를 할당하여 스케줄링을 수행하고 있어요. 스레드란? 스레드는 프로세스 내에서 실행되는 흐름을 의미해요...
기존 코드의 소요 시간 측정 @Transactional(readOnly = true)public PostListDTO getPostPreviewList(final int page) { Pageable pageable = getPageable(page); return PostListDTO.toPostListDTO(postRepository.findAllByOrderByViewsDesc(pageable));}@Query("SELECT p FROM Post p ORDER BY p.views DESC")Page findAllByOrderByViewsDesc(Pageable pageable); 기존 코드를 통해서 인기 게시글 조회 소요 시간을 측정하게 되면 다음과 같은 결과가 나오게 된다. 동시에 발생한 요청이 ..