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: 투두 번역 및 변역 결과 저장 테이블 추가 #109

Merged
merged 11 commits into from
Aug 8, 2024

Conversation

tlarbals824
Copy link
Contributor

🗃 Issue

🔥 Task

  • 도메인 계층에서 jpa 의존성을 제거했습니다.
  • todo 조회할 때, 헤더 중 Aceept-Language 정보를 기반으로 언어 추출해 반환합니다.
  • 스프링 모듈리스를 통해 이벤트를 관리했습니다.

📄 Reference

  • None

@tlarbals824 tlarbals824 added the ✨ Feature 새로운 기능 label Aug 6, 2024
Copy link
Member

@sominyun sominyun left a comment

Choose a reason for hiding this comment

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

오빠 완전완전 수고했오~~~~🥹
일단 지금 너무 피곤해서 대충밖에 못봤는데 그 궁금한게 지금 넣는 값만 일단 번역이 되어서 db에 저장 되는 거지?
기존에 있는 애들은 db에 저장이 안되는 건가? 이건 배치로 돌려서 넣으려고 한건가? (저 분단위로 하는게 이건가..?)
글고 시간표..급식..가정통신문(학교+교육청), todo api 챗지피티로 계속 번역하면 돈 꽤 나갈 수 도 있을 것 같은데 괜찮아????
새로 스케쥴러 돌리는것만 저장할때 번역추가해서 저장할까?? 지금 대충해도 db 200만개쯤 될것같은데 그건 됐고 새로운것만 돌릴까?
양원숲만 번역 돌릴까 아니면 다돌릴까?(갠적으로 양원숲만 해도 될것같긴함)
아 글고 지금 방학이라 스케쥴러로 해도 끌고오는게 없어서 (시간표, 급식) 새로 만들때 테스트 해보려면 날짜 바꿔서 해봐~!

Comment on lines +15 to +18
// 매 분마다 실행
@Scheduled(cron = "0 0 * * * ?")
fun resubmitIncompletePublications() {
applicationEventMulticaster.resubmitIncompletePublications { true }
Copy link
Member

@sominyun sominyun Aug 6, 2024

Choose a reason for hiding this comment

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

이게 멀 어떤걸 하는거야..? 설명 부탁할게..

Copy link
Contributor Author

Choose a reason for hiding this comment

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

이게 매 분마다 실패한 이벤트를 재시도해주는 메소드야.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

스프링 모듈리스를 사용하면 스프링 이벤트를 추적하고, 디비에 저장해주거든

type: TodoType,
description: String,
child: Child,
childId: Long,
Copy link
Member

Choose a reason for hiding this comment

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

이거 기존의 연관관계를 없앤 이유가 todoEntity<->Todo 변환을 자유롭게(?) 하려고 한건가?
근데 애초에 Todo랑 TodoEntity 2개가 필요한 이유가 뭐지..?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Todo는 도메인자체를 나타내는 클래스고, TodoEntity는 영속화하는과정에서 사용하는 클래스라고 생각하면돼

Copy link
Contributor Author

Choose a reason for hiding this comment

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

원래는 분리 안하려고 했는데, api 스팩들이랑 서비스 계층을 메소드 스팩 변경없이 하려면 이게 최선이더라고

Copy link
Contributor Author

Choose a reason for hiding this comment

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

일단 투두 도메인을 봤을 때 child에 대해 외래키만 설정되고 Todo를 통해 child를 조회하지 않아서, 외래키 설정이 불필요해 보였어 그래서 제거했어

Comment on lines -25 to -29
@Enumerated(EnumType.STRING)
@Column(
nullable = false,
columnDefinition = "varchar(255)"
)
Copy link
Member

Choose a reason for hiding this comment

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

이걸 왜 없앤 거야...?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Todo는 엔티티가 아니니 컬럼 설정을 해줄 필요가 없어서 제거했어

Comment on lines -38 to -42
@Enumerated(EnumType.STRING)
@Column(
nullable = false,
columnDefinition = "varchar(255)"
)
Copy link
Member

Choose a reason for hiding this comment

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

enum인데 EnumType.String이거 왜 지워버린거야..?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Todo는 엔티티가 아니니 컬럼 설정을 해줄 필요가 없어서 제거했어

id: Long,
language: Language
) {
val id: Long = id
Copy link
Member

Choose a reason for hiding this comment

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

이 id가 기본키 id가 아닌거지? 그러면 todoId 이런식으로 쓰는게 어때?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

이 복합키는 다른 엔티티에서도 사용될 수 있어서 todoId로하기에는 범용성이 떨어질 것 같아

Index(name = "idx_todo_child_id", columnList = "child_id")
]
)
class TodoEntity(
Copy link
Member

Choose a reason for hiding this comment

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

나 잘 이해가 안가는게 todo랑 todoEntity랑 translatedTodoEntity 차이가 각각 뭐야?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Todo 도메인 계층에서 사용하는 도메인 모델
TodoEntity Todo 도메인 모델을 영속화하기 위해 사용하는 엔티티 모델, 그리고 원본 데이터를 저장하는 역할을 해
TranslatedTodoEntity는 TodoEntity가 저장되고 Todo의 description을 서비스에서 제공하는 언어들로 번역한 결과를 저장하기 위한 엔티티야

@tlarbals824
Copy link
Contributor Author

오빠 완전완전 수고했오~~~~🥹 일단 지금 너무 피곤해서 대충밖에 못봤는데 그 궁금한게 지금 넣는 값만 일단 번역이 되어서 db에 저장 되는 거지? 기존에 있는 애들은 db에 저장이 안되는 건가? 이건 배치로 돌려서 넣으려고 한건가? (저 분단위로 하는게 이건가..?) 글고 시간표..급식..가정통신문(학교+교육청), todo api 챗지피티로 계속 번역하면 돈 꽤 나갈 수 도 있을 것 같은데 괜찮아???? 새로 스케쥴러 돌리는것만 저장할때 번역추가해서 저장할까?? 지금 대충해도 db 200만개쯤 될것같은데 그건 됐고 새로운것만 돌릴까? 양원숲만 번역 돌릴까 아니면 다돌릴까?(갠적으로 양원숲만 해도 될것같긴함) 아 글고 지금 방학이라 스케쥴러로 해도 끌고오는게 없어서 (시간표, 급식) 새로 만들때 테스트 해보려면 날짜 바꿔서 해봐~!

배치 단위로 할려다가 실시간성이 조금 떨어질 것 같아서 스프링 이벤트를 활용해서 구현했어. 그래서 "투두 생성 -> 이벤트 발생 -> 이벤트 핸들러가 번역 진행" 이런방식으로

그리고 gpt 4o-mini로 바꿔서 아마 돈 그렇게 많이 안나올거야. 번역 데이터 없으면 한글로 나오게 만들어둘 수 있으니까 새로 스케쥴링하는것만 번역하자

@tlarbals824 tlarbals824 merged commit 16a9291 into develop Aug 8, 2024
1 check passed
@tlarbals824 tlarbals824 deleted the feature/tranlate/todo branch August 8, 2024 07:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 새로운 기능
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants