[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 명령을 통해 한 번에 실행합니다. 특징트랜잭션 내부의 명령어는 순차적으로 실행되며, 실행 중..
[백준][Python] 1850번 LCM
·
백준/구현
https://www.acmicpc.net/problem/5347 코드def gcd(n, m): while m > 0: n, m = m, n % m return nt = int(input())for _ in range(t): n, m = map(int, input().split()) print(n * m // gcd(n, m)) 풀이유클리드 호제법을 다시 복습하였는데 오랜만에 하느라 익숙하지가않았다. 그동안 너무 개발만해서 그런가 싶기도하고 반복문으로 구현된 유클리드 호제법 def gcd(n, m): while m > 0: n, m = m, n % m return n 재귀문으로 구현된 유클리드 호제법 def gcd(n, m): if m == 0: return n ..
[Redis][실전레디스] 레디스 운용관리 - 스냅샷 심화
·
DB/Redis
Redis 스냅샷(RDB: Redis Database File)RDB는 Redis의 데이터를 특정 시점에 복제해 디스크에 저장하는 방식입니다. 이 저장본을 **스냅샷(Snapshot)**이라고 하며, .rdb 파일로 저장됩니다. Redis 서버가 재시작되면 해당 파일을 불러와 데이터를 복원합니다. RDB 저장 트리거 (자동 + 수동)1. 자동 저장설정 파일(redis.conf)에서 save 옵션으로 조건 정의조건 중 하나라도 만족하면 RDB 스냅샷 생성save 900 1 # 15분(900초) 동안 1개 이상의 키 변경 발생 시 저장save 300 10 # 5분 동안 10개 이상save 60 10000 # 1분 동안 1만 개 이상 2. 수동 저장명령어 사용SAVE: 동기식 저장 (Redis가 멈추고 저장 ..
[Redis][실전레디스] 레디스 운용관리 - 스냅샷 & AOF
·
DB/Redis
Redis 데이터 영속성(Persistence)에 대한 이해와 운영관리 관점의 접근Redis는 대표적인 인메모리 데이터 저장소로, 빠른 응답성과 높은 처리량을 강점으로 갖고 있습니다. 하지만 그 특성상 서버가 종료되거나 장애가 발생하면 메모리에 존재하던 데이터가 모두 유실될 수 있다는 단점도 내포하고 있습니다. 이를 보완하기 위해 Redis는 데이터 영속성(Persistence) 기능을 제공하며, 이는 운영관리 측면에서 서비스의 안정성과 신뢰성을 확보하는 데 매우 중요한 요소입니다.Redis는 두 가지 방식의 영속성 메커니즘을 지원합니다. 각각의 방식은 장단점이 뚜렷하므로, 서비스 특성과 운영 전략에 따라 적절히 선택하거나 병행하여 사용하는 것이 중요합니다. 데이터 영속성 관리1. RDB 스냅샷 (Red..
[Spring] 스프링 AOP - 1
·
Dev Framework/Spring
스프링 AOP(Aspect Oriented Programing)스프링의 핵심 철학 '비침투성'스프링은 EJB 같은 무거운 프레임워크가 주류이던 시절에 등장했습니다. 여기서 말하는 EJB는 Spring 이전에 주로 사용되던 자바 엔터프라이즈 애플리케이션 프레임워크입니다.그때의 프레임워크들은 다음과 같은 문제가 있었습니다.도메인 로직이 프레임워크 코드와 강하게 결합비즈니스 로직을 작성하려 해도, 상속 구조나 라이프사이클에 제약을 받아야 했음테스트하려면 컨테이너를 띄워야만 가능스프링 창시자인 Rod Johnson은 이 문제를 해결하고자 스프링을 설계하면서 이런 철학을 전면에 내세웠습니다."J2EE should not invade your domain model. Your domain model should b..
[JPA] JPA 영속성 컨텍스트 with 프록시 - 2
·
Dev Framework/Spring
프록시프록시란?JPA에서 말하는 **프록시(Proxy)**는 실제 엔티티 객체를 감싸고 있는 가짜 객체(대리 객체)입니다.이 프록시는 실제 객체처럼 행동하지만, 내부적으로는 실제 객체를 참조하지 않은 상태로 존재합니다.실제 객체가 필요한 순간(=속성 접근)까지는 DB에 접근하지 않고 대기하다가,속성이 호출되는 시점에 DB에서 데이터를 조회해서 영속성 컨텍스트에 등록하고, 실제 객체처럼 행동합니다.Member member = entityManager.getReference(Member.class, 1L);System.out.println(member.getClass());// class com.example.Member$HibernateProxy$...System.out.println(member.getN..
개발자 성현
개발새발 블로그