전체 글 34

[단위테스트] 1장 단위테스트의 목표

테스트에 대한 논쟁은 '단위테스트를 작성해야하는가?'에서 '좋은 단위테스트를 작성하는 것은 어떤 의미인가?' 로 바뀌었다. 단위테스트의 목표는 무엇일까? 흔히 단위테스트 활동이 더 나은 설계로 이어진다고 한다. 이는 사실이다. 더 나은 설계는 단지 좋은 부수효과일 뿐이다. 목표는 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다. 지속가능하다는 것이 핵심이다. 프로젝트가 상당히 쉽게 성장할 수 있다. 특히 처음부터 시작할때 그렇다. 하지만 시간이 지나면서 이렇게 계속 성장하기는 어렵다. (테스트 유무에 따른 프로젝트 간 성장추이의 차이. 테스트가 없는 프로젝트의 경우 시작은 유리하지만 이내 진척이 없을 정도로 느려진다.:::너무나도 뻔한 그래프) 개발속도가 빠르게 감소하는 이러한 현상을 소프..

Process Vs Thread

process 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 운영체체로부터 시스템 자원을 할당받는 작업의 의미 thread 프로세스 내에서 실행되는 여러 흐름의 단위 프로세스가 할당받은 자원을 이용하는 실행의 단위 multi preocess 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 하나의 작업을 처리하도록하는것 장 : 여러개의 프로세스중 하나에 문제가 발생하면 그 프로세스만 죽고 다른 영향이 확산되지 않는다 단 : contextswitching 에서의 오버헤드 multi thread 하나의 응용프로그램을 여러개의 스로드로 구성하고 하나의 작업을 처리하도록하는 것 장 : 시스템 자원소모 감소, 시스템 처리량 증가 단 : 주의깊은 설계, 디버깅 까다롭다. 자원공유 문제 발생 멀티 프로세스 대..

개발/SPRING & JPA 2021.05.30

JVM 구조

byte 코드는 jvm 같은 가상머신이 이해할 수 있는 코드 (.class) binary 코드는 cpu가 이해할 수 있는 코드 클래스 로더 바이트 코드를 읽어 메모리에 적절히 배치하며, .class 를 읽어(로딩) 코드내부의 레퍼런스를 연결(링크)하고 클래스에 있는 static 값을 초기화(초기화) 한다. loading bootstrap classloader : jre/lib 의 기본 자바 api 라이브러리를 로드 extension classloader : jre/lib/ext 의 모든 확장 코어 클래스파일을 로드 application classloader : extension classloader 의 child 이며 시스템 클래스로드라고도 불린다. 사용자가 직접정의한 클래스들을 로드합니다. Linkin..

개발/SPRING & JPA 2021.05.30

[Spring] bean lifecycle

Spring Bean 이란 Spring IoC/DI 컨테이너에 의해 생성되고 관리되는 Java Object 또는 인스턴스 이다. ApplicationContext 또는 BeanFactory 인터페이스를 사용하여 빈라이프 사이클을 제어한다. ApplicationContext는 BeanFactory 인터페이스를 확장한 것으로, BeanFactory 인터페이스를 통해 보다 유용한 기능을 제공합니다. 아래, 우리는 스프링에게 @Component 주석을 사용하여 Foo class bean life cycle을 제어하도록 요청했습니다. @Component Class Foo { //variables and methods ...}The Spring Bean Lifecyle Spring Bean의 creation과 de..

개발/SPRING & JPA 2021.05.25

[토비] 8.4 스프링의 기술

POJO의 조건 특정 규약(contract)에 종속되지 않는다. 특정환경에 종속되지 않는다. 스프링에는 POJO 프로그래밍을 손쉽게 할 수 있도록 지원하는 세가지 가능 기술을 제공한다. 세가지 기술은 바로 Ioc/DI , AOP, PSA(portable Service Abstraction) 다. 사실은 객체지향의 설계와 개발원리를 잘 적용하다보면 자연스럽게 먼들어지는 것들이다. 다만 스프링은 그것을 통일성 있게, 더 세련된 방법으로, 자바엔트프라이즈 개발의 전 영역에 걸쳐 효과적으로 적용될 수 있도록 프레임워크 형태로 제공하고 있다. 제어의 역전(IoC) / 의존관계 주입(DI) 왜 두개의 오브젝트를 분리해서 만들고, 인터페이스를 두고 느슨하게 연결한 뒤 실제 사용할 대상은 DI를 통해 외부에서 지정하는..

개발/SPRING & JPA 2021.05.23

[Spring-Core] Bean Overview

Spring IoC 컨테이너는 하나이상의 빈을 관리합니다. 이러한 빈은 컨테이너에 제공되는 configuration metadata 로 생성됩니다.(XML 의 정의 형식으로) 컨테이너 자체내에서 이러한 빈의 정의는 BeanDefinition 개체로 표시되며, 여기에는(다른 정보 중에서도) 다음과 같은 메타데이터가 포함됩니다. - A package-qualified class name(패키지 규정 클래스이름): 일반적으로 정의되는 빈의 실제 구현 클래스입니다. - bean 이 컨테이너에서 작동해야하는 방식을 나타내는 bean 작동 구성요소(scope, lifecycle callbacks, 등등) - bean 이 작업을 수행하는데 필요한 다른 bean 에 대한 참조 입니다. 이러한 참조를 collaborat..

개발/SPRING & JPA 2021.04.19

[Spring-Core] 1.2 Container Overview

org.springframework.context.ApplicationContext 인터페이스는 Spring IoC 컨테이너를 나타내며, 빈의 instantiating, confuguring, 조립을 담당한다. 컨테이너는 configuration metadata를 읽어 instantiate, configure, assemble 할 object에 대한 지침을 얻는다. configuration metadata는 XML, Java annotations, java code를 표시된다. 이를 통해 애플리케이션을 구성하는 object와 그 object 사이에 풍부한 상호 존속성을 표현할 수 있다. 몇몇 ApplicationContext 인터페이스의 구현은 Spring와 함께 제공된다. 독립 실행 애플리케이션에서는 ..

개발/SPRING & JPA 2021.04.16

[Spring-Core] 1.1 Introduction to the Spring IoC container and Beans

Spring Framework의 IoC(Inversion of Control) container 는 가장 중요한 것이다. Spring 프레임워크의 IoC container 에 대한 철저한 처리에 이어 Spring 의 AOP(Aspect-Oriented Programmin) 기술에 대한 포괄적인 설명이 이어진다. Spring 프레임워크는 자체적인 AOP(이해하기 쉽고 java 엔터프라이즈 프로그래밍에서 AOP 요구사항의 80% sweet spot 을 성공적으로 해결하는) 프레임워크가 있다. AspectJ 와 함께 Spring 의 통합 커버리지도 제공합니다. 이 장에서는 Ioc 원칙의 Spring 프레임워크 구현을 다룹니다. IoC 는 DI(dependency injection) 라고도 합니다. (1)con..

개발/SPRING & JPA 2021.04.16