Backend(14)
-
Postman은 STOMP 프레임을 끝내지 않아
이 글에서는 Postman으로 STOMP 연결 및 메시지 전송을 테스트할 때 발생할 수 있는 프레임 종료(null terminator) 문제를 다룹니다.STOMP 프로토콜은 텍스트 기반 프레임 프로토콜이지만, 각 프레임의 끝은 널 문자(null byte, 0x00) 로 종료됩니다.하지만 Postman WebSocket 메시지 입력창에서 \0을 직접 입력할 경우, 이 값이 실제 null byte가 아니라 문자열로 전송되는 경우가 있습니다.이 경우 서버는 STOMP 프레임의 끝을 찾지 못해 메시지를 계속 읽는 상태가 되며, 결과적으로 응답이 반환되지 않습니다.이 글에서는 이러한 문제의 원인을 분석하고, Postman 환경 변수를 활용해 문제를 해결하는 방법을 설명합니다. 문제 상황채팅을 위해 /ws/chat..
2026.03.15 -
댓글을 많이 쓰면 데드락?
이 글은 동시성 환경에서 자식 엔티티 생성이 단순한 INSERT처럼 보이더라도, 실제로는 부모 엔티티에 대한 FK 제약 검증과 부모 엔티티의 상태 변경(집계 업데이트)이 결합될 때 예상치 못한 교착 상태(deadlock)가 발생할 수 있음을 다룹니다.MySQL InnoDB deadlock 로그를 직접 분석해 데드락 원인을 확정하고,가능한 대체안들과 트레이드오프를 비교합니다.최종적으로 집계 업데이트를 비동기로 분리하고, 장애 시 복구(재교정) 흐름까지 정리합니다. 문제 상황SNS 특성 상 댓글 작성 요청이 증가하는 상황을 가정해 K6로 부하 테스트를 수행했는데, 댓글 쓰기 실패율이 급격히 증가하는 장애가 발생했습니다. 시나리오는 다음과 같습니다.사용자 100명이 1개의 게시글에 1분동안 3초 간격으로 댓글..
2026.02.21 -
검증 쿼리가 꼭 필요할까?
이 글은 동시성 환경에서 자식 엔티티를 생성할 때, 부모 엔티티의 사전 존재 검증 쿼리가 과연 필요한지에 대해 다룹니다.JPA의 existsById()기반의 사전 검증은 직관적으로 안전해 보이지만, 동시성 환경에서의 상태 변화를 보장하지 못합니다. 또한 InnoDB는 자식 엔티티 INSERT시 외래 키(FK) 제약 검증 과정에서 이미 부모 엔티티의 존재를 확인합니다.이 글에서는InnoDB가 실제로 수행하는 검증 방식사전 검증 쿼리가 동시성 문제를 해결하지 못하는 이유SELECT … FOR SHARE와 같은 락 기반 접근의 한계고트래픽 환경에서의 현실적인 선택과 트레이드오프를 살펴보고, 사전 검증이 의미 있는 경우와 그렇지 않은 경우를 구분해 정리합니다.익숙한 검증의 필요성부모–자식 관계의 엔티티를 생성할..
2026.02.09 -
게시글 하나 삭제했는데 DELETE가 N번?
이 글은 JPA의 @OneToMany 연관관계에서 사용되는 cascade, orphanRemoval 옵션에 의한 고아객체 삭제가 성능에 어떤 영향을 미치는지를 다룹니다. JPA가 제공하는 편리한 연관관계 관리 기능이 의도치 않은 쿼리 폭증(row-by-row delete)으로 이어질 수 있음을 실제 사례를 통해 살펴보고, 성능 이슈가 발생하기 전에 어떤 기준으로 최적화 방안을 선택할 수 있는지 정리합니다. 게시글 1개 삭제, 삭제 쿼리는 N개?문제 상황SNS 서비스를 개발하며 게시글 삭제 기능을 구현하고 있었습니다. 게시글은 사진, 댓글, 좋아요, 태그 등 여러 연관 엔티티를 가져야 합니다.게시글 엔티티는 다음과 같이 정의되어 있습니다.class Post { @OneToMany(mappedBy = ..
2026.02.02 -
Swagger에서 CSRF 토큰 자동 전송이 되지 않는 문제
이 글에서는 Spring Security의 Swagger에서 API 테스트 시, CSRF 토큰을 자동으로 포함되지 않아 403 Forbidden이 발생하는 문제 해결 방법을 공유합니다. 문제 상황: Swagger → 백엔드 간 요청에서 CSRF 헤더 누락해결 방법: Springdoc Swagger UI에 CSRF 설정 추가회고참고문제 상황: Swagger → 백엔드 간 요청에서 CSRF 헤더 누락Spring Security의 CSRF가 활성화된 환경에서는 GET·HEAD·OPTIONS 외의 요청(PUT/POST/PATCH/DELETE)을 보낼 때반드시 다음 둘 중 하나가 필요합니다.요청 헤더에 X-XSRF-TOKEN혹은 hidden form field 기반의 _csrf 필드(2)번 방법은 Spring M..
2025.11.25 -
[Spring] 스프링부트 @Schedule 시간대 문제 해결
서버 환경에 따라 스프링 스케줄러가 설정된 시간에 동작하지 않는 경우가 발생할 수 있습니다. 특히, 애플리케이션의 시간대 설정과 배포 서버의 시간대가 일치하지 않을 때, 스케줄러가 의도한 시간에 실행되지 않을 수 있습니다. 이 글에서는 스프링 스케줄러가 배포 서버에서 한국 시간에 맞춰 정확하게 동작하도록 설정하는 방법을 다룹니다.문제 상황스프링 애플리케이션에서 아래와 같이 매주 수요일 오후 4시에 작업을 스케줄링했다고 가정해봅시다.@Scheduled(cron = "0 0 16 ? * WED")public void run() { // 작업 내용} 이 코드는 애플리케이션이 실행 중인 서버의 호스트 시간대를 기준으로 스케줄링됩니다. 즉, 로컬 환경에서 애플리케이션을 실행하면 로컬 시간대에 맞춰 작동하고,..
2024.11.10 -
[짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크] 연습문제 5장 정답
연습문제1. 다음 중 서블릿의 생명 주기 메서드에 해당하지 않는 것을 고르시오.(3) close() 2. 서블릿 클래스 구조에서 사용자 요청에 따라 service() 메서드를 통해 호출되는 대표적인 메서드 2개는 무엇인가?(3) doGet(), doPost() 3. 다음 빈칸에 들어갈 단어를 고르시오.서블릿에서 페이지 이동 시 데이터를 포함하는 경우에는 ( ) 방식을 사용하며, 데이터를 포함하지 않는 경우에는 ( ) 방식을 사용한다. (3) 포워딩, 리디렉션 4. 서블릿에서 사용자 요청을 처리하는 메서드에 인자로 전달되는 HttpServletRequest 객체에 대한 설명으로 틀린 것을 고르시오.(2) 주요 메서드로 getWriter(), sendRedirect(String location) 등이 ..
2024.07.07 -
[짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크] 연습문제 6장 정답
연습문제1. JSP의 주요 특징으로 틀린 것은 무엇인가?(3) 커스텀 태그 기술을 사용할 수 없기 때문에 코드를 태그화할 수 없다. 2. JSP의 주요 구성요소가 아닌 것은 무엇인가?(3) 스프링 프레임워크 3. SSR방식의 백엔드 웹 개발 관점에서 JSP의 단점이 아닌 것은 무엇인가?(4) 모든 개발이 서버에서 이루어지므로 개발의 집중화를 통한 효율이 있을 수 있다.→ 단점으로는 적합하지 않음 4. 다음은 page 지시어의 사용 형식을 나타낸 구문이다. 빈칸에 들어갈 내용을 채우시오.(1) language(2) contentType(3) import(4) errorPage 05. 다음 지문을 읽고 JSP의 스크립트 요소 중 어떤 유형을 설명한 것인지 고르시오.(2)
2024.07.07 -
[짧고 굵게 배우는 JSP 웹 프로그래밍과 스프링 프레임워크] 연습문제 1장 정답
연습문제01. 월드 와이드 웹에서 클라이언트와 서버 간의 통신을 위해 사용하는 프로토콜과 콘텐츠 제작을 위해 사용하는 마크업 언어는 각각 무엇인가?1) HTTP, HTML웹은 HTTP 프로토콜을 사용하며 HTML로 작성된 문서를 연결하여 다양한 콘텐츠를 제공한다. p.25 02. TCP/IP 4계층 구조에 해당하지 않는 계층은 무엇인가?2) 변환 계층TCP/IP는 4계층(응용, 전송, 인터넷, 물리)으로 이루어져 있다. p.27 03 네트워크 시스템이 계층 구조로 이루어져 있는 이유로 틀린 것은 무엇인가?1) 네트워크 사용을 위해 전체 구조에 대한 이해 없이 각각의 계층은 하위 계층에 대해서만 이해하면 된다.계층화를 통해 상위 레벨에서는 하위 레벨에서 구현한 내용을 모르더라도 표준화된 인터페이스를 통..
2024.07.07 -
[Servlet] Create Dynamic Web Project(Jakarta EE) [IntelliJ]
Jakarta EE 로 동적 웹 프로젝트 만들기 지난 번에 Maven으로 동적 웹 프로젝트를 만드는 방법을 올렸다. [Servlet] Create Dynamic Web Project [IntelliJ] IntelliJ에서 동적 웹 프로젝트 생성하기 2023.03 IntelliJ에서 동적 웹 프로젝트를 만드는 법을 소개한다. 사전에 톰캣 서버가 준비되어 있어야 한다. 우선 프로젝트 생성을 눌러주고 Maven 원형을 선택 kyr-db.tistory.com 이번 에는 좀 더 쉽게 Jakarta EE로 동적 웹 프로젝트를 만드는 방법에 대해서 소개한다. 프로젝트 생성에 들어가서 Jakarta EE를 선택하자. Servlet을 사용하는 동적 웹 프로젝트를 위한 글이므로 템플릿을 "웹 애플리케이션" 으로 설정하자...
2024.04.05