개발자의 기록장 블로그

Spring Boot 시작
·
Backend/Spring Boot
기본적인 Spring Boot의 흐름을 정리하기 위한 목적으로 글을 작성했습니다. 의존성 주입이 어떻게 이루어지고, 생성자 주입이 왜 권장되는지, Entity 클래스를 응답 객체로 넘기면 왜 안되는지 등의 내용은 다른 포스팅에서 정리할 예정이므로 참고해 주시면 감사드립니다.Spring Boot 환경 설정start.spring.io에서 프로젝트 파일을 받아서 사용하는 것이기 때문에, intelliJ에서 바로 프로젝트를 생성하는 것이 편리합니다.intelliJ version - 2024.1.4(Ultimate Edition) / Community version도 무관합니다. Java 버전은 21이상을 사용하는 것을 권고합니다. build.gradle외부 라이브러리와, 스프링 부트의 버전, 자바 버전 등을 ..
Google OAuth
·
Backend/기타
Google OAuth를 포함한 인증 대행 서비스들은 대부분 비슷한 플로우로 흘러간다.Apple 제외. 얘네는 인증이 매우 까다롭다. 아래 글을 참조하자.애플 OAuth OAuth를 구성하면서 프론트와 백의 역할을 구분하는게 중요하다.FrontEnd -> GoogleOAutoServer -> BackEnd -> TokenReturn인증 키 발급먼저 Google OAuth 인증을 위해 인증 Client Key를 받아야한다.GCP 에 가입한 뒤 Credentials에서 OAuth client ID를 생성해주자.URL1 에는 GoogleOAuthServer에 요청을 보내는 프론트의 ORIGIN ( except port num ) 을 적어주고, URL2 에는 Google OAuth Token 발급이 끝난 뒤 돌..
Chat GPT with Spring
·
Backend/기타
본 게시글은 23년 11월 16일에 작성된 글입니다.API Key 발급서드파티 API이기 때문에 KEY를 발급받아야 한다.이미 만들어져 있지만 key를 새로 만들어주자.Key는 다시는 확인할 수 없으므로 잘 확인해서 관리하자.생성하면 Usage에서 무료 크레딧이 발급되는 것을 확인할 수 있다.모델 선택Gpt-3 Model자연어를 이해하고 생성하는 모델. Davinci는 가장 유능한 모델이고, Ada는 가장 빠른 모델. 빠를 수록 기대 성능은 떨어진다.text-davinci-003 : 가장 유능한 GPT-3 모델. 다른 모델이 할 수 있는 모든 작업을 수행할 수 있으며, 종종 더 높은 품질, 더 긴 출력 및 더 나은 지침 준수로 수행한다.text-curie-001 : Davinci보다는 덜 유능하지만 빠르..
비동기 흐름 제어 by Callback
·
Backend/Node.js
Callback을 이용한 비동기 제어간단한 구성에도 Callback hell에 빠진다.가독성이 떨어진다변수 이름의 중복클로저가 성능 및 메모리 공간에 영향을 미친다. ( 활성 클로저의 context가 가비지 수집시에 유지됨을 기억해보자. )code 규칙을 중요시 해야 한다.Callback Rule1. 가능한 빨리 종료하라// Anti-Patternif (err) { cb(err);} else { ---}// Quick Retrun Patternif (err) { return cb(err);}콜백이 호출된 후 함수 종료를 잊지 말아야 한다.또한 함수가 반환하는 결과는 중요하지 않다. 실제 결과는 비동기적으로 생성돼 콜백에 전달된다.2. 콜백을 위해 명명된 함수를 생성해 클로저 바깥에 배치 후 중간 결과를 ..
Observer 패턴
·
Backend/Node.js
상태 변화가 일어날 때 관찰자(listeners)들에게 통지할 수 있는 객체 정의를 통해 패턴을 구성함EventEmitter ClassEventEmitter 생성 및 사용import { EventEmitter } from 'events'import { readFile } from 'fs'function findRegex (files, regex) { const emitter = new EventEmitter() for (const file of files) { readFile(file, 'utf8', (err, content) => { if (err) { return emitter.emit('error', err) } emitter.emit('fileread', fil..
Callback 패턴
·
Backend/Node.js
비동기 작업이 끝날 때 메인 실행 흐름이 이를 통지 받는 가장 기본적인 매커니즘CallBack : 비동기 작업의 결과를 가지고 런타임에 의해 호출되는 함수CPS ( Continuous-Passing Style )비동기에만 관련된 개념은 아니며, 결과를 다른 함수로 전달하는 스타일을 의미한다DS ( Direct Style )function add(a, b) { return a + b}CPS Code ( 비동기 X )function addCps (a, b, callback) { callback(a + b)}console.log('before')addCps(1, 2, result => console.log(`Result: ${result}`))console.log('after')CPS Code ( 비동기..
Module System ( ESM )
·
Backend/Node.js
Node 에서 모듈 시스템은 CommonJS(CJS) & ECMAScript modules(ECM) 두가지가 있다.Good Module System파일의 분할: 구조적으로 코드를 구성하고 관리코드의 재 사용성: 중복성 제거은닉(캡슐)화: Public API 제공으로 접근성 제한종속성 관리: 모듈들의 복잡한 종속성은 NPM으로 관리CJS : Node.js의 FS에 직접 접근하는 특성을 이용 오직 Local JS File에 의존ECM : Browser와 Server의 차이를 연결하기 위한 노력으로 탄생 Module PatternRevealing Module Pattern (RMP)/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "private" }] ..
Module System ( CJS )
·
Backend/Node.js
Module CacheNode 에서 모듈 시스템은 CommonJS(CJS) & ECMAScript modules(ECM) 두가지가 있다. Good Module System파일의 분할: 구조적으로 코드를 구성하고 관리코드의 재 사용성: 중복성 제거은닉(캡슐)화: Public API 제공으로 접근성 제한종속성 관리: 모듈들의 복잡한 종속성은 NPM으로 관리CJS: Node.js의 File System에 직접 접근하는 특성을 이용. 오직 Local JS File에 의존ECM: Browser와 Server의 차이를 연결하기 위한 노력으로 탄생 Module PatternRevealing Module Pattern (RMP)/* eslint no-unused-vars: ["error", { "varsIgnorePa..