Skip to content

Conversation

@mjkhub
Copy link
Member

@mjkhub mjkhub commented Jan 8, 2026

Desc

  • Member 클래스 Enum 도입 제안 #198 에서 언급한 이슈를 해결
  • Member 클래스의 gender 필드를 변경
  • Member 클래스, Flyway V31만 중점적으로 확인하시면 되고, 대부분은 타입 변경에 따른 사이드 이팩트를 해결하는 코드입니다.
    ex) 테스트코드

Summary by CodeRabbit

  • Refactor

    • 성별 표현을 원시 숫자에서 열거형(Gender, 문자열 기반)으로 전환해 도메인 타입을 정리했습니다.
  • Tests

    • 성별 타입 변경에 맞춰 모든 테스트 케이스와 테스트 데이터의 성별 표현을 업데이트했습니다.
  • Chores

    • 기존 성별 데이터를 열거형 값으로 전환하는 데이터베이스 마이그레이션을 추가했습니다.

✏️ Tip: You can customize this high-level summary in your review settings.

@mjkhub mjkhub added the refactoring Refactoring should not change Test codes label Jan 8, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 8, 2026

Walkthrough

Member 도메인의 gender 표현을 Byte에서 Gender enum(String)으로 전환했습니다. 생성자·update 메서드·DTO·서비스·테스트가 enum을 사용하도록 변경되었고, DB 마이그레이션 스크립트가 기존 숫자값을 문자열 ENUM으로 변환합니다.

Changes

Cohort / File(s) 변경 사항
도메인 모델
src/main/java/com/example/medicare_call/domain/Member.java
private Byte genderprivate Gender gender로 타입 변경, @Enumerated(EnumType.STRING) 추가. 생성자 및 updateInfo(...) 시그니처에서 ByteGender로 변경. getGenderEnum() 제거.
DTO / 요청 처리
src/main/java/com/example/medicare_call/dto/MemberInfoResponse.java, src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java
DTO 변환/업데이트에서 .getGenderEnum()/.getCode() 대신 Gender 직접 전달하도록 변경; update 요청 호출부의 인자(푸시 알림 관련 추가 인자 포함) 조정.
서비스 / 유틸
src/main/java/com/example/medicare_call/service/auth/AuthService.java, src/main/java/com/example/medicare_call/util/TestDataGenerator.java
회원 생성 및 테스트 데이터에서 gender를 enum 값(req.getGender() / Gender.MALE)으로 직접 전달하도록 변경.
Enum 정의
src/main/java/com/example/medicare_call/global/enums/Gender.java
사용되지 않는 Schema 임포트 제거(기능 변경 없음).
데이터베이스 마이그레이션
src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql
기존 숫자 gender 값을 문자열 ENUM('MALE','FEMALE')로 변환하는 마이그레이션 추가(임시 컬럼 생성, 백필, 검증, 스왑).
테스트 업데이트
src/test/...
Integration/CareCallIntegrationTest.java, controller/CareCallControllerImmediateTest.java, controller/ElderControllerTest.java, repository/NotificationRepositoryTest.java, service/ElderServiceTest.java, service/auth/AuthServiceTest.java, service/payment/NaverPayServiceTest.java
테스트용 Member.builder()의 .gender((byte)...) 호출을 .gender(Gender.XXX)로 변경하고 필요한 Gender import 추가. 일부 테스트에서 임포트 정리(wildcard 포함) 발생.

Sequence Diagram(s)

(해당 변경은 데이터 타입·마이그레이션 중심이며 신규 다중 컴포넌트 제어 흐름을 도입하지 않아 시퀀스 다이어그램을 생략합니다.)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

  • Member 클래스 Enum 도입 제안 #198: Member.gender를 Byte에서 Gender enum으로 전환하는 동일 목적의 변경으로, 스키마·생성자·사용처 업데이트와 직접 관련됩니다.

Suggested labels

enhancement

Suggested reviewers

  • sudo-Terry
  • kisusu115
  • jyun-KIM

Poem

