Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat/#450] v2 jpa 설정 추가 #461

Open
wants to merge 15 commits into
base: dev
Choose a base branch
from
Open

Conversation

belljun3395
Copy link
Collaborator

🎫 연관 이슈

resolved: #450

💁‍♂️ PR 내용

  • jpa를 사용할 수 있도록 관련 작업 수행하였습니다.

🙏 작업

  • 기존 설정 코드 리펙토링: DataSource를 기반으로 하는 것을 명시적으로 표시
  • Jpa 의존성, 설정 추가
  • V2 마이그래이션 파일을 도메인 모듈 별로 필요한 것만 가져올 수 있도록 테스크 수정

🙈 PR 참고 사항

📸 스크린샷

🚩 추가된 SQL 운영계 실행계획

🤖 테스트 체크리스트

  • 체크 미완료
  • 체크 완료

@belljun3395 belljun3395 requested a review from hun-ca as a code owner December 18, 2024 14:41
@github-actions github-actions bot added config 설정 파일과 관련된 내용을 다룰 때 사용됩니다 feature 새로운 기능을 만들 때 사용됩니다 labels Dec 18, 2024
Copy link
Collaborator Author

@belljun3395 belljun3395 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UseCase에 Tx 설정 수정해야해서 파일 체인지가 많은데
코멘트 위주로 확인해주시면 될 것 같습니다.

Comment on lines +6 to +8
@Configuration
@EnableJpaRepositories(basePackages = [ApiConfig.BASE_PACKAGE])
class ApiJpaConfig
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

도메인 모듈을 추가하고 해당 모듈에서 JPA 설정을 해야한다면 위와 같이 설정하면 됩니다.

@Transactional
@DataSourceTransactional
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JPA가 추가되어 TX가 2개가 생겨 명확히 구분이 필요하여 수정하였습니다.

Comment on lines +10 to +29
@MappedSuperclass
@JsonIgnoreProperties(value = ["createdAt, modifiedAt"], allowGetters = true)
@EntityListeners(AuditingEntityListener::class)
abstract class BaseEntity {
/** 생성일 */
@CreatedDate
@Column(name = "created_at", columnDefinition = "datetime default CURRENT_TIMESTAMP")
@EntityTimeJsonFormat
var createdAt: LocalDateTime = LocalDateTime.now()

/** 수정일 */
@LastModifiedDate
@Column(name = "modified_at", columnDefinition = "datetime default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
@EntityTimeJsonFormat
var modifiedAt: LocalDateTime = LocalDateTime.now()

/** 삭제 여부 */
@Column(name = "deleted", columnDefinition = "boolean default false")
var deleted: Boolean = false
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BaseEntity 엔티티 입니다.

Comment on lines 13 to 24
/**
* org.springframework.data.jpa.repository.config.EnableJpaRepositories를 대체하는 애노테이션
* transactionManagerRef와 entityManagerFactoryRef는 JpaConfig에서 설정한 값을 기본으로 사용한다.
* @see EnableJpaRepositories
*/
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@EnableJpaRepositories(
transactionManagerRef = JpaConfig.JPA_TX,
entityManagerFactoryRef = JpaConfig.JPA_EMF,
)
annotation class EnableJpaRepositories(
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EnableJpaRepositories를 대체하는 애노테이션 입니다.

Comment on lines 10 to 17
/**
* JPA 트랜잭션을 처리하는 어노테이션
* transactionManager는 JpaConfig에서 설정한 값을 기본으로 사용한다.
*/
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.RUNTIME)
@Transactional(transactionManager = JPA_TX)
annotation class JpaTransactional(
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JPA 트랜잭션을 처리하는 어노테이션

@Bean(name = [DATASOURCE_TX])
fun dataSourceTransactionManager(): PlatformTransactionManager = DataSourceTransactionManager(dataSource)

override fun annotationDrivenTransactionManager(): TransactionManager = jpaTransactionManager()
Copy link
Collaborator Author

@belljun3395 belljun3395 Dec 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TransactionManagementConfigurer에서 annotationDrivenTransactionManager()를 오라이드 하면 기본 TX를 설정할 수 있다고 합니다.
저희는 V2에서 JPA를 사용할 예정이라 jpaTransactionManager()를 기본으로 설정하였습니다.

== @Transactional 을 transactionalManager 설정 없이 사용하여도 jpaTransactionManager로 설정된다는 의미
== JooQ 사용할 때 사용하는 dataSourceTransactionalManager는 @DataSourceTransactional를 사용하면 됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
config 설정 파일과 관련된 내용을 다룰 때 사용됩니다 feature 새로운 기능을 만들 때 사용됩니다
Projects
None yet
Development

Successfully merging this pull request may close these issues.

jpa 설정 추가
1 participant