Backend 57

[error] getOutputStream() has already been called for this response

🚨 Could not write JSON: getOutputStream() has already been called for this response  🔥 오류 원인HttpServletResponse의 getOutputStream() 또는 getWriter()가 여러 번 호출되었을 때 발생하는 문제!즉, 응답을 한 번 보낸 후에 또 응답을 보내려고 할 때 발생한다.  📖 에러 코드 (수정 전) ➡️ 쿠키를 response.addCookie()로 설정한 후, ResponseEntity로 JSON 응답을 반환. ➡️ 하지만 ResponseEntity가 HTTP 응답을 설정하는 과정에서 response.getOutputStream()을 다시 호출하기 때문에 충돌이 발생. @PostMapping("/l..

Backend/spring 2025.02.23

[JAVA] 쿠키(Cookie) 설정 방법

쿠키 설정 방법에 대해 알아보기전에 쿠키에 대해 간단히 알아보자!!🔍 쿠키(Cookie)란? 쿠키는 웹 브라우저에 저장되는 작은 데이터 조각!!서버가 클라이언트(브라우저)에 정보를 저장하고, 이후 요청에서 다시 전송하도록 도와주는 역할➡️ 쿠키는 웹에서 사용자 상태를 유지하는 중요한 메커니즘! 🍪 🚀 특징세션 유지: 로그인 상태 유지, 장바구니 정보 저장클라이언트 저장: 브라우저에 텍스트 형태로 저장됨자동 전송: 동일한 도메인에 대한 요청마다 자동 포함🎯 쿠키 설정 시 추가할 내용✅ HttpOnly → 자바스크립트에서 접근 불가능하게 해서 보안 강화✅ Secure → HTTPS에서만 쿠키 전송 (HTTPS 환경이라면 꼭 설정!)✅ Path=/ → 모든 경로에서 쿠키 사용 가능✅ Max-Age / ..

Backend/spring 2025.02.23

실시간 데이터 전송

HTTP 프로토콜은 비연결성(stateless) 구조라서 서버가 클라이언트와 지속적으로 연결될 수 없음. 그래서 서버가 데이터를 실시간으로 클라이언트에게 푸시(Push)하는 것이 어려움. 이를 해결하는 방법으로 Polling, Long Polling, WebSocket, SSE가 있음! 📌 1. Polling (폴링) 방식클라이언트가 일정 주기로 서버에 요청을 보내 데이터를 갱신하는 방식.서버는 새로운 데이터가 있으면 응답하고, 없으면 빈 응답을 보냄. ✔️ 장점 구현이 단순함 (HTTP 요청/응답 패턴 그대로 활용 가능) 요청 주기를 길게 설정하면 서버 부하를 줄일 수 있음 ❌ 단점변경 사항이 없을 때도 요청을 계속 보내야 하므로 리소스 낭비 발생실시간성이 떨어짐 (요청 주기에 따라 데이터 갱신이 지..

[Kafka] 고급 설정

📌 Kafka 운영 환경에서 필요한 고급 설정기본 개념만으로도 Kafka를 사용할 수는 있지만, 실제 운영 환경에서는 더 많은 걸 알아야 한다!🔗 기본 개념(필수!)토픽, 파티션, 브로커, 컨슈머 그룹, 오프셋 이해Producer & Consumer 동작 방식기본적인 명령어 (토픽 생성, 메시지 생산/소비, 오프셋 관리)➡️ 이 정도만 알아도 로컬 환경에서 테스트하고 간단한 서비스에 적용할 수 있다!! 🚀 📌 1. 파티션 할당 전략 (Partition Assignment Strategy) ✅ 컨슈머 그룹 최적화Kafka는 여러 개의 컨슈머가 동일한 토픽을 소비할 때, 파티션을 컨슈머들에게 자동으로 할당한다. 이때 파티션 할당 전략이 중요한 역할을 한다. ➡️ 운영 환경에서는 컨슈머 그룹의 부하 분..

Kafka란?

🔍1. 이벤트 기반 아키텍처(Event-Driven Architecture)란?분산된 애플리케이션 서비스들이 이벤트를 기반으로 통신하고 서로의 동작을 야기하는 패턴을 이벤트 기반 아키텍처라고 한다.서비스들이 이벤트를 발행(publish)하고, 다른 서비스가 이를 구독(subscribe)하여 처리.Kafka, RabbitMQ, SQS, EventBridge 등과 같은 메시징 시스템을 통해 구현.⭐ 이벤트 기반 아키텍처를 사용하는 이유1️⃣ 서비스 간 결합도↓ → 각 서비스가 독립적으로 동작 가능 (확장성↑)2️⃣ 비동기 처리 → 빠른 응답 가능, 대량 트래픽 처리에 유리3️⃣ 확장성 & 유연성 → 새로운 기능 추가 시 기존 시스템에 영향 최소화  📌 2. Kafka란?Kafka는 대규모 데이터를 실시간..

[Spring Security] CSRF & CORS 개념 및 설정 방법

📌 1. CSRF(Cross-Site Request Forgery)란?사용자가 로그인된 상태에서 악성 사이트를 통해 원치 않는 요청을 보내도록 유도하는 공격 방식예를 들어, 사용자가 은행 웹사이트에 로그인한 상태에서 악성 스크립트가 계좌이체 요청을 보내면 공격이 성공할 수 있음 ✅ 1-1. Spring Security에서 CSRF 설정 방법🔹 CSRF 방어 활성화 (기본값)Spring Security에서는 CSRF 보호가 기본적으로 활성화됨폼 기반 로그인(formLogin())을 사용할 때 CSRF 방어가 필요함@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http ..

Backend/spring 2025.02.23

[Spring Security] Web vs WebFlux Spring Security 설정

📌 Spring Security 설정 방법 비교Spring Security 설정 방식은 Spring MVC(Web)와 Spring WebFlux에서 차이가 있다!! 🚀아래에서 클래스 차이, 필터 적용 방식, UserDetailsService 사용 방식을 비교해보자. 😊 🔥 Spring MVC vs WebFlux 차이 요약 Spring MVC (Web)Spring WebFluxSecurity 설정 클래스@EnableWebSecurity@EnableWebFluxSecurityFilterChain 타입SecurityFilterChainSecurityWebFilterChain요청 인증 설정authorizeHttpRequests()authorizeExchange()필터 추가 방식addFilterBefore..

Backend/spring 2025.02.23

web vs webflux

📌 Spring Boot와 각 Starter(web, webflux)의 역할✅ 1. Spring BootSpring Boot는 Spring 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크.애플리케이션 실행을 자동화하고, 필요한 설정을 최소화하는 역할을 한다.🎯 Spring Boot가 하는 일1️⃣ Spring 설정 자동화@SpringBootApplication을 사용하면 @Configuration, @ComponentScan, @EnableAutoConfiguration이 포함됨application.properties 또는 application.yml을 기반으로 자동 설정 수행2️⃣ 내장 웹 서버 제공Tomcat, Jetty, Undertow, Netty 등을 내장하여 별도 WAS 설치 없이..

Backend/spring 2025.02.23

자바(Spring) 기본 예외 처리

📌1.  try-catch 문과 throws Exception 사용법기본적인 예외 처리는 다음 두 가지 방법으로 구현할 수 있다.✅ 1-1. try-catch 문try-catch 문은 코드 실행 중 발생하는 예외를 감지하고 처리하는 가장 일반적인 방식이다.로직을 중단하지 않고 즉각적인 예외 처리.Spring MVC에서 주로 Controller 📖 try-catch 예시try { int result = 10 / 0; // 예외 발생 (ArithmeticException)} catch (ArithmeticException e) { System.out.println("예외 발생: " + e.getMessage()); // 예외 메시지 출력 e.printStackTrace(); // 스택 ..

Backend/JAVA 2025.02.23