🧩 Byte는 떠나고 enum이 왔네
문자열로 이름 붙여 더 명확해졌지
DB도 바뀌고 테스트도 깔끔히 손봤네
마이그레이션 끝나면 빌드가 웃으리 😊
타입 안전성으로 한숨 돌리는 날 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.25% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 Member 클래스의 gender 필드를 Byte에서 Enum으로 변경하는 주요 변경사항을 명확하게 요약하고 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between faff41a and 71f1b9a.

📒 Files selected for processing (1)
  • src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/test/java/com/example/medicare_call/service/auth/AuthServiceTest.java (1)

50-57: Mock 데이터에서 성별이 일치하지 않아요.

AuthService.register() 구현을 보니 요청의 성별(req.getGender())을 그대로 Member에 저장하는데(line 37), 테스트의 mock된 savedMember는 요청과 다른 성별(FEMALE)로 설정되어 있습니다.

Line 57의 gender(Gender.FEMALE)gender(Gender.MALE)로 수정해야 mock 데이터가 실제 동작과 일치해요.

🤖 Fix all issues with AI agents
In @src/main/java/com/example/medicare_call/domain/Member.java:
- Around line 42-44: The Member entity uses @Enumerated(EnumType.STRING) on the
gender field, but the V31 migration creates a MySQL ENUM('MALE','FEMALE') column
which conflicts with JPA's STRING mapping; update the V31 migration to create a
VARCHAR(50) (or appropriate length) column for gender instead of ENUM and keep
the same data conversion steps so existing values are preserved, ensuring the
Member.gender field (annotated with @Enumerated(EnumType.STRING)) maps correctly
to the new VARCHAR column.

In @src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java:
- Line 54: The inline comment on the MemberInfoUpdateRequest constructor
parameter is incorrect: it says "Gender enum을 byte로 변환" but the code passes the
Gender enum value directly. Either remove or update the comment to accurately
describe the behavior (e.g., "Gender enum 전달"), or if you intended to convert to
a byte, implement the conversion where the field is set (reference the gender
parameter and any getter/setter for gender in MemberInfoUpdateRequest) so the
comment matches the code; ensure the comment text and the actual handling of the
gender field are consistent.
🧹 Nitpick comments (3)
src/main/java/com/example/medicare_call/util/TestDataGenerator.java (1)

49-49: 향후 일관성 개선 제안: Elder 엔티티의 gender 필드도 enum으로 전환 고려

현재 Line 49에서 Elder 엔티티는 여전히 Gender.MALE.getCode()를 사용하여 byte 값을 전달하고 있습니다. 이는 Elder 엔티티가 아직 byte 타입을 사용하기 때문에 현재로서는 정상적인 코드입니다.

다만, Member 엔티티와의 일관성을 위해 향후 Elder 엔티티의 gender 필드도 Gender enum으로 전환하는 것을 고려해보시면 좋을 것 같습니다.

src/test/java/com/example/medicare_call/service/payment/NaverPayServiceTest.java (1)

10-10: 명시적 import 사용을 권장합니다.

와일드카드 import (.*)보다는 사용하는 enum들을 명시적으로 import하는 것이 코드 가독성과 유지보수성 측면에서 더 좋습니다.

♻️ 명시적 import로 변경
-import com.example.medicare_call.global.enums.*;
+import com.example.medicare_call.global.enums.Gender;
+import com.example.medicare_call.global.enums.OrderStatus;
+import com.example.medicare_call.global.enums.PaymentMethod;
+import com.example.medicare_call.global.enums.SubscriptionPlan;
+import com.example.medicare_call.global.enums.SubscriptionStatus;
src/test/java/com/example/medicare_call/Integration/CareCallIntegrationTest.java (1)

67-67: Elder 엔티티의 gender 필드도 Gender enum으로 refactoring하면 좋을 것 같습니다.

