분류 전체보기

    [Spring] 프레임워크 개념 - 1편

    Spring 엔터프라이즈 Java 어플리케이션을 위한 가장 많이 사용되는 프레임워크입니다. 사실 스프링은 J2EE 개발을 더 쉽게 할 수 있는 단순하고 가벼운 대안으로 시작되었습니다. 그렇다면 스프링을 사용하면 어떤 이점이 있는지 알아보겠습니다. Java POJO(Plain Old Java Object)를 사용하므로 J2EE 이전 버전의 헤비급 EJB에 비해 엔터프라이즈급 어플리케이션을 훨씬 간단하게 구출할 수 있습니다. POJO는 Java 언어 사양에 의해 강제된 것 이외의 제한 사항에 구속되지 않는 Java 개체입니다. 따라서 POJO는 프레임워크에서 미리 지정된 클래스를 확장하거나 미리 지정된 인터페이스를 구현할 필요가 없습니다. DI(Dependency Injection)을 이용하여 느슨한 결합을..

    Spring Boot + Kotlin 깔끔한 validation 처리 (feat. Jackson)

    스프링 부트 의존성 라이브러리를 확인했을 때 별도의 라이브러리를 추가하지 않더라도 기본 starter 킷에 Jackson 라이브러리가 포함되어 있는 것을 확인할 수 있습니다. Spring Boot를 이용한 HTTP API 서버 구현시 요청의 body 값을 대부분 JSON으로 받게됩니다. 또한 응답을 Class Instance로 반환하면 JSON으로 변환하여 응답하게 됩니다. 때문에 직렬화와 역직렬화가 수행되는데, 스프링부트에서는 @RestController 어노테이션이 달린경우 Jackson 라이브러리가 직렬화와 역직렬화를 담당하게 됩니다. 대부분의 변환 과정에서 큰 문제는 없지만 스프링부트와 Kotlin을 함께 사용하게 된다면 이야기가 조금 달라집니다. @RestController class Examp..

    Javascript Promise로 배우는 Kotlin Coroutine

    Coroutine 이란? 처음 코루틴을 접했을 때 코틀린의 '코'를 따서 'Ko'routine 인줄 알았지만, 사실 코루틴의 Co는 Concurrency라는 의미를 가지고있습니다. 즉, 동시성 프로그래밍 개념을 코틀린에 도입한 것이 코루틴 이라고 합니다. 코루틴은 javascript Promise와 조금 다른 성질을 가지고 있습니다. 코루틴은 스레드 위에서 실행되는데 여러가지 코루틴 1,2,3이 존재한다고 할 때 코루틴1을 실행하던 중 코루틴2가 실행되어도 실행중인 스레드를 정지하면서 컨텍스트 스위칭 개념으로 다른 스레드로 전환하는 것이 아니라 기존 스레드를 유지하며 기존 스레드에서 코루틴2를 실행하게 됩니다. 이후 코루틴1을 다시 실행할 때 저장해둔 코루틴1 상태를 불러와 다시 스레드에서 코루틴1을 실..

    SpringBoot ResponseBodyAdvice 특정 응답 값 암호화하기

    본 포스팅은 ResponseBodyAdvice를 이용하여 암호화된 응답값을 생성하는 예제입니다. 사실 HandlerInterceptor의 postHandler 같은 곳에서 응답값을 가공할 수 있을 듯하지만, 사실 인터셉터 단에서 응답 가공은 불가능합니다. 하지만 특정 API만 암호화된 값으로 응답을 가공하고 싶을 때가 있는데, 그럴때 사용하는 것이 ResponseBodyAdvice입니다. ResponseBodyAdvice @RestControllerAdvice class EncryptedResponseWrapper : ResponseBodyAdvice { override fun supports(returnType: MethodParameter, converterType: Class): Boolean { ..

    Kotlin 리플렉션(Reflection)

    리플렉션(Reflection)이란? 리플렉션은 말 그대로 '반사', '반영'의 의미를 가지고있습니다. 구체적인 클래스 타입을 알지 못하더라도 바이트코드를 이용해 해당 클래스의 메소드, 타입, 변수들을 참조하여 값을 찾을 수 있는 JAVA API입니다. 즉 컴파일 시점이 아닌 런타임에 동적으로 특정 클래스의 정보를 추출할 수 있고 변수를 변경하거나 메소드를 호출할 수 있는 프로그래밍 기법입니다. 코드를 작성할 시점에는 어떤 타입의 클래스를 사용할지 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야 하는 경우 사용됩니다. intelliJ의 자동완성 기능, Lombok, Spring Container, Spring annotation 등에서 사용됩니다. 리플렉션은 아래와 같은 정보들을 가..

    jdkman으로 java 버전 관리하기

    SDKMAN sdkman은 SDK를 버전을 병렬로 관리하기 위한 도구입니다. 대부분의 유닉스 기반 시스템에서 사용할 수 있습니다. sdkman을 이용하여 여러 Java 버전을 관리할 수 있는 방법에 대해 알아보겠습니다. Install $ curl -s "https://get.sdkman.io" | bash 설치가 완료되면 터미널에 아래 명령을 실행합니다. $ source "$HOME/.sdkman/bin/sdkman-init.sh" 마지막으로, 설치된 SDKMAN!의 버전을 확인하여 성공적으로 설치가 완료됐는지 확인합니다. $ sdk version SDKMAN 5.16.0 Uninstall sdkman이 설치된 경로는 ~/.sdkman 입니다. 간단하게 rm 명령으로 삭제가 가능합니다. $ rm -rf ..