분류 전체보기 14

단위 테스트 3장

책 '단위 테스트'를 읽고 정리한 내용입니다. 3장 단위 테스트 구조 3.1 단위 테스트를 구성하는 방법 3.1.1 AAA 패턴 사용 AAA 패턴은 각 테스트를 준비, 실행, 검증이라는 세 부분으로 나눌 수 있다. 준비: 테스트 대상 시스템 (SUT, System Under Test) 과 해당 의존성을 원하는 상태로 만든다. 실행: SUT 에서 메서드를 호출하고 준비된 의존성을 전달하며 (출력이 있으면) 출력 값을 캡처한다. 검증: 결과를 검증한다. 결과는 리턴 값이나 SUT 와 협력자의 최종 상태, SUT 가 협력자에 호출한 메서드 등으로 표시될 수 있다. Given-When-Then 패턴 Given = 준비 / When = 실행 / Then = 검증 테스트 구성 측면에서 AAA 패턴과 ..

개발 2023.01.29

단위 테스트 2장

책 '단위 테스트'를 읽고 정리한 내용입니다. 2장 단위 테스트란 무엇인가 2.1 '단위 테스트'의 정의 단위 테스트의 세 가지 속성 작은 코드 조각(단위라고도 함)을 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트다. 세 가지 속성 중 '격리'가 무엇인지에 대한 의견 차이로 고전파와 런던파가 시작되었다.2.1.1 격리 문제에 대한 런던파의 접근 런던파에서의 '격리': 테스트 대상 시스템을 협력자에게서 격리하는 것 의존성을 테스트 대역으로 대체해서 테스트 대상 클래스에만 집중할 수 있다. 장점 테스트가 실패하면 어느 부분이 문제인지 확실히 알 수 있다. (= 테스트 대상에 문제가 있는 것을 바로 알 수 있다.) 객체 그래프(같..

개발 2023.01.25

Collections.synchronizedMap(hashMap) 과 ConcurrentHashMap 의 차이

먼저 각각에 대해 설명해보자. 1. Collections.synchronizedMap 기존 Map 객체를 감싸는 팩토리 메소드이다. Collections 의 내부 클래스 중 하나인 SynchronizedMap 을 반환한다. 이 클래스는 mutex 라는 이름으로 선언된 객체의 락을 사용하여 모든 연산을 동기화 해준다. 여러 스레드에서 접근해도 연산이 정상 동작함을 보장한다. 기존 Map 객체는 동기화를 지원하지 않으므로, 이 메소드로 한번 감싸면 동기화 컬렉션이 된다. 2. ConcurrentHashMap java.util.concurrent 패키지에 포함된 병렬 컬렉션 중 하나이다. Map 인터페이스의 구현체이며, Collections.synchronizedMap 와 마찬가지로 여러 스레드에서 접근해도 ..

Java 2022.10.23

java의 HashMap 해시 충돌 해결

먼저 기본적으로 자료구조 시간에 배우는 해시 충돌의 해결법 두 가지를 알아보자. 1. 체이닝 (Separate Chaining) 충돌이 발생하면 키에 해당하는 데이터들을 LinkedList 형태로 연결하는 방식이다. 2. 개방 주소법 (Open Addressing) 충돌이 발생하면 다음 칸 또는 제곱만큼 건너뛴 칸 또는 다른 해시를 한 번 더 적용한 칸에 저장하는 방식이다. 그럼 자바의 HashMap은 해시 충돌이 발생할 경우 어떻게 해결할까? HashMap은 체이닝 기법을 사용한다. 체이닝 기법은 개방 주소법보다 remove 면에서 유리하다. 또한 개방 주소법은 데이터의 밀도가 높아질수록 검색에 오랜 시간이 걸리게 될 것이므로 결국 체이닝 기법보다 불리하다. 자바 8 이전에는 체이닝을 할 때 무조건 L..

Java 2022.01.03

Object 객체의 equals와 hashCode

모든 객체의 조상, Object 에 대해 알아보자. Object 는 크게 두 개의 메서드를 가진다. equals와 hashcode이다. 먼저 equals는 파라미터로 들어오는 객체와 '동일한 객체인지' 비교해서 boolean을 반환한다. public boolean equals(Object obj) { return (this == obj); } 즉 동일한 레퍼런스를 참조하는 진짜로 똑같은 객체일 때만 true 다. hashCode 함수는 객체의 해시값을 반환하는 함수이다. 해시라는 단어만 들어도 알 수 있듯, 객체마다 모두 다른 값을 반환해준다. public native int hashCode(); 오잉? 이 메서드는 구현부가 없고 native라는 특이한 키워드를 가지고 있다. native 란 자바가 아닌..

Java 2022.01.03

Spring AnnotationConfigApplicationContext AnnotationConfigWebApplicationContext 차이

기본적으로 스프링 부트는 컴포넌트 스캔을 지원한다. 이때 사용하는 application context는 AnnotationConfigApplicationContext 이다. 그리고 스프링 부트이면서 Spring MVC 의존성을 가진 프로젝트는 AnnotationConfigWebApplicationContext 을 사용한다. javadoc 을 보면 그 둘은 web이냐 web이 아니냐의 차이만을 가질 뿐 equivalent 하다고 되어 있다. 그렇다면 둘은 WebApplicationContext 와 ApplicationContext의 차이점과 동일한 차이점을 가진다고 할 수 있다. 소스를 보면 둘은 인터페이스 AnnotationConfigRegistry 를 동일하게 implements 하고 있다. 이 인터페..

Spring Framework 2022.01.02

Kubernetes Architecture

(출처: https://kubernetes.io) 1. Kubernetes를 알기 전, Container란? 소프트웨어 배포 용이성을 높이기 위해, 소프트웨어 자체와 그의 의존성(Dependency)을 포함한 이미지이다. 여기서 의존성이란 라이브러리, 인터프리터, 서브 패키지, 컴파일러, extension 등을 의미한다. 그 내용들은 컨테이너 런타임이 실행할 수 있는 이미지 파일에 저장된다. 2. 그래서, Kubernetes란? 개발자가 원하는 상태로 소프트웨어를 운영 할 수 있도록 도와주는 오픈소스 플랫폼 이라고 소개할 수 있을 것 같다. 하지만 이 한 문장에 모든 것이 담겨있지 않은 것은 확실하다. 배포 작업의 간편성을 제공하고, 크래시 발생 시 자동 재시동 등의 자동 복구기능을 제공하며, 같은 내용..

그외 2021.09.24

JPA, Hibernate, Spring Data JPA 의 차이

JPA Java Persistence API 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 (=구현체가 아님) javax.persistence 패키지의 대부분은 interface, enum, Exception, Annotation으로 이루어져 있다. Hibernate JPA의 구현체 (Hibernate만 있는 것은 아님) javax.persistence.EntityManager와 같은 JPA의 인터페이스를 직접 구현한 라이브러리 Spring Data JPA JPA를 한 단계 더 추상화시킨 모듈. (Spring Data JPA의 Repository의 구현에서 JPA를 사용하고 있다는 뜻) Repository라는 인터페이스를 제공한다. Repository가 Spring Data..

Spring Framework 2020.02.28

Spring Framework의 DI (Dependency Injection, 의존성 주입)과 AOP (Aspect Oriented Programming)

인프런 백기선님의 스프링 프레임워크 입문을 듣고 필기한 내용입니다:) DI Spring의 IoC 컨테이너 자체를 꺼내오는 법 (쓸 일 별로 없음) @Autowired ApplicationContext applicationContext; 컨테이너에서 빈 가져와 사용하는 법 applicationContext.getBean(_______.class) 의존성 주입 방법 1. 생성자 (1순위) 생성자가 하나만 있고 생성자의 매개변수 타입이 빈으로 등록되어 있으면 @Autowired가 없어도 빈을 주입해준다. 이 클래스에서 꼭 필요한 클래스라면 생성자 방법을 추천한다고 하셨다. private final VisitRepository visits; private final PetRepository pets; publi..

Spring Framework 2020.02.27

네트워크 관리사 - Active directory의 구조

네트워크에 관심이 생겨 네트워크 관리사 2급을 공부하고 있다! 공부를 하던 중 Active directory라는 새로운 서비스에 대해 알게 되었다.이해하기가 너무 복잡해서 블로그에 가볍게 정리해보려고 한다. Active Directory란? 운영체제 Windows에 포함된 디렉토리 서비스이다. 디렉토리 서비스는 뭘까? 내가 알기로는 디렉토리란 계층 구조를 갖는 파일 저장 방식인데... 윈도 명령 프롬프트가 디렉토리를 나열하고 있다.디렉토리(영어: directory, 문화어: 등록부)는 컴퓨팅에서 파일과 다른 디렉토리들의 그룹을 갖고 있는 파일 시스템 안의 존재물이다. 수많은 컴퓨터에서 디렉토리는 폴더(folder) 또는 카탈로그(catalog)라고도 한다. 표준국어대사전에서는 디렉터리로 등재하고 있으며[..

그외 2019.02.07