개발공부/spring boot 9

🚨ERROR -org.springframework.jdbc.datasource.init.CannotReadScriptException: Cannot read SQL script from class path resource

🏕️ 상황@Sql("/insert-members.sql") @Test void getAllMembers() { // when List members = memberRepository.findAll(); // then assertThat(members.size()).isEqualTo(3); }위에 있는 코드를 실행하려면 [insert-member.sql]를 읽어와야 하는데 해당 파일을 찾을 수가 없어서 오류가 계~~~~속 발생했다. 💦 과정이 오류를 해결하기 위해서 3시간 넘게 쓰면서 아래에 있는 방법들 + α 를 시도해보았다. 1. 혹시 모르니 설정 파일에 전체 코드에 대한 로그 레벨을 설정해 보기2. build.gradle 파일에서 ..

🚨ERROR - [spring boot] org.springframework.beans.factory.UnsatisfiedDependencyException:

🏕️상황테스트 코드를 작성하고 run을 했는데 위와 같은 오류가 발생했다. 거의 처음 보는 오류였는데 알아보니Spring Boot가 테스트를 실행할 때 내장형 데이터베이스를 사용하려고 시도하지만, 프로젝트의 클래스패스에 해당 데이터베이스에 필요한 라이브러리가 없어서 발생한 문제였다. mysql은 내장형 데이터베이스가 아니다. 이 사실을 모르고 mysql을 사용해서 개발하고 있었다.왜냐하면 이전 프로젝트에서도 mysql을 사용했기 때문에 mysql의 환경세팅이 나에게는 더 편했기 때문이다.그래서 내장형 db 라이브러리도 내 프로젝트에는 없었다 :) 💦과정mysql ➡️ H2로 교체했더니 오류 해결!! 원래대로라면 DB만 바꿔주면 바로 해결될 문제였지만 나는 2가지의 오류를 만나면서 거의 3시간을 소모했..

🚨ERROR - Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use:

🏕️상황Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-161]H2 데이터베이스에 접속하려고 시도하는데 위와 같은 오류가 발생했다. (오류 고칠 생각에 실제 화면은 캡처하지 못했다..) 원인은 크게 2가지이다.동시 접근: 동일한 H2 데이터베이스에 여러 프로세스나 스레드에서 동시에 접근하려고 할 때 발생할 수 있다. 데이터베이스가 한 번에 하나의 프로세스나 스레드만 접근할 수 있도록 설계되어 있기 때문에 ..

Test code - MockMvc란?

💟 MockMvc란?MockMvc는 Spring MVC의 웹 계층을 테스트하기 위해 사용되는 도구로, 웹의 컨트롤러를 실제 서버를 시작하지 않고도 테스트할 수 있게 해 준다. 이를 통해 웹 계층의 독립적인 테스트를 할 수 있다. MockMvc를  사용하면 spring mvc의 동작을 Mocking하여 http 응답과 요청을 시뮬레이션할 수 있다. 💟 Mocking이란?모킹은 소프트웨어 테스트에서 특정 객체나 동작을 가짜로 만들어 실제 객체나 동작을 대체하는 기술이다. 이를 통해 독립적이고 격리된 테스트 환경을 구축할 수 있다.  @SpringBootTest // 테스트용 애플리케이션 컨텍스트 생성@AutoConfigureMockMvc // MockMvc 생성 및 자동 구성class TestContro..

[java] Optional - Optional의 매핑 메소드

🏕️상황 Optional을 사용해야 하는 상황에서 코드를 좀 더 간결하게 하고자 하는 방법을 찾다가 발견한 것이 Optional의 map 함수였다. map 함수라고 하면 java 컬렉션의 map 함수만 생각이 나서 의아했다... '그 map 함수가 optional에서도 연산을 수행하나...?'라는 생각이 들었다. 알아보니 optional 객체의 map() 함수가 따로 존재했던 것이다!!! 그래서 오늘은 아래의 주제에 대해 알아보려고 한다. Optional의 매핑 메소드 optional의 매핑 메서드는 map() 및 flatMap() 이렇게 두개의 주요 메소드를 포함한다. 이러한 메소드를 사용해서 Optional 안의 값을 변환하거나 매핑할 수 있다. 💚map() 메소드 Optional 안의 값을 변환하려..

