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..
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..
테스트코드 작성에 사용되는 메서드 및 애노테이션(1)
·
Java & Spring/Spring
1.  @Mock역할: 실제 객체의 **모의 객체(Mock Object)**를 생성합니다. 모의 객체는 실제 동작을 하지 않고, 정의한 대로 동작하도록 설정할 수 있습니다.사용 목적: 외부 의존성을 실제로 동작하지 않게 하고, 테스트하고자 하는 클래스의 동작만 확인할 수 있도록 하기 위해 사용합니다.예를 들어, 데이터베이스 호출이나 외부 서비스 호출을 모킹하여 테스트의 속도를 높이고, 외부 의존성 없이 순수하게 비즈니스 로직만을 테스트할 수 있습니다. 2.  @InjectMocks역할: @Mock으로 생성된 모의 객체를 해당 클래스의 의존성으로 주입합니다. 즉, 테스트할 클래스의 인스턴스를 생성하고, 이 클래스가 의존하는 다른 객체를 모킹된 객체로 자동으로 주입해줍니다.사용 목적: 테스트하려는 클래스의 ..
47일차 - Controller 테스트
·
Java & Spring/Spring
1. 가짜 인증 처리(MockSpringSecurityFilter)코드 보기import jakarta.servlet.*;import jakarta.servlet.http.HttpServletRequest;import org.springframework.security.core.Authentication;import org.springframework.security.core.context.SecurityContextHolder;import java.io.IOException;public class MockSpringSecurityFilter implements Filter { @Override public void init(FilterConfig filterConfig) {} @Overr..
46일차 - 테스트 코드 애노테이션
·
Java & Spring/Spring
□ Before & After 테스트@BeforeEach : 각각의 테스트 코드가 실행되기 전@AfterEach : 각각의 테스트 코드가 실행된 후@BeforeAll : 모든 테스트 코드가 실행되기 전@AfterAll : 모든 테스트 코드가 실행된 후코드 보기public class BeforeAfterTest { @BeforeEach void setUp() { System.out.println("각각의 테스트 코드가 실행되기 전에 수행"); } @AfterEach void tearDown() { System.out.println("각각의 테스트 코드가 실행된 후에 수행\n"); } @BeforeAll static void beforeAl..
JWT 구현 및 사용
·
Java & Spring/Spring
1. build.gradle 의존성 추가implementation 'io.jsonwebtoken:jjwt-api:0.11.2'runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2'runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2' // JSON 처리 2. application.properties, secret key 추가jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7Yqc7YSw7LWc7JuQ67mI7J6F64uI64ukLg== - JWT 토큰 생성3. JwtUtil 생성코드 보기import io.jsonwebtoken.Claims;import io.jsonwebtoken..
37일차 - Spring강의(JPA Audting)
·
Java & Spring/Spring
JPA Auding : 시간에 대해서 자동으로 값을 넣어주는 기능@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class Timestamped { @CreatedDate @Column(updatable = false) @Temporal(TemporalType.TIMESTAMP) private LocalDateTime createdAt; @LastModifiedDate @Column @Temporal(TemporalType.TIMESTAMP) private LocalDateTime modifiedAt;}@MappedSuperclassJPA Entity 클래스..