본문 바로가기

전체 글

(131)
[Spring] 인프런 8차 Event IoC컨테이너의 ApplicationEvent 스프링 4.2부터는 상속받지 않아도 쓸 수 있다. 사용방법 그 이전에는 ApplicationEvent라는 인터페이스를 상속받아야 사용 가능하다. 하지만 4.2부터는 상속받지 않아도 된다. MyEvent라는 클래스를 만든다. 그리고 이 이벤트를 핸들러 할 MyEventHandelr를 만든다. 이 MyEventHandler는 빈에는 등록을 해줘야 한다. @Component로 빈에 등록해 주고, 이벤트 함수는 @EventListener을 선언해준다. 그리고 이걸 테스트하기 위해 AppRunner라는 클래스가 ApplicationRunner를 상속해서 @Autowired ApplicationEventPublisher publishEvent;를 선언한 후, publi..
[Spring] 인프런 3차 강의 @Autowired로 의존성 주입을 했지만, 주입할 수 있는 대상이 여러개가 있을 때? 가정 Service와 Repository가 있다고 가정하자. Repository에 빈 등록을 하지 않고, Service에서 Autowired를 통해 bookRepository에 의존성 주입을 시도했다고 하자. 위와 같은 상황은 에러가 발생한다. @Autowired를 사용하지 않았다면 오류가 없었겠지만, 의존성 주입을 하려는데 빈에 등록이 되어있지 않으니 오류가 발생하는 것이다. 만약 위와 같은 상황을 조금 변경하고 싶다면, @Autowired(required = false)를 한다면 의존성을 옵셔널로 설정해 꼭 필요하지 않다는 것을 설정한다. 구현체가 두개가 있고, BookRepository bookRepository..
[Spring] 인프런 2차 강의 스프링 IoC는 Bean설정 파일이 있어야 한다. Bean파일을 읽어 IoC에서 객체들을 관리했었기 때문이다. 맨 처음 Spring에서는 이러한 Bean을 만들어서 일일이 등록했어야 했다. (하지만 이렇게 해서라도 IoC/DI를 사용하는 것이 굉장히 효율적이 였던 것 같다.) xml을 자바 파일로 만들었었다. -> 의존성 주입을 직접하지 않고, @Autowired로 했다. -> 자바에 등록된 빈도 없앴다.(ComponentScan~을 활용해 빈 등록도 알아서 해준다.) 현재는 스프링 2.5부터 가능한 scan을 활용한다. bean에 context:component-scan~ 을 선언해주면 어노테이션들을 스캐닝해서 등록해준다. 그런데 이 방법 말고 Bean설정 파일을 xml말고 자바로 만들 수 없을까 해서..
IoC 컨테이너란? IoC (Inversion of Control, 제어의 역전)는 무엇일까? 이름에서 알려주는 뉘양스를 최대한 사용하여 표현해보겠다. IoC 제어의 역전이란, 개발자가 갖고 있던 제어권을 놓는다는 의미와 비슷하다. 우리는 Servlet과 같은 방식을 활용하여 코드를 짠다. 그 속에서는 객체를 생성하고 활용하는 등의 행위가 포함되어 있다. 코드를 짤 때는 그런 행위의 제어권이 개발자에게 있지만, 그 코드를 실행하거나 배포를 한 이후의 상황에서는 개발자에게 제어권한이 없다. 이러한 상황에서 제어권을 컨테이너가 갖게 된다. 컨테이너는 객체의 생성, 관리 등을 하게 되며 IoC가 발생하게 되는 것이다. IoC/DI란? 위의 설명을 잘 이해했다면, IoC와 DI가 같이 쓰이는 이유도 대충 감이 올 것이다. 컨테이너..
[JAVA] JVM이란? JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 JVM이란 무엇인가 JVM(java virtual machinie)은 자바 가상 머신이다. JVM은 프로그램과 운영체제 사이에 위치하여 자바 언어의 프로그램이 운영체제에서 실행될 수 있도록 존재하는 가상 머신이다. JVM은 자바의 대표적 특징 중 하나라고 할 만큼 비중이 큰 프로그램이다. 자바의 대표적 장점을 꼽으라고 하면 이식성이 뛰어나다는 점인데 바로 이것에서 비롯되는 말이다. 다른 언어와 달리 해당 플랫폼(OS)에 맞는 JVM만 설치한다면 해당 소스 코드를 수정하지 않아도 호환되기 떄문이다. 컴파일 하는 방법 c언어 같은 경우, 컴파일 후 해..
의존성 2 in Spring 스프링에서의 의존성 주입 지난 글에서 보았듯이 Spring에서는 Bean을 활용하여 의존성을 주입했다. 예를 다시 한번 되짚어 보자. xml에서 bean태그에 KoreaTire, AmericaTire클래스 이름과 id로 명시를 하였었다. 그 후 public class Driver{ ApplicationContext context = new FileSystemXmlApplicationContext("xml경로"); Car car = new Car(); Tire tire = (Tire) context.getBean("tire"); car.setTire(tire); } 이런 식으로 의존성을 주입했었다. 여기서 xml의 id = Car에 property를 설정하여 코드로 기본 tire의 값을 초기화 해줄 수 있..
의존성이란 의존성이란 자바에서 의존성이란 new 생성자와 같은 것이다. 예를 들어, Car 클래스 내에서 new Tire();를 한다면 Car가 Tire에 의존한다고 한다. 이러한 구조는 큰 단점을 가지고 있다. 바로 의존하는 대상이 수정되었을 경우 의존하고 있는 클래스 또한 필연적으로 수정해야 한다. 만약 의존하고 있는 클래스가 100개라면?? 상상하기도 싫은 일이 발생한다. 이를 해결하기 위해 의존성 주입이 탄생하게 되었다. 예시 interface Tire{ String getBrand(); } public class KoreaTire impliments Tire{ public String getBrand(){ return "한국 타이어" } } public class AmericaTire implements ..
프로세스 간 통신 프로세스간 통신의 종류 프로세스 내부 데이터 통신: 하나의 프로세스 내에 2개 이상의 스레드가 공유 자원을 통해 데이터를 주고 받는 것이다. 프로세스 간 데이터 통신: 같은 컴퓨터에 있는 프로세스들 간에 데이터 통신을 의미한다. 공유 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다. 네트워크를 이용한 데이터 통신: 여러 컴퓨터가 네트워크로 연결되어 데이터를 주고 받는 것을 의미한다. 이 경우에는 소켓을 이용하여 데이터를 주고 받는다. 통신의 종류 여기서 더 자세히 알아볼 것은 단방향 통신의 통신법이다. 전역 변수를 통한 통신은 단방향 통신이다. 이를 양방향 통신으로 구현하려면 전역변수를 2개 사용해야한다. 전역 변수를 사용한 통신의 가장 큰 문제는 프로세스끼리 데이터를 주고 받을 때, 언제 데이..