Member는 Gender enum을 사용하도록 개선되었는데, Elder는 여전히 Byte 타입을 사용하고 있네요. 코드 일관성을 위해 Elder도 동일하게 Gender enum으로 refactoring할 것을 제안합니다. (별도로 진행 중이라면 무시해도 됩니다.)

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f49f372 and 1d5023e.

📒 Files selected for processing (14)
  • src/main/java/com/example/medicare_call/domain/Member.java
  • src/main/java/com/example/medicare_call/dto/MemberInfoResponse.java
  • src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java
  • src/main/java/com/example/medicare_call/global/enums/Gender.java
  • src/main/java/com/example/medicare_call/service/auth/AuthService.java
  • src/main/java/com/example/medicare_call/util/TestDataGenerator.java
  • src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql
  • src/test/java/com/example/medicare_call/Integration/CareCallIntegrationTest.java
  • src/test/java/com/example/medicare_call/controller/CareCallControllerImmediateTest.java
  • src/test/java/com/example/medicare_call/controller/ElderControllerTest.java
  • src/test/java/com/example/medicare_call/repository/NotificationRepositoryTest.java
  • src/test/java/com/example/medicare_call/service/ElderServiceTest.java
  • src/test/java/com/example/medicare_call/service/auth/AuthServiceTest.java
  • src/test/java/com/example/medicare_call/service/payment/NaverPayServiceTest.java
💤 Files with no reviewable changes (1)
  • src/main/java/com/example/medicare_call/global/enums/Gender.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (14)
src/test/java/com/example/medicare_call/service/ElderServiceTest.java (1)

61-61: LGTM! Gender enum으로 깔끔하게 전환되었습니다.

테스트 데이터에서 Member 생성 시 Gender.MALE enum을 직접 사용하도록 변경되어 타입 안정성이 향상되었습니다.

src/main/java/com/example/medicare_call/dto/MemberInfoResponse.java (1)

55-55: LGTM! DTO 응답 매핑이 올바르게 업데이트되었습니다.

member.getGender()를 직접 호출하여 Gender enum을 반환하도록 변경되었습니다. Member 도메인의 gender 필드가 이제 Gender 타입이므로 별도의 변환 없이 직접 사용 가능합니다.

src/test/java/com/example/medicare_call/controller/ElderControllerTest.java (1)

92-92: LGTM! 컨트롤러 테스트가 Gender enum으로 잘 업데이트되었습니다.

테스트 Member 생성 시 Gender.FEMALE enum을 사용하여 타입 안정성이 개선되었습니다.

src/test/java/com/example/medicare_call/repository/NotificationRepositoryTest.java (1)

5-5: LGTM! Repository 테스트가 Gender enum으로 정상적으로 전환되었습니다.

Gender enum import를 추가하고 테스트 데이터 생성 시 Gender.FEMALE을 사용하도록 업데이트되었습니다.

Also applies to: 35-35

src/main/java/com/example/medicare_call/util/TestDataGenerator.java (1)

35-35: LGTM! Member 테스트 데이터 생성이 Gender enum으로 올바르게 업데이트되었습니다.

Gender.MALE enum을 직접 사용하여 Member 엔티티 생성 로직이 리팩터링된 구조에 맞춰 변경되었습니다.

src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql (2)

13-16: 변환 검증 로직이 정상적으로 동작합니다.

SELECT COUNT는 실제로 마이그레이션을 중단시키지 않지만, Line 21의 NOT NULL 제약 조건이 무효한 데이터가 있을 경우 마이그레이션을 실패시키므로 안전합니다. 이 SELECT문은 마이그레이션 실패 시 디버깅에 유용합니다.


6-11: 성별 매핑이 enum 정의와 일치합니다.

Gender enum에서 MALE=(byte)0, FEMALE=(byte)1로 정의되어 있고, 마이그레이션의 CASE문도 정확하게 일치하게 매핑하고 있습니다. 매핑 방향 문제없습니다.

src/main/java/com/example/medicare_call/service/auth/AuthService.java (1)

37-37: 변경사항이 올바르게 적용되었습니다.

