자바와 코틀린9 코틀린에서 어노테이션 사용시 주의사항 요약코틀린의 프로퍼티는 선언하는 방식에 따라, 자바에서의 여러 요소에 매핑될 수 있다.따라서 코틀린의 프로퍼티에 어노테이션 사용시에는 use-site target 을 지정해주어야한다.해당 글에서는 코틀린 프로퍼티와 자바의 필드 사이의 차이점에 대해 다루며, 어노테이션이나, bean validation 에 대해 국한된 내용도 아니고 관련해서 딥다이브 하는 포스트는 아니라서 관련된 내용에 대해서 자세히 다루지 않는다.문제상황 분석문제 상황Bean Validation 기능을 통해 request dto 를 검증하려고 한다.하지만, 아래의 코드는 동작하지 않는다.@RestControllerclass TestController { private val logger = LoggerFactory.getLogger.. 2025. 3. 9. JWT JWT 개념정리JWT(JSON Web Token) 은 ID token 으로 주로 사용되지만, 텍스트 기반의 general purpose 메시징 포맷이다. 즉, 인증이 아닌 데이터를 주고 받는 목적으로도 사용될 수 있는 메시지 포맷이다. 물론 메시징 포맷으로써 JWT 를 사용하기도 하지만, 일반적으로 id token 으로 많이 사용되고 있다.구성요소payload : 전달하고자하는 데이터header: payload 와 메시지에 대한 메타 데이터로 JSON Object 이다.signature: 토큰의 서명header, payload 와 시크릿을 통해 생성된다.Claim ? Sub ?이번 블로그를 작성하게 된 것이 사실은 이 두 용어를 헷갈려서 찾아보고 정리했기 때문이다.payload 는 대부분 JSON 형태로.. 2024. 11. 17. 코루틴 - 코루틴 스레드 양보와 실행 스레드 스레드 양보란?코루틴이 스레드를 양보한다는 것은 어떤 뜻일까?코루틴에서 대표적으로 아래의 함수들이 스레드를 양보하는 중단함수이다.delayyieldjoinawait아래 코드를 통해 살펴보자.suspend fun main() = runBlocking { val start = System.currentTimeMillis() repeat(3) { launch { delay(1000) println("elapsed time: ${System.currentTimeMillis() - start}") } }}>> elapsed time: 1012>> elapsed time: 1021>> elapsed time: 1021위 코드는 코루틴 .. 2024. 9. 17. 코루틴 - 중단함수 중단함수중단함수란?중단 함수란 코루틴을 중단할 수 있는 중단점을 제공하는 함수를 말한다.suspend fun 을 통해서 구현할 수 있다.기본적으로 일반 함수와 크게 다르지 않으나, 내부에 중단지점을 가질 수 있다는 것이 일반함수와의 차이다.일반적인 함수나 메서드(루틴과 서브루틴)코루틴중단함수는 코루틴이 아니다.코루틴을 처음 접하는 경우 중단함수가 코루틴이라고 착각할 수 있다.중단함수는 코루틴이 아니고, 코루틴 내에서 실행될 수 있는 함수이다.중단함수의 사용중단함수는 코루틴을 중단할 수 있는 함수이다. 그렇기 때문에 일반함수처럼 사용할 수 없다.중단함수를 호출할 수 있는 곳은 아래와 같다.코루틴 스코프다른 중단함수fun main() { myMethod() // 호출 불가능}suspend fun myMeth.. 2024. 9. 17. 코루틴 - 구조화된 동시성 구조화된 동시성구조화된 동시성이란?코루틴은 기본적으로 특정 코루틴 스코프 내에서 여러 코루틴이 협력하여 동작한다.코루틴은 부모-자식 관계를 가지며, 이 부모 자식 관계가 구조화 된다. 이를 구조화된 동시성이라고 한다.여기서 부모 코루틴이라 함은, 코루틴을 생성한 코루틴이라고 할 수 있다.runBlocking 과 같은 코루틴은 스스로 코루틴 스코프를 만들어서 실행하므로, 본인이 루트 코루틴이 된다. 왜 코루틴은 이런 구조화된 동시성을 필요로 할까?그것은 바로 코루틴을 효과적으로 제어하기 위함이다.구조화된 동시성의 특징을 살펴보자.부모의 실행환경을 상속받는다.부모 코루틴의 취소는 자식에게 전파된다.부모 코루틴은 자식 코루틴이 끝날때까지 기다린다.아래에서 각 특징들에 대해 각각 살펴보도록 하자.부모의 실행환경.. 2024. 9. 17. 코루틴 - 코루틴 빌더와 Job 코루틴 상태와 JobJob모든 코루틴 빌더는 Job 객체를 생성하고 반환한다.Job 객체는 코루틴 실행을 추상화한 객체로, Job 을 통해 코루틴의 상태를 추적 및 실행을 제어할 수 있다.코루틴 상태코루틴의 상태에 대해 한번 알아보자.코루틴은 아래와 같은 상태를 가질 수 있다.New : 코루틴 빌더를 통해 코루틴을 생성하면 New 상태가 되며, 지연 실행 옵션을 주지 않으면, active 상태로 전이된다.active: 실행중 상태로, 실제 코루틴을 실행하거나 중단된 상태를 포함한다.completing: 자신의 코루틴이 모두 완료되었으나, 자식 코루틴이 완료되기를 기다리는 상태이다.completed: 자신과 자식 코루틴 모두가 완료된 상태이다.cancelling : 코루틴이 취소요청을 받으면 취소중 상태가.. 2024. 9. 17. 코루틴 - CoroutineDispatcher CoroutineDispatcher란?코루틴은 근본적으로 스레드에 의해서 실행된다.그렇다면, 코루틴이 어떤 스레드에 의해서 실행되는지 결정하는 것은 무엇일까?이것을 결정하는 것이 바로 CoroutineDispatcher 이다.CoroutineDispatcher 는 Coroutine 이라는 작업 단위가 어떻게 실행될지 제어하는 객체이다.물론 CoroutineDispatcher 마다 내부 구현은 캡슐화 되어있기에 구현체마다 사용하는 기술이 다를 수 있으나,아래의 메서드를 통해 생성되는 CoroutineDispatcher 는 내부적으로 Executor 프레임워크의 ThreadPoolExecutor 를 사용하고 있다.*newFixedThreadPoolContext*()*newSingleThreadContext*.. 2024. 9. 17. 프로세스와 스레드(운영체제 기본) 1. 프로세스와 스레드프로세스프로세스란 프로그램의 데이터가 메모리에 올라와 CPU 에 할당되어 실행되는 상태를 말한다.프로세스는 운영체제로 부터 자원을 할당 받는 단위이고, 프로세스는 독립적으로 메모리를 할당받는다.프로세스의 메모리 구성stack: 지역변수, 매개변수 등이 저장되는 공간으로 동적할당된다.=== 아래 영역은 스레드에 의해 공유 ===heap: 객체를 저장하는 공간으로 동적할당된다.data: static 변수와 같은 전역적인 데이터를 저장하는 공간code: .class 파일과 같은 실행될 코드를 저장하는 공간컨텍스트 스위칭을 하려면 프로세스의 실행정보를 전환해야해서 비용이 크다.스레드스레드란 프로세스가 할당 받은 자원을 바탕으로 실행의 단위가 된다.운영체제의 스케줄러에 의해 CPU 를 할당받.. 2024. 7. 29. companion object 는 클래스이자 객체다. companion object 는 클래스이자 객체이다. 코틀린에서 object 키워드는 클래스 선언이자 동시에 객체 초기화를 동시에 하도록 동작한다. object expression 으로 동작하는 경우 무명 클래스를 선언하고 객체화하는 것과 같고, companion object 처럼 declration 으로 동작하는 경우에도 마찬가지이다. 이를 확인해보기 위해 아래와 같이 선언해보자. class NamedCompanion { companion object Foo { } } 그리고 간단하게 이를 확인하기 위해, 아래 테스트를 만들어보면 동작함을 알 수 있다. 만약, companion object가 아닌 일반 클래스를 아래와 같은 방식으로 작성하게 되면, 동작하지 않는다. foo 는 객체로 취급되지만, Na.. 2023. 10. 9. 이전 1 다음