티스토리

DOTELOPER
검색하기

블로그 홈

DOTELOPER

doteloper.tistory.com/m

점이 님의 블로그입니다.

구독자
2
방명록 방문하기

주요 글 목록

  • [SpringBoot/Kotlin] 레디스 명령어들을 Atomic하게 실행하기 - Lua Script 개발을 하다 보면 여러 Redis 명령어를 하나의 흐름으로 묶어 실행해야 하는 경우가 있다.나의 경우, Rate Limit 기능을 Redis로 구현하면서 이런 상황을 마주했다.1. 현재 window 만큼 sorted set 자르기2. sorted set의 크기 가져오기3. 해당 크기가 limit보다 작다면, 현재의 timestamp를 sorted set에 추가하기이 모든 과정은 반드시 원자적(atomic) 으로 보장돼야 한다.만약 2번 → 3번 실행 사이에 다른 요청이 들어오면, 잘못된 limit 체크 결과가 나올 수 있기 때문이다.이를 해결하기 위해, Redis에서는 여러 명령어를 하나의 단위로 실행할 수 있는 방법을 제공한다. 그중 하나가 Lua Script이다.Lua Script란?Redis 공식 .. 공감수 2 댓글수 2 2025. 4. 28.
  • [SpringBoot/Kotlin] E2EE: 간단한 메신저 서버 구현하기 암호화의 두 축: 대칭키 vs 비대칭키암호화 시스템은 크게 두 가지 방식으로 나뉜다.대칭키 암호화: 하나의 비밀키로 암호화와 복호화를 모두 수행. 대표적으로 AES. 빠르고 계산량이 적어 대용량 데이터 암호화에 적합.비대칭키 암호화: 공개키와 비공개키라는 두 개의 키를 사용. 대표적으로 RSA가 있으며, 한 키로 암호화한 데이터는 반드시 다른 키로만 복호화 가능. 키 교환, 인증, 서명 등에 사용⚡ 성능 측면에서의 차이항목 대칭키 (AES) 비대칭키 (RSA)속도매우 빠름상대적으로 느림연산량적음많음 (큰 수 연산)자원 사용낮음높음사용 용도메시지/파일 암호화키 전달/서명/인증이러한 성능 차이로 인해 실제 보안 시스템에서는 “하이브리드 암호화”라는 방식이 등장 하이브리드 암호화란?빠르고 효율적인 AES로 메.. 공감수 1 댓글수 1 2025. 4. 12.
  • Railway로 SpringBoot + MySQL + Redis 배포하기 (+Dockerfile) Railway란?기존 AWS의 EC2 프리티어를 사용하였는데, 프리티어 기간에 매번 의존해야하고, 인프라도 모두 스스로 구축해야하는 부분이 굉장히 번거롭게 느껴졌다. 그래서 저렴하게 호스팅할 수 있는 서비스를 찾다가 Railway를 발견하였다.Railway는 개발자가 손쉽게 인프라를 구축하고 애플리케이션을 배포할 수 있도록 돕는 PaaS(Platform as a Service) 서비스이다.https://railway.com/ RailwayRailway is an infrastructure platform where you can provision infrastructure, develop with that infrastructure locally, and then deploy to the cloud.ra.. 공감수 1 댓글수 0 2025. 3. 2.
  • [WebDev] Patterns for building realtime features https://zknill.io/posts/patterns-for-building-realtime/?utm_source=tldrwebdev Patterns for building realtime featuresRealtime features make apps feel modern, collaborative, and up-to-date. The features predominantly require sharing changes triggered by one user to other users, as the changes are happening. This typically means your server needs to send data to some set ozknill.io실시간 기능은 앱을 더 현대적.. 공감수 0 댓글수 0 2025. 2. 12.
  • [SpringBoot/Kotlin] SSE 활용한 AI Streaming Chat 구현 (w. React) - (2) FE SSE 활용한 AI Streaming Chat 구현 (w. React) - 2탄: 웹 챗 구현➡️ 1탄: 서버 구현 [SpringBoot/Kotlin] SSE 활용한 AI Streaming Chat 구현 (w. React)SSE 활용한 AI Streaming Chat 구현 (w. React) - 1탄: 서버 구현미리보기전체 코드는 아래에!Spring Boot와 SSE를 활용하여 AI Streaming Chat 서비스를 구현하였다.사실 채팅 스트리밍을 구현하기 위한 다양한 언doteloper.tistory.com미리보기이번 포스팅은 저번 서버 구현을 받는 웹 채팅에 관련된 코드이다.사실 이번 프로젝트의 프론트 담당은 “GPT”였다.따라서 설명의 한계가 있으므로, 중요한 실시간 응답 처리만 간단히 설명하고 .. 공감수 0 댓글수 0 2025. 2. 12.
  • [SpringBoot/Kotlin] SSE 활용한 AI Streaming Chat 구현 (w. React) - (1) 서버 SSE 활용한 AI Streaming Chat 구현 (w. React) - 1탄: 서버 구현미리보기전체 코드는 아래에!Spring Boot와 SSE를 활용하여 AI Streaming Chat 서비스를 구현하였다.사실 채팅 스트리밍을 구현하기 위한 다양한 언어, 기술이 많지만 현업에서 사용하는 언어와 SSE를 경험하고 싶어 해당 기술스택을 활용하였다.(즉, 스트리밍 채팅을 구현하기 위한 기술 스택은 다양하므로 상황과 조건에 맞게 사용하길 바란다.)SSE(Server-Sent-Event)란?클라이언트가 서버로부터 단방향 스트리밍 데이터를 받을 수 있도록 지원하는 기술이다.단방향 통신: 서버에서 클라이언트로만 데이터를 전송할 수 있음HTTP 기반: 기존 HTTP 프로토콜을 사용하기 때문에 방화벽 및 프록시 환.. 공감수 1 댓글수 1 2025. 2. 11.
  • [WebDev] Developer philosophy Developer philosophy @ Things Of InterestAmazing as it may seem after all these years, there are still junior developers in the world. A few weeks ago at work we had a talk where senior developers (including me) were invited to spend around five minutes each talking about our personal software deqntm.org 믿기 어려울 수도 있지만, 오랜 시간이 지난 지금도 여전히 주니어 개발자는 존재한다.몇 주 전 회사에서 나를 포함한 시니어 개발자들이 모여 각자의 소프트웨어 개발 철.. 공감수 3 댓글수 2 2025. 2. 5.
  • [SpringBoot/Kotlin] Transactional Outbox Pattern 적용 (Kafka) Microservices Pattern: Pattern: Transactional outboxFirst, write the message/event to a database OUTBOX table as part of the transaction that updates business objects, and then publish it to a message broker.microservices.ioContextMSA 환경에서는 도메인에 대한 생성, 수정, 삭제 이벤트가 일어났을 때, 이를 메세지 브로커를 통해서 다른 분산 서버에 전송해야하는 일이 발생한다.하지만, 데이터베이스와 메세지 브로커를 아우르는 전통적인 분산 트랜잭션(2PC, 2-Phase Commit)을 사용하는 것은 현실적으로 불가능하다. 데.. 공감수 2 댓글수 0 2025. 1. 11.
  • [Java 언어로 배우는 디자인패턴 입문] 6. Prototype Prototype 패턴💡 클래스에서 인스턴스를 생성하는 대신 인스턴스로부터 다른 인스턴스를 생성종류가 너무 많아 클래스로 정리할 수 없는 경우취급할 오브젝트의 종류가 많아서 소스 파일을 많이 작성해야 하는 경우클래스로부터 인스턴스 생성이 어려운 경우복잡한 과정을 거쳐 만들어지는 것으로 클래스로부터 만들기가 매우 어려운 경우사용자 조작으로 만들어진 인스턴스와 같은 것을 다시 만들고 싶은 경우✅ 현재 만든 인스턴스를 일단 저장해두고 만들고 싶을 때 이를 복사하여 생성프레임워크와 생성하는 인스턴스를 분리하고 싶은 경우인스턴스를 생성하는 프레임워크를 특정 클래스에 의존하지 않게 하고 싶은 경우✅ 미리 원형이 될 인스턴스를 등록해두고, 등록된 인스턴스를 복사하여 생성 Prototype(원형)인스턴스를 복사하여 .. 공감수 0 댓글수 0 2024. 7. 7.
  • [kotlin/코틀린 코루틴의 정석] 6장. CoroutineContext `CoroutineContext` : 코루틴을 실행하는 실행 환경을 설정하고 관리하는 인터페이스Coroutine Context 구성 요소`CoroutineName` : 코루틴 이름 설정`CoroutineDispatcher` : 코루틴을 스레드에 할당해 실행`Job`: 코루틴의 추상체로 코루틴을 조작`CoroutineExceptionHandler` : 코루틴에서 발생한 예외 처리 Coroutine Context 구성Coroutine Context 구성키 - 값 쌍으로 구성 요소를 관리`CoroutineContext` 객체 간의 더하기 연산자(+)를 사용하여 객체를 구성val coroutineContext: CoroutineContext = newSingleThreadContext("MyThread") + .. 공감수 0 댓글수 0 2024. 6. 25.
  • [WebDev] Things You Should Never Do As A Software Engineer Things You Should Never Do As A Software EngineerHere are some of the things that software developers should avoid when coding to improve their work performance and mental health.favtutor.comBeing Perfectionist모든 것은 완벽하지 않다. 그래서 나는 “완벽한 코드”도 존재하지 않는다고 확신한다.소프트웨어 개발은 반복적인 프로세스이다. 코드를 짜고, 테스트하고, 피드백을 받고, 리팩토링 하고, 이를 반복한다. 오늘 잘 동작하던 것이 내일 동작하지 않을 수 있다. 따라서 소프트웨어는 유연하고 변경하기 용이해야한다. (이것이 soft-ware 라고.. 공감수 0 댓글수 0 2024. 5. 25.
  • [WebDev] Clever code is probably the worst code you could write Clever code is probably the worst code you could writeAnd clear, readable code is probably the hardest code to writeread.engineerscodex.comdef mininumTotal(self, t): return reduce(lambda a,b:[f+min(d,e)for d,e,f in zip(a,a[1:],b)], t[::-1])[0]위 코드는 흔히 “코드 골프”라고 불린다. 취미로는 좋을 수 있지만 “좋은 코드”와는 거리가 멀다.모두들 이것이 좋은 코드가 아니라는 것은 알고있다. 실제 업계에서는 가장 나쁜 코드 중에 하나라고 할 수 있다.반대로 생각해보면 가장 명확한 코드를 작성하는 것이 실제로 가장 어려.. 공감수 1 댓글수 0 2024. 5. 23.
  • [kotlin/코틀린 코루틴의 정석] 5장. async와 Deferred `launch` : 작업 실행 후 결과를 반환하지 않음`async` : 코루틴으로부터 결괏값을 수신 → Deferred 객체 반환 async 사용해 결과값 수신하기async 사용해 Deferred 만들기fun CoroutineScope.async( context: CoroutineContext = EmptyCoroutineContext, // CoroutineDispatcher 설정 가능 start: CoroutineStart = CoroutineStart.DEFAULT, // 지연시작 설정 가능 block: suspend CoroutineScope.() -> T): DeferredDeferred코루틴을 추상화한 객체코루틴으로부터 생성된 결과값을 감싸는 기능을 가짐결과값의 타입은 제네릭 타입  a.. 공감수 0 댓글수 0 2024. 5. 21.
  • [WebDev] How not to do code reviews How not to do code reviews - Aviator BlogMany code review processes become bottleneck for the engineering teams. Instead of finding bugs, it hinders progress leading to poor developer experience.www.aviator.coHow not to do code reviews전통적으로, 코드 리뷰는 엔지니어가 동료의 코드를 오류를 찾고 가독성, 효율성, 유지보수성을 보장하기 위해 면밀히 검토하는 것을 포함했다. 이 방식은 특히 대규모 팀에서 병목 현상을 유발했다. 왜냐하면 적합한 리뷰어들이 필요할 때마다 변경을 검토할 여유가 항상 있는 것은 아니기 때문이다. C.. 공감수 0 댓글수 0 2024. 5. 19.
  • [WebDev] You probably don’t need microservices You probably don’t need microservicesMicroservices is a great architectural style that helps to scale the system and the organization. But probably you don’t need microservices...www.thrownewexception.com마이크로 서비스는 시스템과 구조를 확장하는데에 도움이 되는 훌륭한 방식으로 최근 굉장히 인기있는 아키텍처 스타일이다. 많은 성공한 회사들(넷플릭스, Spotify..)을 포함하여 대부분의 회사들이 이 방식을 사용하거나 사용할 계획을 가지고 있다. 하지만, 몇몇 회사들은 마이크로 서비스가 가져오는 추가 비용을 간과하고 있다.본격적으로 이야기 하기전.. 공감수 0 댓글수 0 2024. 5. 19.
  • [kotlin/코틀린 코루틴의 정석] 4장. 코루틴 빌더와 Job 코루틴 빌더 함수코루틴을 생성하는 데 사용하는 함수 ex) `launch`, `runBlocking`…코루틴을 만들고 코루틴을 추상화한 Job 객체 생성 → Job 객체로 코루틴의 상태를 추적 및 제어 Join을 사용한 코루틴 순차 처리`join()` : 먼저 처리되어야 하는 코루틴의 실행이 완료될 때까지 호출부의 코루틴을 일시 중단하는 함수💡 delay 함수 - `Thread.sleep()` 해당 함수가 실행되는 동안 스레드가 블로킹돼 사용할 수 없음 - `delay()` 해당 함수가 실행되는 동안 스레드는 다른 코루틴이 사용할 수 있음Join 함수 사용해 순차 처리하기fun main() = runBlocking { val updateTokenJob = launch(Dispatchers.IO) .. 공감수 0 댓글수 0 2024. 5. 16.
  • [kotlin/코틀린 코루틴의 정석] 3장. CoroutineDispatcher Coroutine Dispatcher란?Coroutine을 스레드로 보내 실행시키는 역할스레드 / 스레드 풀을 가지며 코루틴을 실행 요청한 스레드에서 코루틴이 실행되도록 함동작 방식자신에게 실행 요청된 코루틴을 작업 대기열에 적재한 후, 사용할 수 있는 스레드가 생기면 스레드로 보냄`CoroutineDispatcher` 객체에 코루틴의 실행이 요청 됨[CoroutineDispatcher] 실행 요청 받은 코루틴을 작업 대기열에 적재[CoroutineDispatcher] 사용할 수 있는 스레드가 있는지 확인있다면, 코루틴을 해당 스레드로 보냄없다면(모든 스레드가 코루틴을 실행중이라면), 작업 대기열에서 대기하도록 둠스레드 중 하나가 자유로워 졌을 때, 대기열에 있던 코루틴을 스레드로 보냄역할코루틴의 실행을.. 공감수 0 댓글수 0 2024. 5. 12.
  • [Kotlin/코틀린 코루틴의 정석] 1장. 스레드 기반 작업의 한계와 코루틴의 등장 JVM 프로세스와 스레드애플리케이션이 실행되는 과정JVM이 프로세스 시작메인 스레드 생성`main` 함수 내부의 코드들을 수행`main` 함수 내부의 코드가 모두 실행되면 애플리케이션 종료💡 JVM 프로세스는 기본적으로 메인 스레드를 단일 스레드로 해서 실행되며 메인 스레드가 종료되면 종료됨 단일 스레드의 한계와 멀티 스레드 프로그래밍단일 스레드의 한계해야 할 작업이 다른 작업에 의해 방해받거나 작업 속도가 느려질 수 있음 → 응답성의 문제멀티 스레드 프로그래밍병렬 처리(Parallel Processing)스레드를 여러개 사용해 작업을 처리하는 프로그래밍 기법메인 스레드에 오래 걸리는 작업이 요청됐을 때, 이 작업을 백그라운드 스레드에서 처리하도록 함✔️ 작은 작업 간에 독립성이 있을 때에만 병렬 실행.. 공감수 0 댓글수 0 2024. 5. 8.
  • [Flask] OpenAI Embedding을 사용한 유사 문서 검색 (text-embedding-3-small) 💡 OpenAI Embedding을 사용하여 사용자 입력과 가장 유사한 문서를 검색하는 서버를 구축한다.✔️ 이전 버전: https://doteloper.tistory.com/114Flow 개발환경모델: OpenAI Embedding - text-embedding-3-small벡터 DB: elastic searchflask / python3참고: openai cookbookEmbedding 생성openai package를 사용하여 Embedding 값 생성 (document)client = OpenAI( api_key=os.getenv("OPENAI_API_KEY"))def get_embedding(text, model="text-embedding-3-small"): text = text.r.. 공감수 0 댓글수 0 2024. 4. 28.
  • [SpringBoot3/Kotlin] SNS 로그인 (Rest API) 💡 SNS 로그인(카카오)을 위한 Rest API 생성➡️ 1탄 바로가기: 설정 및 회원가입➡️ 2탄 바로가기: JWT 로그인 및 회원 정보 조회➡️ 3탄 바로가기: Refresh TokenSNS 로그인 Flow해당 프로젝트에서는 모바일 어플리케이션을 위한 Rest API를 구현한다.Client SDK에서 카카오 로그인 완료 후 3rd로부터 전해받는 accesToken을 Server에 전달한다.해당 AccessToken으로 다시한번 3rd에 조회하여, 회원 정보를 가져온다.조회한 회원 정보가 있을 경우, 바로 로그인 로직을 실행하여 성공 응답을 보낸다.조회한 회원 정보가 없을 경우, 회원 정보를 새로 저장(회원가입)하고 로그인까지 성공시켜 응답을 보낸다.개발 환경Spring Boot 3.x.x / Ko.. 공감수 0 댓글수 0 2024. 4. 26.
  • [Java 언어로 배우는 디자인패턴 입문] 5. Singleton Singleton 패턴 💡 인스턴스가 하나만 존재하는 것을 보증하는 패턴 등장인물 Singleton 유일한 인스턴스를 얻기 위한 `static` 메소드를 가짐 → 항상 같은 인스턴스를 반환 public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println("인스턴스 생성") } public stgatic Singleton getInstance() { return singletone; } } Singleton 클래스 로드할 때 초기화 진행 `private` 생성자 : 외부에서 생성자 호출을 금지하기 위함 `getInstance()`: 유일한 인스턴스를 얻는 메.. 공감수 0 댓글수 0 2024. 4. 1.
  • [Java 언어로 배우는 디자인패턴 입문] 4. Factory Method Factory Method Factory Method 패턴 💡 인스턴스를 생성하는 공장은 Template Method 패턴으로 구성한 것 인스턴스의 생성 방법을 상위 클래스에서 결정하되, 구체적인 클래스 이름까지 결정하지 않음 구체적인 살은 모두 하위 클래스에서 결정! ⇒ 인스턴스 생성을 위한 프레임워크와 실제 인스턴스를 생성하는 클래스를 나눌 수 있음 등장인물 Product (제품) 프레임워크 package 생성되는 인스턴스가 가져야 할 인터페이스(API)를 결정하는 추상 클래스 구체적인 내용은 하위 클래스 `ConcreteProduct` 에서 결정 package framework; public abstract class Product { public abstract void use(); } Creat.. 공감수 0 댓글수 0 2024. 3. 25.
  • [Java 언어로 배우는 디자인패턴 입문] 3. Template Method Template Method 패턴 💡 상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 구체적인 내용을 결정 등장인물 `AbstractClass` (추상 클래스) 템플릿 메소드를 구현하며, 템플릿 메소드에서 사용할 추상 메소드를 선언 추상 메소드는 하위 클래스인 `ConcreteClass` 에서 구현 public abstract class AbstractDisplay { // 하위 클래스에 구현을 맡기는 추상 메소드 public abstract void open(); public abstract void print(); public abstract void close(); // AbstractDisplay에서 구현하는 메소드 -> 템플릿 메소드 public final void display() { .. 공감수 0 댓글수 0 2024. 3. 18.
  • [Java 언어로 배우는 디자인패턴 입문] 2. Adapter Adapter 💡 ‘이미 제공된 것’과 ‘필요한 것’ 사이의 ‘차이’를 메우는 디자인 패턴 Wrapper 패턴이라고도 불림 [예제] 상속을 사용한 패턴 클래스에 의한 Adapter 패턴 Banner 클래스 미리 제공되는 클래스 public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); } public void showWithAster() { System.out.println("*" + string + "*"); } } Print 인터페이스 필요로 하는 인터페이스 .. 공감수 0 댓글수 0 2024. 3. 7.
  • [Java 언어로 배우는 디자인패턴 입문] 1. Iterator Iterator 무엇인가 많이 모여 있을 때 이를 순서대로 가리키며 전체를 검색하고 처리를 반복하는 것 iterator: 반복자 Iterable Interface 처리를 반복할 대상을 나타냄 이 인터페이스를 구현하는 클래스는 배열처럼 뭔가 많이 모여있는 것(=집합체)가 된다 package java.lang.* public interface Iterable { public abstract Iterator iterator(); } `iterator()`: 집합체에 포함된 요소를 하나하나 처리해 나가고 싶을 때 사용 Iterator Interface 하나하나의 요소처리를 반복하기 위한 것 → 루프 변수 역할 package java.util.* public interface Iterator { public ab.. 공감수 0 댓글수 0 2024. 3. 7.
  • [SpringBoot/Kotlin] Spring Mail 사용하여 메일 보내기 💡 SpringMail을 사용하여 메일 전송 구현 GitHub - jeongum/spring-mail Contribute to jeongum/spring-mail development by creating an account on GitHub. github.com 개발환경 SpringBoot 3.1.4 kotlin / java 17 build.gradle.kts 설정 사용할 springframework mail 설정 추가 implementation("org.springframework.boot:spring-boot-starter-mail") application.yml 설정 메일 전송에 필요한 smtp 설정 spring: mail: host: smtp.gmail.com port: 587 username:.. 공감수 0 댓글수 0 2024. 2. 10.
  • Ubuntu 22.04(EC2) ElasticSearch / Kibana 설치 AWS EC2 Ubuntu 서버에 ElasticSearch와 대시보드 Kibana를 설치한다! 패키지 관리 1. apt를 이용하여 설치 가능한 패키지 리스트를 최신화 2. HTTPS를 통해 패키지를 다운로드할 수 있게하는 `apt-transport-https` 설치 $ sudo apt-get update $ sudo apt-get install apt-transport-https Elasticsearch 설치 전 세팅 ElasticSearch GPG Key ElasticSearch 패키지의 신뢰성을 확인하기 위해 사용되며, 패키지가 안전하게 다운로드되고 설치되도록 하는 보안 장치 아래 명령어를 실행하여 ElasticSearch Public GPG 키 추가 $ wget -qO - | sudo gpg --d.. 공감수 0 댓글수 0 2023. 11. 29.
  • MAC에서 AWS EC2 접속하기 윈도우에서는 기본적으로 PuTTY와 같은 프로그램으로 ssh 접속을 하지만, Mac은 기본 앱인 터미널 앱에서 ssh를 이용한 원격 접속 가능하다. 키페어 다운로드 PuTTY 접속을 위해선 보통 .ppk 파일을 사용했지만, 맥에서 접속을 위해 필요한 파일은 .pem 이다! EC2 인스턴스를 생성할 때, 만들거나 기존에 있는 키페어를 사용하면 된다. 1. 권한 변경 pem 키 파일이 있는 경로로 가서, 해당 키의 권한 변경 $ cd Desktop/pems/ $ chmod 600 thats-my-pem.pem `chmod 600 xxx `: 해당 파일의 읽기 쓰기 권한을 부여 2. ssh 디렉토리에 복사 $ cp thats-my-pem.pem ~/.ssh/ `~/.ssh/` 디렉토리의 하위로 펨키 복사 3... 공감수 0 댓글수 0 2023. 11. 24.
  • [SpringBoot/Kotlin] JWT + SpringSecurity를 활용한 회원 API 구현 (3) - Refresh Token 💡 Refresh Token을 사용하여 안전한 API 통신을 만든다 ➡️ 1탄 바로가기: 설정 및 회원가입 ➡️ 2탄 바로가기: JWT 로그인 및 회원 정보 조회 AccessToken / RefreshToken `AccessToken` 은 사용자의 인증 정보를 가지고 있다. `AccessToken` 을 탈취 당할 경우, 사용자의 인증 정보가 탈취자(공격자)에게 그대로 노출 될 수 있다. JWT는 Stateless하기 때문에 서버에서는 해당 토큰을 가지고 있는 클라이언트가 공격자인지도 구분할 수 없기 때문에 AccessToken의 탈취는 매우 위험하다! RefreshToken 이를 방지하기 위해 AccessToken의 만료 주기를 짧게 설정하고, 이를 보완할 수 있는 RefreshToken을 도입한다. `.. 공감수 0 댓글수 1 2023. 11. 14.
  • [SpringBoot/Kotlin] JWT + SpringSecurity를 활용한 회원 API 구현 (2) - JWT 로그인 💡 본격적으로 JWT를 활용하여 로그인을 구현한다. 해당 장에서는 refreshToken 을 고려하지 않는다! (다음 장에서 구현 예정 ✅) ➡️ 1탄 바로가기: SpringSecurity 설정 및 회원가입 ➡️ 3탄 바로가기: RefreshToken CustomUser 생성 SpringSecurity에서 사용하는 `User` 클래스를 상속받아, 대체할 수 있는 `CustomUser` 클래스 생성 //CustomUser.kt class CustomUser ( val id: UUID, userName: String, password: String, authorities: Collection ): User(userName, password, authorities) CustomUserDetailsService.. 공감수 0 댓글수 0 2023. 11. 12.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.