DB 인덱싱(Database Indexing)
·
이론공부/개념
DB 인덱싱(Database Indexing)은 데이터베이스에서 데이터를 더 빠르게 검색하기 위해 사용하는 기술데이터베이스에서 대량의 데이터를 검색할 때, 인덱스를 사용하면 특정 데이터를 빠르게 찾아낼 수 있어 성능을 크게 향상시킬 수 있다.1. 인덱스의 개념책의 목차와 유사하게, 인덱스는 데이터베이스 테이블의 특정 열(column)에 대한 검색용 정보를 미리 저장해둔 자료 구조인덱스를 사용하면 테이블의 모든 행을 하나씩 탐색하지 않아도 되므로, 검색 속도가 크게 향상된다.2. 인덱스의 작동 방식인덱스는 일반적으로 'B-트리(Balanced Tree)'나 '해시(Hash)'와 같은 자료 구조로 저장인덱스는 특정 열의 값을 기준으로 정렬하여 저장하므로, 데이터 검색 시 이진 탐색(Binary Search)..
csv파일으로 더미데이터 생성하기
·
Java & Spring/Java
- build.gradleimplementation 'com.opencsv:opencsv:5.6' - 전체 코드package com.play.hiclear.domain.gym.service;import com.opencsv.CSVReader;import com.opencsv.exceptions.CsvValidationException;import com.play.hiclear.common.enums.Ranks;import com.play.hiclear.domain.gym.entity.Gym;import com.play.hiclear.domain.gym.enums.GymType;import com.play.hiclear.domain.gym.repository.GymRepository;import com.p..
[TIL](2024)10.14 ~ 10.18
·
Java & Spring/TIL
WIL회고이번 팀 프로젝트에서 AOP, QueryDsl을 사용해볼수있어서 좋았다.필수 기능 구현 부분이 이전 과제들보다 어려워 도전 기능(AWS, Redis, Docker)등을 사용해보지 못한게 아쉬웠다.10월 14일 (월)- 오늘 한 일팀 프로젝트 시작, 회의 진행ERD 설계API 설계와이어프레임 작성코드 및 Git 컨벤션10월 15일 (화)- 오늘 한 일Card기능 초기 구현팀 프로젝트 1차 병합10월 16일 (수)- 오늘 한 일Card기능 CRUD 구현10월 17일 (목)- 오늘 한 일Card Activity를 AOP를 활용하여 구현Card 조회 QueryDsl을 사용하여 구현10월 18일 (금)- 오늘 한 일최종 병합 및 리펙토링프로젝트 발표 담당
@Transactional(propagation = Propagation.REQUIRES_NEW)
·
Java & Spring/트러블슈팅
주요 특징:새로운 트랜잭션 생성: 메소드가 호출될 때 기존 트랜잭션이 있더라도 그것을 무시하고 항상 새로운 트랜잭션을 생성한다.독립적인 트랜잭션: 이 새로운 트랜잭션은 기존 트랜잭션과 완전히 독립적으로, 새로 시작된 트랜잭션이 커밋되거나 롤백되더라도, 기존 트랜잭션에는 영향을 미치지 않는다.원래 트랜잭션 중단: 새로운 트랜잭션이 끝날 때까지 기존 트랜잭션은 중단된다. 새로운 트랜잭션이 완료된 후에 기존 트랜잭션이 다시 이어진다.부분 커밋: 메소드 실행 중에 새로운 트랜잭션이 성공적으로 커밋되면, 그 결과는 전체 트랜잭션의 성공 여부와 상관없이 데이터베이스에 영구적으로 반영된다. 즉, 새 트랜잭션이 커밋되면 그 변경 사항은 롤백되지 않는다.□ 문제사항 @Transactional public Ma..
MultipleBagFetchException(두개의 Fetch Join)
·
Java & Spring/트러블슈팅
- 문제상황 List results = jpaQueryFactory .selectFrom(todo) .leftJoin(todo.managers).fetchJoin() .leftJoin(todo.comments).fetchJoin() .where(condition) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch();todo조회 시 manager와 comment의 개수를 출력하면서 N+1문제를 해결하기 위해 Fetch Join을 연속으로..
[TIL](2024)10.07 ~ 10.11
·
Java & Spring/TIL
10월 07일 (월)- 오늘 한 일Spring Security 학습 10월 08일 (화)- 오늘 한 일개인과제 진행 QueryDsl작성MultipleBagFetchException 공부10월 10일 (목)- 오늘 한 일개인과제 마무리트랜젝션 전파 학습모의면접 진행10월 11일 (금)- 오늘 한 일AWS강의 수강
Spring - Spring Security
·
Java & Spring/Spring
□ Spring Security란?Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공 □ Spring Security 적용하기1. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-security'2. FillterConfig -> SecurityConfig로 변경(PasswordEncoder는 Security에 포함되어있어 별도 구현 불필요)코드 보기import lombok.RequiredArgsConstructor;import org.example.statelessspringsecurity.enums.UserRole;import org.springframework.context.annotation.Bean;impor..
JPA - Querydsl 사용법 및 실습
·
Java & Spring/Spring
1. build.gradle 설정dependencies { 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"}// Querydsl 설정부def generated = 'src/main/genera..
JPA - JPQL사용해보기
·
Java & Spring/Spring
JPQL(Java Persistence Query Language) 이란?JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.따라서 테이블을 대상으로 쿼리 하는 것이 아닌 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화했기 때문에 특정 데이터베이스 SQL에 의존하지 않는 장점이 있다. JPQL은 SQL과 문법이 유사하며, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다. - 실습 ◇ Controller @GetMapping("/todos") public ResponseEntity> getTodos( @RequestParam(defaultValue = "1") int page, @R..
git & github - Github Actions
·
git & github
□ Github Actionsgithub에 내장된 CI/CD 도구 Github Actions의 CItest를 통과한 코드만 develop 브랜치와 main 브랜치에 merge되도록 하여 오류를 방지하고 안정적인 코드가 배포되고 버그를 빠르게 발견Github Actions의 CDmain브랜치에 코드가 통합된 경우 운영 환경에 빠르게 배포할 수 있게 함 Workflow최상위 개념여러 Job으로 구성되고, Event에 의해 트리거될 수 있는 자동화된 프로세스Workflow 파일은 YAML으로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장됨eventGithub Repository에서 발생하는 push, pull request open, issue open, 특정 ..