Logback이란?스프링 부트에서 기본으로 사용하는 로그 프레임워크 SLF4J : 로그 인터페이스 (API)Logback : 로그 구현체 (실제 동작)Log4j2 : 다른 로그 구현체 스프링 부트는 별도의 설정이 없으면 SLF4J + Logback 조합으로 로그를 구성스프링 부트에서 Logback 사용logback-spring.xml 파일 추가logback 설정 파일을 추가해준다. facility : 로그가 어디에서 발생했는지suffixPattern : 로그를 어떻게 남길 건지 패턴 지정 propertySYSLOG_HOST : 로그 서버 IP 주소SYSLOG_PORT : 포트 번호 ${SYSLOG_HOST} ${SYSLOG_PORT} ..
로그란?로그는 프로그램이 어떤 동작을 했는지 기록해두는 것에러가 났을 때 원인을 추적하거나, 정상적으로 동작했는지 확인하는 데 꼭 필요하다. 리눅스 시스템에서는 다음과 같은 명령어로 로그를 확인할 수 있다.systemctl status nginx # 서비스 상태 확인cat /var/log/syslog # 시스템 로그 확인Spring에서의 Logging스프링에서는 Logger를 사용해서 다양한 로그 레벨로 메시지를 기록할 수 있다.log.info("정상"); // 정상일 때log.error("에러"); // 에러일 때// 동작 상황을 모두 출력log.trace("trace : 동작 상황을 모두 출력(메소드 실행, 종료, 반복문 실행 등)");// 동작 상황을 모두 출력log...
CQRS (Command Query Responsibility Segregation)명령(Command)과 조회(Query)를 명확히 분리하는 아키텍처 패턴 Command데이터를 생성(Create), 수정(Update), 삭제(Delete) 하는 작업 Query데이터를 조회(Select)하는 작업 ✅ 장점부하분산조회 요청이 많을 경우, 쿼리 서비스만 스케일업/스케일아웃하면 됨커맨드와 쿼리를 같이 둔 경우, 불필요하게 커맨드 로직도 함께 리소스를 차지장애 분리쿼리에 장애가 발생했을 때도 커맨드는 계속 서비스 가능 CQRS 적용 방법단일 프로젝트 내에서 분리BoardCommandService: 게시글 등록, 수정, 삭제BoardQueryService: 게시글 목록 및 상세 조회 프로젝트를 완전히 분리bo..
Gateway에서 인가 처리JwtFilterspring cloud gateway에서 제공해주는 AbstractGatewayFilterFactory 필터를 사용해줘야 한다.import com.example.apigateway.utils.JwtUtil;import org.springframework.cloud.gateway.filter.GatewayFilter;import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;import org.springframework.http.HttpCookie;import org.springframework.http.server.reactive.ServerHttpRequest;imp..
Eureka란?Spring Cloud Eureka는 넷플릭스에서 개발한 서비스 디스커버리 시스템이다.마이크로서비스 아키텍처(MSA) 환경에서 동적으로 서비스 등록 및 검색을 가능하게 해준다. 서비스 디스커버리란?마이크로서비스 환경에서는 서비스들이 동적으로 변경될 수 있으므로, 각 서비스의 IP 및 포트를 관리하는 중앙 레지스트리가 필요하다. Eureka Server: 서비스들의 정보를 저장하고 관리하는 레지스트리 서버 역할Eureka Client: 유레카 서버에 자신의 정보를 등록하고, 필요할 때 다른 서비스의 정보를 조회 유레카 서버에 등록만 잘 해놓으면 다른 서버의 IP를 알 필요가 없다 => 필요할 때 유레카 서버에서 받아가면 된다. 서버가 아무리 많아도 각자의 서비스를 개발하는 개발팀에서 유레카 ..
하나의 프로젝트 안에 여러 개의 프로젝트가 들어갈 수 있게 멀티 모듈 프로젝트를 생성 common, user-api, board-api, gateway가 있는 프로젝트 만들 멀티 모듈 프로젝트 생성모듈 생성프로젝트 우클릭 - New - Module 클릭 모듈 이름을 입력하고 생성한다. 모듈 세 개 추가 settings.gradle 설정프로젝트의 settings.gradle에 생성한 모듈들을 추가해준다.rootProject.name = 'multi'include 'user-api'include 'common'include 'board-api' 필요 없는 파일 삭제 프로젝트의 src는 사용할 일이 없기 떄문에 src 폴더를 삭제해준다. 각각의 모듈에서 필요 없는 파일들은 삭제하고, src 폴더와 bui..
Spring Cloud란?https://spring.io/projects/spring-cloud Spring CloudSpring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, short lived microservices andspring.io Spring Cloud는 마이크로서비스 아키텍처(MSA)를 구축할 때 필요한 다양한 기능을 제공하는 Spring 프레임..
STOMP란?Single (단순한) Text (텍스트 기반) Oriented Messaging Protocol (메시징 프로토콜)웹 소켓과 함께 사용하는 메시징 프로토콜 기본적으로 웹 소켓은 양방향 통신을 가능하게 하지만,메시지를 어떻게 주고받을지에 대한 형식을 정해주지 않는다. -> STOMP를 사용하면 클라이언트와 서버 간 메시지 형식이 표준화되고,채팅, 알림 시스템, 실시간 데이터 전송 등에 활용 가능Pub-Sub 방식을 사용하여 한 명이 보낸 메시지를 여러 사람이 받을 수 있다. (대표적인 예로 채팅방이 있음) STOMP 특징텍스트 기반 프로토콜HTTP 처럼 간단한 프레임을 사용하여 메시지를 주고받음Pub-Sub(발행-구독) 모델 지원메시지를 특정 채널에 보내면, 해당 채널을 구독한 클라이언트들..
Kafka 라이브러리 추가build.gradle에 추가implementation 'org.springframework.kafka:spring-kafka' Kafka 설정application.yml 설정데이터를 주고받을 때는 같은 데이터 타입으로 주고받아야 한다.string으로 보냈으면 string으로, JSON으로 보냈으면 JSON으로 bootstrap-servers에는 카프카 서버 IP 주소를 적어준다.# String으로 받기spring: kafka: bootstrap-servers: 10.10.10.123:9092 consumer: group-id: psy-group key-deserializer: org.apache.kafka.common.serialization.S..
웹 소켓(Web Socket)이란?웹 소켓(Web Socket)은 클라이언트와 서버 간의 양방향 통신을 지원하는 프로토콜로, HTTP보다 효율적인 실시간 데이터 전송이 가능하다. HTTP는 요청과 응답을 기반으로 한 단방향 통신이지만, 웹 소켓은 연결을 유지하면서 양방향으로 데이터를 주고받을 수 있다. ✅ 웹 소켓의 특징양방향 통신 : 클라이언트와 서버가 실시간으로 데이터를 주고받을 수 있다.지속적인 연결 유지: 최초 handshake 후 지속적인 연결을 유지하면서 데이터 전송 가능낮은 오버헤드: HTTP 요청/응답보다 헤더 크기가 작아 네트워크 부하 감소빠른 응답 속도: 실시간 서비스(채팅, 알림 등) 등에 적합 웹 소켓으로 실시간 채팅 구현하기웹 소켓 라이브러리 추가 build.gradle 파일에 웹..