Index를 쓰는 이유: 조건을 만족하는 튜플(들)을 빠르게 조회하기 위해, 정렬, 그룹핑 하기 위해 Index 만들기CREATE INDEX player_name_idx ON player(name);CREATE UNIQUE INDEX team_id_backnumber_idx ON player(team_id, backnumber);// multicolumn index, composite indexSHOW INDEX FROM player; B-tree 기반 Index 동작 방식index로 지정한 것 기준으로 Tree 구조로 만들어짐EXPLAIN SELECT*FROM player WHERE backnumber = 7;// 어떤 키를 사용하는 지 알 수 있음 직접 INDEX 고르기SELECT * FROM pla..
전체 글
읽기 쉬운 코드를 짜기 위해 노력합니다. 좋은 코드는 단순하고 이해하기 쉬워야 한다고 생각합니다.DB의 부하를 줄이기 위해 캐시 사용 할 수 있음캐시: 데이터나 값을 미리 복사해놓는 임시 저장소(Memcached, Redis, Local Memory cache 등 구현)활용: Dynamic Programming(이 전의 값을 저장), JPA의 영속성 컨텍스트 파레토의 법칙에 의해 자주 사용되는 내용의 20%를 캐싱해두면 성능 증가를 이룰 수 있다 Cache Hit: 캐시에 데이터가 존재, 해당 데이터를 바로 반환Cache Miss: 원하는 데이터가 존재x, db에 찾아가서 반환 캐싱 전략 패턴읽기 전략Look Aside(옆을 보다): 캐시에 데이터가 없을 때 db에 요청장점: 캐시에 문제가 생기는 경우 DB로 요청을 위임단점: 캐시와 DB의 데이터 정합성 유지 어려움, 첫 조회 시 DB 부하 발생 ..
기왕 실업급여 받게 된 것 스펙 업 할 것 백준 플레티넘 달성 10월 31일 까지9월 골드 2 달성자바 스프링 프로젝트 CRUD 완성11월 15일 까지아래 기술 스텍 적용카프카 정리11월 15일 까지도커 정리11월 15일 까지레디스 정리11월 15일 까지 이력서 제출11월 30일 까지 취직카프카 정리, 구현도커 정리, 구현레디스 정리, 구현 추 후토스 110점 이상
문제 제목이 참 재밌다 벽 부수고 이동이라현실적으로는 쉽지만 코드로 구현하기 어려웠다ㅠ 문제 코드from collections import dequedx = [0, -1, 0, 1]dy = [1, 0, -1, 0]def bfs(): visit = [[[0]*2 for _ in range(M)] for _ in range(N)] visit[0][0][0] = 1 while q: x,y, wall = q.popleft() if x == N-1 and y == M-1: return visit[x][y][wall] for k in range(4): xx = x + dx[k] yy = y + dy[k..
public void setMember(Member member) { //기존 관계 제거 if (this.member != null) { this.member.getOrders().remove(this); } this.member = member; member.getOrders().add(this); }member과 order이 다대다 관계 인데 setMember시 이렇게 설정해서 편의성을 둔다 다대다의 경우 주인이 필요하고(mappedBy) set 시 다른 테이블에도 add를 통해서 설정이 필요하다public class Order { ... @OneToMany(mappedBy = "order") private ..
해시: 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 변경한 값Key - Value를 저장해둔 자료구조O(log2 n)으로 효율적인 자료구조 이다 해싱을 통해서 메모리에 적재값을 적재하기 위해 나머지를 사용하는데 적은 값으로 설정하면 중복, 높은 값으로 설정하면 과다한 메모리 사용이 된다. 체이닝 방식해시 충돌이 발생할 경우 동일한 해시값에서 해당하는 Key 끼리 연결LinkedList 자료구조를 이용해 해시값 연결 오픈 어드레스 방식해시 충돌 시 다른 버킷에 데이터를 삽입 비어있는 버켓을 찾을 때 까지 탐색
@Entity@TableGenerator( name = "BOARD_SEQ_GENERATOR", table = "MY_SEQUENCES", pkColumnValue = "BOARD_SEQ", allocationSize = 1)public class Board ( @id @GeneratedValue(strategy = GenerationType.Table, generator = "BOARD_SEQ_GENERATOR") private Long id;) name: 식별자 생성기 이름table: 키생성 테이블 명pkColumnName: 시퀀스 컬럼 명valueColumnName: 시퀀스 값 컬럼명pkColumnValue: 키로 사용할 값 이름initialValue: 초기 값, 마지막으로..
-IDENTITY: 기본 키 생성을 db에 위임-SEQUENCE: DB sequence를 사용해서 기본 키 할당-TABLE: 키 생성 테이블을 사용 기본 키 직접 할당@Id@column(name="id")private String id; IDENTITY@Entitypublic class Board ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Log id;) SEQUENCECREATE SEQUENCE BOARD_SEQ START WITH 1 INCREMENT BY 1;@Entity@SequenceGenerator( name = "BOARD_SEQ_GENERATOR", sequenceName = "BOARD_SEQ", ..