Study 40

멀티 쓰레드

Thread 애플리케이션 코드를 하나하나 순차적으로 실행하는 것 쓰레드 한번에 하나의 코드라인만 수행 동시 처리가 필요하면 쓰레드를 추가로 생성해야 함 단일 요청(쓰레드 하나 사용) 하나의 쓰레드를 할당하여 서블릿(Servlet)에 요청을 보내 응답을 받는 구조 다중 요청이 들어올 경우 기존의 연결 된 요청과 새로운 요청 모두 안될 수 있음 멀티 쓰레드 요청마다 쓰레드 생성 장점 동시 요청을 처리할 수 있다. 리소스(CPU, 메모리)가 허용할 때 까지 처리가능 하나의 쓰레드가 지연 되어도, 나머지 쓰레드는 정상 동작한다. 단점 쓰레드는 생성 비용은 매우 비싸다.(요청이 들어올 때 마다 쓰레드를 생성하면, 응답속도가 느려진다.) 쓰레드는 컨텍스트 스위칭 비용이 발생한다. 쓰레드 생성에 제한이 없다.( 너무..

Study 2021.12.20

HTTP

HTTP(HyperText Transfer Protocol) HTML, TEXT, IMGAE, 음성, 영상, 파일, JSON, XML(API) 거의 모든 형태의 데이터 전송 가능 서버간에 데이터를 주고 받을 때도 대부분 HTTP사용 HTTP/1.1 버전을 가장 중요하며, HTTP/2, HTTP/3 은 1.1버전의 성능을 개선한 버전이다. 클라이언트 서버 구조 무상태 프로토콜(Stateless), 비연결성 HTTP 메시지 단순함, 확장이 가능하다. 클라이언트 서버구조 Request Response 구조 클라이언트는 서버에 요청을 보내고, 응답을 대기 서버가 요청에 대한 결과를 만들어서 응답 무상태 프로토콜(Stateless) 서버가 클라이언트의 상태를 보존 X 장점 : 서버 확장성 높음(스케일 아웃) 단점..

Study/Http 2021.07.26

URI(Uniform Resource Identifier)

URI Uniform : 리소스 식별하는 통일된 방식 Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier : 다른 항목과 구분하는데 필욯나 정보 URL, URN URL - Locator : 리소스가 있는 위치를 지정 URN - Name : 리소스에 이름을 부여 위치는 변할 수 있지만, 이름은 변하지 않는다. URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음 따라서 URI 는 곧 URL과 같은 의미로 이야기 된다. URL 전체 문법 scheme://[userinfo@]host[:port][/path][?query][#fragment] scheme 주로 프로토콜 사용 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙. 예 ) htt..

Study/Http 2021.07.26

인터넷 통신

IP(인터넷 프로토콜) 지정한 IP주소(IP Address)에 데이터 전달 패킷(Packet)이라는 통신 단위로 데이터 전달 IP 프로토콜의 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 비신뢰성 중간에 패킷이 사라지면 오류 발생 패킷이 순서대로 안오면 오류 발생 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 오류 발생 TCP/ UDP TCP 특징 (전송 제어 프로토콜 Transmission Control Protocol) 연결지향 - TCP 3 way handshake (가상 연결) 데이터 전달 보증 순서 보장 신뢰 할 수 있는 프로토콜 현재는 대부분 TCP 사용 UDP 특징(사용자 데이터그램 프로토콜 User Datagram Protocol..

Study/Http 2021.07.26

의존관계 자동 주입

의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPoli..

Study/Java&Spring 2021.07.23

컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 스프링 빈을 등록할 떄 자바코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열하는 방식과 자동으로 주입하는 방식 두가지가 있다. 직접 빈을 일일이 등록하면 설정정보도 커지도 누락하는 문제점이 생기고 무엇보다 반복적으로 계속 적어줘야한다는 단점이 존재한다. 이를 해결하기 위해 자동주입을 한다. 컴포넌트 스캔 기능을 이용해서 자동으로 스프링 빈을 등록한다. 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다. package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotat..

Study/Java&Spring 2021.07.20

싱글톤 컨테이너

싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 객체 인스턴스를 2개이상 생성하지 못하도록 막아야함. private 생성자를 사용해서 외부에서 임의로 new키워드를 사용하지 못하도록 막아야한다. 싱글톤 패턴의 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. -> DIP를 위반한다. 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다. 테스트하기 어렵다 내부 속성을 변경하거나 초기화 하기 어렵다. private 생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성이 떨어진다. 안티패턴으로 불리기도 한다. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로..

Study/Java&Spring 2021.07.20

XML, BeanDefinition

Spring의 BeanFactory는 다양한 형식의 설정 정보를 받아드릴 수 있게 설계 되어있다. XML 설정 사용 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트 들이 XML로 되어있고, 또 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다. GenericXmlApplicationContext를 사용하면서 xml 설정 파일을 넘기면 된다. xml 기반의 AppConfig.xml 스프링 설정 정보와 자바 코드로 된 AppConfig.java 설정 정보를 비교하면 거의 비슷한 결과를 얻을 수 있다. package hello.core.xml; import hello.core.member.MemberService; import..

Study/Java&Spring 2021.07.20

Spring Container/Bean

스프링 컨테이너 ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 기존에 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제부터는 스플링 컨테이너를 통해서 사용한다. 스프링 컨테이너는 @Configuration 이 붙은 AppConfig를 설정(구성)정보로 사용한다. 여기서 @Bean 이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 스프링 빈 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다. 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다. 이전에는 개발..

Study/Java&Spring 2021.07.19

Spring, IoC/DI 컨테이너

Spring Framework 란? 엔터프라이즈급 어플리케이션을 구축할 수 있는 가벼운 솔루션이자, 원스-스탑-숍(One-Stop-Shop) 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어 있다. IoC 컨테이너다. 선언적으로 트랜잭션을 관리할 수 있따. 완전한 기능을 갖춘 MVC Framwork를 제공한다. AOP 지원한다. 도메인 논리 코드와 쉽게 분리될 수 있는 구조로 되어있다. IoC/DI 컨테이너 컨테이너(Container)란? 인스턴스의 생명주기를 관리한다. 생성된 인스턴스들에게 추가적인 기능을 제공한다. AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것 ex) Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말한다. IoC(Inv..

Study/Java&Spring 2021.07.17