req.getGender()를 직접 전달하도록 수정하여 .getCode() 호출이 제거되었습니다. Member 빌더가 이제 Gender enum을 직접 받으므로 더 깔끔한 API가 되었습니다.

src/test/java/com/example/medicare_call/service/payment/NaverPayServiceTest.java (1)

100-100: 테스트 데이터가 올바르게 업데이트되었습니다.

Gender.FEMALE enum 값을 사용하도록 변경되어 타입 안정성이 향상되었고, 테스트 코드의 가독성도 개선되었습니다.

Also applies to: 530-530, 585-585

src/test/java/com/example/medicare_call/Integration/CareCallIntegrationTest.java (1)

57-57: Member 엔티티 변경이 올바르게 적용되었습니다.

Gender.FEMALE enum을 사용하도록 변경되어 리팩토링 목표와 일치합니다.

src/test/java/com/example/medicare_call/controller/CareCallControllerImmediateTest.java (1)

4-4: 테스트 코드가 새로운 Gender enum과 잘 맞춰졌네요.

import 추가와 .gender(Gender.FEMALE) 사용이 Member 도메인의 리팩터링과 정확히 일치합니다.

Also applies to: 86-86

src/test/java/com/example/medicare_call/service/auth/AuthServiceTest.java (1)

106-106: 올바른 enum 사용입니다.

Gender.MALE 사용이 적절하고 테스트 컨텍스트와 일치합니다.

src/main/java/com/example/medicare_call/domain/Member.java (2)

73-82: 생성자 시그니처가 올바르게 업데이트되었습니다.

Lombok @Builder와 함께 Gender enum 타입으로 깔끔하게 변경되었네요.


84-95: updateInfo 메서드 시그니처 변경 완료됨

메서드 파라미터가 Gender enum으로 정확히 변경되었으며, 유일한 호출처인 MemberInfoUpdateRequest.updateMember()도 이미 Gender enum을 제대로 전달하고 있습니다. 모든 구현이 일관성 있게 업데이트되어 있네요.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql:
- Around line 18-21: The migration currently proceeds unconditionally and will
fail at the ALTER TABLE if there are NULLs or values other than 0/1 in the
existing gender column; modify V31__member_gender_byte_to_enum.sql to run
validation SELECTs (checking that gender values are only 0 or 1 and that there
are no NULLs) and abort the migration when invalid rows exist by raising an
error (e.g., using SIGNAL SQLSTATE '45000') instead of continuing to the
DROP/CHANGE block that operates on `gender` and `gender_new`; ensure the script
only reaches the ALTER TABLE ... DROP COLUMN `gender`, CHANGE COLUMN
`gender_new` `gender` ENUM(...) NOT NULL when the validation confirms
invalid_rows = 0.
- Around line 13-16: Current SELECT check for invalid_rows does not halt Flyway,
so the ALTER that adds NOT NULL to `gender_new` can run even when invalid rows
exist and cause a failed migration; instead update the migration to perform a
safe two-step ALTER on table `Member`: first explicitly enforce NOT NULL on
`gender_new` (e.g., ALTER TABLE `Member` MODIFY COLUMN `gender_new` VARCHAR(...)
NOT NULL) so it fails early if NULLs or bad values exist, and only after that
succeeds perform the swap/drop (e.g., ALTER TABLE `Member` DROP COLUMN `gender`,
CHANGE COLUMN `gender_new` `gender` ENUM('MALE','FEMALE') NOT NULL); reference
the `Member` table and the `gender_new`/`gender` column names when making these
changes.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1d5023e and faff41a.

📒 Files selected for processing (2)
  • src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java
  • src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: build
🔇 Additional comments (1)
src/main/java/com/example/medicare_call/dto/MemberInfoUpdateRequest.java (1)

50-61: Gender enum 전달이 정확하게 구현됨

Member.updateInfo() 메서드는 세 번째 매개변수로 Gender gender 타입을 받고 있으며, 라인 54에서 this.gender를 직접 전달하는 것이 올바릅니다. Gender enum 마이그레이션이 일관되게 진행되었습니다.

