본문 바로가기

분류 전체보기

(62)
블럭(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를 사용하는데 항상 비슷한 형식이 사용된다는..
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
Spring JPA Querydsl 설정과 간단한 사용 JPA를 처음 사용하면서 아직 많이 써보진 않았지만 JPA의 장점과 한계에 느끼고있다. 개인적으로 느끼는 JPA의 가장 큰 장점은 영속성이다. 예시로, Mybatis를 사용할때는 insert 후 바로 컬럼을 업데이트 해줘야 하는일이 있으면 다시 update로직을 불러서 해결했지만 JPA는 쉽게 save(insert, update)후 리턴받은 객체에 다시 set필드만 해줘도 영속성 때문에 적용이 된다는 것이다. 정말 좋은 장점이지만 반대로 단점도 조금 큰 것 같다. spring-data-jpa에서 제공하는 메서드와 JPQL같은 정적쿼리에는 동적인 쿼리를 만들기에 한계가 있다. 이를 극복하기 위한 방안으로 Querydsl이라는 프레임워크가 있다. Querydsl SQL, JPQL을 자바 소스코드로 만들어주는..