본문 바로가기

Spring

(26)
Spring Webflux (1) - 간단한 시작 논블로킹으로 동작하는 Webflux로 간단한 API 앱을 구현하고싶어서 시작했다. webflux 기초 지식이 많이 부족한 내가 쌓아가는 과정을 기록하려고 한다. IDE : eclipse JDK : 1.8 프로젝트 생성 Spring boot에 Gradle로 설정한 후 Next 간단하게 Reactive Web만 체크하고 생성 자바 라이브러리가 안되어있다면 Build Path에서 add library 해주자 gradle plugins { id 'org.springframework.boot' version '2.6.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } group = 'com.zero' versio..
Spring 캐시 추상화 (Cache Abstraction) 간단하게 적용해보기 개인 프로젝트를 진행하면서 페이지의 공통 부분에 필요한 데이터를 aop로 적용한 부분이 있다. 때문에 자주 바뀌지 않는 데이터지만 지속적으로 실행되는 메서드가 존재했는데 결과 데이터를 캐시에 저장하면 좋을 것 같아서 찾다보니 캐시 추상화(Cache Abstraction)를 지원하는것을 알게 되었다. 그리고 기존에 redis를 세션 클러스터링으로만 사용하고 있었는데 아깝다고 생각하던 찰나였기 때문에 마침 잘된 것같다. Spring Framework에서는 3.1버전부터 투명하게 캐싱기능을 적용하는 캐싱 추상화를 제공했다고 한다. 이는 트랜잭션 처리 처럼 쉽게 적용이 가능하고 4.1 버전에서 크게 확장되었다고 한다. @transactional로 편리하게 트랜잭션 처리를 하는 것 처럼, 캐싱 관련 어노테이션으로..
Spring redis session 적용하기 지난 글에 이어서 스프링에 redis lettuce를 적용해봤다. 그래서 이제 서버단에서 redis로 데이터를 관리할 수 있게 되었지만, 사실 목적은 세션데이터를 redis로 클러스터링해서 관리하는것이다. 내 경우 톰캣이 1대여서 로드밸런싱은 필요없지만 서버를 재시작해도 세션이 남아있게 하기 위해 spring-session-data-redis를 활용해 세션또한 redis로 관리하기로 했다. 스프링 문서를 참고해 적용했다. https://docs.spring.io/spring-session/docs/current/reference/html5/#java-servlet-container-initialization Spring Session With the new major release version, the..
Spring Form Method PUT, DELETE로 하기 Html에서 Form태그로 데이터를 전송할때 method를 지정하는데 get과 post밖에 지원을 하지않는다. 이유는 길게 있지만 form에 put과 delete를 사용하는건 form에 맞지않고 사용할 이유가 없다고 하기 때문이다. 하지만 사용하는 방법이 있다. 예시 이렇게 form안에 input hidden으로 _method로 PUT을 넣어주고 web.xml hiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter hiddenHttpMethodFilter /* HiddenHttpMethodFilter를 하나 추가해주면된다. 이렇게 하면 Controller에서 PUT이나 DELETE로 지정한 메서드로 잘 가지지만 fiddle..
Spring (boot 아님) redis (lettuce)적용하기 redis에 대해 호기심이 생겨서 로그인 정보를 캐시에 저장하는 기능으로 redis를 적용해보기로 했다. Redis가 뭐시여 Redis는 Mysql이나 Oracle과 같이 DB 소프트웨어다. 하지만 다른점은 디스크에 저장하는 Mysql, Oracle등 DB 소프트웨어들과 다르게 Memory(램)에 저장하는 오픈소스 DB 소프트웨어다. 때문에 캐시처럼 데이터가 휘발성이 있지만 더 빠른 접근이 가능하기 때문에 빠른 속도를 얻을 수 있다. 싱글 스레드로 동작, 키-값 형태의 NoSql 등 많은 특징이 있고 장점과 단점들이 있지만 사실 나는 정리할 정도로 redis에 대한 지식은 없고 느낌만 맛보고 있는 수준이다. redis는 빠른 속도가 장점이지만 데이터가 휘발성이 있다는 단점이 있기 때문에, 데이터의 생명?..
Spring OCI(oracle cloude infrastructure) Java SDK 활용 (2) Object Storage에 Bucket, Object, PreAuth CRD 하기 지난 글 활용(1)과 이어지는 내용 오라클 클라우드 Object Storage에 파일을 업로드해서 액세스 하기위해선 기본적으로 Bucket, Obejct(파일), PreAuth(사전인증)에 대한 CRD 기능이 최소한으로 필요하다. Bucket, Object, PreAuth란Object는 업로드한 파일을 의미하고,Bucket은 Object들이 업로드 된 공간이다 (aws s3의 bucket과 동일)PreAuth는 업로드한 Object들에 대해 URL사용이 필요한 경우가 있을텐데, Object는 사전 인증이 없으면 URL을 통한 접근이 거부된다. 이때 필요한 사전 인증이 PreAuth(PreAuthentication)다.  CRD 과정테스트 코드를 작성하면서 oci를 사용하는데 항상 비슷한 형식이 사용된다는..
Spring OCI(oracle cloud infrastructure) Java SDK 활용 (1) Object Storage bucket 정보 가져오기 Storage AWS나 오라클 같은 클라우드 서비스에는 파일을 업로드 할 수 있는 Storage 서비스가 있다. 대표적으로 AWS의 S3가 있는데 확실히는 잘 모르지만, AWS에서는 이 S3를 활용할 수 있는 api를 제공하기 때문에 api를 활용해 서버단에서 액세스를 할 수 있다. 이와 비슷하게 오라클 클라우드에서도 Object Storage라는 스토리지 서비스를 제공하고, OCI 라이브러리를 활용해 마찬가지로 서버단에서 액세스하는게 가능하다. 그래서 정보는 저어엉말 너무 없지만 오라클에서 제공하는 oci java sdk를 활용해서 object storage를 활용하는 솔루션을 만들예정이다. (삽질을 많이 했다.) 설정 및 전제 조건 당연히 오라클 클라우드 계정이 있다는 가정 하에 oci를 사용하기 위..
Spring MVC JPA 에서 Mybatis 추가하기 이전에 JPA + Querydsl의 구성을 사용하는데 동적으로 복잡한 쿼리를 짜야할때 한계를 느껴서 Mybatis를 추가로 설정해 사용하기로 했다. JPA의 CUD 영속성 장점과 복잡한 Read 쿼리를 짤 수 있는 Mybatis를 활용하면 좋을 것이라고 생각했기 때문이다. Mybatis 설정만 얘기할 것이기 때문에 JPA설정은 이전글을 참고하면 된다. https://riverblue.tistory.com/47?category=753253