목록STUDY (106)
공부해봅시당

0. 자바의 Class 클래스 (java.lang.Class) 자바 프로그래밍을 할때 우리는 보통 변수나 클래스를 직접 선언하고 만들어 사용해 왔다. 그런데 어떤 경우에는 애플리케이션 실행 중에서 클래스를 동적으로 불러와 다루어야 할 경우가 생긴다. 즉, 코드를 실행하기 전 컴파일 단에서 개발자가 직접 폴더를 뒤져가며 클래스 정의문을 찾아 클래스 정보를 얻는 것이 아닌, 코드 상에서 호출 로직을 통해 클래스 정보를 얻어와 다룸으로써 런타임 단에서 다이나믹하게 클래스를 핸들링 하는 것이다. 이때 사용되는 것이 바로 Class 클래스 객체이다. Class 클래스는 java.lang.Class 패키지에 별도로 존재하는 독립형 클래스로서, 자신이 속한 클래스의 모든 멤버 정보를 담고 있기 때문에 런타임 환경에서..

이 글에서는 상호배제를 통한 동기화를 알아볼 것이다. 1. 동기화란? 동기화는 프로세스(스레드)가 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하는 것인데, 쉽게 말해 프로세스 간 데이터가 일치하도록 하는 것이다. 2. 상호배제란? - 동기화 매커니즘 2-1. 의미 이러한 동기화 매커니즘인 상호배제는 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구하는 것이다. 쉽게 말해 하나의 프로세스가 공유자원을 사용할 때 다른 프로세스가 동일한 공유자원에 접근할 수 없도록 통제하는 것을 뜻한다. 2-2. 상호배제 방법 Mutex, Semaphore 방식이 사용된다. Java 에서는 Monitor 라는 도구를 통해 객체에 Lock 을 걸어 상호배제를 할 수 있다. Monitor 를 사용하면 어떤 ..

1. Garbage Collection(가비지 컬렌션)이란? 1-1. Garbage Collection(가비지 컬렉션)이란? 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가비지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 한다. 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문이다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다. 예를 들어 아래와 같은 코드가 있다고 가정하자. Person person = new Person(); person.setName("M..

AOP의 개념에 대해 쉽게 이해하고 싶은 사람은 링크를 참조하길 바람 목차 1. AOP(Aspect Oriented Programming)란? 2. AOP와 프록시 패턴 3. 프록시 패턴의 단점 해결: 다이내믹 프록시 4. 다이내믹 프록시 단점 해결: 프록시 펙토리(Proxy Factory) 5. 아직도 귀찮다. 더 자동화해보자: 자동 프록시 생성기(Automatic Proxy Creator) 1. AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)란? 전통적인 객체지향 기술의 설계 방법(추상화와 메서드 추출 등)으로는 독립적인 모듈화가 불가능한 부가기능을 모듈화 하기 위해 Aspect(관점)라는 개념을 도입함 1-1. Aspect를 통한 부가기능 분리 아래의 그림을 살펴보..

1. 프록시(Proxy)란? 용어 프록시(Proxy) 정의 대리자 라는 뜻으로, 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 역할 특징 - 실제 대상인 것처럼 위장함으로서 이를 사용하는 클라이언트는 구체 클래스를 알 필요가 없어짐 - 클라이언트의 요청을 받아서 원래 요청 대상에게 바로 넘겨주는 게 아닌, 다양한 부가기능을 지원할 수 있음 타깃 여기서 원래 요청하려는 대상, 즉 최종적으로 요청을 위임받아 처리하는 실제 오브젝트 프록시의 조건 클라이언트의 요청을 대리로 수행해주는 모든 객체가 프록시 인것은 아님 객체가 프록시가 되려면 클라이언트는 요청을 보낸 대상이 타깃인지 프록시인지 구분을 할 수 없어야 함 즉, 타깃과 프록시는 같은 인터페이스를 확장해야 함 (CG..

목차 1. 스프링 빈(Spring Bean)이란? 2. Spring Bean을 Spring IoC Container에 등록하는 방법 - 2가지 3. 스프링 빈 스코프 4. 스프링 빈 생명주기 1. 스프링 빈(Spring Bean)이란? Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부름 제어의 역전 (IOC, Inversion Of Control)의 특징은 아래와 같음 일반적으로 처음에 배우는 자바 프로그램(IoC가 적용되지 않은 경우) 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했음 즉, 모든 작업을 사용자가 제어하는 구조 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 ..

필터(Filter) [ 필터(Filter)란? ] J2EE 표준 스펙 기능 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 되는 것 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너(서블릿 컨테이너)에 의해 관리가 되는 것이고(스프링 빈으로 등록은 됨), 디스패처 서블릿 전/후에 처리하는 것 이러한 과정을 그림으로 표현하면 다음과 같음 [ 필터(Filter)의 메소드 ] 필터를 추가하기 위해서는 javax.servlet의 Filter 인터페이스를 구현(implements)해야 하며 이는 다음..
@SpringBootTest와 @DataJpaTest @SpringBootTest와 @DataJpaTest는 스프링 부트(Spring Boot) 테스트를 위한 어노테이션 기준 @SpringBootTest @DataJpaTest 정의 스프링 부트 애플리케이션의 통합 테스트를 위한 어노테이션 전체 스프링 컨텍스트를 로드함 JPA 컴포넌트에 집중된 테스트를 위한 어노테이션 JPA 관련 설정만 로드하여 빠른 실행을 도움 공통점 스프링 테스트 컨텍스트 프레임워크를 사용하여 스프링 기반 테스트 지원 차이점 - 전체 스프링 애플리케이션 컨텍스트 로드 - 더 무거운 테스트 실행 - 오직 JPA 관련 구성요소만 로드 - 데이터베이스와 관련된 설정, DAOs, JPA repositories 등에 초점 장점 - 실제 애플리..