springboot(8)
-
99클럽 18일차 TIL: gRPC
#1. 오늘의 학습 키워드 자바 Spring Boot에서의 gRPC 에 대해서 MSA 구조에서 service 간 통신에서 REST API 를 쓸 수도 있지만 gRPC 를 쓸 수도 있다. Spring Boot 에서 이미 gRPC 를 지원해주는 라이브러리가 존재하기 때문. 일반적으로 REST API 는 단일 request 단일 response 이기 때문에, 여러 response 반환을 원할 경우, 그만큼의 request 를 보내야 해서 네트워크 통신 비용이 많이 소모된다. 그래서 gRPC 가 성능적인 관점에서 REST API 를 사용하다 좋은 대체제로 대두된다. #2. 공부한 내용 gRPC google, Remote Procedure Calls 구글에서 개발한 원격 프로세저 호출을 위한 시스템. REST 처..
2024.04.21 -
99클럽 16일차 TIL: Spring Webflux
#1. 오늘의 학습 키워드 Spring Webflux 에 대해서 기존에 많이 사용했던 Spring MVC 패턴은 blocking I/O 방식이다. 요청을 하고 응답이 올 때까지 대기. 그런데 몇몇 요건에 따르면 요청을 보내고 다른 일을 할 수 있도록 대기하지 않길 원한다. 예를 들면 시스템 알람과 같은 것. 실시간 어플리케이션 그러면 Non-blocking I/O 방식을 지원해주는 프레임워크는 무엇일까 #2. 공부한 내용 Spring Webflux 반응형 및 비동기적 웹 앱 개발을 지원하는 모듈 비동기 Non-Blocking I/O 방식을 제공 Reactive Streams 의 구현체 중 하나인 Reactor 에 의존하여 비동기 로직을 구성. 비동기적인 이벤트 지향 프로그래밍을 통해 얻을 수 있는 이점 ..
2024.04.19 -
99클럽 15일차 TIL: N+1문제
#1. 오늘의 학습 키워드 자바 스프링에서의 N+1 문제 에 대해서 JPA를 적용하는 과정에서, DB에 관련된 이모저모를 알아보는 과정에서 또 하나 재밌는 개념을 발견했다. 트랜잭션, MVC 패턴 등은 이미 백엔드 코드 구현 중에 체득되어있는 지식들이지만, 해당 문제에 대한 대비는 아직 백엔드 코드에서 이뤄지지 않은 것 같다. 혹은 눈치를 채지 못했거나. 또한 분명 대학교 수업 시간에 배웠던 기억이 있지만, 가물가물하기에 다시 한 번 상기시켜보도록 하자. #2. 공부한 내용 N+1 문제 연관 관계에서 발생하는 이슈 연관 관계가 설정된 Entity를 조회할 시, 조회된 데이터 개수 (N) 만큼 연관 관계가 있는 데이터를 추가로 조회하는 쿼리를 발생시키는 문제 쉽게 말하면 1번 쿼리로 조회하고자 하는데 N ..
2024.04.18 -
99클럽 14일차 TIL: Transaction
#1. 오늘의 학습 키워드 자바 스프링에서의 Transaction 에 대해서 JPA, myBatis 동시 사용을 위한 multitransaction 을 구현하기 전 Transaction 자체에 대해서 알아보고 넘어가자. DB 수업 시간에 아주 중요한 파트를 차지했던 Transaction. 이렇게 수업시간에 배웠던 내용들을 실제 코드에서 구현하는 것은 재밌는 일이다. 트랜잭션의 구현은 복잡할 줄 알았는데, Spring에서는 굉장히 쉬운 방법을 제공하고 있었다. #2. 공부한 내용 Transaction 트랜잭션 더 이상 쪼갤 수 없는 업무 처리의 최소 단위. 예) A → B 에게 송금할 때: A는 돈을 지불하고 B는 돈을 받는 것. 이 작업들은 하나의 트랜잭션으로 쪼갤 수 없다. 트랜잭션의 특징: ACID ..
2024.04.17 -
99클럽 10일차 TIL: POJO 클래스
#1. 오늘의 학습 키워드 자바 스프링에서 POJO 클래스란 무엇일까 @Controller, @Service, @Repository, @Configuration 등 Bean 으로 등록 할 객체들의 대응하는 클래스들을 뭐라고 통칭할 지 궁금해졌다. controller → service → repository 의 기본적인 백엔드 개발 구조는 노드로 백엔드 개발 시작했을 때부터 익숙하였기에, 각 컴포넌트의 의미에 대해서는 자연스럽게 받아드렸다. 그러나 노드에서는 각 구조에 대해서 따로 노드가 관리를 해주는 게 아닌, 코드의 로직 자체가 자신이 어떤 역할을 담당하는 지 정했었다. 스프링에서는 클래스 선언 부 상단에 해당 클래스가 어떤 컴포넌트에 속하는 지 어노테이션을 명시를 해주었는데, 이 행위가 어떤 의미를 ..
2024.04.13 -
99클럽 9일차 TIL: Bean 관련 에러
#1. 오늘의 학습 키워드 자바스프링부트에서의 아래 오류 해결 과정: Description: Parameter 1 of constructor in ~~ required a bean of type 'xx' that could not be found. Action: Consider defining a bean of type 'xx' in your configuration. Loki 서버로 API 호출하는 Util 클래스를 만들고 배포하였을 때, 발생된 오류. 컴파일 타임 및 기본 로컬 Profile 환경에서는 검출이 안 된 오류. 오류의 의미는 LokiUtil 클래스가 bean 으로 등록되지 않았다는 것이다. LokiUtil을 다른 곳에서 객체를 선언하고 사용하고 있었던 상황 그런데 사실 LokiUtil 클..
2024.04.12