분류 전체보기
-
[Spring In Action] 11. 리액티브 API 개발하기Programming Language/Spring 2023. 3. 24. 13:29
Chapter 11. REST API를 리액티브하게 사용하기 스프링 5가 RestTemplate의 리액티브 대안으로 WebClinet를 제공 WebClient는 외부 API로 요청을 할 때 리액티브 타입의 전송과 수신 모두를 한다. 리소스 얻기(GET) RestTemplate의 경우는 getForObject() Mono ingredient = WebClient.create() .get() .uri("http://localhost:8080/ingredients/{id}", ingredientId) .retrieve() .bodyToMono(Ingredient.class); ingredient.subscribe(i -> { ... }) 컬렉션에 저장된 값들을 반환하는 요청 Flux ingredients = ..
-
[알고리즘] DFS, BFS 개념Algorithm/알고리즘 2023. 2. 24. 13:44
BFS와 DFS 두가지 모두 그래프를 탐색하는 방법 그래프: 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종 그래프 탐색: 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한번씩 방문하는 것 DFS 깊이 우선 탐색 (Depth-First Search) 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기로 넘어가기전에 해당 분기를 완벽하게 탐색하는 방식 예를 들어 미로찾기를 할 때 최대한 한 방향으로 갈 수 있을 때까지 쭉 가다가 더이상 갈 수 없게되면 다시 가장 가까운 갈림길로 돌아와서 그 갈림길로부터 다시 다른 방향으로 탐색을 진행하는 방식 BFS 너비 우선 탐색 (Breadth-First Search) 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한..
-
@Transaction(readOnly = true)Programming Language/Spring 2022. 11. 21. 21:45
스프링 프레임워크에서 @Transaction(readOnly = true)로 트랜잭션을 읽기 전용 모드로 설정할 수 있다. @Transaction(readOnly = true)트랜잭션에 readOnly = true 옵션을 주면 스프링 프레임워크가 하이버네이트 세션 플러시 모드를 MANUAL로 설정한다. 이렇게 하면 강제로 플러시를 호출하지 않는 한 플러시가 일어나지 않는다. 따라서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않아 엔티티의 등록, 수정, 삭제가 동작하지 않고 또한 읽기 전용으로 영속성 컨텍스트는 변경 감지를 위한 스냅샷을 보관하지 않으므로 성능이 향상된다. 즉 엔티티를 읽기 전용으로 조회하면 변경 감지를 위한 스냅샷을 유지하지 않아도 되고 영속성 컨텍스트를 플러시 하지 않아도 돼..
-
[데이터베이스] RDBMS vs NoSQLDatabase/데이터베이스 2022. 10. 9. 19:59
이번 포스팅에서는 RDBMS 와 NoSQL의 차이점에 대해 알아보겠습니다. 차이점을 알아보기에 앞서 기본적인 개념부터 정리해보겠습니다. Database와 DBMS 그리고 SQL - Database: 여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리하는 데이터 집합 - DBMS: DataBase Management System의 약자로서 사용자와 데이터베이스 사이에서 사용자의 요청을 해석하여 데이터베이스에 저장된 정보를 관리할 수 있도록 해주는 소프트웨어 - SQL: Structured Query Language의 약자로서 관계형 데이테베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이며 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성..
-
[Spring] 스프링 트랜잭션Programming Language/Spring 2022. 9. 30. 21:07
트랜잭션이란 트랜잭션은 완전히 성공 하거나 완전히 실패하는 일련의 논리적 작업 단위 입니다. @Transactional 애노테이션 스프링 트랜잭션은 프로그래밍 방식과 선언적 방식의 두가지 방식으로 구분할 수 있습니다. 프로그래밍 방식 TransactionTemplate 직접 PlatformTransactionManager 구현하기 트랜잭션 관리가 비즈니스 로직과 함께 사용되기 때문에 프로그래밍 방식으로는 널리 사용되지 않음 하지만 기능이 몇가지 밖에 없는 애플리케이션에서는 트랜잭션 프록시를 통한 부하가 중한 작업으로 느껴질 수 있어서 프로그래밍 방식이 사용될 수 있음 선언적 방식 (@Transactional) 메서드 혹은 구현체 클래스 상단에 @Transactional 애노테이션을 사용합니다. 클래스 수..
-
[Spring] @Bean vs @ComponentProgramming Language/Spring 2022. 9. 28. 19:58
@Bean과 @Component 차이 안녕하세요. 이번 시간에는 빈과 컴포넌트의 차이에 대해 알아보겠습니다. 먼저 스프링은 개발의 제어권이 스프링 컨테이너(IoC 컨테이너)에 있습니다. 그래서 이를 IoC (Inversion Of Control), 제어의 역전이라고 합니다. 스프링이 개발자 대신 객체를 제어하기 위해 객체들이 빈(Bean)으로 등록되어 있어야 합니다. 과거에는 객체를 빈으로 등록하기 위해 XML로 지정했어야 하는데 요즘은 애노테이션으로 간단하게 등록할 수 있습니다. @Bean @Bean은 메서드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 애노테이션 입니다. @Configuration public class AppConfig { @Bean public ..
-
[JAVA] 추상 클래스와 인터페이스의 차이Programming Language/Java & Kotlin 2022. 9. 22. 19:45
개요 이번 포스팅에서는 추상 클래스와 인터페이스의 차이점에 대해 알아보겠습니다. 차이점에 대해 알아보기에 앞서 추상 클래스와 인터페이스의 개념에 대해 설명드리겠습니다. 추상 클래스 (abstract class) 추상 클래스(abstract class)란 하나 이상의 추상 메서드 (abstract method)를 포함하는 클래스 입니다. 추상 메서드는 선언만 있고 본체는 없는 함수이며 선언부에 'abstract'라는 키워드를 붙입니다. 추상 메서드가 포함되어 있다면 클래스도 추상 클래스이므로 클래스명 앞에도 'abstract' 키워드를 붙여야 합니다. abstract class Animal { public String sName; public void move() { } abs..
-
[JAVA & Kotlin] Java 메모리 구조 (JVM Memory Structure)Programming Language/Java & Kotlin 2022. 9. 14. 19:41
JVM JVM(Java Virtual Machine)은 자바 가상 머신으로 자바 프로그램을 실행시키기 위해서 반드시 실행되어야 하는 소프트웨어 입니다. 자바 프로그램을 실행시키는 것은 JVM을 실행시키고 그 위에서 자바 프로그램을 실행시킨다는 의미입니다. 즉 JVM은 운영체제(OS)와 자바 프로그램 사이를 연결해주는 중계자 역할을 합니다. 자바 코드를 컴파일하여 .class 바이트 코드(.class 파일은 바이트 코드라고 하는데 사람이 쓰는 자바 코드에서 컴퓨터 읽는 기계어의 중간 단계라고 할 수 있습니다)로 만들면 이 코드가 자바 가상 머신 환경에서 실행됩니다. 이러한 특징으로 인해 자바 프로그램에서 오류가 발생해도 JVM만 다운될 뿐 전체 시스템에 데미지를 주지 않습니다. 또한 JVM 덕분에 플랫폼에..