최신 글

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

    [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)

    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

    Javascript Promise로 배우는 Kotlin Coroutine

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

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

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

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

  • Kotlin 리플렉션(Reflection)

    Kotlin 리플렉션(Reflection)

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

인기 글

  • [NestJS] JWT 로그인 구현 예제 (bcrypt, passport, JWT, cookie)

    [NestJS] JWT 로그인 구현 예제 (bcrypt, passport, JWT, cookie)

    사용자 인증/인가는 모든 웹 애플리케이션에서 가장 중요한 부분입니다. 이전 포스트에서는 Node.js를 이용하여 JWT로그인을 구현했습니다. [node.js] JWT 구현 예제 Intro 웹 / 앱 개발을 하면 로그인 과정에서 반드시 만나게 되는 개념이 쿠키-세션이다. 최근 들어 IT 인프라 구성에는 많은 변화가 생겼다. 웹 기반의 서비스들은 웹과 앱을 함께 서비스하 charming-kyu.tistory.com 이번에는 NPM 라이브러리에서 가장 많이 사용되는 Passport를 이용하여 NestJS 애플리케이션에 로그인을 구현해보겠습니다. 또한 해싱(Hashing)을 통해 사용자를 등록하고 비밀번호를 안전하게 암호화하여 보호하겠습니다. User Entity 인증을 고려할 때 가장 먼저 해야 할 일은 사..

  • [javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리

    [javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리

    콜 스택, 메모리 힙이란? 자바스크립트 엔진은 Memory Heap 과 Call Stack 으로 구성되어 있습니다. 가장 유명한 것이 구글의 V8 Engine입니다. 자바스크립트는 단일 스레드 (sigle thread) 프로그래밍 언어인데, 이 의미는 Call Stack이 하나 라는 이야기입니다. 즉 멀티가 되지 않고, 하나씩 하나씩 처리한다는 의미입니다. 콜 스택(Call Stack) 원시 타입(숫자 등) 데이터가 저장된다. 실행 콘텍스트(Execution Context)를 통해 1) 변수 식별자(이름) 저장, 2) 스코프 체인 및 this 관리, 3) 코드 실행 순서 관리 등을 수행. *실행 컨텍스트의 상세 구조 및 원리는 이 글의 범위를 넘어가므로 다루지 않습니다. 메모리 힙(Memory Heap)..

  • [node.js] JWT 구현 예제

    [node.js] JWT 구현 예제

    Intro 웹 / 앱 개발을 하면 로그인 과정에서 반드시 만나게 되는 개념이 쿠키-세션이다. 최근 들어 IT 인프라 구성에는 많은 변화가 생겼다. 웹 기반의 서비스들은 웹과 앱을 함께 서비스하는 것을 넘어 ‘Mobile First’ 앱이 먼저라는 인식까지 생겨났다. 또한, AWS, Azure 와 같은 클라우드 서비스가 대중화되면서 고사양 단일 서버 아키텍처에서 중-저사양 다중 서버 아키텍처로 변화하고 있다. 이러한 상황에서 더 이상 쿠키-세션 기반 인증 아키텍쳐는 현재의 요구사항을 만족하지 못하고 있다. 하지만 실제 대기업에서 웹페이지를 만들 때 전부 쿠키-세션 기반 인증으로 구현한다. 즉, 쿠키-세션도 꼭 알아야 한다는 뜻 현재의 요구 사항을 그나마 충족시키는 Web Token 기반 JWT에 대해서 알..

  • OAuth 2.0 개념 총 정리

    OAuth 2.0 개념 총 정리

    들어가며 OAuth 2.0을 실무, 토이프로젝트에서 많이 사용했던 기술이지만 항상 함께 제공해주는 라이브러리로 간단하게 구현을 했었습니다. 하지만 여태 사용해본 라이브러리는 특정 구조를 가진 서버에서만 간편하게 사용할 수 있었고, 서버의 구조가 조금만 바뀌게 된다면 여지없이 직접 구현을 해야 됐습니다. 현재 회사에서 하고있는 프로젝트는 조금 독특한 서버 구조를 가지고 있는 상태에서 OAuth 2.0을 사용하게 되어 직접 구현을 하게 되었습니다. 이번 포스팅은 OAuth 2.0의 개념과 동작 방식을 설명하고 다음 포스팅에서 구현 방법에 대해 설명하겠습니다. OAuth 2.0 OAuth 2.0(Open Authorization 2.0, OAuth2)은 인증을 위한 개방형 표준 프로토콜입니다. 이 프로토콜에서..

  • [node.js] DI(의존성 주입) 구현하기

    [node.js] DI(의존성 주입) 구현하기

    DI (Dependency Injection) 의존성 주입(DI)는 잘 알려진 기술이다. IoC 컨테이너를 이용한 DI는 여러 모듈의 확장성과 독립성에 큰 도움을 준다. 특히 Spring에서 Java Bean을 이용하여 DI를 구현하는 것이 국내에서 가장 유명하다고 생각한다. 하지만 Node.js에서 DI는 그렇게 활발하게 쓰이고 있지 않는 것 같다. 왜냐하면 require로 모듈을 바로 불러오면 되기 때문에 굳이 필요성을 못 느끼기 때문이다. 하지만 이번에 공부를 하면서 node에서도 DI를 해야 하는 이유를 알게 되어서 예제 코드와 함께 설명하고자 한다. DI와 테스트 코드 의존성 주입은 하나의 패턴이다. 만약 의존되는 클래스를 매개변수로 전달해준다면, 모듈 안에서 클래스를 불러오거나 새로 만드는 것..