본문 바로가기

분류 전체보기

(65)
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..
HTTPS 동작 과정 이 글은 HTTPS 원리에 대해서 여러 글을 보고 이슈에 대해 추측해서 정리한 주관적인 글이다. 때문에 잘못된 정보가 있을 수 있다. HTTPS란 HTTPS는 Hyper Text Transfer Protocol을 의미하는 HTTP에 Over Secure Socket Layer가 추가된 프로토콜을 말한다. 즉, 통신할때 보안이 적용된 계층(Layer)위에 HTTP가 동작하는 프로토콜을 의미한다. 보안 계층은 SSL(Secure Socket Layer)과 TLS(Transport Layer Security)를 의미하는데 SSL은 넷스케이프에 의해 개발되어 넓게 사용되다가 관리 기구가 바뀐이후로 TLS로 이름이 바뀌었기 때문에 원리를 이해하는데 있어서는 SSL과 TLS를 같은 개념으로 인지해도 무방하다. SS..
Spring 캐시 추상화 (Cache Abstraction) 간단하게 적용해보기 개인 프로젝트를 진행하면서 페이지의 공통 부분에 필요한 데이터를 aop로 적용한 부분이 있다. 때문에 자주 바뀌지 않는 데이터지만 지속적으로 실행되는 메서드가 존재했는데 결과 데이터를 캐시에 저장하면 좋을 것 같아서 찾다보니 캐시 추상화(Cache Abstraction)를 지원하는것을 알게 되었다. 그리고 기존에 redis를 세션 클러스터링으로만 사용하고 있었는데 아깝다고 생각하던 찰나였기 때문에 마침 잘된 것같다. Spring Framework에서는 3.1버전부터 투명하게 캐싱기능을 적용하는 캐싱 추상화를 제공했다고 한다. 이는 트랜잭션 처리 처럼 쉽게 적용이 가능하고 4.1 버전에서 크게 확장되었다고 한다. @transactional로 편리하게 트랜잭션 처리를 하는 것 처럼, 캐싱 관련 어노테이션으로..
블럭(block)과 논블럭(non-block), 동기(sync)와 비동기(async) 상당히 어렵고 생각할수록 혼란스러운 주제다. 많이 언급되지만 개념적으로 명확하게 내려진 정의라고 해야할지 획일화된 정의라고 느껴지는 글은 없었고, 다들 나름의 정의 혹은 그저 누군가의 정의를 옮기기만 한 글이었다. 그래서 나도 다른 글들을 많이 읽으며 고심끝에 마찬가지로 나름대로 내가 이해하고 정의한 대로 풀어보려고한다. 때문에 매우매우매우 주관적이고, 다른 글들을 보고 내 글을 보면 더 느낌이 와닿을 수 있다. 간단한 개념 정의 상당히 많은 글들이 블럭/논블럭에서는 제어권, 동기/비동기는 결과값이라는 키워드를 많이 사용하고 있는데 맞는 말이지만, 개인적으로 코드적으로 얘기를 하는게 더 이해하기 쉽다고 생각해서 함수의 입장에서 풀어보려고 한다. 블럭과 논블럭 블럭 보통 함수 A 안에서 다른 함수 B를 호..
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를 사용하는데 항상 비슷한 형식이 사용된다는..