[Java] ReentrantLock 공식문서 파헤쳐보기
·
Dev Lang/JAVA
ReentrantLock공식문서를 보고 학습한 내용을 아카이브해보았습니다.공식문서 링크: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html#isHeldByCurrentThread-- ReentrantLock (Java Platform SE 8 )Acquires the lock only if it is not held by another thread at the time of invocation. Acquires the lock if it is not held by another thread and returns immediately with the value true, setting the lock..
[Spring] 트랜잭션 예외에 따른 커밋(Commit)과 롤백(Rollback)
·
Dev Framework/Spring
예외와 트랜잭션 커밋, 롤백트랜잭션에서 예외가 발생하면 항상 롤백될까요?우리는 흔히 try-catch 블록 안에서 데이터베이스 작업을 수행하고, 예외가 발생하면 롤백되겠지… 하고 생각합니다. 하지만 Spring에서는 반드시 그렇지 않습니다. 체크 예외는 롤백되지 않는다?Spring의 트랜잭션 처리 기본 정책은 다음과 같습니다:Unchecked 예외 (RuntimeException, Error 등) → 자동 롤백Checked 예외 (Exception 상속, RuntimeException 제외) → 자동 롤백 X즉, 개발자가 명시적으로 롤백을 선언하지 않으면, SQLException 같은 예외가 발생해도 트랜잭션이 커밋될 수 있습니다.@Transactionalpublic void saveData() thro..
[Spring] MessageConverter
·
Dev Framework/Spring
HTTP 메시지 컨버터란?HTTP 메시지 컨버터는 뷰 템플릿 없이, JSON 같은 데이터를 HTTP 바디에 직접 읽고 쓰고자 할 때 사용하는 도구입니다. 언제 사용되나요?@RequestBody, @ResponseBodyHttpEntity, RequestEntity, ResponseEntity등을 사용할 때 스프링 MVC가 자동으로 메시지 컨버터를 적용합니다. @ResponseBody 사용 원리 @ResponseBody 를 사용할 경우HTTP의 BODY에 문자 내용을 직접 반환viewResolver 대신에 HttpMessageConverter가 동작기본 문자처리: StringHttpMessageConverter기본 객체처리: MappingJackson2HttpMessageConverterbyte 처리 등등..
[트러블 슈팅] 예외 전역 처리기 구현 및 응답, 예외 책임 분리
·
WEB/트러블슈팅
코드 리팩토링을 하기 전 문제 상황Ice Advice 프로젝트는 제가 처음으로 백엔드 개발자로 협업을 하게 된 프로젝트입니다.이 프로젝트는 코딩존이라는 멘토링 예약 시스템을 예약 및 출석 관리해주는 시스템입니다.이 출석 횟수는 실제 과목 성적에 영향을 주기에 시스템 운영에 따라 학교 성적 처리에 영향을 줄 수 있을만큼 중요한 작업이었습니다. 아무것도 모르던 백엔드 개발자로서 좋은 사람들을 만나서 개발을 시작할 수 있었습니다.그때는 유튜브와 같은 영상을 통해서 학습하고 개발하던게 기억에 남습니다. 이후 시간이 흘러 다시 이 프로젝트를 개선하는 작업을 맡게되었습니다. 이해를 돕기 위해 아래 코드를 보고 개선점을 도출해보도록 하겠습니다. 컨트롤러@RestController@RequestMapping("/**/..
[Java] 프록시 패턴을 통한 멀티 스레드 환경 조성하기
·
Dev Lang/JAVA
멀티스레드에서의 동시성멀티스레드 환경에서의 컬렉션 프레임워크들은 공유변수에 대한 값을 보장할 수 있을까?수 많은 스레드의 접근에도 유효한 값을 보장하는지에 대한 궁금증을 해결하기 위해 아래의 예시를 준비했습니다. 단순 컬렉션 구현 코드package thread.collection.simple.list;import static util.ThreadUtils.*;import java.util.Arrays;public class BasicList implements SimpleList { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; public BasicList() { elem..
[Spring] @Configuration과 CGLIB 프록시 마법
·
Dev Framework/Spring
@Configuration@Configuration은 단순히 설정 클래스를 나타내는 게 아니라, Spring이 내부에서 CGLIB 프록시를 적용할 수 있도록 의도적으로 명시하는 어노테이션입니다. 이 덕분에 Spring은 Java 코드로도 안전하게 싱글톤 빈을 구성할 수 있습니다. 읽기 전에 알아두면 좋은 점Spring은 기본적으로 모든 빈을 싱글톤으로 관리합니다.이를 통해 메모리 낭비를 줄이고, 같은 객체를 재사용함으로써 성능과 일관성을 확보할 수 있습니다.@Bean 메서드는 Spring 컨테이너에 객체를 등록하는 방법이지만, @Bean만으로는 메서드 간 호출 시 싱글톤 보장이 어렵습니다.@Configuration은 메서드 단위가 아니라 클래스 단위로 적용됩니다.@Configuration을 클래스에 붙여..
[Spring] HttpServlet 완벽 정리
·
Dev Framework/Spring
📘 HttpServlet 정리 - 요청/응답 방식과 한계웹 개발에서 HttpServlet은 클라이언트 요청을 처리하고, 적절한 응답을 돌려주는 기본적인 서블릿 기반 기술입니다. 이 문서에서는 요청 처리 방식(GET, POST, JSON)과 응답 방식(HTML, TEXT, JSON), 그리고 서블릿 방식의 한계점까지 정리합니다.  📥 요청 데이터 처리HTTP 요청 메시지를 개발자가 직접 파싱할 수도 있지만, 매우 불편하고 오류가 발생하기 쉽습니다. Servlet은 이를 대신 처리하여 HttpServletRequest 객체에 파싱된 정보를 담아 제공합니다. 1. 쿼리 파라미터 (GET 요청에서만 사용 가능)GET 방식에서는 URL에 ?key=value 형태로 데이터를 전송하며, HttpServletReq..
[Redis][실전레디스] 레디스 트랜잭션 MULTI-EXEC & Lua 스크립트
·
DB/Redis
Redis의 트랜잭션과 원자적 처리 방식Redis는 기본적으로 단일 스레드 기반으로 동작하며, 이를 활용한 단순한 트랜잭션 기능과 고급 제어를 위한 Lua 스크립트 기능을 제공합니다. 이 글에서는 Redis의 트랜잭션 개념과 그 한계, 그리고 Lua 스크립트를 통한 원자적 처리 방식에 대해 설명합니다. 1. Redis 트랜잭션 (MULTI / EXEC)Redis의 트랜잭션은 RDBMS의 ACID 트랜잭션과는 다르게, 명령어를 일괄적으로 순차 실행하는 방식입니다. 사용 예시MULTISET key1 "value1"SET key2 "value2"EXECMULTI로 트랜잭션을 시작하고,여러 명령을 큐에 쌓은 뒤,EXEC 명령을 통해 한 번에 실행합니다. 특징트랜잭션 내부의 명령어는 순차적으로 실행되며, 실행 중..
개발자 성현
개발새발 블로그