Java, Kotlin, Spring
-
JVM 메모리 구조Java, Kotlin, Spring 2022. 5. 20. 09:47
JVM 구조 Java 애플리케이션이 JVM 위에서 어떻게 동작하는지 알아보자. 첫번째 과정은 컴파일 Java 소스코드는 먼저 컴파일되어야 한다. 만약 기본적인 Java 애플리케이션을 구현했다면 코드를 실행하기 위해서 먼저 컴파일 과정을 거쳐야 한다. $ javac application.java 컴파일이 완료되면 application.class 라는 파일이 생성된다. .class 확장자를 가진 파일은 Byte Code 파일로 컴퓨터가 해석할 수 있는 기계어에서 조금 더 추상화된 언어 파일이라고 생각하면 된다. 바이트코드 위키 클래스 로더가 하는 일 컴파일이 완료된 .class 파일은 JVM 위에 존재하는 클래스 로더로 전달된다. 클래스 로더는 .class 파일을 해석하여 프로그램 내 선언된 자료구조들을 메..
-
@SpringBootApplication 어노테이션Java, Kotlin, Spring 2022. 5. 20. 08:48
@SpringBootApplication SpringBoot 프로젝트를 시작하면 @SpringBootApplication 어노테이션이 기본으로 설정되어 있다. @Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters={@ComponentScan.Filter(type=CUSTOM,classes=TypeExcludeFilter.class),}) public @interface SpringBootApplication @SpringBootApplication 은 그 안에 @EnableAutoConfigur..
-
Java Compile 과정Java, Kotlin, Spring 2022. 5. 7. 09:57
JVM (Java Virtual Machine) 자바는 JVM(Java Virtual Machine) 위에서 동작하기 때문에, OS 에 비종속적이다. JVM 은 자바에 대해서 모른다. 컴파일된 바이트 코드 파일을 해석하는 능력을 가지고 있을 뿐 이다. 따라서, JVM 이 해석할 수 있는 형태의 바이트 코드를 JVM 에 제공한다면, 꼭 자바가 아니더라도 JVM 을 사용할 수 있다. Kotlin 이 대표적이다. Java Compile 과정 자바언어로 소스코드 (.java) 를 작성한다. Java Compiler 가 자바 소스파일을 컴파일 한다. 이 때 JVM 이 해석할 수 있는 형태의 파일인 바이트 코드 파일 (.class) 이 생성된다. 바이트 코드의 각 명령어는 1 바이트 크기의 Opcode 와 추가 피..
-
Testcontainers 재사용 설정하기Java, Kotlin, Spring 2022. 1. 12. 08:36
Testcontainers는 도커를 이용하여 테스트 환경을 분리해주는 라이브러리이다. 테스트 수행 시 DB 등의 외부 환경은 운영 환경과 다르게 구축해야 할 필요가 있는데, 보통은 로컬 PC 에 테스트 전용 DB 를 만들어서 사용해왔다. RDB 까지는 이렇게 독립적인 환경에서 테스트를 한다고 하더라도, Redis 나 Elasticsearch 와 같은 데이터저장소들은 개발에 참여하는 개개인이 모두 로컬 환경을 설정하는 것은 쉬운 일이 아니다. 이럴 때 도커는 매우 적절한 선택이 될 수 있고, Testcontainers 는 그 도커의 설정도 필요없게끔 Convention 이 설정되어 있기 때문에 사용하기에 매우 편리하다. 설치 junit 4 junit 5 ← 버전 별로 설치 방법이 다르다. // kotlin..
-
스프링 배치 완벽가이드 2/e - 2장 스프링 배치Java, Kotlin, Spring 2022. 1. 12. 08:30
배치 아키텍처 애플리케이션 레이어 개발자가 개발한 코드를 나타냄 대부분 코어 레이어와 상호 작용 함 코어 레이어 배치 영역을 구성하는 실제적인 여러 컴포넌트로 이뤄짐 인프라스트럭처 레이어 ItemReader, ItemWriter 제공 재시작과 관련된 문제를 해결할 수 있는 클래스와 인터페이스 제공 잡과 스텝 스텝 스텝은 스프링 배치에서 가장 일반적으로 상태를 보여주는 단위 각 스텝은 잡을 구성하는 독립된 작업의 단위 스텝은 Tasklet 기반 스텝과 Chunk 기반의 스텝이라는 두 가지 유형이 있음 스텝을 분리함으로써 얻는 기능 유연성 재사용이 가능하게 구성할 수 있도록하는 여러 빌더 클래스를 제공함 유지 보수성 각 스텝은 이전, 다음 스텝과 독립적이므로 다른 스텝에 영향을 미치지 않음 단위 테스트, 디..
-
스프링 배치 완벽가이드 2/e - 1장 배치와 스프링Java, Kotlin, Spring 2022. 1. 12. 08:25
왜 자바로 배치를 처리하는가? 유지 보수성 배치 처리 코드는 일반적으로 다른 애플리케이션 코드보다 수명이 훨씬 김 스프링 배치는 트랜잭션 및 커밋 횟수와 같은 것들을 애플리케이션에 제공함 유연성 OS에 종속되지 않는 JVM의 유연성 시스템 간 코드를 공유할 수 있는 능력 POJO로 업무 로직을 구현하면, 해당 로직을 웹 애플리케이션이나 배치 처리에서 모두 사용할 수 있음 확장성 병렬 처리 지원 트랜잭션 커밋 건수와 롤백 건수 등 배치 처리에 필요한 기능을 제공하여, 애플리케이션 확장성에 도움을 줌 개발 리소스 스프링 프레임워크를 사용하는 풍부한 인적자원 지원 스프링 프레임워크의 방대한 커뮤니티 (Github, Stackoverflow 등) 비용 오픈소스 프레임워크로 반복적인 라이선스 비용 불필요함 스프링..
-
자바 8 - 함수형 인터페이스 Consumer<T>Java, Kotlin, Spring 2022. 1. 12. 08:12
함수형 인터페이스들은 java.util.function 패키지에 정의되어 있다. 제공하는 인터페이스의 종류는 공식문서에서 확인하자. 이번 포스팅에서는 Consumer 에 대하여 알아보자. Consumer Consumer 는 함수형 인터페이스이다. 함수형 인터페이스에 대한 설명은 자바의 람다 표현식 - 정의와 사용방법 에서 자세히 다루었다. @FunctionalInterface public interface Consumer Consumer 의 이름을 보면, 무언가 소비하는 역할을 수행할 것이라고 예상할 수 있다. 다른 함수형 인터페이스들이 각자의 역할이 비교적 명확히 정해져있는 것에 비해 Consumer 는 수행할 역할에 대해서 규정하지 않는다. 공식 문서의 정의를 살펴보자. Consumer 는 하나의 입..
-
자바 Iterable, Iterator, Collection, List 분석하기Java, Kotlin, Spring 2022. 1. 12. 08:08
Java 에는 원소를 저장할 수 있는 (혹은 저장할 수 있을 것 같은 이름의) 자료구조가 굉장히 많이 있다. 어렴풋이 아는 것은 이제 그만하기로 하고, (나름) 제대로 파악해보자. List List 는 Interface 이다. public interface List extends Collection { // ... } 그런데, Collection 을 확장하고 있다..! 순서를 잘못 잡은 듯 하다. Collection 부터 살펴보자. Collection Collection 또한 Interface 이다. public interface Collection extends Iterable { // ... } 그런데, Iterable 을 확장하고 있다.. 역시나 순서를 잘못 잡은 듯 하다. Iterable 로 이동..