@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..
[TIL](2024)09.30 ~ 10.04
·
Java & Spring/TIL
09월 30일 (월)- 오늘 한 일2차 기술면접 준비Docker 학습10월 01일 (화)- 오늘 한 일프로그래머스 코딩테스트 1문제 진행 및 회고 GithubActions / CloudType를 통한 CI/CD 실습10월 02일 (수)- 오늘 한 일JPQL 학습 및 실습개인과제 진행10월 04일 (금)- 오늘 한 일QueryDls 학습 및 실습개인과제 진행
52일차 - 알고리즘 코드카타(실패)
·
Java & Spring/코딩테스트
- 회고84. 괄호 회전하기 : https://school.programmers.co.kr/learn/courses/30/lessons/76502 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr import java.util.*;class Solution { public int solution(String s) { int answer = 0; List open = Arrays.asList('(', '{', '['); List close = Arrays.asList(')', '}', ']'); // s의 길..
JPA - 쿼리 파일 만들기
·
Java & Spring/Spring
□ 쿼리 파일 만들기(QuaryMapper)- MyBatisRowMapper가 가지고있는 단점인 "반복되는 코드"를 줄이고 "함께있는 프로그램 코드와 쿼리 코드를 분리하여 관리"하고 싶은 니즈를 반영하여 탄생반복적인 JDBC 프로그래밍을 단순화SQL 쿼리들을 XML파일에 작성하여 코드와 SQL을 분리JDBC로 처리하는 코드의 설정(Connetcion)부분을 줄이고 실제 SQL문에 연결함으로서 빠른 개발이 가능하게 한다(SQL Mapper 특징)MyBatis 코드는 map 인터페이스와 SQL 쿼리와 ResultSet 매핑을 위한 xml 및 annotation을 사용한다.객체 자체보다 쿼리에 집중할 수 있다.SqlSesstion Factory Builder (1), (2), (3)MyBatis 설정 파일을 ..
JPA - 데이터베이스와 SQL
·
Java & Spring/Spring
□ 데이터베이스(H2)- DB(H2) 사용 방식 3가지Server Mode직접 엔진을 설치하여 사용하는 방식.애플리케이션과 상관 없는 외부에서 DB 엔진이 구동된다.데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않는다.In-memory Mode엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식.build.gradle 및 application.properties 설정을 통해 실행 가능하다.애플리케이션을 실행하면 DB 엔진이 함께 실행되고 애플리케이션을 종료하면 DB 엔진이 함께 종료된다.데이터가 애플리케이션의 메모리에 저장되기 때문에 애플리케이션을 종료하면 데이터가 사라진다.Embedded Mode엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식.b..