개발/java,spring 48

Oracle Lock·Deadlock·격리 수준과 Spring 트랜잭션 완벽 정리

Oracle Lock·Deadlock·격리 수준과 Spring 트랜잭션 완벽 정리개인 학습용 Spring·Oracle 기술 노트 3회차학습 방식: 핵심 개념 → 세션별 동작 → Spring 연계 → 실전 문제 → 정답 해설 → 운영 점검들어가며앞선 학습에서는 Spring의 @Transactional이 AOP 프록시를 통해 동작한다는 점과 REQUIRED, REQUIRES_NEW, rollback-only, UnexpectedRollbackException을 공부했다.이번에는 Spring 트랜잭션이 실제 Oracle 데이터베이스에서 어떤 동시성 현상을 만드는지 연결한다.실무에서는 다음과 같은 문제가 자주 발생한다.UPDATE 문이 끝나지 않고 계속 대기한다.특정 업무만 느려지고 WAS의 사용 가능 커넥션이..

개발/java,spring 2026.09.12

Spring 트랜잭션 전파 완벽 정리: `REQUIRED`, `REQUIRES_NEW`, rollback-only와 `UnexpectedRollbackException`

Spring 트랜잭션 전파 완벽 정리: REQUIRED, REQUIRES_NEW, rollback-only와 UnexpectedRollbackException개인 학습용 Spring 트랜잭션 기술 노트 2회차학습 방식: 개념 이해 → 실행 흐름 분석 → 실전 문제 → 직접 작성한 답안 → 해설 → 실무 설계들어가며지난 학습에서는 Spring의 @Transactional이 일반적으로 AOP 프록시를 통해 동작한다는 점을 공부했다.핵심은 다음 두 문장이었다.@Transactional 메서드 호출이 Spring 프록시를 통과해야 트랜잭션 기능이 적용된다.롤백 규칙에 해당하는 예외가 트랜잭션 프록시까지 전달되어야 Spring이 롤백을 판단할 수 있다.이번에는 한 단계 더 들어가 본다. 실제 업무 시스템에서는 하..

개발/java,spring 2026.09.11

Spring `@Transactional` 동작 원리와 롤백되지 않는 이유

Spring @Transactional 동작 원리와 롤백되지 않는 이유개인 학습용 기술 노트 1회차주제: Spring 트랜잭션, AOP 프록시, 내부 호출, 예외와 롤백들어가며Spring 기반 업무 시스템을 개발하다 보면 다음과 같은 문제를 한 번쯤 만나게 된다.메서드에 @Transactional을 붙였는데 트랜잭션이 적용되지 않는다.데이터 등록 중 오류가 발생했는데 앞에서 처리한 데이터가 그대로 남는다.분명히 예외를 발생시켰는데 롤백되지 않는다.try-catch로 예외 로그를 남겼더니 데이터가 커밋된다.같은 서비스 클래스 안에서 메서드를 분리했는데 기대한 트랜잭션이 시작되지 않는다.이 문제를 제대로 이해하려면 @Transactional을 단순히 "오류가 나면 DB 작업을 취소해 주는 애너테이션"으로 기..

개발/java,spring 2026.09.10

Checked Exception vs Unchecked Exception 차이: 실무에서 어떻게 선택해야 할까?

Checked Exception vs Unchecked Exception 차이: 실무에서 어떻게 선택해야 할까?Java를 어느 정도 공부하다 보면 반드시 마주치는 개념이 있습니다.바로 Checked Exception vs Unchecked Exception입니다.처음에는 단순히“Checked는 try-catch 해야 하고, Unchecked는 안 해도 된다”이 정도로 이해하고 넘어가기 쉽습니다.하지만 실무에서는 이 선택 하나로코드 구조, 유지보수성, 예외 설계 방식까지 완전히 달라집니다.이번 글에서는 단순 개념 정리를 넘어서언제 Checked를 쓰고, 언제 Unchecked를 써야 하는지까지실무 기준으로 정리해보겠습니다.Checked Exception vs Unchecked Exception 한눈에 보기..

개발/java,spring 2026.03.31

Java Exception 구조 이해하기: try-catch만 알면 부족한 이유

Java Exception 구조 이해하기: try-catch만 알면 부족한 이유자바를 처음 배울 때 try-catch 문법부터 접하는 경우가 많습니다.그런데 실무로 넘어가면 단순히 예외를 잡는 것보다 예외가 어떤 구조로 이루어져 있는지, 왜 checked exception과 unchecked exception이 나뉘는지, 어떻게 설계해야 유지보수가 편한지를 이해하는 것이 훨씬 중요합니다.저도 처음에는 Exception, RuntimeException, throws 정도만 알면 된다고 생각했는데, 프로젝트가 커질수록 예외 구조를 제대로 이해하지 않으면 디버깅도 어려워지고 코드도 금방 지저분해지더라고요.이번 글에서는 Java Exception 구조를 처음부터 차근차근 정리해보겠습니다.문법 설명에 그치지 않고..

