본문 바로가기

전체 글52

Spring AuthorizationServer를 사용한 OAuth2 인증 서버 구축 (1) 개요Spring AuthorizationServer를 사용하여 OAuth2 인증 서버를 구축하는 방법에 대해 알아보겠습니다.Gradle 설정implementation "org.springframework.security:spring-security-oauth2-authorization-server"Spring Boot를 사용하지 않는 경우 버전 정보를 명시해야 합니다.application.yml 기존 설정# 서버 포트 설정server: port: 9000# 로깅 설정logging: level: org.springframework.security: tracespring: security: # 유저 정보 설정 user: name: user password: passwo.. 2025. 1. 17.
mkcert, Spring Boot를 사용하여 Localhost에서 HTTPS를 사용하는 방법 개요프로젝트 개발 중에 HTTPS를 사용해야 하는 경우가 있습니다. 이때, Localhost에서 HTTPS 사용해야 하는 경우가 있습니다. 이때, mkcert를 사용하면 간단하게 Localhost에서 HTTPS를 사용할 수 있습니다.mkcert 무엇인가요?mkcert는 로컬에서 사용할 수 있는 간단한 인증서를 생성해 주는 도구입니다.mkcert 설치 방법 (macOS)Homebrew를 사용하여 mkcert를 설치합니다.brew install mkcertmkcert 사용 방법local CA를 시스템 신뢰 저장소에 설치합니다.mkcert -install mkcert를 사용하여 인증서를 생성합니다. 이때, localhost를 사용할 경우 다음과 같이 입력합니다.mkcert localhost local CA를 .. 2025. 1. 15.
인증 방법: Cookies and Sessions, JWT, PASETO 개요프로젝트를 진행하다 보면 사용자 인증이 꼭 필요한 경우가 있습니다. 사용자 인증은 사용자가 누구인지 확인하고 사용자의 권한을 확인하는 과정입니다. 최근에는 다양한 인증 방법이 등장하여 사용자 인증을 보다 효율적으로 할 수 있습니다. 이번 글에서는 Cookies and Sessions, JWT, PASETO를 비교 분석하여 사용자 인증 방법에 대해 정리해 보겠습니다.어떤 인증 방법이 있는가?최근 인증 방법으로는 Cookies and Sessions, JWT, PASETO가 있습니다.Cookies and Sessions: 서버에서 세션을 관리하고 클라이언트에 세션 ID를 전달하여 인증하는 방식입니다.JWT: JSON Web Token으로 클라이언트에 토큰을 전달하여 인증하는 방식입니다.PASETO: Pl.. 2025. 1. 14.
메서드 호출 시작JVM 내부로 파고들어 메서드 호출이 어떻게 이루어지는지를 정리하고자 합니다. Amazon Corretto 기준으로 작성하였습니다.본문invokevirtualinvokevirtual은 가장 일반적인 메서드 호출 방식입니다. 이 방식은 바이트코드를 사용해서 특정 클래스의 객체(또는 하위 클래스)에서 인스턴스 메서드를 호출하는 것을 의미합니다. 이 방식을 또 가상 메서드 디스패치(virtual method dispatch)라고도 합니다. 이 방식은 컴파일 시점에는 호출할 메서드가 정해지지 않고 런타임 시점에 호출할 메서드가 결정됩니다. 아래와 같은 코드가 있다고 가정해 봅시다.abstract class Animal { abstract void eat();}class Dog extends Animal.. 2025. 1. 12.
Fork/Join 프레임워크와 CompletableFuture 시작동시성 프로그래밍은 프로그램에서 매우 중요한 개념입니다. 이 Post에서는 Java에서 동시성 프로그래밍을 위해 사용하는 Fork/Join 프레임워크와 CompletableFuture에 대해 알아보겠습니다.본문Fork/Join 프레임워크Fork/Join 프레임워크는 보이지 않은 스레드 풀을 사용하여 작업을 분할하고 자동으로 스케줄링하고 병렬로 실행하는 프레임워크입니다. 코드로 살펴보겠습니다.// RecursiveAction은 ForkJoinTask의 하위 클래스입니다.// RecursiveAction은 compute() 메서드를 사용하여 작업을 수행합니다.public class TransactionSorter extends RecursiveAction { // 작업을 분할할 때, 작업의 크기가 .. 2025. 1. 6.
함수형 프로그래밍 시작함수형 프로그래밍은 프로그래밍 패러다임 중 하나로 함수를 값처럼 다루는 프로그래밍 방식입니다. 함수형 프로그래밍은 다음과 같은 특징을 가진다. 요즘은 함수형 프로그래밍이 대세가 되어가고 있기에 꼭 알아두어야 할 필요가 있습니다.본문순수 함수순수 함수란 함수의 결과가 오직 인자에만 의존하는 함수를 말합니다. 즉, 함수가 외부의 상태에 의존하지 않는 함수를 말합니다. Java에서 순수 함수를 구현하는 방법은 다음과 같습니다.int add(int a, int b) { return a + b; // 외부 상태에 의존하지 않음} Kotlin에서 순수 함수를 구현하는 방법은 다음과 같습니다.fun add(a: Int, b: Int): Int { return a + b // 외부 상태에 의존하지 않음}.. 2024. 12. 31.
Gradle 시작Gradle은 빌드 스크립트의 정보를 기반으로 소프트웨어 빌드, 테스트, 배포를 자동화합니다. 이 포스트에서 그래들에 대해 간단히 알아보겠습니다.본문그래들 설치brew를 사용하여 그래들을 설치할 수 있습니다.brew install gradle 이렇게 설치하면 gradle 명령어를 사용할 수도 있지만 래퍼(wrapper)를 더 권장합니다. 래퍼는 프로젝트에 종속되어 있어 프로젝트의 빌드를 위해 사용하는 그래들 버전을 명시적으로 지정할 수 있습니다. gradle wrapper 명령어를 사용하여 래퍼를 생성할 수 있습니다.gradle wrapper빌드 스크립트그래들은 build.gradle 파일을 사용하여 빌드 스크립트를 작성합니다. 빌드 스크립트는 Groovy나 Kotlin으로 작성할 수 있습니다. gr.. 2024. 12. 30.
메이븐 시작메이븐은 자바 프로젝트의 빌드, 테스트, 배포를 자동화해 주는 빌드 도구입니다. 여기서 간단히 정리하고자 합니다.본문메이븐의 빌드 라이프 사이클메이븐은 기본적인 빌드 라이프 사이클을 가지고 있습니다. 이 라이프 사이클은 단계(phase)라고 불리며 각 단계는 특정 작업을 수행합니다.validate: 프로젝트 구성이 올바른지 확인하고 빌드할 수 있는지 검증합니다.compile: 프로젝트의 소스 코드를 컴파일합니다.test: 단위 테스트를 수행합니다.package: 컴파일된 코드를 패키징 합니다.verify: 통합 테스트 결과를 확인합니다.install: 패키지를 로컬 저장소에 설치합니다.deploy: 패키지를 원격 저장소에 배포합니다.또한 클린 라이프 사이클(clean)과 사이트 라이프 사이클(site.. 2024. 12. 30.
프로그래밍 언어의 종류와 특징 시작프로그래밍 언어는 컴퓨터에게 명령을 내리기 위한 언어입니다. 프로그래밍 언어도 다양한 종류가 있습니다. 이 글에서는 프로그래밍 언어의 종류와 특징에 대해 알아보겠습니다.본문인터프리터 언어 vs 컴파일러 언어인터프리터 언어는 코드를 한 줄씩 읽어 실행하는 방식 즉 실행이 시작되기 전에 컴파일을 하지 않고 코드를 실행하면서 동시에 컴파일을 하는 방식으로 동작합니다. 대표적인 인터프리터 언어로는 Python, JavaScript가 있습니다.print("Hello, World!")=> 실행$ python hello.py 반면 컴파일러 언어는 코드를 한 번에 컴파일하여 실행 파일을 만든 후 실행하는 방식으로 동작합니다. 대표적인 컴파일러 언어로는 C언어가 있습니다.#include int main() { .. 2024. 12. 23.
가비지 컬렉션 시작JVM에서 메모리 관리는 가비지 컬렉션을 통해 이루어집니다. 이 포스트에서는 가비지 컬렉션에 대해 알아보겠습니다.본문스택과 힙JVM에서 메모리는 스택(Stack)과 힙(Heap)을 포함합니다.스택은 로컬 변수, 메서드 호출, 리턴 값 등을 저장하는 공간입니다.힙은 객체를 저장하는 공간입니다.힙에 저장된 객체는 더 이상 사용되지 않을 때 메모리를 잘 관리하기 위해 가비지 컬렉션을 사용하여 메모리를 해제합니다.마크 앤 스위프(Mark and Sweep)마크 앤 스위프는 가비지 컬렉션의 가장 기본적인 알고리즘입니다.그중 가장 간단한 형태는 다음과 같습니다.모든 실행 중인 프로그램 스레드를 일시 정지합니다.live 객체를 찾기 위해 힙을 순회하며 live 객체를 Mark합니다.live 객체는 참조되고 있는 .. 2024. 12. 19.