Java, Kotlin, Spring
-
spring cloud function 에 대해서Java, Kotlin, Spring 2023. 5. 16. 17:21
https://cloud.spring.io/spring-cloud-function/reference/html/ Spring Cloud Function 은 AWS, Azure, GCP 와 같은 클라우드 서비스에서 제공하는 서버리스 Function 기능을 쉽게 활용할 수 있도록 지원하기 위하여 추가된 모듈이다. 놀라운 점은 1. Spring container 에 등록된 bean 을 바로 endpoint 로 노출시킨다는 점과 2. 모든 bean 이 아닌 Functional Interface 를 구현한 bean 만 그 대상이 된다는 점이었다. CoC(Convention Over Configuration) 를 활용하여 사용하기에 간단하고, 기능 집약적인 코드를 손쉽게 구현하도록 하여 생산성을 높이는 관행은 소프트..
-
GraalVM 메모리 관리 간단 정리Java, Kotlin, Spring 2023. 4. 7. 16:03
Heap 메모리 GraalVM에서는 전체 메모리 중 일부를 Heap 메모리로 사용한다. Heap 메모리는 객체 인스턴스를 저장하기 위한 공간이고, Young Generation과 Old Generation이라는 두 개의 영역이 있다. Young Generation은 새로운 객체가 생성되는 공간이며, Old Generation은 Young Generation에서 살아남은 객체가 이동하는 공간이다. Heap 메모리는 가비지 컬렉션이 발생하는 공간이기도 하다. Native 메모리 GraalVM에서는 Native 메모리를 사용한다. Native 메모리는 JVM 바깥에서 할당되는 메모리 공간으로, C/C++ 등의 네이티브 코드에서 사용된다. Code Cache GraalVM에서는 Code Cache라는 공간을 사..
-
Spring 6, Springboot 3.0 새로운 기능Java, Kotlin, Spring 2023. 4. 7. 14:36
Spring 6에서 새롭게 도입된 기능 1.1. Reactive Database Access Spring 6에서는 새로운 Reactive Database Access 기능이 도입되었다. 이를 이용하면 반응형 웹 어플리케이션을 개발할 때 Reactive Programming의 이점을 최대한 활용할 수 있다. Reactive Database Access는 Reactive Streams를 기반으로 하며, R2DBC, MongoDB Reactive Driver, Cassandra Reactive Driver 등의 Reactive Database Driver를 지원한다. 1.2. WebFlux Test Client Spring 6에서는 WebFlux Test Client가 도입되었다. 이를 이용하면 WebFlux..
-
Spring 6 Http InterfaceJava, Kotlin, Spring 2023. 4. 7. 14:12
Spring 6에서 도입된 Http Interface는 Java 인터페이스를 사용하여 HTTP 서비스를 정의하고 HTTP 요청을 위한 어노테이션된 메서드를 사용하는 기능이다. https://docs.spring.io/spring-framework/docs/6.0.7/reference/html/integration.html#rest-http-interface 공식문서에 소개된 예제를 바탕으로 아래 글을 작성하였다. 이 기능을 사용하면 해당 인터페이스를 구현하는 프록시를 생성하여 요청을 수행할 수 있다. 이는 HTTP 원격 액세스를 간편하게 할 수 있으며 종종 기본 HTTP 클라이언트를 사용하는 세부 정보를 감싸는 퍼사드(facade)가 필요한 경우에도 도움이 된다. 아래 예제코드에서는 Github API에..
-
Spring Data 분석하기 - 1편 소개Java, Kotlin, Spring 2022. 8. 11. 04:48
Spring Data https://spring.io/projects/spring-data 기본 데이터 저장소의 특수 특성을 유지하면서 데이터 액세스를 위한 친숙하고 일관된 Spring 기반 프로그래밍 모델 제공 서버 애플리케이션은 데이터저장소에 접근하여 데이터를 가져오는 일과, 가져온 데이터를 처리하는 일을 가장 많이 하게 된다. 가장 많이 하는 일에 코드 상 통일성과 규칙이 없다면 애플리케이션은 관리하기가 매우 힘들어진다. 스프링 데이터는 이 두가지 일에 통일성과 규칙을 부여해준다. 서버 애플리케이션이 일을 처리하는 방식을 살펴보면 다음과 같이 요약할 수 있을 것 같다. Client로부터 요청을 받음 -> 데이터저장소로부터 데이터를 가져오기 -> 데이터를 가공하기 -> Client에 응답을 보냄 스프..
-
Spring data mongodb multiple database config 설정하기Java, Kotlin, Spring 2022. 6. 24. 14:33
Spring data mongodb 기본 구성 일반적으로 Spring data 프로젝트는 단일 데이터베이스로의 연결을 지원한다. Spring data의 데이터베이스 접근 추상화 영역인 Repository는 단일 database 접근 Client를 사용하도록 구성되어 있다. Repsitory interface BookRepository : MongoRepository Entity @Document("book") class BookEntity(@Id val id: String) 사용 방법 @Controller class Controller(private val bookRepository: BookRepository) { @GetMapping("/books") fun getBooks() = bookReposi..
-
Spring Bean 스코프Java, Kotlin, Spring 2022. 6. 19. 17:25
Bean 의 스코프 Singleton 하나의 Bean 정의에 대해서 Spring IOC Container 내에 단 하나의 객체만 존재한다. Prototype 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다. Request 하나의 Bean 정의에 대해서 하나의 HTTP request의 생명주기 안에 단 하나의 객체만 존재한다. 즉, 각각의 HTTP request는 자신만의 객체를 가진다. Web-aware Spring ApplicationContext 안에서만 유효하다. Session 하나의 Bean 정의에 대해서 하나의 HTTP Session의 생명주기 안에 단 하나의 객체만 존재한다. Web-aware Spring ApplicationContext 안에서만 유효하다. Global sessi..
-
Java 8 주요 업그레이드 사항Java, Kotlin, Spring 2022. 5. 25. 09:27
Java 8 람다식 (Lambda expressions) 람다식은 자바에서 함수를 일급 객체로 활용하기 위해 새로 추가된 표현식이다. 기존에는 함수를 다른 함수의 매개변수로 전달하기 위해서는 익명 클래스가 필요했다. Comparator byWeight = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } } 람다식은 불필요한 익명 클래스를 없에고 간단한 함수 표현식으로 함수의 일급 객체화를 가능하게 해준다. Comparator byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()..