2025년 9월 29일 월요일 (88일차)

Jeonghoon·2025년 9월 29일

jeonghoon's Study

목록 보기
91/128

📘 Redux, Transaction, Logging, Lambda, Stream 정리


🧩 Redux

🔐 Redux Persist

Redux의 상태는 기본적으로 새로고침 시 초기값으로 리셋됩니다. 이를 방지하기 위해 redux-persist를 사용하여 상태를 LocalStorage 또는 SessionStorage에 저장할 수 있습니다.

구분설명
기능 목적새로고침 후에도 상태를 유지하기 위함
저장소 종류LocalStorage, SessionStorage
설치 명령어npm i redux-persist

⚙️ 핵심 용어

용어설명예시 코드
persistConfigpersist 설정 객체const option = { key: '식별이름', storage }
persistReducer기존 슬라이스를 persist 버전으로 변경const persist슬라이스 = persistReducer(option, 슬라이스)
persistGate상태를 로드하는 동안 렌더링을 지연시키는 컴포넌트<PersistGate loading={로딩값} persistor={persist스토어}>
LocalStorage기본 스토리지import storage from 'redux-persist/lib/storage'
SessionStorage세션 저장소import storageSession from 'redux-persist/lib/storage/session'

💾 Transaction (트랜잭션)

데이터베이스에서 여러 연산(DML) 을 하나의 논리적 작업 단위로 묶어 처리하는 방법.

예시: 이체, 주문, 등록 등 여러 insert/update/delete가 하나의 과정으로 이뤄질 때 사용

✅ 트랜잭션의 4대 속성 (ACID)

속성의미설명
원자성 (Atomicity)All or Nothing모든 연산이 성공해야 결과 반영
일관성 (Consistency)Data Consistency트랜잭션 이후 데이터는 일관성 유지
독립성 (Isolation)Non-interference다른 트랜잭션과 상호 간섭 금지
지속성 (Durability)Permanence성공 시 결과는 영구히 반영

⚙️ 주요 용어

용어설명
commit트랜잭션 정상 완료 후 결과 저장
rollback오류 발생 시 이전 상태로 복구
savepoint특정 시점의 작업 임시 저장 (부분 롤백 가능)

🧩 Spring에서의 트랜잭션 적용

트랜잭션은 AOP(관점지향 프로그래밍)를 통해 비즈니스 로직에 적용합니다.

적용 방법설명
@Transactional 메서드 단위 적용@Transactional void method(){}
클래스 전체 적용@Transactional class Service{}

💥 롤백 조건

설정설명
기본RuntimeException 발생 시 롤백
@Transactional(rollbackFor = Exception.class)모든 예외 시 롤백
@Transactional(rollbackFor = 특정예외.class)특정 예외만 롤백

🧾 Logging (로그 관리)

프로그램 실행 중 발생 정보를 기록하여 상태를 추적하고 유지보수를 용이하게 하는 기능.

⚙️ Spring에서의 로깅

  • @Log4j2 어노테이션을 사용하여 Controller / Service 계층에서 활용
@Log4j2
class Controller {}

🧠 주요 메서드

메서드용도사용 단계
log.debug()개발 및 테스트 단계 로그
log.info()상태 확인용 로그 (개발/운영 공통)
log.warn()경고 로그 (운영 단계)
log.error()예외 발생 확인용 (운영 단계)

⚙️ 로그 설정 (application.properties)

설정 항목설명예시
로그 레벨debug < info < warn < errorlogging.level.java=info
로그 파일 지정로그 저장 경로logging.file.name=경로/파일명.log
로그 패턴 (File)로그 파일 형식 설정logging.pattern.file
로그 패턴 (Console)콘솔 로그 형식 설정logging.pattern.console

패턴 요소

코드설명
%msg로그 메시지
%n줄바꿈
%d{y M d H m s}날짜/시간
%level로그 레벨
%logger경로/클래스명

🔠 람다식 함수 활용

Lambda (람다식)은 메소드 없이 간결하게 함수를 표현하기 위한 문법입니다.

☯️ 함수형 인터페이스

인터페이스설명주요 메서드예시
Function<T,R>입력 T를 받아 결과 R 반환.apply(T)Function<Integer,Integer> f = x -> x * 2;
Supplier<T>입력 없이 결과 T 반환.get()Supplier<Double> s = () -> Math.random();
Consumer<T>입력 T를 받아 반환값 없음.accept(T)Consumer<String> c = x -> {...};
Predicate<T>입력 Tboolean 반환.test(T)Predicate<Integer> p = x -> x%2==0;

🌊 .stream (스트림 API)

stream은 데이터를 처리하기 위한 데이터 흐름 통로입니다.

구조: [ 데이터 ] → [ 중간연산 ] → [ 최종연산 ]

조합설명
stream() + forEach()단순 반복
stream() + map()반환값이 있는 반복
stream() + filter()조건 필터 반복
stream() + sort()오름차순 정렬
stream() + sort(Comparator.reverseOrder())내림차순 정렬
stream() + distinct()중복 제거
stream() + limit(N)앞의 N개 데이터 추출
stream() + reduce(초기값, (누적, 현재) -> 연산)누적 연산 (합계 등)

0개의 댓글