JVM(Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체 CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행 시켜주는 역할 Class Loader 자바에서 소스를 작성 -> Item.java처럼 .java 파일이 생성 .java 소스코드를 자바 컴파일러가 컴파일 -> Item.class 같은 .class파일(바이트코드)가 생성 생성된 클래스 파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재하는 역할을 Class Loader가 수행 Execution Engine Class Loader에 의해 메모리에 적재되 ..
URI(Uniform Resource Identifier) URI는 로케이터(locator), 이름(name)또는 둘 다 추가로 분류될 수 있다. URL은 우리가 흔히 웹브라우저에서 사용하는 주소 URN은 이름을 부여하는 것인데, 이름만 가지고는 주소를 찾아갈 수 없기에 실제로 사용하기는 힘들다. URI Uniform: 리소스 식별하는 통일된 방식 Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier: 다른 항목과 구분하는데 필요한 정보 URL, URN URL - Locator : 리소스가 있는 위치를 지정한다 URN - Name : 리소스에 이름을 부여한다 위치는 변할 수 있지만, 이름은 변하지 않는다 URN만으로 리소스를 찾을 수 있는 방법이 보편화 되지 않았다 ..
IP(인터넷 프로토콜) 송신/수신 클라이언트에서 정보를 주고받을 때 사용하는 정보 위주의 프로토콜 역할 지정한 IP 주소(IP Address)에 데이터 전달 패킷(Packet)이라는 통신 단위로 데이터 전달 IP 패킷 정보 IP 프로토콜의 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태에도 패킷이 전송된다 비신뢰성 패킷의 순서가 보장되지 않는다 패킷이 중간에 소실될 경우 문제가 생길 수 있다. 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러 개일 경우 구분이 불가능하다. TCP, UDP 인터넷 프로토콜 스택의 4계층 애플리케이션 계층 - HTTP, FTP 전송 계층 - TCP, UDP 인터넷 계층 - IP 네트워크 인터페이스 계층 프로토콜 계층 TCP/IP 패킷 정보 ..
의존 관계 주입 방법(4가지) 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입하는 방법 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다 불변, 필수 의존 관계에 사용된다 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy)..
컴포넌트 스캔 해당 @ComponentScan은 @Component 어노테이션이 붙은 클래스를 스캔해 스프링 빈으로 등록한다. AutoAppConfig @Configuration @ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주면 된다 AutoAppConfig도 설정파일이기에 @Configuration 어노테이션을 붙혀준다. 기존에 작업했던 AppConfig와 충돌이 생길 수 있어 excludeFilter속성으로 해당 클래스는 스캔하지 않도..
싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다 private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다 package hello.core.singleton; public class SingletonService { private static final SingletonService instance = new SingletonService(); private SingletonService() { } public static SingletonService getInstance() { return instance; } public void logic() { System.out...
BeanFactory 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당 getBean() 제공 ApplicationContext BeanFactory 기능을 모두 상속받아서 제공 BeanFactory의 기능에 추가적인 기능을 덧붙혀 제공하는 인터페이스 ApplicationContext가 제공하는 부가기능 MessageSource 메시지 소스를 활용한 국제화 기능 ex) 한국에서 들어오면 한국어, 영어권에서 들어오면 영어로 출력 EnvironmentCapable 로컬, 개발, 운영들을 구분해서 처리 ApplicationEventPublisher 이벤트를 발행하고 구독하는 모델을 편리하게 지원 ResourceLoader 파일 클래스패스, 외부 등에서 리소스를 편리하게 조회하게 지원
스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. ! 심화 : 더 정확히는 스프링 컨테이너는 BeanFactory, ApplicationContext로 구분해서 이야기한다. 하지만, BeanFactory를 직접 사용하는 경우는 거의 없기에 일반적으로 ApplicationContext를 스프링 컨테이너라 한다 스프링 컨테이너..
컨테이너 컨테이너 or IOC컨테이너라고 불린다 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸(객체의 생애 주기)을 관리 객체 생성/관리하며 의존 관계 연결해주는 것 제어의 역전 IOC(Inversion of Control) IoC는 Inversion of Control의 줄임 말로, 제어의 역전이라는 뜻 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것 프로그램의 흐름을 컨테이너가 관리해주는 것 의존관계 주입 DI(Dependency Injection) IoC 프로그래밍 모델을 구현하는 방식 중 하나 각 클래스의 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 주입 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언..
SOLID - 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP : 단일 책임 원칙(Single Responsibility principle) OCP : 개방-폐쇄 원칙(Open/Closed principle) LSP : 리스코프 치환 원칙(Liskov substitution principle) ISP : 인터페이스 분리 원칙(Interface segrefation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙(Single Responsibility principle) 한 클래스는 하나의 책임만 가져야 한다 하나의 책임이라는 것은 모호하다 클 수도 있고, 작을 수도 있다 문맥과 상황에 따..