Redis를 RDB처럼 쓰려고 했던 시도

🫠 실패에 대한 짧은 결론 : 레디스는 인메모리 DB로써 빠른 IO를 요구하는 작업에 최적화 되어있다. 예를 들면 세션 클러스터링이나 캐싱에 많이 사용된다. 그러나 Entity를 계층 구조로 만들고 깊은 내부의 있는 필드에 Document나 RDB 하듯 LIKE 쿼리를 구현하는 것은 바람직하지 않아보인다. 물론 단순한 구조의 Entity에 id필드를 지정하고 id를 가지고 직렬화/역직렬화 하는 것은 가능하다. 결론적으로 key로 value에... » read more

Spring의 테스트 주도 개발 스타일

TDD란 무엇인가? 를 떠나서 스프링 프로젝트에서 TDD를 어떻게 진행하는지에 대한 정리. 여러 스타일 중 한가지 서비스 로직 엔티티와 영속성 API 테스트 통합 테스트

Spring WebFlux vs Spring MVC

WebFlux는 기존의 Spring MVC와 무엇이 다른가? 실제로 Async를 활성화 한 Spring MVC 와 Spring WebFlux의 단순 처리 속도 차이는 있다. (약 5배) Spring MVC (with Async) Spring WebFlux 볼만한 글

자바 마이크로서비스를 활용한 SRE – 책 소개

MSA로 구축된 어플리케이션 관리를 단계적으로 안내하는 실전 가이드 “한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.” 원제 : SRE with Java Microservices 저자 : Jonathan Schneider O’Reilly Media, 2020 / 한빛미디어, 2022 한국에서 MSA는 채용 시장에서 가장 핫한 주제다. MSA는 대용량 서비스를 안정적으로 운영하기 위해 느슨한 결합도, 무중단 배포, 기민한 릴리즈 대응, 탈중앙화에 부합해... » read more

Spring Argument resolver

RequestMappingHandlerAdapter 어노테이션 기반의 컨트롤러, @RequestMapping을 처리하는 HandlerAdapter. RequestMappingHandlerAdapter 동작 방식 ArgumentResolver 어노테이션 기반의 컨트롤러는 다양한 파라미터를 사용할 수 있다. (HttpServletRequest, Model, @RequestParam, @ModelAttribute, @RequestBody) 이것을 처리할 수 있는 것은 ArgumentResolver기반에서 작동하기 때문이다. 원하는 ArgumentResolver를 만들수도 있다. ReturnValueHandler 컨트롤러의 반환 값을 변환 (ModelAndView, ResponseBody, HttpEntity..) HTTP MessageConverter 각 ArgumentResolver들이 HTTP MessageConverter를 사용해 필요한 객체를 생성한다. 각... » read more

JdbcTemplate의 SimpleJdbcInsert Bean 등록에 관하여

SimpleJdbcInsert 빈 등록에 대하여 Reference 일단 오류와 상관없이.. SimpleJdbcInsert를 빈으로 만드는건 뭔가 이상한듯 저게 저 Repository에서만 쓸텐데.. 저걸 빈으로 만들어서 얻는 이점이 없음 JDBC 드라이버에서 제공해주는 DB 메타데이터를 사용해서 insert 쿼리 정보로 사용한다던데 왠지 빈으로 등록 시점에 JDBC 연결이 완료되지 않았을수도 있겠다 여튼, Entity 객체에서 리플렉션으로 ‘타입’정보를 꺼내쓴다면 애초에 dataSource같은게 필요없겠지 (순수 Java 리플렉션만으로 될테니)... » read more

세션을 사용하기 위한 Filter와 Interceptor

HttpSession 세션 생성을 자동으로 해주는 객체 기본 사용법 Tracking session 쿠키를 지원하는지 안하는지 서버는 모른다. 그래서 주소에 JSESSIONID를 세션 생성할때 내려 보내는데 이것을 모든 컨트롤러에서 다 파싱을 해야하니 불편하다. 대게는 쿠키지원을 하니까 tracking-modes를 cookie로 변경하면 주소에 JSESSIONID가 사라진다. Session timeout Filter, Interceptor Filter : 서블릿 Interceptor : 스프링 Filter 만약 로그인 여부 체크를 컨트롤러마다 해야... » read more

Spring Boot; 훑어보기#5 – Spring Data JPA

스프링 데이터 JPA 구현체 없이 인터페이스만으로 리포지토리에 커밋이 가능한 코드를 만들 수 있다. 반복적으로 개발한 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다. RDB에서 스프링 데이터 JPA는 아주 좋은 기능이다. 스프링 데이터 JPA 인터페이스 이외의 인터페이스 선언이나 구현체는 필요없다. 인터페이스 이름에 규칙이 있다. (JPQL) 예를들어 findByNameAndId 라고 하면 & 연산자를 넣을 수 있다. 간단한 요구사항은 인터페이스... » read more

Spring Boot; 훑어보기#4 – JPA

JPA (Java Persistent API) JPA → 인터페이스 (자바 표준) hibernate → 구현체 (여러 벤더들이 있음) 쿼리도 JPA가 직접 만들어서 실행해준다. 객체를 메모리에 넣듯 DB에 넣을 수 있게 해준다. SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다. build.gradle application.properties spring.jpa.show-sql: JPA가 날리는 쿼리를 볼 수 있다. spring.jpa.hibernate.ddl-auto: 테이블을 자동으로 만들어주는 기능이다. (none/create) ORM;... » read more

Spring Boot; 훑어보기#3 – JDBCTemplate

Spring 데이터 억세스 H2 데이터베이스 순수 JDBC 스프링 JdbcTemplate : JDBC 중복을 제거해서 만든 템플릿 JPA : 객체를 쿼리 없이 DB에 저장하는 방법 스프링 데이터 JPA : JPA를 간단하게 쓰기 위한 스프링의 Wrapping H2 데이터베이스 official site bin/h2.sh 실행 JDBC URL : jdbc:h2:tcp://localhost/~/h2/test 파일로 직접 접근하지 말고 TCP로 접속. build.gradle 추가 JDBC 간단한 정리 Connection... » read more