학사 관리 서비스(척척학사)를 운영하면서, 포털 데이터를 연동하는 과정에서 크게 두 가지 문제가 발생했습니다.
1. 이수 구분(facultyDivisionName) 매핑 오류
2. 재수강 과목 중복 적재 문제
이 글은 해당 문제를 어떻게 분석하고 해결했는지 기록한 트러블슈팅 사례입니다.
(과목 코드, 연도, 학기, 교수명, 분반)
까지만 비교했음 ICT 개론
→ 일선 과목으로 수강 ICT 개론
→ 전핵 과목으로 수강 일선
)만 남아 B도 잘못 매핑됨 facultyDivisionName
을 비교 기준에 추가 findByCourseIdAndYearAndSemesterAndClassSectionAndProfessorId
findByCourseIdAndYearAndSemesterAndClassSectionAndProfessorIdAndFacultyDivisionName
으로 수정 연동 일시: 2025-02-24
studentId: '보안상 삭제'
course_offerings: num1, num2
-> courseId = num3 (화학및실험2)
재수강 과목인 '화학및실험2'가 중복 적재되어 있음
is_retake
값이 true인 과목만 남기고, 이전 과목은 삭제 is_retake=false
과목은 제거 → 중복 방지 재수강 문제는 특수 케이스(과목 코드 변경, 수기 처리된 데이터 등)까지 고려해야 했습니다.
특수 케이스
과목 코드
가 변경됨is_retake
true(재수강 O)가 아닌 false(재수강 x)로 넘어옴is_retake = false
로 들어오는 것으로 보아,이를 해결하기 위해 DB 스키마와 로직을 전면 개편했습니다.
isRetake
→ isRetakeDeleted
isRetakeDeleted = true
인 과목은 졸업 요건에서 제외 isRetakeDeleted
필드를 반환 → 사용자에게도 "재수강으로 제외된 과목"임을 표시 가능 true
로 데이터가 넘어오는 것을 확인1) student_courses 테이블
ALTER TABLE student_courses
ADD COLUMN IF NOT EXISTS is_retake_deleted BOOLEAN NOT NULL DEFAULT FALSE;
2) students 테이블
ALTER TABLE students
ADD COLUMN IF NOT EXISTS reconnection_required BOOLEAN NOT NULL DEFAULT TRUE;
3) course_offerings 테이블 유니크 제약 조건 확인
SELECT con.conname AS constraint_name,
pg_get_constraintdef(con.oid) AS definition
FROM pg_constraint con
JOIN pg_class rel ON rel.oid = con.conrelid
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
WHERE rel.relname = 'course_offerings'
AND con.contype = 'u';
4) course_offerings 테이블 유니크 제약 조건 재설정
-- 기존 유니크 제약조건 삭제 (제약 이름 확인 필요)
ALTER TABLE course_offerings
DROP CONSTRAINT IF EXISTS uq_course_offering;
-- 새로운 유니크 제약조건 추가
ALTER TABLE course_offerings
ADD CONSTRAINT uq_course_offering UNIQUE (
course_id,
year,
semester,
class_section,
professor_id,
faculty_division_name,
host_department
);
students.reconnection_required
필드를 추가하여,문제 | 원인 | 해결 |
---|---|---|
이수 구분 오류 | facultyDivisionName 미고려 | 비교 로직에 facultyDivisionName 추가 |
재수강 중복 | is_retake 미고려 | is_retake → isRetakeDeleted 필드 도입, 이전 과목 soft-delete 처리 |
특수 케이스 | 과목 코드 변경, 수기 처리 | isRetakeDeleted 로직으로 일괄 처리 가능 |
재연동 필요 | 기존 사용자 데이터 오류 | reconnection_required 필드 추가 → 재연동 유도 |
이번 개선으로 모든 사용자 데이터가 일관성 있게 관리되며,
이수 구분/재수강 문제도 안정적으로 해결되었습니다.
앞으로는 포털 재연동만 진행하면 문제가 자동으로 처리됩니다.