spring boot - Querydsl, DSL(Domain-Specific Language)이란??

🏕️상황 Querydsl을 사용하다보니 DSL이란 용어가 나왔고, 처음에는 이 둘이 같은 말인줄 알았다. 그런데 DSL이 더 넓은 개념이었고 확실하게 알고싶어서 정리하며 공부하기로 하였다. 💛DSL(Domain-Specific Language) 특정 도메인이나 문제 영역에 특화된 언어입니다. 이는 해당 도메인의 용어, 구문, 추상화 등을 통해 해당 도메인의 작업을 더 쉽게 표현하고 코드를 읽기 쉽게 만드는 것을 목표로 합니다. 일반적으로 DSL은 크게 두 가지로 분류됩니다. External DSL (외부 DSL): - 외부 DSL은 독립적인 언어로서 도메인 특화 언어를 말한다. - 예시로는 SQL, HTML, CSS 등이 있다. Internal DSL (내부 DSL): - 내부 DSL은 일반 프로그래밍 ..

spring boot - JPQL과 Querydsl의 개념과 차이점 파헤치기🕵🏻

JPQL과 Querydsl의 차이점은 무엇인가? 💚JPQL (Java Persistence Query Language) JPQL은 JPA에서 제공하는 객체 지향 쿼리 언어이다. 문자열 기반의 쿼리를 작성하며, 엔티티와 속성에 대한 문자열 경로를 사용하여 쿼리를 작성 JPQL은 JPA의 표준 인터페이스에 의해 정의되었기 때문에 JPQL 쿼리는 어떤 JPA 구현체를 사용하더라도 동일하게 작동. 즉, JPQL 쿼리를 작성한 후 Hibernate, EclipseLink, OpenJPA 등의 JPA 구현체를 사용하여 실행하면 결과는 동일하게 나온다. JPQL 쿼리를 특정 JPA 구현체에 종속되지 않고 이식성 있게 작성할 수 있다는 장점이 있다. JPQL은 애플리케이션의 엔티티 클래스와 관련하여 작동하며, 쿼리 실..

JWT_인증/인가

❤️인증(Authentication) 로그인. 내가 이 사이트에 가입된 회원임을, 즉 특정 서비스에 일정 권한이 주어진 사용자임을 아이디와 패스워드 등을 통해서 말 그대로 인증 받는 것이다. ❤️인가(Authorization) 이렇게 한 번 인증받은 사용자가 후에 사이트의 여러 기능들을 사용할 때 사용하는 방법으로, 즉 이를테면 내가 페북에 로그인으로 인증을 하고 '나서' 내 친구들의 목록을 보거나 내 페이지에 글을 작성하거나 내 계정으로'만' 할 수 있는 활동들을 하고자 할 때. 페이스북이 내가 로그인 되어 있음을 알아보고 허가를 해주는 것이다. 로그인이 유지되는 상태에서 일어나는 일이라고 이야기할 수 있다. ❤️JWT JWT를 사용하는 서비스에서는 사용자가 로그인하면 토큰이라는 표를 출력해서 건네준다..

💡깨달음 - entity클래스가 있는데 DTO가 필요한가?

🌸  상황나는 dto 클래스가 없었지만 함께 개발하는 팀원의 코드를 보니 entity 클래스 말고도 DTO 클래스가 있었다.⭐ 아하! 포인트 지금까지 혼자 공부할 때는 거의 entity 클래스를 dto 클래스처럼(객체처럼 활용, 데이터도 주고/뱓음) 사용했었다. 그 과정들이 하나의 클래스로 진행되니까 오히려  효율적이라고 생각했었는데 다음과 같은 차이점이 존재했다. JPA에서 Entity 클래스는 DB의 테이블과 매핑되는 클래스입니다. 이 클래스는 JPA가 제공하는 다양한 기능을 사용할 수 있도록 매핑 정보를 가지고 있습니다. Entity 클래스는 기본적으로 DB의 스키마를 기반으로 생성됩니다. DTO(Data Transfer Object) 클래스는 엔티티(Entity) 객체와 비슷하지만, 보통 엔티티..