회사에서 캐시 구조에 대해서 리팩토링을 진행하는 과정에서 EhCache Self-Invocation 문제로 인해 캐시가 정상적으로 동작하지 않았던 사례에 대해서 포스팅하려고 한다. 이 문제가 무엇인지 예제를 통해서 간단하게 살펴보려고 한다. @Cacheable(value = "testCache") public String cache() { log.error("[Info] Create Data!!!"); return "hello, ch4njun"; } public String test() { log.error("[Info] test call!"); return cache(); } 위와 같은 구성이 있을 때 test() 의 내부에서 @Cacheable 어노테이션이 붙어있는 cache() 메서드를 호출한다. ..
개인적으로 스터디를 진행하는게 있는데 거기서 스터디 홈페이지를 개발하는 토이 프로젝트를 진행하고 있다. 그 과정에서 내가 고민한 부분과 그 것을 어떻게 해결했는지에 대한 경험을 이야기해보려 한다. 문제 내가 경험한 문제는 캘린더를 개발하는 과정에서 생긴 데이터 동기화 문제였다. 클라이언트 A가 캘린더 화면에 들어오면서 최초 로딩된 데이터를 가지고 온다. 그 상태에서 클라이언트 B가 데이터를 수정할 경우 클라이언트 A가 새로고침을 하거나 Polling 하는 등 새로 데이터를 받아오지 않는한 데이터를 동기화되지 않는다. 물론 사용자가 많지 않고 실시간 데이터 동기화가 중요하지 않은 곳이긴 했지만, "이게 실시간 서비스였다면 어땠을까?", "사용자가 많은 서비스라면 어땠을까?" 라는 생각으로 이 부분을 개선해..
https://gmoon92.github.io/ahea/2019/06/25/ahea-2019-conference.html 개발자로서 첫 Conference 발표 Moon gmoon92.github.io 사실 이 컨퍼런스 및 블로그의 내용을 보고 정리한 내용이다. 내 포스팅은 많은 부분이 생략되어 있으니 이 포스팅을 직접보는 것을 권장한다. 간단하게 원리정도만 이해하고 있었는데 막상 깊이있게 공부하고자 하니 정말 세련되고 어려운 기술이다. 나도 아직 위 블로그의 글을 전부 이해하진 못했다... 이해한 부분에 대해서만 우선적으로 포스팅을 남긴다. 출처 : https://gmoon92.github.io/ahea/2019/06/25/ahea-2019-conference.html
Dependency org.springframework.boot spring-boot-starter-data-r2dbc io.r2dbc r2dbc-h2 runtime com.h2database h2 runtime Spring Data R2DBC 를 이용하기 위해서는 r2dbc-spi, r2dbc-pool, spring-data-r2dbc 의 의존성이 필요한데 spring-boot-starter-data-r2dbc 의존성 하나를 추가하면 이 모든 의존성을 한번에 추가해준다. 그리고 H2 Database 를 사용하기 위해서 관련 의존성을 추가해준다. Configuration @Configuration @EnableR2dbcRepositories public class R2dbcConfig extends Ab..
사실상 Spring Data 에서 제공해주는 Repository 를 이용하거나 R2dbcEntityTemplate 을 이용하는 방법중에 선택해서 사용하면 된다. Repository 를 이용하면 Spring Data 의 기술인 EntityCallback, CustomConverter 등의 이용이 가능하다는 장점이 있다. ID 필드에 Auto Increment 옵션을 주지 않았을 때 Repository 방식에서 Insert 가 안되는 문제가 있다. public Mono saveSchedule(int year, int month, int body) { return scheduleRepository.save(new Schedule(pk++, year, month, body)) .map(ScheduleDto::o..