Spring (28) 썸네일형 리스트형 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.. 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를 사용하는데 항상 비슷한 형식이 사용된다는.. 이전 1 2 3 4 다음