Backend

·Backend/Spring
스프링부트를 안 쓰고 간단한 라이브러리를 만드는 도중 다음과 같은 문제 발생. What went wrong: Execution failed for task ':compileJava'. > java.lang.NoSuchFieldError: Class cohttp://m.sun.tools.javac.tree.JCTree$JCImport does not have member field 'cohttp://m.sun.tools.javac.tree.JCTree qualid' 환경변수로 자바 버전이 21 이상인 경우에 gradle build 하니깐 자꾸 실패하길래 관련 글 서칭 https://github.com/projectlombok/lombok/issues/3393 [BUG] lombok 1.8.26 incomp..
·Backend/Spring
Websocket 말 그대로 Web 을 이용한 Socket 통신이다. 즉 , HTTP 통신을 이용한다. 웹 브라우저 WAS 간의 실시간 양방향 통신을 위해 사용한다. 처음 핸드쉐이크를 요청할 때 까진 HTTP 와 통신과정이 같고 그 이후엔 TCP 커넥션을 이용하여 실시간으로 통신한다는 것이 특징이다. 여기서 특별한 헤더가 추가 된다는 것이 특징인데 , Upgrade 헤더이다. HTTP 요청 헤더에서 Websocket 통신을 위해 Upgrade 헤더를 추가해서 요청을 보내는데 이 요청이 WAS 쪽에서 받아 들여져야 그 이후 ws:// or wss:// 프로토콜을 통해 양방향 통신이 가능한 상태가 된다. Reverse Proxy 웹 소켓 서버 정보를 클라이언트쪽에서 (js 단에서) 가지고 있는 것은 상당히 ..
·Backend/Spring
Redisson Reddison 은 Redis 의 클라이언트중 하나로 Jedis, Lecttuce 와 같은 ‘분산’ 서비스 또는 락을 중점으로 이용할 때 사용된다. 이번 포스팅은 락 관련은 넘어가고 Remote Service 에 대해 포스팅하고자 한다. Redisson Remote Service 기존의 다른 Redis 클라이언트로는 할 수 없었던 Redisson 의 분산 서비스의 특징이다. RemoteService 는 크게 서버 인스턴스와 클라이언트 인스턴스로 두 종류로 구성되어있다. 위 그림과 같이 아래 클라이언트 인스턴스가 호출하고자 하는 서비스 인터페이스를 가지고 호출을하면 서버측 인스턴스에서 요청을 받아들이는 방식으로 작동한다. 프로젝트 생성 실행 환경 : springboot 3.1.0, Grad..
·Backend/Spring
정말 오랜만에 블로그를 쓰는 것 같다. 쓰고 싶은 것들이 한 트럭인데 생각만하다가 흘러간 세월이 벌써 이렇게된듯.. 틈틈이 이제 써 봐야겠다. 1. 병행제어 실무에서 동시성관리는 매우 중요하다. 특히나 내가 속한 팀인 거래소팀에서는 더욱 중요한 이슈이다. 이번에 하나의 Redis 서버에서 과부하가 자주 일어나서 개선하는 방향으로 작업을 하다보니 거래소 차트그리는 쪽을 손보게 되었다. 밑의 그림은 대형 거래소 차트 예시이다. 우리거래소는 코인 페어별로 (USDT, ETH, BTC) 등 차트를 그리는데 아무튼 각설하고 , 대충 차트를 그리는 서버가 여러개란 뜻이다. 각 서버는 1분 간격 스케쥴러로 동작하며, 차트를 그린다. 차트그리기 전용 데이터를 다루는 DB가 별도로 존재하며, 차트를 그리기위해 DB값을 ..
·Backend/Spring
문제상황 /product URL로 상품 등록이라는 동작을 한 뒤에 내가 등록한 상품 리스트로 redirect 명령을 내리려고한다. 보통, 이런 리다이렉션 같은 경우는 상품을 등록 후 새로고침을 수행하였을때 재 등록을 방지하기 위해서 사용하는데 소위 PRG (Post, Redirect, Get 이라고 부른다.) 상품 등록 코드 @PostMapping("/new") @ResponseStatus(HttpStatus.CREATED) public String addProduct( @ModelAttribute ProductDto.CreateProduct createProduct, @AuthenticationPrincipal CustomUserDetails user, @RequestParam List productI..
·Backend/Spring
WebFlux 란 웹에서 Reactor의 스트리밍 처리를 담당하기 위해 Spring 5.0 부터 도입이 되었고 non-blocking 에 기반한 reactive streams 를 back pressure 와 함께 처리하여 동시에 많은 요청을 처리하기 위한 목적으로 나왔다. 이전의 Reactive streams는 low 레벨이기 때문에 API 에 있어서 유용하지 못했지만 Webflux에서 풍부한 라이브러리와 연산자들을 통해 서버사이드에 좀 더 집중할 수 있게 되었다. WebFlux vs SpringMVC 기본적으로 SpringMVC는 멀티스레드에 기반한 명령형 프로그래밍 방식이다. 즉, 나타내고자 하는 기능을 분명하게 나눌 수 있고 디버깅이 쉬우며 유지보수가 편리하다. 그에 반해 WebFlux는 여러 St..
·Backend/Spring
Redis Remote Dictionary Server 의 약자로 In-Memory 기반 Key-Value 형식의 Cache Store 이다. Cach 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 저장소이며 read-write 가 빈번하게 일어날 때 사용하며 저장공간이 적다는 것이 특징 MemCache vs Redis 세션은 Memory 기반으로 동작해서 데이터를 저장하는 저장소인데 굳이 Redis를 사용해야 하는이유와 Spring 에서 공식적으로 Session 클러스터링을 Redis 방식을 선택하는 이유가 있다. 두 가지 공통점과 차이점을 비교하면 다음과 같다. 가장 큰 특징은 다양한 자료구조를 지원 데이터 저장할 때 Disk에도 저장이 가능할 수 있게 해 주기 때문에 복구에 용이 Memory ..
·Backend/Spring
📝개발 환경 분리하기 다른사람과 같이 진행하는 토이프로젝트에서 테스트용 환경과 개발 환경의 DB를 다르게 설정해 놨기 때문에 환경의 분리가 필요했다. 이 때 환경을 application.proerties 나 .yml 을 이용하여 분리를 한다. 기존 application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/gubun username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true logging.level: org.hibernate.SQL: debug # org.hibernate.t..
김까따
'Backend' 카테고리의 글 목록