개발/java,spring 2026.03.24

REST API 설계 기본 원칙 정리 (백엔드 개발자를 위한 가이드)

REST API 설계 기본 원칙 정리 (백엔드 개발자를 위한 가이드)백엔드 개발을 하다 보면 반드시 접하게 되는 개념이 바로 REST API입니다.하지만 처음 API를 설계할 때 이런 고민을 하게 됩니다.URL을 어떻게 설계해야 할까?GET, POST, PUT은 언제 사용해야 할까?RESTful한 API는 어떤 구조일까?이번 글에서는 REST API 설계 기본 원칙을 실제 개발에서 사용하는 방식으로 정리해 보겠습니다.목차REST API란 무엇인가REST API 설계 핵심 원칙HTTP Method 올바른 사용RESTful URL 설계 규칙응답 구조 설계정리REST API란 무엇인가REST API는 웹에서 데이터를 주고받기 위한 아키텍처 스타일입니다.REST는 Representational State Tra..

개발/java,spring 2026.03.19

springframework.web.filter.CharacterEncodingFiler cannot be cast to class jakarta.servlet.Filter

안녕하세요.이렇게 에러 관련된 포스팅을 쓰다가 너무 많아 질까 걱정이네요.거의 개인 노트가 되어가고 있습니다.프로젝트 환경을 java 21로 업데이트를 해야합니다.그러다 보니 이클립스 버전을 바꾸게 되고, 톰캣 버전을 바꾸게 되고, 그다음 스프링 버전까지 올려야 하는 상황입니다.그러다 발생한 오류를 적어봅니다.❗ CharacterEncodingFilter cannot be cast to class jakarta.servlet.Filter 오류 해결 가이드📌 오류 메시지springframework.web.filter.CharacterEncodingFilter cannot be cast to class jakarta.servlet.Filter이 오류는 javax.servlet.Filter와 jakarta...

개발/java,spring 2025.07.20

dynamic web module facet version 5.0 was not found

기존에 쓰던 프로젝트의 자바와 스프링 버전을 올리려고 하는데뭐.. 잡다한 에러들이 굉장히 많이 나오네요.결론적으로 이클립스에서 설정만 바꾸면 에러가 없어지는줄 알았습니다.그러나..톰캣 버전까지 맞지않아 엄청 고생하고 있습니다.(에러 하나 잡으면.. 또다른 에러가 ㅠㅠ)프로젝트를 진행하며 이런 이슈사항들을 기재해 둡니다.(제가 참고할 용도로 적어두는거에요.)✅ jakarta.servlet.http.HttpServlet 오류 및 Dynamic Web Module 5.0 설정 가이드📌 1. 오류 메시지 개요jakarta.servlet.http:HttpServletdynamic web module facet version 5.0 was not found이 오류는 Jakarta Servlet 5.0 기반 프로젝..

개발/java,spring 2025.07.17

[자바 에러] java.lang.NoSuchMethodError, ByteBuffer.limit(I)Ljava

이상하다.. 평소 쓰던 소스였는데...에러가 난다. 아마 협업으로 쓰고 있기 때문에 에러가 발생할 수 있다는 생각은 들지만... 이상하다에러를 알아 보았다.📌 에러 메시지심각: Servlet.service() for servlet [dispatcher] in context with path [/smart] threw exception [Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer;] with root cause java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/..

개발/java,spring 2025.07.07

[Java 컴파일 경고] 세부사항을 보려면 -Xlint:unchecked

안녕하세요. 혹시 이런 문구보신적 있으신가요?✅ 경고 메시지선택하지 않거나 안정하지 않은 오퍼레이션을 사용합니다.참고 : 세부사항을 보려면 -Xlint:unchecked를 사용하여 다시 컴파일하십시오.빌드를 했는데 이렇게 나타나서 제대로 빌드가 된건가 걱정되더라고요.🔍 의미Java 컴파일러가 형 안정성이 보장되지 않는 코드를 감지했을 때 나타나는 경고입니다.주로 제네릭(Generic)을 사용할 때 타입 정보를 명시하지 않은 경우 발생합니다.예시List list = new ArrayList(); // 제네릭 타입이 명시되지 않아 경고 발생list.add("Hello");🛠 해결 방법경고가 발생한 위치를 확인하려면 다음 명령어로 컴파일합니다:javac -Xlint:unchecked YourFile.ja..

개발/java,spring 2025.07.03