본문 바로가기

Spring

(41)
QClass 구현 안 될때 해결법 의존성 다시 한 번 확인// QueryDSLimplementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api" 터미널에 입력./gradlew clean compileJava그러면 아래 경로에 잘 생긴다!
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는 다양한 자료구조를 지원함 -> 이번에 구현해야..
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..
테스트 코드 작성하기 테스트 작성하는 법테스트하고 싶은 레이어에 가서 cmd + n 을 누른다! H2가 아닌 다른 데이터베이스에 연결하고 싶을 때1. 아래 경로에 설정 파일 만들기  2. 테스트 코드 파일에 어노테이션 2개 추가하기replace = AutoConfigureTestDatabase.Replace.NONESpring Boot가 테스트를 위해 다른 데이터베이스(H2 등)로교체하지 않도록 설정@TestPropertySource(locations = {"classpath:/application-test.properties"})해당 경로의 application.properties를 사용하겠다는 뜻 @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace..
JPA와 Transaction JPA자바에서 orm기술 표준으로 사용하는 인터페이스 orm자바 객체와 관계형 db의 데이터를 자동으로 매핑해주는 방법 Hibernate자바 언어를 위한 orm 프레임워크JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용 Spring Data JPAjpa를 더 쉽고 편하게 사용할 수 있게 도와주는 spring에서 제공되는 모듈jpa를 한 단계 더 추상화 시킨 jparepository 인터페이스 제공entitymaniger는 jpa에서 관리하는 것@transactional은 스프링에서 관리하는 것 Raw JPA  Persistence Context엔티티 객체가 생성, 관리, 소멸 되기까지 데이터베이스와 상호작용하는 모든 과정엔티티를 JPA 영속성 컨텍스트에 영속화(persist) 하게 되면, 이..
Spring Security의 JWT 적용 Spring Security스프링 기반 애플리케이션에 인증과 인가 기능을 제공하는 보안 프레임워크2003년에 나왔음 → 세션 방식으로 이루어져 있음 (JWT가 없던 시기) Spring Security에서 인증을 통과하는 방식SecurityContext : 현재 로그인한 사용자의 정보를 저장하는 객체SecurityContext에 AbstractAuthenticationToken을 set해야 한다로그인을 하면 → SecurityContext 내부에 Authentication 객체가 저장필요할 때 SecurityContext에서 현재 로그인한 사용자의 정보를 꺼낼 수 있음SecurityContextHolder를 통해 SecurityContext에 접근 가능로그아웃하면 SecurityContext가 초기화 Se..
User 데이터 100만건 생성하고 성능 개선하기 100만건 생성 테스트 첫 번째 시도 : NoSuchBeanDefinitionException jpa로 save를 100만건 시도@DataJpaTestclass UserRepositoryTest { @Autowired private UserRepository userRepository; @Test void 유저_데이터를_100만_건_생성() { for (long i = 0L; i  -> NoSuchBeanDefinitionException 발생EntityManager를 찾을 수 없다고 한다 테스트 패키지 하위에 config 파일을 만들고 해결@TestConfiguration // 테스트 환경 전용 설정public class TestQuerydslConfig { @..