전체 글

개발만 하기는 심심하니 기록 또 기록..
벌크 수정, 삭제 연산과 영속성 컨텍스트 벌크 수정연산과 벌크 삭제연산을 각각 수행한 후에 별도로 영속성 컨텍스트 초기화 작업을 하지 않았다고 가정하자. 이후에 전체 조회 작업을 시행하면 Update는 연산이 적용되지 않은 영속성 컨텍스트 데이터, delete는 연산이 적용된 DB 데이터 겨로가가 조회되는 것을 확인할 수 있다. (Repeatable Read) Update 벌크 연산 상황 영속성 컨텍스트와 DB에 아래 데이터가 있다고 하자. 위 상황에서 아래와 같이 28살 미만은 이름을 전부 비회원으로 바꾸라는 bulk update 연산을 수행해보자. @Test @Commit public void bulkUpdate() { queryFactory .update(member) .set(member.user..
· Language.
자바는 과거 finalize() 메서드를 사용해서 가비지 컬렉션에 의해 객체가 회수되기 직전에 실행되는 코드를 작성할 수 있었다. 그러나 finalize()는 실행 시점을 정확히 예측할 수 없으므로 사용하는 것이 권장되지 않아 Java 9부터는 deprecated가 되었다. 그리고 Java 12에서 Cleaner, PhantomReference를 사용한 대안이 제시되었다. Cleaner Cleaner 클래스는 객체에 도달할 수 없을 때, 그리고 가비지 수집되기 직전에 수행해야 하는 정리작업을 등록하는 데 사용된다. 가비지 수집기에서 개체를 회수하기 전에 실행해야 하는 리소스 정리 또는 기타 작업을 수행하는 방법을 제공한다. Cleaner의 주요 목적은 예측 불가능성과 잠재적인 성능 문제로 인해 권장되지 ..
Istio, Istio Architecture Istio는 애플리케이션 네트워크 기능을 유연하고 쉽게 자동화할 수 있는 투명한 언어 독립적 방법을 제공하는 현대화된 서비스 네트워킹 레이어인 서비스 메시입니다. 클라우드 기반 애플리케이션을 구성하는 다양한 마이크로서비스를 관리하는 데 널리 사용되는 솔루션입니다. Istio 서비스 메시는 또한 이러한 마이크로서비스가 서로 통신하고 데이터를 공유하는 방법을 지원합니다. 조직이 클라우드로의 이동을 가속화하면서 필요에 따라 애플리케이션도 현대화하고 있습니다. 그러나 모놀리식 레거시 앱을 클라우드 기반 앱으로 전환하면 데브옵스팀의 문제가 발생할 수 있습니다. 개발자는 클라우드에서 이동성을 보장하기 위해 느슨하게 결합된 마이크로서비스를 사용하여 앱을 어셈블하는 방법을..
개요 Non-Blocking 방식의 애플리케이션 api가 대규모 소프트웨어 프로그램에서 성능 향상을 위해 거의 필수다 싶이 사용되는 기술이다. 그렇기에 오늘 Webflux와 리액티브 스트림, 논블라킹에 대해서 정리해보려고한다. Non-Blocking Non-Blocking은 한 번에 하나의 작업을 처리하고 결과를 반환하기전에 다른 작업을 수행할 수 있도록 하는 프로그래밍 스타일이다. Non-Blocking 특징 입출력 작업이나 긴 작업을 수행하는 동안 CPU가 다른 작업을 할당해 자원을 최대한 활용할 수 있다. 다중 스레드와 달리 스레드 간의 컨텍스트 스위칭이 발생하지 않아 CPU 부하와 메모리 사용을 최적화할 수 있다. Spring WebFlux Spring WebFlux는 Spring5에서 추가된 R..
개요 Spirng boot 개발 환경에서 데이터들이 변경되거나 yaml 이 변경되었을때 서버를 재 가동시키는 방법 이외에 데이터 상태를 불러오는 방법이 있을까? 바로 Spring Actuator라는 라이브러리를 사용하는 것이다. 오늘은 그 Spring Actuator에 대해서 알아보겠다. 🧐 Spring Actuator Spring Actuator란 무엇일까? Spring Actuator는 스프링 부트 프레임워크에서 제공되는 라이브러리로서 스프링 푸트 애플리케이션의 모니터링이나 메트릭과 같은 기능을 HTTP와 JMX 엔드 포인트를 통해서 제공한다. 메트릭이란? 시스템, 프로세스, 제품 또는 서비스의 성능을 측정하는 데 사용되는 측정 항목이나 지표다. Spring Actuator는 애플리케이션의 내부 확인..
개요 스프링 클라우드 관련 기술을 익히기전 모놀리식 아키텍처와 마이크로서비스 아키텍처를 공부하던 중 모놀리식 아키텍처에서의 SOA, ESB, SOAP에 대해서 더 자세히 공부해보려고한다. 모놀리식 아키텍처 하나의 거대한 애플리케이션에서 모든 작업을 처리하는 아키텍처다. 내부적으로 의존성이 강하며 구조적으로 결합도가 높은 아키텍처다. 모든 작업을 하나의 하드웨어에서 처리하므로 강력한 하드웨어가 필요하며, 대용량 트래픽이 쏠렸을 때 시스템이 무거워질 수 있다. 마이크로 서비스 아키텍처 작고 독립적인 서비스들을 쪼개 팀 별로 독립적으로 개발 배포를 할 수 있는 아키텍처다. 대용량 트래픽이 쏠렸을 때도 유연하게 대처가 가능하다. 수평적 확장이 가능하며 클라우드 서비스에 적합한 아키텍처로 볼 수 있다. SOA S..
개요 광주소프트웨어마이스터고등학교의 MSG팀에서 진행한 GAuth라는 프로젝트에서 검색 api를 만들면서 querydsl를 적용한 사례를 오늘 작성해보려고 한다. 작성해보고 나서의 장점에 대해서도 얘기해보겠다. 요구사항 요구사항은 이랬다. 학년, 반, 키워드를 통해 유저를 검색한다. 만약 학년, 반에 0이 들어온다면 전체 검색의 기준을 달고 키워드는 "" 빈 문자열이 들어오면 전체 검색 기준을 단다. 예를 들어 학년 반 키워드에 2, 0, "김" 이 들어오면 2학년 김씨 모두를 검색한다. 첫 구현 처음에는 findAll을 통해서 모든 유저리스트를 가져오고 filter를 통해서 유저를 걸러내었다. class GetAcceptedUsersService( private val userRepository: Us..
org.springframework.boot.web.server.PortInUseException: Port 8080 is already in use 인텔리제이 스프링부트로 개발을 하면서 오류를 한번씩은 직면해 봤을 것이다. 원래 되던 애플리케이션이 갑자기 8080포트가 이미 사용중이라고 뜰 때가 있다. 대개 다른 프로세스가 8080 포트를 사용중이라 뜨는 것이다. 인텔리제이를 재 실행했을때 될 수도 있지만 재실행해도 되지 않을때 server.port = 8081 이런식으로 수정할 수도 있지만 그렇고싶지 않을때 8080을 사용중인 프로세스를 찾아 그 프로세스를 종료하는 것이다. lsof -i :8080 8080 포트를 실행중이인 프로세스를 찾고 kill -9 {PID} 그 프로세스의 PID로 프로세스를 ..
· Language.
kapt kapt는 Kotlin언어를 사용해 annotaion processor를 실행하기 위한 Gradle 플러그인이다. annotation processor annotation processor는 컴파일 타임에 소스 코드에 있는 주석을 읽어들이고, 그에 따라 추가적인 코드를 생성하거나 변형할 수 있다. 이를 통해서 자동화된 코드 생성이나 런타임에서 퍼포먼스 향상 등 다양한 이점을 얻을 수 있다. kapt 플러그인은 kotlin-gradle-plugin 플러그인을 사용하는 코틀린 프로젝트에서만 사용할 수 있으며, kapt를 사용하기 위해서는 먼저 kotlin-kapt 라이브러리를 프로젝트 의존성이 추가해야한다. plugins { id("org.jetbrains.kotlin.jvm") version "1..
khope
메모장 희망편