Spring Validation
·
BE/Spring | SpringBoot
클라이언트 → 서버전달되는 데이터에 대해 유효성 검증 수행유효성 검증 실패 → 에러(`MethodArgumentNotValidException`)를 발생하도록 처리하는 라이브러리전체적인 흐름클라이언트) 데이터 담아서 `@RequestBody`, `@RequestParam`, `@PathVariable Annotation` 이용 → API 호출서버) `@Valid` or `@Validation Annotation` → 데이터 유효성 검증검증 통과서버) 성공 응답(Response) 데이터 전송 → 클라이언트검증 실패`MethodArgumentNotValidException` 에러 발생`@ControllerAdvice @ExceptionHandler` 로 구성한 `GlobalException`에서 해당 에러 ..
Saga & 2PC
·
BE
사가패턴(Saga Pattern)복잡한 트랜잭션 → 서비스 단위로 분산시키기 위해 적합한 패턴트랜잭션 중 오류 발생 → 보상 트랜잭션 ~> 이전 단계 취소 ⇒ 데이터 일관성 보장1) 코레오그래피 기반 사가(Choreography-based Saga)각 서비스가 이벤트 발행하고 구독하여 상호작용(+) 중앙 관리 X 분한된 환경에서 빠르게 대응 O각 서비스가 서로의 상태를 알지 못하는 상황 발생할 수 있음전체 트랜잭션 상태나 흐름 추적 어려움워크플로우의 확장과 변경 어려움새로운 단계 추가 or 기존 워크플로우 변경 → 모든 관련 서비스 수정(-) 복잡한 워크플로우 O → 서비스 간 이벤트 흐름 엉킬 위험 있음다수의 서비스 순차적으로 관여 → 이벤트 여러 단계로 연쇄적으로 전달 ⇒ 이벤트 흐름 복잡예외 처리 ..
Spring Webflux, WebClient
·
BE/Spring | SpringBoot
Blocking 방식요청한 작업이 끝날 때까지 다른 작업 X 기다림= 하나의 Thread 요청 처리 → 처리함수 실행하면 제어권 함께 넘김⇒ 해당 함수가 끝날 때까지 다른 함수 호출 XNon-Blocking 방식요청한 작업이 수행되는 동안 다른 작업 O= 호출자가 함수 호출 → 제어권을 호출자가 가지고 있음⇒ 다른 작업 수행 ORestTemplateMulti-Thread + Blocking 방식Thread가 다 차는 경우 요청이 Queue에서 대기⇒ 클라이언트 접속 수↑ (동시성 ↑) → CPU, 메모리 충분해도 Thread 부족 → 성능 ↓Thread ↑ → CPU, 메모리 성능 ↓Spring 5.0 이후 → WebClient 사용하는 것이 권장TomactJava 기반의 웹 애플리케이션 서버, Spri..
gRPC
·
BE
등장배경1. Server-Client Model하나의 메인 프레임에서 동작하는 Monolothic 구조로 설계 시절 네트워크 통신 중요 X고가인 메인 프레임워크 → 비교적 저가의 워크스테이션 서버로 대체하고 싶어함But, 메인 프레임워크의 초고양 사양 그대로 제공하는데 한계⇒ 메인 프레임워크 기능 → 워크스테이션 서버로 분산 + 네트워크 연결로 서비스하는 방식 채택= Server-Client Model⇒ 서버-서버, 서버-개인PC 간 네트워크 연결 및 통신 중요→ OSI 7 layer, TCP/IP 등 네트워크 계층 구조 정의, 발전 2. IPC프로세스는 기본적으로 상호독립적메모리 공유 X → 각자 자신의 일만 하고 서로 간섭 XBut, 필요에 따라 프로세스 간 정보를 교환해야 하는 경우→ 별도의 수단 ..
MyBatis VS. JPA
·
BE
SQL Mapper개발자가 작성한 SQL 실행 결과를 객체에 매핑시켜주는 프레임워크MyBatisORM(Object Relational Mapping)객체와 DB의 데이터를 자동으로 매핑시켜주는 프레임워크JPA데이터를 관계형 데이터베이스에 저장(= 영속화, persistence)DB를 사용할 때 번거로운 반복작업 없애줌MyBatis: SQL 문 → Java와 분리 ⇒ 별도 파일로 관리 → SQL 개발, 유지 보수 용이JPA: SQL 문 만들 필요 X ⇒ 자동화, 반복작업 줄여줌 복잡한 쿼리와 SQL 제어 필요 → MyBatis간단한 매핑 및 객체 지향적인 접근 필요 → JPAMyBatis반복적인 JDBC 프로그래밍 단순화 → 불필요한 Boilerplate 코드 제거Java 소스코드에서 SQL문 분리 → 별..
[NodeJS] Express / Passport / Middleware / Sequelize
·
BE/NodeJS
express$ npm i express $ npm i -D nodemonnodemonpassport$ npm i passport passport-local passport-kakao bcrypt// app.jsconst passport = require('passport'); const passportConfig = require('./passport'); const app = express();passportConfig(); app.set('port', process.env.PORT || 3001);app.use(session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly:..
김앩옹
'BE' 카테고리의 글 목록