spring
-
메시지 큐와 비동기 통신spring 2024. 7. 1. 18:49
분산 시스템, 마이크로서비스 아키텍처를 공부하며 빠질 수 없는 개념인 메시지 큐에 대해 정리하고자 한다.메시지 큐의 장점디커플링(decopuling)Synchronous 한 통신은 높은 결합도를 가진다.위 다이어그램의 시스템은 높은 결합도를 가진 시스템의 예시이다.이러한 형태는 하나의 서비스라도 실패할 경우 모든 서비스가 실패하게 된다.비동기 메시징으로 통신하면 서비스 간의 결합도를 감소시킬 수 있다.(ServiceA는 메시지 큐에 발행하는 것으로 책임을 다한다.)성능 최적화Synchronous한 서비스는 요청 - 응답에 필요하지 않은(관심사가 아닌) 작업들까지 기다려야 한다. 작업을 A ~ D 까지 수행하고, 각 작업 당 500ms가 걸린다고 가정했을 때 clientA는 2000ms의 Latency가..
-
Spring WebFlux와 Reactive Programmingspring 2024. 7. 1. 14:12
WebFlux는 Spring 5 에서 도입된 비동기 웹 프레임워크로, Reactive Programming을 기반으로 한다. Reactivce Programming은 데이터를 비동기적으로 처리하고, 필요할 때 데이터를 가공하며, backpressure 등의 개념을 통해 시스템의 안정성을 높이는 프로그래밍 기법이다. 비동기 처리는 일반적으로 다음과 같은 방식으로 지원된다.Non_blolcking I/OWebFlux는 Netty나 Servlet 3.1+ container와 같은 논블로킹 서버를 지원한다.이러한 서버 환경 덕분에 스레드가 블로킹 되지 않고 효율적으로 I/O 작업을 처리할 수 있다.비동기 APIMono와 Flux는 비동기 API를 제공한다. 예를 들어, 'Mono.fromCallable()'은 ..
-
페이징 요청을 받는 두가지 방법spring 2024. 3. 11. 23:54
페이징을 요청을 받는 방법이 사람에 따라 차이가 있어서 두 방법의 차이를 알아봤다. 1. 인자 값을 받아서 Pageable 객체를 생성하는 방법 Pageable 객체에 필요한 정보를 하나씩 받아온다. 그 정보를 바탕으로 Pageable 객체를 생성한다. 2. 바로 Pageable 객체를 받아오는 방법 필요한 정보를 모두 Pageable 객체에 담은 채로 요청을 받는 방법이다. 따로 가공할 필요 없이 바로 사용할 수 있기 때문에 코드가 굉장히 편하다. 1번 방법은 서버가 더 많은 부담을 지는 대신, 인자값을 백엔드 개발자가 수정할 수 있다. 2번 방법은 클라이언트가 더 많은 부담을 지며, 서버는 Pageable 객체의 값을 고정한 채로 사용해야 한다.
-
application.properties 가 merge 되지 않도록 하는 방법spring 2024. 2. 26. 20:31
application.properties 에는 DB 비밀번호 등 로컬 환경에 맞추어 설정하는 정보들이 많이 들어가게 된다. 하지만 별다른 설정 없이 push, merge 하게 되면 이러한 설정까지 변경되어 곤란을 겪는다. push, merge 를 하더라도 변경되지 않는 application.properties 를 만들어 보자. 먼저 git.ignore 의 한 문장을 추가한다. 그리고 위에 적힌 application-main.properties 라는 파일을 기존의 properties 파일의 위치와 동일한 곳에 생성한다. 기존에 application.properties 에 적힌 정보들을 전부 새로 만든 파일에 저장한다. 본래의 application.properties 에는 한문장만 들어간다. 이렇게 기존의 ..
-
인증, 인가spring/스프링 숙련 주차 2024. 1. 29. 20:57
인증(Authentication) - 인증은 해당 유저가 실제 유저인지 인증하는 개념이다. - 스마트폰의 지문인식, 이용하는 사이트에 로그인 등과 같이, 실제 그 유저가 맞는지를 확인하는 절차이다. 인가(Authorization) - 인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념이다. 예를들어 관리자 페이지-관리자 권한 같은 것들을 들 수 있다. 인증과 인가를 헷갈려 하는 이유는 로그인만 생각해서 이다. 우리가 자주 하는 로그인은 인증을 할 때(비밀번호 입력하고 제출 할 때)이고, 회원/비회원 여부에 따라 다른 권한을 받는 것이 인가이다. 웹 애플리케이션 인증은 어떠한 특수성이 있을까? 1. 일반적으로 서버-클라이언트 구조로 되어있고, 실제로 이 두가지 요소는 아주 멀리 떨어져 ..
-
Query Methods 란 무엇일까spring/스프링 입문 주차 2024. 1. 25. 09:47
Query Methods - Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공한다. - JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어있는 테이블에 요청하고자 하는 SQL을 메서드 이름을 사용하여 선언할 수 있다. List findAllByOrderByModifiedAtDesc(); - 이런 정해진 규칙으로 메서드 이름을 선언하기만 하면, SimpleJpaRepository 클래스가 생성될 때 위처럼 직접 선언한 JpaRepository 인터페이스의 모든 메서드를 자동으로 구현해준다. - 따라서 우리는 인터페이스에 필요한 SQL에 해당하는 메서드 이름 패턴으로 메서드를 선언하기만 하면 따로 구현하지 않아도 사용할 수 있다. ..
-
SpringBoot의 JPAspring/스프링 입문 주차 2024. 1. 25. 09:42
이전처럼 직접 emf와 em을 생성하지 않아도 스프링 부트가 application.properties 를 바탕으로 자동으로 만들어준다. @PersistenceContext EntityManager em; - @PersistenceContext 애너테이션을 통해 자동으로 생성된 EntityManager를 주입받아 사용할 수 있다. Spring의 트랜잭션 - Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공한다. - @Transactional 애너테이션을 클래스나 메서드에 추가하면 쉽게 트랜잭션 개념을 적용할 수 있다. - 메서드가 호출되면 해당 메서드 내에서 수행되는 모든 DB 연산 내용은 하나의 트랜잭션으로 묶인다. - 이때, 해당 메서드가 정상적..
-
엔티티의 상태spring/스프링 입문 주차 2024. 1. 25. 09:41
비영속과 영속 상태 비영속 상태 : 객체를 persist 하기 전의 객체 영속 상태 : 객체를 persist 한 이후 JPA에게 관리되는 객체 준영속(Detached) 상태 : 영속 상태였다가 분리된 객체 em.contains : Entity객체가 현재 영속성 컨텍스트에 의해 관리되는 객체인지 확인하는 메서드 변경 감지(dirty checking)가 일어나는 것은 영속 상태일 때만 일어난다. 영속 상태에서 준영속 상태로 전환하는 방법 - em.detache() : 해당 객체를 준영속 상태로 전환 - em.clear() : 영속성 컨텍스트를 완전히 초기화하여 모든 Entity를 준영속 상태로 만든다. - 영속성 컨텍스트의 틀은 유지하지만 내용은 비워 새로 만든 것과 같은 상태가 된다. - 따라서 계속해서 ..