Comment on lines +13 to +16
-- 3) 변환 실패(=NULL) 체크
SELECT COUNT(*) AS invalid_rows
FROM `Member`
WHERE `gender_new` IS NULL;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, find the migration file
find . -name "V31__member_gender_byte_to_enum.sql" -type f 2>/dev/null

Repository: Medicare-Call/Medicare-Call-Backend

Length of output: 148


🏁 Script executed:

# Also check if there are other migration files to understand structure
find . -path "*db/migration*" -name "*.sql" -type f 2>/dev/null | head -20

Repository: Medicare-Call/Medicare-Call-Backend

Length of output: 1569


🌐 Web query:

Flyway SELECT statement migration behavior does it halt stop check result

💡 Result:

Short answer: Flyway will execute SELECT statements during a migration, it does not stop/halt the migration just because a SELECT returns rows — SELECT results are displayed by default (you can disable this) and the migration continues unless the statement raises an SQL error. Flyway runs each migration in a transaction and will roll back that migration if a statement fails (DB vendor permitting transactional DDL). [1][2]

References:

  • Flyway displays query results for statements that return results; can disable with outputQueryResults=false. [1]
  • Flyway runs migrations in transactions and rolls back a failed migration if an error occurs (subject to DB support for transactional DDL). [2]

🏁 Script executed:

cat -n ./src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql

Repository: Medicare-Call/Medicare-Call-Backend

Length of output: 788


SELECT 결과가 마이그레이션을 중단시키지 않습니다.

Flyway는 SELECT 문의 결과를 확인하지 않고 계속 진행하므로, invalid_rows가 0보다 크더라도 라인 19-21의 ALTER TABLE이 실행됩니다. 만약 운영 DB에 예상치 못한 gender 값(0, 1이 아닌 값)이나 NULL이 존재한다면, 라인 21의 NOT NULL 제약조건 적용 시 마이그레이션이 실패합니다.

실제로는 NOT NULL 제약 실패로 인한 SQL 에러가 발생하면 Flyway가 트랜잭션을 롤백하겠지만, 이렇게 되면 마이그레이션이 깨지고 수동 개입이 필요합니다. 미리 데이터를 검증하거나, 아래처럼 더 안전한 방식으로 스크립트를 수정하는 게 좋습니다:

-- 먼저 NULL이 없는지 확인하며 NOT NULL 적용
ALTER TABLE `Member`
    MODIFY COLUMN `gender_new` VARCHAR(50) NOT NULL;

-- 위가 성공하면 스왑 진행
ALTER TABLE `Member`
    DROP COLUMN `gender`,
    CHANGE COLUMN `gender_new` `gender` ENUM('MALE','FEMALE') NOT NULL;

이렇게 하면 NULL이 있을 경우 첫 번째 ALTER TABLE에서 명시적으로 실패하고, gender 컬럼은 손상되지 않습니다.

🤖 Prompt for AI Agents
In @src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql around
lines 13 - 16, Current SELECT check for invalid_rows does not halt Flyway, so
the ALTER that adds NOT NULL to `gender_new` can run even when invalid rows
exist and cause a failed migration; instead update the migration to perform a
safe two-step ALTER on table `Member`: first explicitly enforce NOT NULL on
`gender_new` (e.g., ALTER TABLE `Member` MODIFY COLUMN `gender_new` VARCHAR(...)
NOT NULL) so it fails early if NULLs or bad values exist, and only after that
succeeds perform the swap/drop (e.g., ALTER TABLE `Member` DROP COLUMN `gender`,
CHANGE COLUMN `gender_new` `gender` ENUM('MALE','FEMALE') NOT NULL); reference
the `Member` table and the `gender_new`/`gender` column names when making these
changes.

Comment on lines +18 to +21
-- invalid_rows = 0 확인 후 4) 스왑 (기존 컬럼 제거 + 새 컬럼을 gender로)
ALTER TABLE `Member`
DROP COLUMN `gender`,
CHANGE COLUMN `gender_new` `gender` ENUM('MALE','FEMALE') NOT NULL;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql

