본문 바로가기

분류 전체보기

(65)
Spring Webflux Exception 전역 처리 (Functional Endpoints) webflux로 api 서버를 하나 개발하면서 에러 상황들을 전역으로 처리하고 싶었다. 스프링 mvc나 boot에서는 @ControllerAdvice나 @RestControllerAdvice를 사용하는데, webflux도 어노테이션 방식으로 @Controller를 사용한다면 동일하게 @ControllerAdvice를 사용할 수 있을것 같았다. 하지만 나는 request를 Functional Endpoints 방식으로 RouterFunction을 활용해 요청을 라우팅하기 때문에 다른 예제를 찾아보게 되었고, 그 과정에서 메서드를 까보진 않았지만 까보기전 추측한 생각을 정리하려 한다. 참고 : https://www.baeldung.com/spring-webflux-errors Handling Errors i..
Spring Webflux (3) - Select 이전 글에서 Insert하는 과정에 대해서 작성했다. 이번엔 CRUD중 Read인 SELECT 과정에 대해서 기록해보려고 한다. 사실 SELECT기능을 구현한지 꽤 되어서 기억이 듬성듬성이다. 이전과 마찬가지로 Board와 BoardFile 1:N 관계에서 목표는 Board를 여러개 받는 Flux를 리턴하는 api( getBoardList() )와 Board 1개와 해당 Board의 BoardFile을 여러개 리턴하는 api( getBoardOne() )를 구현하는 것이다. 1. getBoardList api 에 들어가기 전에 이슈가 하나 생겼다. 나는 MariaDB를 사용하고있고, 기존에 r2dbc 설정에서 mysql 드라이버를 사용하고 있었는데 이 드라이버에서 DatabaseClient나 R2dbcE..
String은 왜 불변 객체로 만들었을까? Java에서 String은 불변 객체다. 이전글 : https://riverblue.tistory.com/42?category=929398 Java String, StringBuilder, StringBuffer 자바에서 문자열 클래스는 대표적으로 String, StringBuilder, StringBuffer가 있다. 사실 String밖에 다루지 않아봐서 잘 몰랐는데 좋은 경험을 하게 되어서 나머지 두 클래스도 다뤄야 겠다고 생각했다. St riverblue.tistory.com 근데 한번도 왜 불변으로 만들었는지, 불변이 뭐가 좋은지 생각해본적이 없다. 그래서 이유를 좀 찾아보게 되었고 나름대로 정리한 생각을 기록해본다. 참고 : https://www.baeldung.com/java-string-im..
StringBuilder 살짝 까보기 (생성자, append) StringBuilder (Buffer도 마찬가지)를 몇번 사용했지만, 어떻게 생긴지에 대해서 생각해본적이 없어서 살짝 까보려고한다. 참고로 jdk는 1.8 StringBuilder는 추상클래스인 AbstractStringBuilder을 상속받고있다. 이름부터만 봐도 StringBuilder에 대해서 정의한 클래스라는게 느껴진다. StringBuilder 생성자 일부분 public StringBuilder() { super(16); } /** * Constructs a string builder with no characters in it and an * initial capacity specified by the {@code capacity} argument. * * @param capacity the..
Spring AOP 주의할 점 (프록시의 주의할 점) Spring에서 aop를 동작할 땐 프록시 방식으로 동작한다. 하지만 이 프록시를 사용할 때 주의할 점이 무엇인가 질문을 받았던 적이 있는데, 대답을 못했다. 그러고보니 나는 업무를 하면서 aop를 사실 잘 안쓰기도 했고, 개인적으로 사용할 때 그런걸 고려해본적이 없는데 그동안 aop를 제대로 활용하지 않아서 그런것이라고 생각된다. 그러면 질문의 답이 무엇일까? 사실 모른다. 하지만 구글링을 조금 해본 결과 스프링에서 aop를 타지 않는 케이스가 생길 수 있는데 아래와 같은 상황이다. 콘솔에 print만 하는 간단한 Service와 aop를 구현했다. PrintTestService @Service public class PrintTestService { @AopTester public void logic..
Spring AOP의 동작 원리 (1) - JDK Dynamic Proxy 이전에 AOP 사용에 대해 정리한 글이 있는데, 생각해보니 정확한 원리에 대해서 알아보지 못한거 같아 정리하려고 한다. Spring에서 AOP는 프록시 방식으로 동작한다. 크게 두가지 프록시 방식이 있는데 1. JDK Dynamic Proxy 2. CGLib 이 중 1번 jdk의 동적 프록시에 대해서 개인적으로 찾아보고 생각한 내용을 정리해본다. 프록시가 뭐시여 프록시는 대리 수행하는 놈이라고 생각한다. 사실 프록시는 다양한 곳에서 널리 쓰이는 개념인데, 그렇다면 Spring에서 프록시는 어떤 것으로 생각해야할까. 이렇다는건 아니지만 느낌을 쉽게 받기위해 프록시 유무에 따라 동작을 비교해 본다. 프록시X 프록시 O Service Proxy는 실제 Service가 아니지만 Service인척 Controll..
Spring Webflux (2) - Insert 이전 글에서 간단하게 Webflux 사용을 위한 R2DBC, Router, Handler에 대해 설정해봤다. 이번엔 CRUD중 Create인 Insert 기능을 먼저 구현하려고 한다. Insert의 목표는 게시글인 Board 추가와 첨부파일을 의미하는 BoardFile도 Insert하는 기능을 구현할 예정이다. Board와 BoardFile은 릴레이션(1:N)으로 테이블을 구성했다. 테스트 - Postman Board Class import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.co..
Mysql 인덱스에 대해서 저장 프로시저 하나를 돌리면서 인덱스의 중요성을 알게된 적이 있다. 그때 인덱스에 대해서 많이 찾아보고 알게된 것들이 많았는데 시간이 지날수록 금방 잊어버려서 다시 공부하는겸 인덱스에 대해서 정리해보려한다. 인덱스란 인덱스에 대해서 검색하면 항상 색인이라는 단어가 나온다. 실제로 색인은 영어로 index로 쓰이고 책에서 내용의 단어나 구절등의 위치가 몇페이지에 있는지 알려주는 정보의 목록인데, 개인적으로 책을 많이 읽지 않아서 그런지 색인이라는 단어가 굉장히 낯설게 느껴진다. 때문에 나처럼 책알못이라 색인이 와닿지 않는다면, 호텔의 x호 ~ x호는 왼쪽 x호 ~ x호 는 오른쪽으로 표시되어있는 화살표를 생각한다면 좀 더 와닿지 않을까 추측해본다. 방 호수를 의미하는 room_num이라는 컬럼에 인덱스를 ..