JVM 프로세스와 스레드애플리케이션이 실행되는 과정JVM이 프로세스 시작메인 스레드 생성`main` 함수 내부의 코드들을 수행`main` 함수 내부의 코드가 모두 실행되면 애플리케이션 종료💡 JVM 프로세스는 기본적으로 메인 스레드를 단일 스레드로 해서 실행되며 메인 스레드가 종료되면 종료됨 단일 스레드의 한계와 멀티 스레드 프로그래밍단일 스레드의 한계해야 할 작업이 다른 작업에 의해 방해받거나 작업 속도가 느려질 수 있음 → 응답성의 문제멀티 스레드 프로그래밍병렬 처리(Parallel Processing)스레드를 여러개 사용해 작업을 처리하는 프로그래밍 기법메인 스레드에 오래 걸리는 작업이 요청됐을 때, 이 작업을 백그라운드 스레드에서 처리하도록 함✔️ 작은 작업 간에 독립성이 있을 때에만 병렬 실행..
💡 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..
💡 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..
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()`: 유일한 인스턴스를 얻는 메..
Factory Method Factory Method 패턴 💡 인스턴스를 생성하는 공장은 Template Method 패턴으로 구성한 것 인스턴스의 생성 방법을 상위 클래스에서 결정하되, 구체적인 클래스 이름까지 결정하지 않음 구체적인 살은 모두 하위 클래스에서 결정! ⇒ 인스턴스 생성을 위한 프레임워크와 실제 인스턴스를 생성하는 클래스를 나눌 수 있음 등장인물 Product (제품) 프레임워크 package 생성되는 인스턴스가 가져야 할 인터페이스(API)를 결정하는 추상 클래스 구체적인 내용은 하위 클래스 `ConcreteProduct` 에서 결정 package framework; public abstract class Product { public abstract void use(); } Creat..
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() { ..