
Flyway 란? Flyway is an open-source database migration tool. Flyway 공식 홈페이지를 보면 Flyway를 데이터베이스 마이그레이션 도구 라고 소개한다. 데이터베이스 마이그레이션 도구란? 데이터베이스 마이그레이션 도구는 버전 관리를 통해 여러 버전의 데이터베이스 스키마와 데이터 변경을 추적할 수 있고, 롤백 기능으로 변경 사항을 쉽게 되돌릴 수 있으며, 테스트 작업을 지원하여 데이터베이스 변경 사항을 안전하게 검증하고 적용할 수 있도록 도와줍니다 Flyway를 사용하면서 발생한 문제점 Flyway에는 규칙이 몇가지 존재하는데 migration 되었던 sql 파일이 변경될 경우 체크섬 검증이 실패하며, migration 이 수행되지 않습니다. sql 파일 네..
Comment @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Comment extends BaseEntity { private Long roomId; @Column(length = 500) private String comment; @ManyToOne(targetEntity = Member.class, fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; ... } Member @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Me..
물리 트랜잭션 실제 데이터 베이스에 적용되는 트랜잭션 논리 트랜잭션 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위 @Transactional(propagation = Propagation.REQUIRED) 부모 : REQUIRED 자식 : REQUIRED 물리 트랜잭션 : 1개 예외 발생 부모 트랜잭션이 존재한다면 부모 트랜잭션에 합류, 그렇지 않다면 새로운 트랜잭션을 만든다. 중간에 자식/부모에서 rollback이 발생된다면 자식과 부모 모두 rollback 한다. @Transactional(propagation = Propagation.MANDATORY) 부모 : REQUIRED 자식 : MANDATORY 물리 트랜잭션 : 1개 부모 : NULL 자식 : MANDATORY 부모 트랜잭션이 존재한다면..

SQL Injection 이란? 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다. 2017년 3월에 일어난 "여기어때" 의 대규모 개인정보 유출 사건도 SQL Injectrion 으로 인해 피해가 발생하였다. SQL Injectrion 공격은 공격은 쉬운데, 이로 인한 파급효과는 매우크다. 그렇다면 JPA는 SQL Injection 으로 부터 안전할까? SQL Injection 방어하는법 PreparedStatement 사용 Prepared Statement를 사용하면 인자를 넣어주기 전의 쿼리를 DBMS가 미리 컴파일하여 대기하므로 이후, 인자에 대해서는 쿼리가 아닌 단순 문자열로 인식하기 때문에 안전하다. JPA는 SQL Injection으로 부터 ..

@CreationTimestamp와 @CreatedDate 하이버네이트 애노테이션 자체를 점점 사용하지 않는 추세이다. 생성자 또는 필드에서 초기화하지않는경우 NullPointErexception 발생 생성자 또는 필드에서 초기화하는 경우 데이터베이스에 저장될 값과 객체값의 다르다. @CreationTimestamp, @UpdateTimestamp INSERT 쿼리가 실행될 때, 현재 시간을 값으로 사용하여 쿼리를 생성합니다. 이 값은 persist 또는 new 생성 시점이 아닌 실제 쿼리가 실행될 때(flush) 생성됩니다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long i..
https://github.com/woowacourse/jwp-dashboard-mvc GitHub - woowacourse/jwp-dashboard-mvc Contribute to woowacourse/jwp-dashboard-mvc development by creating an account on GitHub. github.com 미션을 진행하면서 DispatcherServletInitializer를 명시적으로 실행하지 않았음에도 불구하고 DispatcherServlet이 자동으로 등록되는 이유에 대해 궁금하여 조사하려고 합니다 DispatcherServletInitializer 코드 확인 public class DispatcherServletInitializer implements WebAppli..

Mapper instances are fully thread-safe provided that ALL configuration of the instance occurs before ANY read or write calls. If configuration of a mapper instance is modified after first usage, changes may or may not take effect, and configuration calls themselves may fail. If you need to use different configuration, you have two main possibilities 매퍼 인스턴스는 인스턴스의 모든 구성이 읽기 또는 쓰기 호출 전에 수행되는 경우 완..
@FunctionalInterface public interface RowMapper { @Nullable T mapRow(ResultSet rs, int rowNum) throws SQLException; } rowNum은 현재 행의 번호를 나타내는 변수인데, 실제로 이 변수를 어떻게 사용해야 하는지에 대한 고민을 해봤지만, 사용처에 대한 명확한 아이디어가 떠오르지 않았다. 그래서 어떤 목적으로 RowMapper를 설계한 것인지 궁금하여 관련된 이슈를 찾아보았다. RowMapper - mapRow method, rowNum does not need to be in the method signature [SPR-3109] #7796 spring framwork lead인 Juergen Hoeller의 주..
Attribute Converter 란?A class that implements this interface can be used to convert entity attribute state into database column representation and back again이 인터페이스를 구현하는 클래스는 엔티티 속성 상태를 데이터베이스 열 표현으로 변환하고 다시 변환하는 데 사용할 수 있습니다.즉, 엔티티에서의 Boolean 값이 데이터베이스에서는 0과 1로 이루어진 Int 값으로 표현되어야 할 경우 사용할 수 있습니다. 프로젝트에 도입한 이유현재 프로젝트에서 Music Entity에 SuperGenres 와 SubGenres 가 있습니다.@Getter@Entity@NoArgsConstructo..

검증 과정 실제 예제 auth0 java-jwt 라이브러리를 사용한 예제 implementation 'com.auth0:java-jwt:3.19.0' implementation 'com.auth0:jwks-rsa:0.21.1' // JwkProvider 객체를 싱글톤 객체로 구현해주세요. // 성능 문제가 발생할 수 있으며, 요청이 차단될 가능성도 있습니다. public static final JwkProvider jwkProvider = new JwkProviderBuilder(new URL("https://www.googleapis.com/oauth2/v3/certs")) .cached(10, 7, TimeUnit.DAYS) .build(); public Map resolve(final String ..
- Total
- Today
- Yesterday
- 레이어드 아키텍처
- ValidateException
- @ElementCollection
- 유저 스토리
- HTTPInterface
- @Converter
- BasicBinder
- setDateFormat
- feignClient
- CreatedDate
- Attribute Converter
- dto 위치
- 구글 소셜로그인
- @FormProperty
- DispatcherServletInitializer
- defer-datasource-initialization
- WebFlux 의존성
- 구글 OpenID
- 유저 시나리오
- entity 검증
- CreationTimestamp
- FormProperty
- Spring Boot 3
- java 17
- org.springframework:spring-webflux
- ServletContainerInitializer
- JPA SQL Injection
- HandlesTypes
- User Scenario
- dto 검증
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |