본문 바로가기
반응형

전체 글517

@ControllerAdvice @ControllerAdvice는 모든 컨트롤러에 대해 전역 기능을 제공하는 애너테이션입니다. @ControllerAdvice가 선언된 클래스에 @ExceptionHandler, @InitBinder, @ModelAttribute를 등록하면 예외 처리, 바인딩 등을 한 곳에서 처리할 수 있어, 코드의 중복을 줄이고 유지보수성을 높일 수 있습니다. @ControllerAdvice는 내부에 @Component가 포함되어 있어 컴포넌트 스캔 과정에서 빈으로 등록됩니다. @RestControllerAdvice는 내부에 @ResponseBody를 포함하여 @ExceptionHandler와 함께 사용될 때 예외 응답을 Json 형태로 내려준다는 특징이 있습니다. 2025. 9. 3.
얕은 복사와 깊은 복사 자바에서 객체를 복사할 때 얕은 복사와 깊은 복사라는 두 가지 방식이 있습니다. 먼저 Book과 Author라는 두 클래스를 사용해서 예제를 살펴볼게요. Book은 책의 이름(name)과 저자(author) 정보를 가지고 있고, Author는 저자의 이름을 가지고 있습니다.class Book { private String name; // 책 이름 private Author author; // 저자 public Book(String name, Author author) { this.name = name; this.author = author; } public Book shallowCopy() { // 얕은 복사 return new Book(t.. 2025. 9. 2.
트랜잭션 격리 수준 트랜잭션의 격리 수준은 동시에 여러 트랜잭션이 실행될 때 한 트랜잭션이 다른 트랜잭션의 연산에 영향을 받지 않도록 하는 정도를 말합니다.낮은 격리 수준은 동시 처리 능력을 높이지만, 데이터의 일관성 문제를 발생시킬 수 있습니다.반면, 높은 격리 수준은 데이터의 일관성을 보장하지만, 동시 처리 능력이 떨어질 수 있습니다. 즉, 데이터 정합성과 성능은 반비례합니다. 트랜잭션 격리 수준은 개발자가 트랜잭션 격리 수준을 설정할 수 있는 기능을 제공하는 기능입니다.종류 및 특징트랜잭션 격리 수준은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ가 존재합니다.READ UNCOMMITTED는 커밋이 되지 않은 트랜잭션의 데이터 변경 내용 을 다른 트랜잭션이 조회하는 것을 허용.. 2025. 8. 28.
@ExceptionHandler 어노테이션 정의@ExceptionHandler 애너테이션은 Spring MVC에서 컨트롤러(@Controller)나 전역 예외 처리를 위한 @ControllerAdvice 클래스의 메서드에서 발생하는 예외를 처리하는 데 사용됩니다. 이 애너테이션은 특정 예외를 처리하는 메서드를 지정하거나 메서드의 파라미터로 처리할 예외를 설정할 수 있습니다.동작 방식Spring MVC 애플리케이션에서 예외가 발생하면, DispatcherServlet이 적절한 HandlerExceptionResolver를 찾아 예외를 처리합니다. Spring에 기본적으로 등록된 HandlerExceptionResolver는 세 가지가 있으며, 각 리졸버는 우선순위에 따라 예외를 처리합니다. 그 중 ExceptionHandlerExceptionRes.. 2025. 8. 26.
논리 삭제와 물리 삭제의 차이점 데이터베이스에서 데이터를 삭제하는 방법은 크게 물리 삭제(Hard Delete) 와 논리 삭제(Soft Delete) 가 존재합니다. 물리 삭제는 DELETE 명령어를 통해 직접 데이터를 삭제하는 방식이며, 논리 삭제는 UPDATE 명령을 사용하여 삭제를 여부를 나타내는 컬럼을 수정하는 방식을 의미합니다. 즉, 물리 삭제는 실제로 데이터를 삭제하는 반면 논리 삭제는 데이터가 삭제되었음을 표시만 한다는 점에서 차이가 있습니다.# 물리 삭제 처리delete from member where id = 1;# 논리 삭제 처리와 조회update member set deleted_at = curdate() where id = 1;select * from member where deleted_at is null;어떤 .. 2025. 8. 25.
트랜잭션 롤백 원인 예외 예외 종류에 따른 트랜잭션 롤백은 개발 환경에 따라 다르게 동작합니다.Spring 트랜잭션 예외 처리 동작Checked Exception 기본적으로 Checked Exception이 발생하더라도 트랜잭션을 롤백하지 않습니다. Checked Exception은 컴파일 시점에 예외 처리를 강제하는 예외로, 개발자가 예외 발생 가능성을 예상하고 이를 적절히 처리할 수 있는 정상적인 예외 상황이라고 가정하기 때문입니다.Unchecked Exception(RuntimeException, Error) Spring은 기본적으로 Unchecked Exception 또는 Error가 발생하면 트랜잭션을 롤백합니다. 이는 Unchecked Exception이 보통 프로그래머의 실수나 시스템적인 문제로 인한 회복하기 어려운.. 2025. 8. 22.
스레드 풀 포화 정책 자바의 ThreadPoolExecutor를 기준으로 설명해 드리겠습니다. 스레드 풀 포화 정책(Saturation Policies) 이란 말 그대로 스레드 풀이 포화 상태인 경우의 행동을 결정하는 정책을 의미합니다. ThreadPoolExecutor 설정에는 상시 유지하는 스레드의 수인 corePoolSize, 작업 대기열 크기인 workQueueSize, 스레드를 추가할 수 있는 최대 수인 maxPoolSize가 존재하는데요. 스레드가 maxPoolSize까지 늘어나고 대기열까지 꽉 찬 상태를 포화 상태라고 합니다. 이때 새로운 작업 요청이 들어오면, RejectedExecutionHandler의 구현체인 포화 정책이 실행됩니다.종류포화 정책 종류는 RejectedExecutionHandler의 구현체.. 2025. 8. 21.
ThreadLocal ThreadLocal은 Java에서 각 스레드마다 독립적인 변수를 저장할 수 있도록 도와주는 클래스입니다. 보통 여러 스레드가 공유 자원을 사용하면 동시성 문제가 발생할 수 있는데, ThreadLocal을 사용하면 스레드별로 데이터를 분리할 수 있어 동기화 없이 안전하게 활용할 수 있습니다. 각 스레드는 자신만의 ThreadLocalMap을 가지고 있고 ThreadLocal을 키로 사용하여 값을 저장합니다. 즉, 하나의 스레드에서 여러 개의 ThreadLocal을 사용할 수 있으며, ThreadLocal은 현재 스레드의 ThreadLocalMap을 제어하는 역할을 합니다.Spring 생태계에서는 ThreadLocal을 사용하여 트랜잭션 동기화 관리(TransactionSynchronizationManag.. 2025. 8. 20.
Gradle Gradle은 Java, Kotlin, Scala 등 JVM에서 실행되는 언어에서 자주 사용되는 빌드 자동화 도구입니다. 기존의 Ant와 Maven의 단점을 보완하여 증분 빌드, 빌드 캐시, 데몬 프로세스를 활용해 빌드 속도를 최적화하고, 멀티 프로젝트를 쉽게 관리할 수 있도록 설계되었습니다. 또한, 다양한 플러그인과 커스텀 태스크를 사용해 확장성을 높일 수 있으며, Groovy 또는 Kotlin DSL을 사용해 유연한 빌드 스크립트를 작성할 수 있습니다.빌드 자동화 도구 사용 이유컴파일, 테스트, 패키징, 배포와 같은 반복 작업을 자동화하여 개발 생산성을 높일 수 있습니다.일관된 빌드 환경을 제공하여 어떤 환경에서나 동일한 빌드 결과를 보장할 수 있습니다.증분 빌드, 빌드 캐시, 병렬 처리 등을 통해 .. 2025. 8. 19.
728x90
반응형