Spring에서 ApplicationContext는 Spring 컨테이너를 의미하여, Spring Bean을 관리하는 핵심 인터페이스입니다.즉, Spring에서 객체(Bean)의 생성, 초기화, 의존성 주입(DI), 생명주기 관리 등을 담당합니다. 1. ApplicaionContext 의 역할 Spring 애플리케이션에서 중앙 컨테이너 역할을 하며 다음 기능을 제공합니다.Bean 등록 및 관리- @Component, @Service, @Repository, @Controller, @Bean 등을 사용하여 Spring Bean을 관리- 싱글톤(Singleton) 스코프를 기본적으로 유지의존성 주입(DI, Dependency Injection)- @Autowired, @Qualifier, @Inject 등을..
전체 글
항상 정리하며 기록하고 있습니다.개념Self-Invocation은 객체가 자기 자신의 메서드를 호출하는 것을 의미합니다. 즉, 클래스 내부에서 자기 자신의 다른 메서드를 호출하는 경우입니다. 하지만, Spring AOP에서 Self-Invocation은 AOP가 적용되지 않는 문제를 일으킬 수 있습니다. 1. Self-Invocation 예제@Servicepublic class MyService { public void methodA() { System.out.println("Method A 실행"); methodB(); // Self-Invocation (자기 자신 호출) } public void methodB() { System.out.println("Method B 실행"..
개념프록시는 '대리인'이라는 뜻을 가지며, 소프트웨어에서 클라이언트와 대상 객체 사이에서 중간 역할을 수행하는 객체를 의미합니다.용도 보안(Security): 직접 접근을 막고 제어할 수 있음.성능 향상(Caching, Lazy Loading): 객체 생성을 지연시키거나 캐시를 활용함.로깅(Logging) 및 모니터링(Monitoring): 메서드 호출 전후로 로깅을 추가할 수 있음.트랜잭션(Transaction) 관리: 데이터베이스 트랜잭션을 프록시 객체에서 처리할 수 있음.AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)와 프록시 기반 동작 방식Spring AOP는 프록시(Proxy) 기반으로 동작하며, 주로 Spring의 @Transactional, @Aspect, ..
오늘은 회사에서 개발기 레디스 오류가 발생한 상황에 대해서 정리해볼까합니다 :) 레디스 용량이 다 차서 MISCONF 오류가 발생하였는데, 레디스 용량이 다 찼던 상황은 처음이라 웃겼어요 ㅋㅋ MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.개념Redis에서 발생하는 MISCONF 오류는 Redis가 RDB(snapshot) 파일을 디스크에 저장해야 하지만, 현재 저장할 수 없는 상태일 때 발생하는..
우선순위 큐(Priority Queue)?큐에서 각 원소가 우선순위(priority)를 가지며, 높은 우선순위를 가진 원소가 먼저 처리되는 자료구조입니다. 일반 큐에서는 원소가 들어온 순서대로 처리되지만, 우선순위 큐에서는 우선순위가 높은 원소가 먼저 나옵니다. 우선순위 큐는 내부적으로 힙(Heap)구조를 사용하여 구현되는 경우가 많습니다. 이때 우선순위 큐는 최대 힙(Max Heap)또는 최소 힙(Min Heap)을 사용할 수 있습니다. 최대 힙: 가장 높은 우선순위를 가진 원소가 가장 먼저 나오도록 합니다. 최소 힙: 가장 낮은 우선순위를 가진 원소가 가장 먼저 나오도록 합니다.기본적인 우선순위 큐 사용(최소 힙)import java.util.PriorityQueue;public class Prio..
자바의 컴파일 과정 1. 소스코드 작성개발자는 Java언어로 작성된 소스파일(.java)을 생성합니다. 이 파일은 사람이 읽을 수 있는 형태의 고급 언어로 작성된 코드입니다. 2. 컴파일 단계 javac 명령어(Java Compiler)를 사용하여 소스 파일(.java)을 컴파일하면, JVM(Java Virtual Machine)이 이해할 수 있는 바이트코드 형태의 파일(.class)이 생성됩니다. * 이 바이트코드는 플랫폼에 독립적이며, JVM에서 실행될 준비가 된 중간 형태의 코드입니다. 3. 클래스 로딩(Class Loading)JVM의 Class Loader가 생성된 .class 파일을 JVM 메모리로 로드합니다. * 로드된 클래스는 실행에 필요한 메서드와 변수 등의 메타데이터를 포함하고 ..
문제 상황Spring과 MyBatis를 사용해 애플리케이션 개발 중,Java의 Map 객체를 PostgreSQL 데이터베이스에 저장하려고 하면 다음과 같은 에러를 만날 수 있습니다:org.postgresql.util.PSQLException: No hstore extension installed. 이 에러는 PostgreSQL에서 hstore 확장이 설치되지 않았거나,Map 객체를 저장할 적절한 방식으로 변환하지 않았기 때문에 발생합니다. responseBody = Map.of( "status", "error", "error_code", e instanceof HttpClientErrorException ? ((HttpClientErrorException) e).getStatusCode().v..
1000만 건의 데이터 크롤링을 할 때, 사용한 자바의 멀티스레드 방식입니다:) 처음에 사이트도 느리고, 데이터의 총량도 가늠할 수 없었던 작업이었는데, 크롤링하다 보니, 사이트에 자꾸 요청을 보내서 서버 다운되기도 했고,그래서 사이트 운영자가 서버 업그레이드도 해주고.. 생각해보니, 정말 재밌던 작업이었어요 :) 이번 글은 이 작업에서 사용한 Java의 멀티스레드 방식을 정리해보려 합니다. ExecutorService와 Future는 Java에서 병렬 작업을 효율적으로 관리하기 위한 도구입니다. 이 글에서는 Future.get()을 활용하여 작업의 결과를 처리하고 동기화하는 방법을 예제와 함께 설명하겠습니다. ExecutorService스레드 풀을 생성하고 관리하는 Java의 인터페이스입니다.비동기..