본문 바로가기

전체 글

(258)
Spring에 Redis적용하기 1. 라이브러리 설정하기implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2. RedisConfig 생성하기@Configuration@EnableCachingpublic class RedisConfig { @Bean // RedisTemplate를 빈으로 등록하여 애플리케이션에서 사용할 수 있게 함 public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(redis..
QueryDSL을 이용하여 동적 쿼리 구현하기 1. 의존성 추가implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api"의존성이 제대로 추가되었다면 Q 클래스가 생성됨 2. QuerydslConfig 파일 생성@Configurationpublic class QuerydslCo..
조회수 및 어뷰징 방지 Redis로 구현하기 요구사항1. 상품 조회 시 해당 게시글의 조회수를 카운팅 + 어뷰징을 방지할 것2. 상품을 조회할 때 상품의 상세정보와 함께 조회수도 같이 볼 수 있어야 함3. 조회수를 기준으로 상위 10개의 상품정보를 랭킹을 포함하여 조회할 수 있어야 함 조회수 카운팅 구현Global Cache 방식 사용Local Cache 전략을 사용하게 되면 속도가 빠르지만 다중 서버 환경에서는 각 서버마다 중복된 데이터를 보관해야 하고, 동기화되지 않기 때문에 데이터의 정합성 문제가 발생하기 때문에 속도가 Local Cache 보다는 느리지만 정합성과 중복성 문제를 해결하기 위한  Global Cache 방식을 선택! Redis 선택 이유다양한 캐시 데이터베이스 중에서도 Redis는 다양한 자료구조를 지원함 -> 이번에 구현해야..
Redis 캐싱 전략과 조회 성능 비교 Redis 네이밍 컨벤션콜론(:)을 활용해 계층적으로 의미를 구분해서 사용한다!users:200:profile ->  users 중에서 pk가 200인 user의 profile 캐시 (Cache)원본 저장소보다 빠르게 데이터를 가져올 수 있는 임시 데이터 저장소임시 저장소를 의미한다고 보면 됨 캐싱 (Caching)캐시에 저장해서 데이터를 빠르게 가져오는 방식Cache Hit : 데이터를 요청했을 때 캐시에 데이터가 있는 경우Cache Miss : 데이터를 요청했을 때 캐시에 데이터가 없는 경우 캐싱전략Cache Aside : 조회시에 캐시를 먼저 찌르고, 없으면 DB에서 조회하는 방식데이터를 조회할 때 캐시에서 먼저 조회하고, 없으면 데이터베이스를 통해서 조회해오는 방식 1. 캐시에 데이터가 있을 경우..
Redis의 정의와 기본 명령어 간단한 컴퓨터 구조 지식RAM컴퓨터가 작업할 때 임시로 사용하는 공간컴퓨터가 실행중에 값을 임시로 저장하는 공간 → 램이 크면 클수록 작업을 빠르게 할 수 있음휘발성실행 속도를 좌우함ROM시스템이 부팅될 때 필요한 기본적인 데이터를 저장비휘발성부팅할 때 꼭 필요한 정보가 저장되어 있는 공간 (몇 MB~GB)디스크 (SSD/HDD)데이터를 저장하는 저장 장치운영체제, 프로그램 사용자 데이터를 저장비휘발성저장용량이 매우 큼(GB~TB 단위)NoSQL키-벨류 형태로 저장되는 데이터베이스Redis데이터 처리 속도가 매우 빠른 NoSQL 데이터베이스데이터를 일정 시간이 지나면 삭제되게 할 수 있음 : 만료시간 (TTL) Redis의 데이터 처리 속도가 빠른 이유RMDBS는 디스크에 데이터를 저장함 → 속도 느림R..
failed to create jar file 문제 해결하기 팀원분이 올려주신 프로젝트를 클론하고 실행하려는데java.util.concurrent.executionexception: org.gradle.api.gradleexception: failed to create jar file에러가 발생한 것이다😱 다른 분들은 잘 실행된다고 해서 더 멘붕에 빠졌다문제 상황을 파악해보니gradle 파일에 문제가 있었음 -> 다른 팀원분들은 컴퓨터에 gradle이 깔려있어서 해당 gradle이 작동해서 빌드가 잘 됐음-> 나는 gradle이 내컴퓨터에 없었기 때문에 저 에러가 뜬 것gradle -v 을 했을때 gradle이 존재하지 않는다고 떴다! 해결방법1. 컴퓨터에 gradle깔기 brew install gradle 2. 다시 실행하기!Gradle Wrapper : (G..
1260 DFS와 BFS / DFS, BFS 정답from collections import dequedef DFS(graph, start, visited, dfs_ans): visited[start] = True dfs_ans.append(start) for i in graph[start]: if visited[i] is False: DFS(graph, i, visited, dfs_ans)def BFS(graph, start, visited, bfs_ans): queue = deque() queue.append(start) visited[start] = True while queue: v = queue.popleft() bfs_ans.append(v) ..
11724 연결 요소의 개수 / DFS, BFS 인접리스트 만들기n, m = map(int, input().split()) # 정점, 간선의 개수con = []for i in range(m): a, b = map(int, input().split()) con.append((a,b))# 그래프 세팅, 이차원 리스트로 만들기graph = []for i in range(0, n + 1): graph.append([])for a, b in con: graph[a].append(b) graph[b].append(a) 정답def DFS(graph, start, visited): visited[start]= True # print(start, end=' ') for i in graph[start]: if vi..