JPA는 트랜잭션 기반으로 사용된다. 그래서 JPA를 사용하면 우리는 자주 @Transactional어노테이션을 사용하는 것을 알 수 있다. 그리고 조회의 경우에는 readOnly=true옵션도 함께 주게된다. 오늘은 JPA와 @Transactional에 대해서 몇 가지 궁금한 점에 대해 기록해보겠다. readOnly = true를 설정하는 이유 우리는 조회용 서비스 메서드를 작성할 때 @Transactional(readOnly = true) 이렇게 서비스 위에 어노테이션을 달아주게 된다. 이 어노테이션을 달아주게 된다면 이점이 무엇이 있을까? 가독성? 물론 가독성에 대한 장점도 있겠지만 다른 이유도 존재한다. 변경 감지 JPA의 영속성 컨텍스트가 수행하는 변경 감지(Dirty Checking)와 관련이..
Spring Framework.
스프링 배치는 대규모 데이터 처리를 위한 배치 애플리케이션을 개발하기 위해 스프링에서 지원하는 프레임워크 입니다. 오늘은 스프링 배치 프레임워크의 기술적 트레이드오프와 어떠한 상황에서 적용해야 하는지 그리고 실시간 API 방식과의 차이에 대해서도 알아보도록 하겠습니다. 일단 스프링 배치의 트레이드 오프는 다음과 같을텐데요. 복잡성 유연성 대비 단순성 스프링 배치는 고급 기능을 지원하기 위해서 다양한 구성 요소와 설정이 필요할 수 있고 러닝 커브가 가팔라질 수 있긴합니다. 그리고 일부 간단한 배치 작업에 대해서는 스프링 배치 유연성이 필요하지 않을 수 있어, 이에 따라 복잡성이 불필요할 수 있어요 보통 이 부분은 성능적인 트레이드 오프보다는 학습 시간, 유연성에 대한 트레이드 오프군요 API나 쿼리를 통해..
자바에서는 기본적으로 DataSource 인터페이스를 사용해 커넥션풀을 관리한다. Spring에는 사용자가 직접 커넥션을 관리할 필요없이 자동화된 기법들을 제공하는데 Springboot 2.0 이전에는 tomcat-jdbc를 사용하다, 2.0 이후 부터는 Hikari CP를 기본옵션으로 채택하고 있다. Hikari CP 벤치마킹 페이지를 보면 다른 커넥션풀 관리 프레임워크들 보다 성능이 월등히 좋음을 알 수 있다. HikariCP가 빠른 성능을 보여주는 이유는 커넥션풀의 관리 방법에 있다. 히카리는 Connection 객체를 한번에 래핑한 PoolEntry로 Connection을 관리하며, 이를 관리하는 ConcurrentBag이라는 구조체를 사용하고 있다. ConcurrentBag은 HikariPool..
스프링 부트 내장 웹 서버 설정 스프링 부트 프로젝트를 생성할 시 스프링부트에서는 내장 서블릿 컨테이너인 톰캣(tomcat)이 자동으로 설정됩니다. 스프링부트에서는 ServletWebFactoryAutoConfiguration 클래스에서 자동적으로 Tomcat, Jetty 같은 내장 웹서버에 대한 설정을 자동적으로 처리하며 스프링부트 사용자가 쉽게 웹 서버 관련 설정을 하지 않아도 웹 서버 프로젝트를 안에 포함되게 합니다. @Configuration @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @ConditionalOnClass(ServletRequest.class) @ConditionalOnWebApplication(type = Type.SERVLET) @Ena..
개요 Spring, Spring Boot 환경에서 개발을 하고계신 개발자 분들은 모두 JDBC라는 것을 들어보셨을 것이며, JPA와 같은 ORM 기술도 사용하시면서 개발을 하고계실 것이라고 생각합니다 😃 제가 생각하기에 데이터베이스와 함께 협력하는 우리 개발자들은 JDBC라는 개념을 무조건 알고가야 하지 않을까 하고 생각을 해봅니다. JDBC 등장 이유 애플리케이션을 개발할 때 데이터들은 대부분 데이터베이스에 보관합니다. 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음과 같은 과정을 통해 데이터베이스를 사용합니다. 1. 커넥션 연결 - 주로 TCP/IP를 사용해 커넥션을 연결한다. 2. SQL 전달 - 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된..
클래스 변수, 인스턴스 변수, 지역 변수 차이 설명해주세요 클래스 변수는 클래스 내에서 정의된 변수로, 모든 인스턴스가 공유하는 변수입니다. 클래스 변수는 클래스 이름으로 접근할 수 있으며, 객체 생성 없이도 사용할 수 있습니다. 인스턴스 변수는 클래스 내에서 정의된 변수로, 객체가 생성될 때마다 새로운 인스턴스 변수가 생성됩니다. 인스턴스 변수는 객체를 통해 접근할 수 있습니다. 지역 변수는 메서드 블록 내에서 정의된 변수로, 해당 메서드나 블럭 내에서 사용할 수 있습니다. 지역 변수는 해당 블럭이나 메서드가 종료되면 소멸됩니다. ORM이란? ORM은 Object-Relational Mapping의 약어로 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 기술입니다. 객체 지향 프로그래밍 언어에서 사용..
개요 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는 애플리케이션의 내부 확인..
Spring Security란? 스프링 시큐리티는 인증 (Authentication) ,권한(Authorize) 부여 및 보호 기능을 제공하는 프레임워크다. Java / Java EE 프레임워크 개발을 하면서 보안 분야는 시간이 많이 소요되는 활동들 중 하나다. Spring Security를 사용함으로써 짜여진 내부 로직을 통해 인증, 권한 확인에 필요한 기능과 옵션들을 제공한다. 인증(Authentication) , 인가(Authorization) 인증과 인가란 무엇일까? 보통 인증 절차를 거친 후 인가 절차를 진행한다. 인증: 해당 사용자가 본인이 맞는지를 확인하는 절차. 인가: 인증된 사용자가 요청된 자원에 접근가능한가를 결정하는 절차 인증 방식 1. credential 방식: username, p..