본문 바로가기

반응형

백엔드 개발/Spring

(4)
[spring cloud] hystrix 도입하면서 alpine linux에서 jvm error 발생 저번에 t아카데미에서 MSA에 관한 세미나에 참석하고 이번에 클라우드 네이티브 자바라는 책을 접하면서(완독은 못하고 일부 읽었다.)퍼블릭 클라우드 서비스를 사용하고 컨테이너 기술을 사용하고 있다면 내가 공부한 내용을 실천해야겠다고 생각했다. OOP의 단일책임원칙처럼 애플리케이션이 가급적 하나의 목적(하나의 도메인이라고 표현해야할지도 모르겠다...)을 가지고 기능하도록 서비스 컴포넌트로 분리하고자 했다. 스토리지를 서비스 컴포넌트마다 하나씩 두고 각 서비스 컴포넌트가 단일 인터페이스로 통신하는 형식으로 바꿔야 겠다는 생각을 했다.사용자 로그를 현재 하나의 컨텐츠를 조회할 때만 기록하는데 사용자가 검색할 때 무엇을 검색했는지 기록에 남기는 요구사항이 있었다. Firestore를 저장소로 사용하고 로직을 작성..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 3 한참 관련 로직을 작성하던 중 클래스를 잘못 설계한 벽에 부딪히고 말았다.그리고 토요일 kt 기지국 화재로....모든 의욕을 잃었다.백엔드 프로그래밍에서는 계층마다 dto를 둔다. db에서 데이터를 읽고 쓸때는 entity class를 사용한다.클라이언트와 통신할 때는 entity class를 그대로 노출할 수 없으니 request의 parameter와 response와 mapping해주는 dto를 둔다.그리고 현재 redis를 사용할 경우에는 dto를 하나 더 사용하는 경우가 생길 수 있다.그런데 맨 처음 rdbms를 사용할 때는 redis를 고려하지 않고 dto를 하나만 두고 service 객체에서 하나의 dto 타입만을 반환해줘서 문제가 생겼다. 위와 같이 클라이언트에 보내줄 데이터타입으로 전환하는..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 2 1. 필요한 기능 테스트 코드로 작성 EventCacheService라는 객체를 이용해서 캐싱과 관련된 기능들을 구현한다. 우선 test를 작성해서 필요한 메소드들을 명세해보자 컨텐츠를 조회하는 work flow 1. 사용자는 서버에 컨텐츠 요청(페이징과 검색 조건 있습니다.)2. 검색조건으로 조합한 키로 레디스에 관련 컨텐츠가 캐싱되어 있는지 확인(exist()에 해당)(레디스에 키가 없는 경우) 3. 값이 없는 경우 mariadb에서 입력받은 검색조건으로 모든 컨텐츠 조회하고 redis에 저장(save()에 해당)4. key에 대해서 expire 속성을 넣어준다.(다음 크롤링할 떄 까지로(최소 일주일 가량 될 것)5. 이제 사용자에게 컨텐츠를 리턴해줌(레디스에 키가 있는 경우)3. 레디스에서 해당하는..
[spring] redis로 caching해서 dbms의 부하 줄이기 - 1 평소에 Nosql에 관심이 많았는데. 이번에 퇴사하고 개인프로젝트를 하면서 redis로 caching을 해보기로 결심했다.본래 목적은 캐싱이었는데 사용자의 이벤트 조회 로그를 저장해서 서비스의 메인에 내가 조회한 상품을 노출하는 기능을 먼저 구현하게 되었다. (이것도 차후 글을 올려야겠다.)로그를 기록하고 메인에 노출하는 기능을 구현하면서 레디스가 제공하는 여러 자료형에 대해 이해하고 성능도 테스트해볼 수 있었는데 역시 In-memory db라서 I/O 성능이 꽤 좋다고 느꼈었다.그래서 전격적으로 db의 데이터를 redis로 옮겨서 캐싱을 해보기로 결정했다. 1. 어떤 자료형으로 구현할 것인가? 레디스가 제공하는 자료형은 set, sorted set,hash, list, string으로 네가지가 있다.모..

반응형