Repository: Medicare-Call/Medicare-Call-Backend

Length of output: 641


마이그레이션 실행 전 데이터 검증이 필요합니다.

라인 10-12의 SELECT 쿼리는 참고용일 뿐 자동으로 실행을 중단하지 않습니다. 만약 invalid_rows가 0이 아닌데 스크립트가 계속 진행되면 라인 21의 NOT NULL 제약조건에서 마이그레이션이 실패합니다.

마이그레이션 실행 전에 다음을 확인하는 것을 권장합니다:

  1. 기존 gender 컬럼이 0 또는 1의 값만 가지고 있는지 확인
  2. NULL 값이 없는지 확인

SELECT 쿼리 결과에서 invalid_rows = 0이 확인되어야 안전하게 진행할 수 있습니다.

🤖 Prompt for AI Agents
In @src/main/resources/db/migration/V31__member_gender_byte_to_enum.sql around
lines 18 - 21, The migration currently proceeds unconditionally and will fail at
the ALTER TABLE if there are NULLs or values other than 0/1 in the existing
gender column; modify V31__member_gender_byte_to_enum.sql to run validation
SELECTs (checking that gender values are only 0 or 1 and that there are no
NULLs) and abort the migration when invalid rows exist by raising an error
(e.g., using SIGNAL SQLSTATE '45000') instead of continuing to the DROP/CHANGE
block that operates on `gender` and `gender_new`; ensure the script only reaches
the ALTER TABLE ... DROP COLUMN `gender`, CHANGE COLUMN `gender_new` `gender`
ENUM(...) NOT NULL when the validation confirms invalid_rows = 0.

@mjkhub
Copy link
Member Author

mjkhub commented Jan 9, 2026

@sudo-Terry 코드래빗이 제안한 gender 필드 타입 변경 enum -> varchar(50) 내용은 할루시네이션 같더라구요.

그리고 프로젝트에서도 현재 enum 타입은 DB 스키마 레벨에서 enum으로 적용되어있어서 기존 방식 그대로 가겠습니다.

image

@sudo-Terry
Copy link
Member

sudo-Terry commented Jan 9, 2026

@mjkhub
저게 왜 혹시 할루시네이션인가요?

저도 enum 타입을 원해 사용했었는데 이야기를 들어보니 VARCHAR도 괜찮겠다 싶어서 의견이 궁금해서 여쭤봤던 것이에요!
https://ywoosang.tistory.com/36
상기 링크처럼 실제로 꽤 고민하는 영역인 것 같아서요

지금까지 프로젝트는 enum타입으로 스키마 타입이 만들어져있는게 맞아요!

다 바꾸자는게 아니라... 단순하게 의견이 궁금했습니다.

@mjkhub
Copy link
Member Author

mjkhub commented Jan 9, 2026

@sudo-Terry
저희 프로젝트에서 구체적인 하이버네이트 버전은 확인하진 않았지만, 말씀해주신 내용을 바탕으로 varchar 타입으로 변환했을 때 JPA에서 gender 컬럼에 대한 타입을 Enum으로 Expecting해서 예외가 발생하더라구요. 그래서 할루시네이션이라고 말씀드리고 롤백했습니다!

물론, hibernate ddl 설정값을 validate -> none으로 바꾸면 지금 버전에서도 varchar로 할 수 있을 것 같긴 합니닷

Copy link
Contributor

@kisusu115 kisusu115 left a comment

Choose a reason for hiding this comment

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

드디어 byte 정상화가.. 마이그레이션 까지 고생하셨습니다👍👍

@sudo-Terry
Copy link
Member

@mjkhub
아하 하이버네이트 버전이 영향을 주는군요! 확인 감사합니다~

@mjkhub mjkhub merged commit 296bf95 into main Jan 9, 2026
4 checks passed
@mjkhub mjkhub deleted the refactor/member branch January 9, 2026 05:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoring Refactoring should not change Test codes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants