Java의 동기화(synchronized, wait(), notify())
·
JVM/Java
안녕하세요. 오늘은 자바의 동기화에 대해서 알아보려고 합니다.자바의 동기화에 대해서 알려면, 모니터, synchronized 키워드, wait() 메서드, notify() 메서드를 잘 이해해야 합니다.모니터모니터란?자바는 모니터를 이용해서 동기화를 지원합니다. 이 모니터는 자바의 각 객체마다 하나씩 소유하고 있습니다.그렇다면, 모니터란 뭘까요? 모니터는 뮤텍스, 세마포어 같은 동기화 방식의 추상화된 동기화 방식이라고 할 수 있습니다.간단하게 뮤텍스/세마포어의 방식을 알아볼까요?public void run() { lock() // do something unlock()}이런 방식으로 임계 영역을 접근하기 전에 명시적으로 잠금과 해제를 선언하는 방식입니다. 반면, 모니터의 경우는 아래와 같은 방식입니다.pu..
Spring Security CORS 설정하기 (Kotlin)
·
JVM/Kotlin
안녕하세요. 오늘은 Spring Security CORS 설정하는 방법에 대해서 알아보겠습니다.자바와는 다르게 코틀린에서는 권장하는 문법이 조금 달라서 저도 적용하는데 애먹었습니다.환경JDK17KotlinSpring Boot 3.2.4Spring SecurityConfiguration 파일 수정우선 설정 파일을 변경해야 합니다. 코드와 주석 따라서 한번 천천히 확인해 봅시다.@ComponentScan@Configuration@EnableWebSecurityclass SpringConfiguration { @Bean @Throws(Exception::class) fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { ..
Java Virtual Thread 사용하는 방법
·
JVM/Java
안녕하세요. 이전 글에서 Java Virtual Thread에 대해서 알아보았습니다. 오늘은 가상 스레드를 실제로 사용하는 방법에 대해서 알아보겠습니다. Java의 Virtual Thread에 대해서(JEP444)안녕하세요. 오늘은 자바의 가상 스레드(Virtual Thread)에 대해서 알아보겠습니다. 이 가상 스레드는 JDK21에서 정식으로 추가된 기능입니다.기존 Thread의 한계 기존에 사용되던 자바의 스레드는 플woodding.tistory.com사용하는 방법은 간단합니다. startVirtualThread()Runnable runnable = () -> { try { Thread.sleep(10000); System.out.println(Thread.current..
Java의 Virtual Thread에 대해서(JEP444)
·
JVM/Java
안녕하세요. 오늘은 자바의 가상 스레드(Virtual Thread)에 대해서 알아보겠습니다. 이 가상 스레드는 JDK21에서 정식으로 추가된 기능입니다.기존 Thread의 한계 기존에 사용되던 자바의 스레드는 플랫폼 스레드(Platform Thread)라고 불립니다. 이 플랫폼 스레드는 OS의 커널 스레드(Kernel Thread)와 1대 1로 매핑되는 형태입니다. 그렇다면 플랫폼 스레드는 커널 스레드가 가진 단점을 그대로 가지고 있다는 것입니다.커널 스레드의 단점은 아래와 같습니다.OS가 스케줄링을 할 때 발생하는 컨텍스트 스위칭(Context Switching)의 비용이 많다.일반적으로 하나의 스레드마다 메모리 1MB를 스택을 위해 할당된다.저희가 흔히 알고 있는 자바의 스프링 프레임워크(Spring..
Java에서 MessageDigest를 이용해서 해시코드 생성하기 (SHA-256, SHA-512, MD5)
·
JVM/Java
안녕하세요. 오늘은 String을 해시 코드로 변환해보겠습니다. 일반적으로 해시는 비밀번호 저장 시에 많이 사용되죠? 이것을 자바에서 어떻게 사용하는지 알아봅시다.MessageDigest저희는 java.security 패키지의 `MessageDigest` 클래스를 사용할 겁니다.var algorithm = "SHA-256";var md = MessageDigest.getInstance(algorithm);이렇게 하면 MessageDigest 객체를 얻을 수 있습니다. 사용 가능한 해시 함수 알고리즘은 아래와 같습니다.(공식 문서)MD2MD5SHA-1SHA-224SHA-256SHA-384SHA-512SHA-512/224SHA-512/256SHA3-224SHA3-256SHA3-384SHA3-512문자열을 해..
Spring Security 세션 로그인 직접 구현하기(Kotlin)
·
JVM/Kotlin
오늘은 Spring Security에서 세션 로그인을 직접 구현해 봅시다. Spring Security는 기본적으로 form 로그인을 제공해주고 있습니다. 하지만 RESTful API을 목적으로 개발하는 경우 form 로그인은 좋은 선택이 아닙니다. 그래서 직접 세션 로그인을 구현하거나, 다른 방식으로 로그인 방식을 구현해야 하는데요. 저는 Spring Security의 Filter 기능을 이용해서 직접 세션 로그인을 구현해 볼 겁니다.환경JDK17KotlinSpring Boot 3.2.4Spring Security구현스프링 시큐리티의 기본 form 로그인, http 로그인 비활성화 하기직접 세션 로그인을 구현할 것이므로 이 기능을 비활성화해야 합니다.@ComponentScan@Configuration@..