전체 글(112)
-
Circuit Switching and Packet Switching
Switched Communications Networks switching node(교환노드)는 노드들 간에 데이터를 전송하는 교환 시설을 제공 stations : 네트워크에 접근하는 장치들 nodes : 통신을 제공하는 교환 장치들 전송 링크로 연결됨 point to point로 전용됨 FDM와 TDM을 사용하여 다중화됨 네트워크 안에 있는 요소들은 node 네트워크 밖에 있는 요소들은 station station은 end user end user의 종류 : PC, Server, Mainframe(대형컴퓨터) 네트워크의 고객이 될 수 있음 고객들은 또 다른 고객들과 통신이 가능해야 함 ⇒ 네트워크 필요 네트워크 주요 구성 요소 : node, link Switching node(교환노드) : 노드와 노..
2023.09.28 -
빈 스코프
빈 스코프란? 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지되는 이유는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문 스프링이 지원하는 스코프 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 컴포넌트 스캔 자동 등록 @Scope("prototype") @Compone..
2023.09.26 -
빈 생명주기 콜백
빈 생명주기 콜백 시작 코드 데이터베이스 커넥션 풀이나, 네티워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요 스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료됨 따라서 초기화 작업은 의존관계 주입이 모두 완료된 후에 호출해야 함 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 스프링 빈 생성 의존관계 주입 초기화 콜백 빈이 생성되고, 빈의 의존관계 주입이 완..
2023.09.26 -
의존관계 자동 주입
다양한 의존관계 주입 방법 생성자 주입 생성자를 통해 의존 관계를 주입받는 방법 생성자 호출 시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 생성자가 1개만 있으면 @Autowired를 생략해도 자동 주입됨 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 선택, 변경 가능성이 있는 의존관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법 @Autowired의 기본 동작은 주입할 대상이 없으면 오류 발생 주입할 대상이 없어도 동작하게 하려면 @Autowired(required = false) 필드 주입 필드에 바로 주입하는 방법 코드가 간결하지만 외부에서 변경이 불가능해서 테스트하기 힘들다는 단점 존재 DI 프레임워..
2023.09.26 -
컴포넌트 스캔
컴포넌트 스캔과 의존관계 자동 주입 코드 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능 제공 의존관계를 자동으로 주입하는 @Autowired 기능 제공 동작 과정 @ComponentScan @Component가 붙은 모든 클래스를 스프링 빈으로 등록 스프링 빈 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자 사용 ex) MemberServiceImpl 클래스 -> memberServiceImpl 빈 이름 직접 지정 : @Component("beanName") @Autowired 의존관계 자동 주입 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입 기본 조회 전략은 타입이 같은 빈을 찾아서 주입 생성자에 파라미터가 많..
2023.09.26 -
싱글톤 컨테이너
웹 애플리케이션과 싱글톤 순수한 DI 컨테이너 코드 웹 애플리케이션은 보통 여러 고객이 동시에 요청 스프링 없는 순수한 DI 컨테이너는 요청을 할 때마다 객체를 새로 생성 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸됨 -> 메모리 낭비가 심함 싱글톤 패턴을 사용하여 해결 객체를 하나만 생성해서 공유 싱글톤 패턴 싱글톤 패턴 코드 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 static 영역에 객체 인스턴스를 미리 하나 생성해서 올려둔다. getInstance()메서드를 통해서만 조회 가능 private생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 함 싱글톤 패턴 문제점 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감 의존관계상..
2023.09.26 -
스프링 컨테이너와 스프링 빈
스프링 컨테이너 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext는 인터페이스로 구현체에 따라 XML 또는 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만들 수 있다. 스프링 컨테이너 생성 과정 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class) 구성 정보 지정 (AppConfig.class) 스프링 빈 등록 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈 등록 빈 이름 메서드 이름을 사용 직접 부여하는 방법 : @Bean(name="b..
2023.09.26 -
객체 지향 원리 적용
정률 할인 기능 추가 코드 문제점 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 고쳐야 함 Before : private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); After : private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); OCP 위반 OrderServiceImpl 클래스는 인터페이스인 DiscountPolicy 뿐만 아니라 구체 클래스인 FixDiscountPolicy와 RateDiscountPolicy에도 의존 DIP 위반 구현체 없이는 코드를 실행할 수 없음 구현 객체를 대신 생성하고 주입해 주는 클래스 필요 관심사의 분..
2023.09.26 -
예제 만들기
프로젝트 생성 Project : Gradle - Groovy Language : Java Spring Boot : SNAPSHOT, RC, M 등이 붙지 않은 버전 중 가장 높은 것 Packaging : Jar Project Metadata Group : hello Artifact : core Dependencies : X 스프링 부트 3.0 Java 17 이상을 사용 javax -> jakarta 회원 서비스 구현 코드 테스트 코드 주문 & 할인 서비스 구현 코드 테스트 코드 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! ..
2023.09.26 -
객체 지향 설계와 스프링
자바 진영의 추운 겨울과 스프링의 탄생 EJB(Enterprise Java Beans) 2000년대 초반 자바 표준 기술 Entity Bean : ORM 기술 이론이 좋고, 기능이 많았으나 어렵고, 느리고, 비쌈 POJO(Plain Old Java Object) : 순수한 자바로 돌아가자 스프링 EJB 컨테이너 대체 단순함의 승리 현재 사실상 표준 기술 하이버네이트 EJB 엔티티 빈 기술을 대체 JPA(Java Persistence API) 새로운 표준 정의 스프링 역사 2002년 로드 존슨 책 출간 EJB 문제점 지적 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30000라인 이상의 기반 기술을 예제 코드로 선보임 스프링 핵심 개념과 기반 코드 BeanFacto..
2023.09.26 -
메인 메모리 관리
메모리란 무엇인가? 메모리란 주소(Address)를 통해 접근할 수 있는 저장 장치 주소는 메모리상의 서로 다른 위치를 구분하기 위한 숫자 32비트 시스템 2^32 개만큼의 메모리 위치 구분 가능 2^32 bytes의 메모리 공간 사용 가능 64비트 시스템 2^63 개 만큼의 메모리 위치 구분 가능 2^64 bytes의 메모리 공간 사용 가능 주소 바인딩(Address Binding) 메모리의 논리 주소와 물리 주소를 연계하는 작업 논리주소(Logical Address) 프로세스가 메모리에 적재될 때 할당되는 가상의 (독자적인) 위치 물리주소(Physical Address) 프로세스가 실제 배치되는 메모리상의 위치 주소 바인딩의 방식 Compile Time Binding 프로세스가 적재될 메모리 위치를 ..
2023.09.26 -
데드락
식사하는 철학자 문제 식사하는 철학자 문제 (Dining philosophers problem) 5명의 철학자(philosopher)가 둥근 탁자에 둘러앉아 있고 탁자 중앙에는 밥 한 공기가 있다. 총 5개의 젓가락이 철학자 사이마다 있다. 철학자는 식사를 하거나 생각한다. 생각할 때는 젓가락이 필요 없다. 식사를 하려면 자신의 왼쪽, 오른쪽에 있는 젓가락을 들어야 한다. 철학자 : 협력적 스레드(혹은 프로세스) 중앙 밥공기 : 각 스레드가 처리하고자 하는 자신의 작업 젓가락 : 공유 자원(혹은 공유 데이터) 젓가락에 대한 상호 배제 보장 필요 철학자 스레드를 위한 루틴 순서 일단 생각을 하다가 배가 고파서 밥을 먹기로 한다. 밥을 먹기 위해 자기 위치의 좌우 젓가락을 집는다. 밥을 먹는다. 배가 부르니..
2023.09.26