본문 바로가기

전체 글43

Social 로그인 구현 (Spring Security) 개요Spring Security를 사용하여 Social 로그인을 구현하는 방법에 대해 간단히 알아보겠습니다.Google 로그인 구현Google Oauth2은 Spring Security에서 기본적으로 지원하는 Oauth2 제공자 중 하나입니다. 구현하는 것은 매우 간단합니다.Google API Console에서 프로젝트 생성Google API Console에 접속합니다.사용자 인증 정보 > 사용자 인증 정보 만들기를 클릭합니다.OAuth 클라이언트 ID를 선택합니다.웹 애플리케이션을 선택하고 이름을 입력합니다.승인된 JavaScript 원본과 승인된 리디렉션 URI를 입력합니다.승인된 JavaScript 원본: 브라우저에서 JavaScript를 사용하여 Google API를 호출할 때 사용하는 도메인입니.. 2025. 1. 25.
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.