-
Notifications
You must be signed in to change notification settings - Fork 0
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
Conversation
There was a problem hiding this 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만개쯤 될것같은데 그건 됐고 새로운것만 돌릴까?
양원숲만 번역 돌릴까 아니면 다돌릴까?(갠적으로 양원숲만 해도 될것같긴함)
아 글고 지금 방학이라 스케쥴러로 해도 끌고오는게 없어서 (시간표, 급식) 새로 만들때 테스트 해보려면 날짜 바꿔서 해봐~!
// 매 분마다 실행 | ||
@Scheduled(cron = "0 0 * * * ?") | ||
fun resubmitIncompletePublications() { | ||
applicationEventMulticaster.resubmitIncompletePublications { true } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이게 멀 어떤걸 하는거야..? 설명 부탁할게..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이게 매 분마다 실패한 이벤트를 재시도해주는 메소드야.
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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개가 필요한 이유가 뭐지..?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Todo는 도메인자체를 나타내는 클래스고, TodoEntity는 영속화하는과정에서 사용하는 클래스라고 생각하면돼
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
원래는 분리 안하려고 했는데, api 스팩들이랑 서비스 계층을 메소드 스팩 변경없이 하려면 이게 최선이더라고
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
일단 투두 도메인을 봤을 때 child에 대해 외래키만 설정되고 Todo를 통해 child를 조회하지 않아서, 외래키 설정이 불필요해 보였어 그래서 제거했어
@Enumerated(EnumType.STRING) | ||
@Column( | ||
nullable = false, | ||
columnDefinition = "varchar(255)" | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이걸 왜 없앤 거야...?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Todo는 엔티티가 아니니 컬럼 설정을 해줄 필요가 없어서 제거했어
@Enumerated(EnumType.STRING) | ||
@Column( | ||
nullable = false, | ||
columnDefinition = "varchar(255)" | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
enum인데 EnumType.String이거 왜 지워버린거야..?
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 id가 기본키 id가 아닌거지? 그러면 todoId 이런식으로 쓰는게 어때?
There was a problem hiding this comment.
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( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나 잘 이해가 안가는게 todo랑 todoEntity랑 translatedTodoEntity 차이가 각각 뭐야?
There was a problem hiding this comment.
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을 서비스에서 제공하는 언어들로 번역한 결과를 저장하기 위한 엔티티야
src/main/kotlin/com/asap/asapbackend/infrastructure/jpa/todo/entity/TranslatedTodoEntity.kt
Outdated
Show resolved
Hide resolved
배치 단위로 할려다가 실시간성이 조금 떨어질 것 같아서 스프링 이벤트를 활용해서 구현했어. 그래서 "투두 생성 -> 이벤트 발생 -> 이벤트 핸들러가 번역 진행" 이런방식으로 그리고 gpt 4o-mini로 바꿔서 아마 돈 그렇게 많이 안나올거야. 번역 데이터 없으면 한글로 나오게 만들어둘 수 있으니까 새로 스케쥴링하는것만 번역하자 |
🗃 Issue
🔥 Task
Aceept-Language
정보를 기반으로 언어 추출해 반환합니다.📄 Reference