전체 글
-
리플렉션 API 1부: 클래스 정보 조회백기선(인프런 강의)/더 자바, 코드를 조작하는 다양한 방법 2020. 6. 9. 09:00
리플렉션의 시작은 Class https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html Class에 접근하는 방법 모든 클래스를 로딩 한 다음 Class의 인스턴스가 생긴다. “타입.class”로 접근할 수 있다. 모든 인스턴스는 getClass() 메소드를 가지고 있다. “인스턴스.getClass()”로 접근할 수 있다. 클래스를 문자열로 읽어오는 방법 Class.forName(“FQCN”) 클래스패스에 해당 클래스가 없다면 ClassNotFoundException이 발생한다. Class를 통해 할 수 있는 것 필드 (목록) 가져오기 메소드 (목록) 가져오기 상위 클래스 가져오기 인터페이스 (목록) 가져오기 애노테이션 가져오기 생성자 가져오기 예시 ..
-
바이트코드 조작Java & 배경지식/기본상식 2020. 6. 7. 18:03
바이트 코드 조작 코드 커버리지? 테스트 코드가 확인한 소스 코드를 % JaCoCo를 써보자. 바이트코드를 읽어 이에따른 결과를 표시 https://www.eclemma.org/jacoco/trunk/doc/index.html http://www.semdesigns.com/Company/Publications/TestCoverage.pdf JaCoCo 설정 방법 1. pom.xml에 의존성 추가 org.jacoco jacoco-maven-plugin 0.8.4 prepare-agent report prepare-package report 2. target에 있는 site폴더에 존재하는 index.html 실행 index.html 오른쪽클릭 -> open with -> web Brower클릭 3. 결과 4..
-
클래스 로더Java & 배경지식/기본상식 2020. 6. 7. 16:55
클래스 로더 로딩, 링크, 초기화 순으로 진행된다. 클래스 로더는 계층 구조로 이뤄져 있으면 기본적으로 세가지 클래스 로더가 제공된다. 로딩 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 “메소드” 영역에 저장. 이때 메소드 영역에 저장하는 데이터 FQCN 클래스 | 인터페이스 | 이늄 메소드와 변수로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 “힙" 영역에 저장 로딩에서 Bootstrap, Extension, Application에서 찾지 못하면 NotFoundException이 발생 링크 Verify, Prepare, Reolve(optional) 세 단계로 나눠져 있다. 검증: .class 파일 형식이 유효한지 체크한다. Preparation:..
-
자바, JVM, JDK, JRE 차이Java & 배경지식/기본상식 2020. 6. 7. 16:28
JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)다. JVM 스팩: https://docs.oracle.com/javase/specs/jvms/se11/html/ JVM 밴더: 오라클, 아마존, Azul, ... 특정 플랫폼에 종속 JRE (Java Runtime Environment): JVM + 라이브러리 자바 애플리케이션을 실행할 수 있도록 구성된 배포판. VM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다. 개발 관련 도구는 포함하지..
-
JMeter 소개백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법 2020. 6. 7. 14:39
성능 측정 및 부하 (load) 테스트 기능을 제공하는 오픈 소스 자바 애플리케이션. 다양한 형태의 애플리케이션 테스트 지원 웹 - HTTP, HTTPS SOAP / REST 웹 서비스 FTP 데이터베이스 (JDBC 사용) Mail (SMTP, POP3, IMAP) CLI 지원 CI 또는 CD 툴과 연동할 때 편리함. UI 사용하는 것보다 메모리 등 시스템 리소스를 적게 사용. 주요 개념 Thread Group: 한 쓰레드 당 유저 한명 Sampler: 어떤 유저가 해야 하는 액션 Listener: 응답을 받았을 할 일 (리포팅, 검증, 그래프 그리기 등) Configuration: Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등) Assertion: 응답이 성공적인지 ..
-
Testcontainers, 컨테이너 정보를 스프링 테스트에서 참조하기백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법 2020. 6. 7. 12:42
@ContextConfiguration 스프링이 제공하는 애노테이션으로, 스프링 테스트 컨텍스트가 사용할 설정 파일 또는 컨텍스트를 커스터마이징할 수 있는 방법을 제공한다. ApplicationContextInitializer 스프링 ApplicationContext를 프로그래밍으로 초기화 할 때 사용할 수 있는 콜백 인터페이스로, 특정 프로파일을 활성화 하거나, 프로퍼티 소스를 추가하는 등의 작업을 할 수 있다. TestPropertyValues 테스트용 프로퍼티 소스를 정의할 때 사용한다. Environment 스프링 핵심 API로, 프로퍼티와 프로파일을 담당한다. 전체 흐름 Testcontainer를 사용해서 컨테이너 생성 ApplicationContextInitializer를 구현하여 생선된 컨테..
-
Testcontainers 기능백기선(인프런 강의)/더 자바, 애플리케이션을 테스트하는 다양한 방법 2020. 6. 7. 11:22
컨테이너 만들기 New GenericContainer(String imageName) @Container static GenericContainer postgreSQLContainer = new GenericContainer("postgres") .withExposedPorts(5432) .withEnv("POSTGRES_DB", "studytest"); 네트워크 withExposedPorts(int...) DB port가 같다면 테스트 DB 및 운영서버 DB 중 랜덤하게 사용한다.(충돌하지 않는 포트 우선사용) ## 개발용 DB docker run -p 5432:5432 --name study-db -e POSTGRES_USER=study -e POSTGRES_PASSWORD=study -e POSTG..