Skip to content

feat: 알고리즘, 네트워크, 운영체제 문제 SQL 추가(#288)#291

Merged
xunxxoie merged 4 commits intodevfrom
refactor/288-update-problem-set
Jan 12, 2026
Merged

feat: 알고리즘, 네트워크, 운영체제 문제 SQL 추가(#288)#291
xunxxoie merged 4 commits intodevfrom
refactor/288-update-problem-set

Conversation

@xunxxoie
Copy link
Member

@xunxxoie xunxxoie commented Jan 11, 2026

📋 이슈 번호

🛠 구현 사항

알고리즘, 네트워크, 운영체제 문제의 SQL을 추가하였습니다.

🤔 추가 고려 사항

Summary by CodeRabbit

  • New Features

    • 네트워크, 알고리즘, 운영체제 전반에 걸친 대규모 학습 콘텐츠 추가 — 다수 유닛에 각 2–3개 강의와 문제, 선택지 및 정답·해설 포함
    • 다양한 주제(기초 개념부터 보안·성능·알고리즘별 심화까지) 문제집 세트 추가로 학습 범위 확장
  • Chores

    • 자료구조 관련 SQL 주석(강의 번호) 정리 및 업데이트

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

@xunxxoie xunxxoie self-assigned this Jan 11, 2026
@xunxxoie xunxxoie added the 🌼 Feat to add new Feature! label Jan 11, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 11, 2026

Walkthrough

네트워크·알고리즘·운영체제 등 여러 챕터의 다수 SQL 시드 파일이 추가되거나 갱신되어 lesson, problem, option, answer 테이블에 대량 INSERT 문이 삽입되었습니다. 일부 자료구조 파일은 주석 내 레슨 번호만 수정되었습니다.

Changes

Cohort / File(s) 변경 요약
네트워크: 대량 시드 추가
src/main/resources/sql/problem/네트워크/unit01_네트워크기초.sql, .../unit02_네트워크토폴로지.sql, .../unit03_프로토콜과계층구조.sql, .../unit04_데이터단위와캡슐화과정.sql, .../unit05_물리계층과전송매체.sql, .../unit06_데이터링크계층과이더넷.sql, .../unit07_네트워크계층과IP주소체계.sql, .../unit08_서브넷과라우팅.sql, .../unit09_전송계층TCP와UDP.sql, .../unit10_포트소켓NAT.sql, .../unit11_응용계층서비스.sql, .../unit12_웹접속과데이터흐름.sql, .../unit13_무선네트워크와이동통신.sql, .../unit14_네트워크보안과안정성.sql
각 유닛별로 레슨(IDs) 생성 및 다수의 problem, option, answer INSERT 추가. 순수 데이터 시드(추가) 작업만 포함.
알고리즘: 다수 유닛 시드 추가
src/main/resources/sql/problem/알고리즘/unit01_시간복잡도와Big-O표기법.sql, .../unit02_공간복잡도와점근적표기.sql, .../unit03_브루트포스개념과한계.sql, .../unit04_백트래킹.sql, .../unit05_버블정렬.sql, .../unit06_선택정렬.sql, .../unit07_삽입정렬.sql, .../unit08_합병정렬.sql, .../unit09_퀵정렬.sql, .../unit10_힙정렬.sql, .../unit11_기수정렬.sql, .../unit12_위상정렬.sql, .../unit13_DFS와BFS.sql, .../unit14_그리디알고리즘.sql, .../unit15_다이내믹프로그래밍.sql, .../unit16_최소신장트리.sql, .../unit17_최단경로알고리즘.sql
각 알고리즘 유닛에 대해 lesson·problem·option·answer 레코드 대량 추가. INSERT 패턴 일관적(lesson → problem → option → answer).
운영체제: 다수 유닛 시드 추가
src/main/resources/sql/problem/운영체제/unit01_운영체제개요.sql, .../unit02_프로세스기초.sql, .../unit03_시스템콜.sql, .../unit04_인터럽트.sql, .../unit05_프로세스관리.sql, .../unit06_스레드와멀티스레딩.sql, .../unit07_CPU스케줄링.sql, .../unit08_동기화와병행성.sql, .../unit09_데드락.sql, .../unit10_메모리관리기초.sql, .../unit11_가상메모리.sql, .../unit12_페이지관리.sql, .../unit13_캐시메모리.sql, .../unit14_파일시스템과디스크관리.sql
운영체제 관련 레슨·문제·옵션·정답 INSERT 대량 추가. 데이터 중심 변경만 포함(스키마/로직 미변경).
자료구조: 주석(레슨 번호) 업데이트
src/main/resources/sql/problem/자료구조/unit02_연결리스트.sql, .../unit03_스택과큐.sql, .../unit04_트리기본.sql, .../unit05_이진트리와이진탐색트리.sql, .../unit06_힙과우선순위큐.sql, .../unit07_트라이.sql, .../unit08_균형이진탐색트리.sql, .../unit09_해시테이블.sql, .../unit10_그래프.sql
실행 영향 없음: 파일 내부 주석(레슨 헤더) 텍스트의 레슨 번호만 변경됨.
공통 패턴 및 기타 파일
src/main/resources/sql/problem/... (여러 파일)
대부분 파일이 동일한 삽입 패턴을 따름. 기존 스키마·API·제약 조건을 변경하지 않는 데이터 시드(추가)형 변경.

Sequence Diagram(s)

(생성 조건 미충족 — 변경은 주로 데이터 시드로 제어 흐름 변경·새 기능 없음으로 해당 섹션 생략)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 분

Possibly related PRs

Suggested reviewers

  • sukangpunch

Poem

🐇
밭에 씨앗처럼 문제들을 흩뿌렸네,
나는 당근 대신 지식 씨앗을 심었지 🥕
객관과 서술이 함께 자라는 정원,
토끼 발자국 남기며 웃음으로 지킨다 ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 알고리즘, 네트워크, 운영체제 문제 SQL 추가라는 변경 사항을 명확하고 간결하게 요약하고 있습니다.
Linked Issues check ✅ Passed 연결된 이슈 #288은 문제 데이터 통합 및 관리 구조 변경을 목표로 하며, PR의 SQL 추가 변경 사항이 이를 충족합니다.
Out of Scope Changes check ✅ Passed 모든 변경 사항은 문제 SQL 데이터 추가(알고리즘, 네트워크, 운영체제)와 기존 파일의 레슨 번호 주석 업데이트에 국한되어 있습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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


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.

@github-actions
Copy link

github-actions bot commented Jan 11, 2026

Unit Test Results

0 tests   0 ✔️  0s ⏱️
0 suites  0 💤
0 files    0

Results for commit 23d6dc5.

♻️ This comment has been updated with latest results.

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: 9

Caution

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

⚠️ Outside diff range comments (2)
src/main/resources/sql/problem/자료구조/unit06_힙과우선순위큐.sql (1)

116-116: 시간 복잡도 표기법의 일관성 문제를 수정하세요.

답변 콘텐츠에서 시간 복잡도를 표기할 때 소문자 "o(log n)"을 사용하고 있으나, 올바른 표기는 대문자 "O(log n)"입니다. 이는 학습 자료의 정확성과 일관성을 위해 수정되어야 합니다.

수정 제안:

✏️ 제안된 수정사항

라인 116-117:

- (33, 98, 'o(log n),로그 시간,logarithmic time',
+ (33, 98, 'O(log n),로그 시간,logarithmic time',

라인 118-119:

- (34, 101, 'o(log n),로그 시간,로그시간,logarithmic time',
+ (34, 101, 'O(log n),로그 시간,로그시간,logarithmic time',

라인 174-175:

- (36, 107, 'o(log n),로그 시간,로그시간,logarithmic time',
+ (36, 107, 'O(log n),로그 시간,로그시간,logarithmic time',

Also applies to: 118-118, 174-174

src/main/resources/sql/problem/자료구조/unit05_이진트리와이진탐색트리.sql (1)

116-116: 시간 복잡도 표기를 대문자 'O'로 정정하세요.

라인 116과 174에서 점화식의 답안 데이터에 포함된 시간 복잡도 표기가 소문자 'o'로 되어 있습니다. 일반적인 Big-O 표기법 관례에 따라 대문자 'O'를 사용하는 것이 표준입니다.

🔧 제안된 수정

라인 116:

-VALUES (27, 80, 'o(log n),로그시간,logarithmic time',
+VALUES (27, 80, 'O(log n),로그시간,logarithmic time',

라인 174:

-VALUES (30, 89, 'o(n),선형시간,linear time',
+VALUES (30, 89, 'O(n),선형시간,linear time',

Also applies to: 174-174

🤖 Fix all issues with AI agents
In @src/main/resources/sql/problem/네트워크/unit04_데이터단위와캡슐화과정.sql:
- Around line 46-47: The SQL row for question id 1629 (the tuple starting with
(1629, 587, '전송 계층의 데이터 단위로 TCP에서 사용하고 신뢰성과 비연결 전송을 위한 정보를 포함한다'...))
incorrectly describes TCP as "비연결 전송"; update that text to correctly state TCP
is "연결 지향 전송" (or remove "비연결" and say "연결 지향 전송을 통한 신뢰성 보장") so the explanation
accurately reflects TCP's connection-oriented nature and retain the rest of the
tuple text and truth value.

In @src/main/resources/sql/problem/네트워크/unit06_데이터링크계층과이더넷.sql:
- Around line 1-2: The file header Unit ID (Unit ID: 33) doesn't match the
filename; rename the file from unit06_데이터링크계층과이더넷.sql to unit33_데이터링크계층과이더넷.sql
and update any internal references or metadata inside the file (the comment line
containing "Unit: 데이터 링크 계층과 이더넷 (Unit ID: 33)") and any external references
(imports, indexes, or TOC entries) that reference the old filename to maintain
consistency.

In @src/main/resources/sql/problem/알고리즘/unit02_공간복잡도와점근적표기.sql:
- Around line 125-126: The answer options currently include the lowercase omega
'ω' which is incorrect for Big-Omega; update the stored acceptable answers
string in the tuple (the one currently "'ω,오메가,omega,Ω'") to remove the
lowercase 'ω' and only include the Big-Omega variants like "'Ω,오메가,omega'"; also
ensure any answer-checking logic for this question respects case-sensitive
symbol matching so 'ω' is not treated as equivalent to 'Ω'.

In @src/main/resources/sql/problem/알고리즘/unit11_기수정렬.sql:
- Around line 1-2: The file name and the Unit ID in the header comment are
inconsistent: the file is named unit11_기수정렬.sql but the comment shows "Unit ID:
21"; rename the file to unit21_기수정렬.sql and update any build/config references
as needed, or alternatively change the header comment Unit ID to 11 — ensure the
filename, the header comment ("Unit ID: 21"), and any external references all
match (recommended: rename to unit21_기수정렬.sql and keep the header Unit ID: 21).
- Around line 182-183: The Big-O notation in the VALUES tuple currently uses
lowercase 'o' ("o(n + b),o(n),o(n+b)"); update that string to use uppercase 'O'
("O(n + b),O(n),O(n+b)") so the answer uses standard Big-O notation, or
alternatively include both forms if you want to accept lowercase (e.g., "O(...),
o(...)")—locate and edit the VALUES entry containing the radix sort explanation
in the SQL insert tuple and replace the lowercase 'o' occurrences with uppercase
'O'.

In @src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql:
- Around line 44-47: Problem 379 has an incorrect answer flag: change the
is_answer for option with id 1011 (the tuple starting with (1011, 379, '무방향
그래프에서도 사용 가능하다', ...)) from true to false because topological sort applies only
to directed acyclic graphs; ensure the tuple for option 1009 remains marked
appropriately if it was intended as a correct statement about DFS and BFS
implementations.

In @src/main/resources/sql/problem/알고리즘/unit13_DFS와BFS.sql:
- Around line 1-2: The file name and the Unit ID in the SQL header are
inconsistent: the header shows "Unit ID: 23" but the file is named
unit13_DFS와BFS.sql; rename the file to unit23_DFS와BFS.sql to match the header
(or alternatively update the header Unit ID if 13 is correct), and search for
any references to unit13_DFS와BFS.sql (imports, docs, scripts) and update them to
the new name so all references and the comment header ("Unit: DFS와 BFS", "Unit
ID: 23") remain consistent.
🧹 Nitpick comments (6)
src/main/resources/sql/problem/알고리즘/unit06_선택정렬.sql (1)

1-185: 트랜잭션 처리 및 외래 키 검증 필요

이 파일도 동일하게 트랜잭션 경계가 없고 unit_id: 16의 존재 여부를 검증하지 않습니다. 삽입 실패 시 부분 데이터가 남을 수 있으며, unit이 존재하지 않으면 외래 키 제약 조건 위반이 발생합니다.

선택 정렬에 대한 교육 콘텐츠는 정확하며, 시간 복잡도, 교환 횟수, 안정성 등의 설명이 올바릅니다.

src/main/resources/sql/problem/네트워크/unit03_프로토콜과계층구조.sql (1)

1-154: 트랜잭션 경계 추가 권장

이 파일도 트랜잭션 경계가 없고 unit_id: 30의 존재 여부를 검증하지 않아 동일한 데이터 무결성 위험이 있습니다.

프로토콜, OSI 7계층, TCP/IP 4계층 모델에 대한 네트워크 교육 콘텐츠는 정확하며, 각 계층의 역할과 기능이 올바르게 설명되어 있습니다.

src/main/resources/sql/problem/네트워크/unit11_응용계층서비스.sql (1)

1-155: 트랜잭션 경계 추가 권장

이 파일도 트랜잭션 경계가 없고 unit_id: 38의 존재 여부를 검증하지 않습니다.

응용 계층 프로토콜(HTTP, DNS, SMTP, FTP, SSH, Telnet)에 대한 교육 콘텐츠는 정확하며, 각 프로토콜의 역할과 포트 번호(SSH: 22, SMTP: 25/587/465 등)가 올바르게 설명되어 있습니다.

src/main/resources/sql/problem/알고리즘/unit01_시간복잡도와Big-O표기법.sql (1)

1-185: 트랜잭션 래핑 및 입력 데이터 검증은 선택적 개선 사항입니다.

이 파일의 교육 콘텐츠는 우수하며, 참고로 unit_id: 11은 unit.sql에 이미 정의되어 있습니다. 다만 몇 가지 선택적 개선을 고려할 수 있습니다:

  • 트랜잭션 경계 추가(BEGIN/COMMIT) - 삽입 중 오류 발생 시 부분적으로 불완전한 데이터가 남는 것을 방지할 수 있습니다.
  • 사전 검증 - 실행 전 unit 존재 여부 확인 스크립트 추가 가능합니다.

답안 형식의 유연한 매칭 지원과 문제 데이터의 정확성은 잘 설계되었습니다.

src/main/resources/sql/problem/네트워크/unit06_데이터링크계층과이더넷.sql (1)

4-4: 주석 스타일 일관성

다른 파일들은 -- Lesson 생성을 사용하지만, 이 파일만 -- Lesson INSERT를 사용합니다. 일관성을 위해 -- Lesson 생성으로 변경하는 것을 권장합니다.

♻️ 수정 제안
--- Lesson INSERT
+-- Lesson 생성
 INSERT INTO lesson (id, unit_id, title)
src/main/resources/sql/problem/알고리즘/unit13_DFS와BFS.sql (1)

1-2: 전체 파일의 명명 규칙 개선 필요

모든 파일에서 파일명의 unit 번호와 주석의 Unit ID가 일치하지 않는 패턴이 발견되었습니다:

  • unit04_백트래킹.sql → Unit ID: 14
  • unit05_물리계층과전송매체.sql → Unit ID: 32
  • unit11_기수정렬.sql → Unit ID: 21
  • unit06_데이터링크계층과이더넷.sql → Unit ID: 33
  • unit13_DFS와BFS.sql → Unit ID: 23

파일명의 unit 번호가 순서를 나타내는 것이라면, 실제 Unit ID를 사용하여 unit{실제ID}_{주제}.sql 형식으로 통일하는 것이 혼란을 방지할 수 있습니다.

📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8d80368 and 405bd26.

📒 Files selected for processing (41)
  • src/main/resources/sql/problem/네트워크/unit01_네트워크기초.sql
  • src/main/resources/sql/problem/네트워크/unit02_네트워크토폴로지.sql
  • src/main/resources/sql/problem/네트워크/unit03_프로토콜과계층구조.sql
  • src/main/resources/sql/problem/네트워크/unit04_데이터단위와캡슐화과정.sql
  • src/main/resources/sql/problem/네트워크/unit05_물리계층과전송매체.sql
  • src/main/resources/sql/problem/네트워크/unit06_데이터링크계층과이더넷.sql
  • src/main/resources/sql/problem/네트워크/unit07_네트워크계층과IP주소체계.sql
  • src/main/resources/sql/problem/네트워크/unit08_서브넷과라우팅.sql
  • src/main/resources/sql/problem/네트워크/unit09_전송계층TCP와UDP.sql
  • src/main/resources/sql/problem/네트워크/unit10_포트소켓NAT.sql
  • src/main/resources/sql/problem/네트워크/unit11_응용계층서비스.sql
  • src/main/resources/sql/problem/네트워크/unit12_웹접속과데이터흐름.sql
  • src/main/resources/sql/problem/네트워크/unit13_무선네트워크와이동통신.sql
  • src/main/resources/sql/problem/네트워크/unit14_네트워크보안과안정성.sql
  • src/main/resources/sql/problem/알고리즘/unit01_시간복잡도와Big-O표기법.sql
  • src/main/resources/sql/problem/알고리즘/unit02_공간복잡도와점근적표기.sql
  • src/main/resources/sql/problem/알고리즘/unit03_브루트포스개념과한계.sql
  • src/main/resources/sql/problem/알고리즘/unit04_백트래킹.sql
  • src/main/resources/sql/problem/알고리즘/unit05_버블정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit06_선택정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit07_삽입정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit08_합병정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit09_퀵정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit10_힙정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit11_기수정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql
  • src/main/resources/sql/problem/알고리즘/unit13_DFS와BFS.sql
  • src/main/resources/sql/problem/알고리즘/unit14_그리디알고리즘.sql
  • src/main/resources/sql/problem/알고리즘/unit15_다이내믹프로그래밍.sql
  • src/main/resources/sql/problem/알고리즘/unit16_최소신장트리.sql
  • src/main/resources/sql/problem/알고리즘/unit17_최단경로알고리즘.sql
  • src/main/resources/sql/problem/자료구조/unit01_배열.sql
  • src/main/resources/sql/problem/자료구조/unit02_연결리스트.sql
  • src/main/resources/sql/problem/자료구조/unit03_스택과큐.sql
  • src/main/resources/sql/problem/자료구조/unit04_트리기본.sql
  • src/main/resources/sql/problem/자료구조/unit05_이진트리와이진탐색트리.sql
  • src/main/resources/sql/problem/자료구조/unit06_힙과우선순위큐.sql
  • src/main/resources/sql/problem/자료구조/unit07_트라이.sql
  • src/main/resources/sql/problem/자료구조/unit08_균형이진탐색트리.sql
  • src/main/resources/sql/problem/자료구조/unit09_해시테이블.sql
  • src/main/resources/sql/problem/자료구조/unit10_그래프.sql
🔇 Additional comments (42)
src/main/resources/sql/problem/자료구조/unit08_균형이진탐색트리.sql (1)

11-11: 주석 헤더 업데이트가 일관성 있게 반영되었습니다.

세 개의 주석 헤더(Lesson 21, 22, 23)가 정확하게 lesson 테이블 생성 문(5-8줄)의 ID 값과 대응되며, 각 lesson의 문제들이 올바르게 참조되고 있습니다. 교육 콘텐츠의 계층 구조가 명확하고 일관성 있게 유지되었습니다.

Also applies to: 70-70, 129-129

src/main/resources/sql/problem/자료구조/unit06_힙과우선순위큐.sql (1)

1-175: 전체 데이터 구조 및 내용 검증.

이 파일의 SQL 데이터는 다음 항목들에서 우수한 구조를 보입니다:

  1. ID 무결성: 모든 문제, 선택지, 답변 ID가 순차적이고 중복 없이 일관되게 배정되었습니다.
  2. 참조 무결성: 각 선택지와 답변의 problem_id가 정의된 문제와 정확하게 대응됩니다.
  3. 문제 유형 일관성: OBJECTIVE 문제는 선택지(option) 테이블로, SUBJECTIVE 문제는 답변(answer) 테이블로 올바르게 처리되어 있습니다.
  4. 교육 콘텐츠 품질: 한국어 설명이 문법적으로 정확하고, 각 선택지의 설명(explanation)이 상세하며 교육적 가치가 있습니다.
  5. 답변 유효성: 복수의 동의어 형식을 쉼표로 구분하여 다양한 정답 표현을 수용하는 것이 좋은 설계입니다.

파일은 기본적으로 건전한 상태입니다.

src/main/resources/sql/problem/자료구조/unit05_이진트리와이진탐색트리.sql (5)

11-11: 레슨 헤더 주석 번호 업데이트 적절합니다.

Lesson 1→13, 2→14, 3→15로 번호가 재정렬되었고, INSERT 문(라인 6-8)의 lesson ID와 일치합니다. 주석과 데이터의 대응이 정확합니다.

Also applies to: 67-67, 122-122


14-20: 문제(Problem) 데이터가 논리적으로 적절하게 구성되었습니다.

세 개의 레슨(이진 트리 기초, 이진 탐색 트리 기초, 이진 탐색 트리 응용)에 대해 각각 6개의 문제가 정의되어 있으며, 각 문제의 lesson_id 참조가 일관됩니다. 문제의 유형(OBJECTIVE/SUBJECTIVE)도 적절하게 혼합되어 있습니다.

Also applies to: 70-76, 125-131


22-58: 선택지(Option) 데이터의 설명이 충실합니다.

각 선택지가 상세한 설명과 정답 표시를 포함하고 있어 교육 자료로 충분합니다. 이진 트리, 이진 탐색 트리, AVL/Red-Black 트리, 편향 트리 등 핵심 개념에 대한 선택지가 이론적으로 정확합니다.

Also applies to: 78-113, 133-169


6-8: Lesson 삽입 데이터 검증 완료 - 문제 없음

각 레슨이 unit_id=5에 올바르게 연결되어 있으며, problem(ID 73-90), option(ID 193-240), answer(ID 27-30) 데이터에서 lesson_id 참조가 일관되게 유지됩니다. 기존 SQL 파일들을 검토한 결과 ID 13, 14, 15의 중복이나 충돌이 없으며, 데이터 구조가 정상적으로 구성되어 있습니다.


60-64: 답안(Answer) 데이터 매핑이 올바릅니다.

각 주관식 문제(problem_id 74, 77, 80, 83, 86, 89)에 대한 답안이 정의되어 있으며, answer ID 25-30은 데이터베이스 내에서 유일하게 할당되었습니다. 다른 SQL 파일들에서 이 ID들이 중복 사용되지 않았으며, 전체 유닛에 걸쳐 순차적으로 할당된 패턴을 따릅니다.

src/main/resources/sql/problem/자료구조/unit04_트리기본.sql (1)

11-11: 문서화 개선 승인

주석 헤더가 실제 lesson ID와 일치하도록 업데이트되어 가독성이 향상되었습니다. 기능적 변경이 없는 문서화 개선입니다.

Also applies to: 66-66, 121-121

src/main/resources/sql/problem/자료구조/unit03_스택과큐.sql (1)

11-11: 문서화 개선 승인

주석이 실제 데이터와 정확히 일치하도록 업데이트되었습니다. 코드 변경 없이 문서 정확성만 개선되었습니다.

Also applies to: 70-70, 126-126

src/main/resources/sql/problem/자료구조/unit07_트라이.sql (1)

10-10: 문서화 개선 승인

레슨 번호가 INSERT 문의 실제 ID 값과 일치하도록 주석이 수정되었습니다. 문서 정확성 향상을 위한 변경입니다.

Also applies to: 65-65

src/main/resources/sql/problem/자료구조/unit09_해시테이블.sql (1)

11-11: 문서화 개선 승인

주석의 레슨 번호가 실제 데이터베이스에 삽입되는 ID와 일치하도록 업데이트되었습니다. 기능 변경 없는 문서화 개선입니다.

Also applies to: 69-69, 128-128

src/main/resources/sql/problem/자료구조/unit02_연결리스트.sql (1)

11-11: 문서화 개선 승인

주석 헤더의 레슨 번호가 실제 INSERT 문의 ID와 정확히 일치하도록 수정되었습니다. 데이터나 로직 변경 없이 문서의 정확성만 개선되었습니다.

Also applies to: 58-58, 111-111

src/main/resources/sql/problem/알고리즘/unit03_브루트포스개념과한계.sql (1)

1-185: 트랜잭션 경계 추가는 선택적

unit_id 13 (브루트 포스 개념과 한계)은 src/main/resources/sql/unit.sql에 이미 정의되어 있으므로 외래키 검증 문제는 없습니다. 다만, 프로젝트의 다른 문제 SQL 파일들과 일관되도록 트랜잭션 경계 추가를 고려할 수 있습니다.

브루트 포스 알고리즘의 개념, 구현 방법(반복문 vs 재귀), 한계, 백트래킹과의 비교에 대한 교육 콘텐츠는 정확합니다.

src/main/resources/sql/problem/알고리즘/unit10_힙정렬.sql (1)

1-185: 데이터 시딩 구조가 적절합니다.

힙 정렬 관련 문제 세트가 올바르게 구성되어 있습니다:

  • Lesson ID 57-59가 Unit ID 20에 적절히 연결됨
  • Problem, Option, Answer 간의 외래 키 참조가 일관성 있음
  • 기술적 내용(시간 복잡도 O(n log n), 제자리 정렬, 불안정 정렬 등)이 정확함
src/main/resources/sql/problem/네트워크/unit02_네트워크토폴로지.sql (1)

1-155: 네트워크 토폴로지 문제 세트가 올바르게 구성되었습니다.

Lesson, Problem, Option, Answer 간의 ID 참조가 일관성 있게 유지되고 있으며, 토폴로지 관련 기술 내용이 적절합니다.

src/main/resources/sql/problem/네트워크/unit10_포트소켓NAT.sql (1)

1-155: 포트, 소켓, NAT 문제 세트가 정확하게 구성되었습니다.

  • 포트 범위 정보가 정확함 (Well-known: 0-1023, Registered: 1024-49151, Dynamic: 49152-65535)
  • NAT 유형별 설명(Static NAT, Dynamic NAT, PAT, SNAT, DNAT)이 기술적으로 올바름
  • 소켓의 3요소(프로토콜, IP 주소, 포트 번호) 설명이 정확함
src/main/resources/sql/problem/알고리즘/unit02_공간복잡도와점근적표기.sql (1)

1-68: 공간 복잡도 및 점근적 표기법 내용이 전반적으로 정확합니다.

고정 공간/가변 공간 구분, 시간-공간 트레이드오프 개념, 메모이제이션 설명 등이 올바르게 구성되어 있습니다.

src/main/resources/sql/problem/알고리즘/unit17_최단경로알고리즘.sql (1)

1-168: 최단 경로 알고리즘 문제 세트가 정확하게 구성되었습니다.

  • 다익스트라: 양수 가중치 전용, 탐욕적 방식, O((V+E)logV) - 정확
  • 벨만-포드: 음수 가중치 처리 가능, 음수 사이클 탐지, O(V×E) - 정확
  • 플로이드-워셜: 모든 쌍 최단 경로, 동적 계획법, O(V³) - 정확

알고리즘별 특징과 사용 조건이 명확하게 설명되어 있습니다.

src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql (1)

1-43: 위상 정렬 기초 개념 설명은 정확합니다.

DAG 개념, 진입 차수, Kahn's Algorithm, 시간 복잡도 O(V+E) 등의 기본 개념이 올바르게 설명되어 있습니다.

src/main/resources/sql/problem/네트워크/unit08_서브넷과라우팅.sql (1)

1-155: 서브넷과 라우팅 문제 세트가 정확하게 구성되었습니다.

  • 서브넷 호스트 계산 공식 (2^n - 2) 정확
  • 정적 라우팅 vs 동적 라우팅 특징 구분 명확
  • 라우팅 프로토콜별 특징 정확:
    • RIP: 거리 벡터 방식, 홉 수 기준
    • OSPF: 링크 상태 기반, 대규모 네트워크 적합
    • BGP: AS 간 라우팅
src/main/resources/sql/problem/알고리즘/unit04_백트래킹.sql (2)

64-67: 주관식 답안 형식 확인 완료

주관식 문제의 답안에 여러 표기 방식(한글, 영문, 띄어쓰기 변형)을 모두 허용하는 형식이 잘 적용되어 있습니다. 이는 사용자 경험 측면에서 우수한 접근입니다.


1-2: 파일명과 주석의 Unit ID는 실제로 불일치하지 않습니다. 이 디렉토리의 모든 파일은 일관된 명명 규칙을 따르고 있습니다: 파일 번호 + 10 = 실제 Unit ID (예: unit04 → Unit ID 14, unit14 → Unit ID 24). 파일명은 순차적 파일 구성을 나타내고, 주석의 Unit ID는 데이터베이스의 실제 참조값을 명시하므로, 파일명을 변경할 필요가 없습니다.

Likely an incorrect or invalid review comment.

src/main/resources/sql/problem/네트워크/unit05_물리계층과전송매체.sql (2)

1-155: AI 요약 불일치 발견

AI 요약에 언급된 파일명(unit05_데이터단위와캡슐화과정.sql)과 실제 파일명(unit05_물리계층과전송매체.sql)이 다릅니다. 하지만 실제 SQL 내용은 물리 계층과 전송 매체에 관한 것으로 파일명과 일치하므로 데이터 자체는 정확합니다.


1-2: 파일명과 Unit ID는 일관된 체계를 따르고 있습니다. 네트워크 디렉토리의 모든 파일에서 unit## 번호(0114)와 Unit ID(2841) 간에 체계적인 매핑이 존재하므로 별도의 변경이 필요하지 않습니다.

Likely an incorrect or invalid review comment.

src/main/resources/sql/problem/알고리즘/unit13_DFS와BFS.sql (2)

1-157: AI 요약 완전 불일치

AI 요약이 "unit13_무선네트워크와이동통신.sql"에 관한 내용으로 작성되어 있지만, 실제 파일은 "DFS와BFS"(깊이 우선 탐색과 너비 우선 탐색)에 관한 내용입니다. AI 요약이 완전히 다른 파일에 대한 것으로 보입니다. 하지만 실제 SQL 데이터 자체는 DFS/BFS 내용으로 올바르게 작성되어 있습니다.


147-149: 의도적인 설계로 확인됨. 문제 411과 412는 DFS와 BFS를 직접 비교하는 구조의 문제이므로 2개의 선택지(DFS, BFS)로 충분합니다.

src/main/resources/sql/problem/네트워크/unit09_전송계층TCP와UDP.sql (1)

1-155: LGTM - 전송 계층 TCP/UDP 데이터 시드 파일

SQL 구문, ID 시퀀스(Lesson 104-106, Problem 701-724, Option 1971-2042, Answer 207-212), 외래 키 참조가 모두 올바르게 구성되어 있습니다. TCP 3-Way/4-Way Handshake, Sequence Number, ACK Number, UDP 특성 등 기술적 내용도 정확합니다.

src/main/resources/sql/problem/네트워크/unit13_무선네트워크와이동통신.sql (1)

1-155: LGTM - 무선 네트워크와 이동 통신 데이터 시드 파일

Lesson 116-118, Problem 797-820, Option 2259-2330, Answer 231-236의 ID 체계가 일관되게 구성되어 있습니다. IEEE 802.11, CSMA/CA, Hidden Node 문제, RTS/CTS, 핸드오프 등 무선 네트워크 관련 기술 내용이 정확합니다.

src/main/resources/sql/problem/네트워크/unit07_네트워크계층과IP주소체계.sql (1)

1-155: LGTM - 네트워크 계층과 IP 주소 체계 데이터 시드 파일

Lesson 98-100, Problem 653-676, Option 1827-1898, Answer 195-200의 ID 구조가 올바릅니다. OSI 3계층, IPv4 32비트/IPv6 128비트 주소 체계, 서브넷 마스크의 역할 등 기술적 내용이 정확하게 기술되어 있습니다.

src/main/resources/sql/problem/알고리즘/unit14_그리디알고리즘.sql (1)

1-161: LGTM - 그리디 알고리즘 데이터 시드 파일

Lesson 68-70, Problem 413-436, Option 1107-1178, Answer 135-140의 ID 체계가 일관됩니다. 탐욕 선택 속성, 최적 부분 구조, 동전 거스름돈 문제(500,100,50,10원 → 6개), 그리디 한계 예시(16,5,1원으로 20원 → 그리디 5개 vs 최적 4개) 등 알고리즘 개념이 정확하게 설명되어 있습니다.

src/main/resources/sql/problem/네트워크/unit04_데이터단위와캡슐화과정.sql (1)

1-154: 나머지 데이터 구조 확인 완료

Lesson 89-91, Problem 581-604, Option 1611-1682, Answer 177-182의 ID 체계가 일관되며, 캡슐화/역캡슐화 과정, 데이터 단위(비트, 프레임, 패킷, 세그먼트, 데이터) 관련 내용이 정확합니다.

src/main/resources/sql/problem/네트워크/unit14_네트워크보안과안정성.sql (1)

1-155: LGTM - 네트워크 보안과 안정성 데이터 시드 파일

Lesson 119-121, Problem 821-844, Option 2331-2402, Answer 237-242의 ID 체계가 일관됩니다. CIA 트라이어드(기밀성, 무결성, 가용성), 방화벽, IDS/IPS, VPN, 다계층 방어, 중복 구조, QoS 등 보안 및 안정성 관련 기술 내용이 정확합니다.

src/main/resources/sql/problem/네트워크/unit12_웹접속과데이터흐름.sql (1)

1-155: LGTM - 웹 접속 과정과 데이터 흐름 데이터 시드 파일

Lesson 113-115, Problem 773-796, Option 2187-2258, Answer 225-230의 ID 체계가 올바르게 구성되어 있습니다. URL 구조(프로토콜, 호스트, 포트, 경로, 쿼리, 프래그먼트), DNS 조회, 3-Way/4-Way Handshake, HTTP/1.1 지속 연결 등 웹 접속 과정이 정확하게 기술되어 있습니다.

src/main/resources/sql/problem/네트워크/unit01_네트워크기초.sql (1)

1-163: 네트워크 기초 문제 데이터 구조가 잘 작성되었습니다.

  • Lesson, Problem, Option, Answer 테이블 간의 외래 키 참조가 일관성 있게 유지됩니다.
  • OBJECTIVE 문제는 4개의 옵션과 하나의 정답을 가지며, SUBJECTIVE 문제는 Answer 테이블에 정답이 등록되어 있습니다.
  • 콘텐츠가 네트워크 기초 개념을 잘 다루고 있습니다.
src/main/resources/sql/problem/자료구조/unit10_그래프.sql (1)

11-11: 레슨 헤더 주석이 실제 레슨 ID와 일치하도록 수정되었습니다.

주석의 레슨 번호가 INSERT 문의 실제 lesson id (27, 28, 29)와 일치하도록 업데이트되어 문서 일관성이 향상되었습니다.

Also applies to: 70-70, 129-129

src/main/resources/sql/problem/알고리즘/unit16_최소신장트리.sql (1)

1-161: 최소 신장 트리 문제 세트가 잘 구성되었습니다.

  • Prim과 Kruskal 알고리즘의 핵심 개념(정점 선택 vs 간선 선택, Union-Find, 시간 복잡도 등)이 정확하게 다루어져 있습니다.
  • 문제-옵션-정답 간의 데이터 관계가 올바르게 설정되었습니다.
src/main/resources/sql/problem/알고리즘/unit15_다이내믹프로그래밍.sql (1)

1-155: 다이내믹 프로그래밍 문제 세트가 정확하게 구성되었습니다.

  • DP의 핵심 개념(최적 부분 구조, 부분 문제의 중복, 메모이제이션, 탑다운/바텀업)이 잘 설명되어 있습니다.
  • 예시 문제의 정답이 정확합니다:
    • fib(5) = 5 ✓
    • 동전 문제(16, 5, 1원으로 20원): 최소 4개(5원×4) ✓
src/main/resources/sql/problem/알고리즘/unit05_버블정렬.sql (1)

1-185: 버블 정렬 문제 세트가 잘 작성되었습니다.

시간 복잡도, 안정성, 비교/교환 횟수 등의 기술적 내용이 정확합니다.

src/main/resources/sql/problem/알고리즘/unit07_삽입정렬.sql (1)

1-185: 삽입 정렬 문제 세트가 정확하게 구성되었습니다.

  • 시간 복잡도(최선 O(n), 평균/최악 O(n²))가 정확합니다.
  • TimSort와 IntroSort에서 작은 부분 배열에 삽입 정렬을 사용한다는 실무적 내용이 포함되어 있어 좋습니다.
src/main/resources/sql/problem/알고리즘/unit09_퀵정렬.sql (1)

1-185: 퀵 정렬 문제 세트가 잘 구성되었습니다.

  • 분할 정복, 피벗 선택 전략, 시간/공간 복잡도가 정확하게 다루어져 있습니다.
  • 합병 정렬과의 비교(균등/비균등 분할, 안정성, 공간 복잡도)가 명확합니다.
src/main/resources/sql/problem/알고리즘/unit08_합병정렬.sql (2)

73-127: Lesson 52의 ID들(문제 307-312, 선택지 817-832, 정답 103-104)은 다른 데이터와 중복되지 않습니다.


5-8: unit_id 18과 lesson ID 51-53은 모두 올바르게 정의되어 있습니다.

unit_id 18은 src/main/resources/sql/unit.sql 파일의 32번 줄에 이미 생성되어 있으며 ('합병 정렬', '분할 정복 방식의 정렬 알고리즘'), lesson ID 51-53은 다른 단원과 충돌하지 않습니다. SQL 파일의 모든 계층 데이터(lesson → problem → option/answer)가 올바르게 구성되어 있습니다.

@xunxxoie xunxxoie changed the title feat: 알고리즘, 네트워크 문제 SQL 추가(#288) feat: 알고리즘, 네트워크, 운영체제 문제 SQL 추가(#288) Jan 11, 2026
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: 13

🤖 Fix all issues with AI agents
In @src/main/resources/sql/problem/운영체제/unit03_시스템콜.sql:
- Around line 131-135: The question for problem 1198 asks "옳은 것은?" but the
answer flags are inverted: options 3411, 3412, and 3413 are correct system-call
characteristics yet have is_answer=false, and option 3414 ("오버헤드가 없다") is
incorrect yet has is_answer=true; fix by either changing the prompt to "옳지 않은
것은?" to match current flags, or (preferred) correct the answer flags for problem
1198 by setting is_answer=true for option IDs 3411, 3412, 3413 and
is_answer=false for option ID 3414 so the logical answers align with the
question.

In @src/main/resources/sql/problem/운영체제/unit04_인터럽트.sql:
- Around line 12-34: The problem with problem.id=1204 is a mismatch between the
prompt and the marked answer: option id 3430 is treated as the incorrect
statement but the instruction reads "제시된 내용과 관련하여 옳은 것은?"—change the instruction
for problem 1204 to "제시된 내용과 관련하여 옳지 않은 것은?" (or alternatively flip the
is_answer flags to mark the actually correct choice), and ensure references to
problem id 1204 and option id 3430 are updated accordingly so the prompt and
is_answer align.
- Around line 60-100: The problem instructions for problem.id=1211 and
problem.id=1215 disagree with the marked correct options (option.id 3450 and
3462) because the choices/feedback reflect "옳지 않은 것" while the problem text asks
"옳은 것은?"; fix by either (A) changing the problem instruction for problem.id 1211
and 1215 from '제시된 내용과 관련하여 옳은 것은?' to '제시된 내용과 관련하여 옳지 않은 것은?' or (B) keep the
existing instructions and flip the is_answer flags and adjust explanations so
the truly correct options are marked true (for 1211 mark the software-interrupt
option true and set 3450 false with revised explanation; for 1215 mark a genuine
timer role option true and set 3462 false with explanation). Update the database
rows referencing problem.id 1211, 1215 and option ids 3450, 3462 accordingly.
- Around line 108-130: The question for problem.id 1218 has a mismatched
instruction and answer: the correct option (id 3470, "라운드 로빈") is actually the
false statement per its explanation, so change the problem instruction in
problem id 1218 (functionally the INSERT VALUES for id 1218) from "제시된 내용과 관련하여
옳은 것은?" to "제시된 내용과 관련하여 옳지 않은 것은?" so the prompt matches the stored is_answer
flags (option 3470 remains true), or alternatively adjust option 3470's
is_answer to false and mark the actual incorrect choice true; update the INSERT
for problem 1218 and/or the option row for id 3470 accordingly.
- Around line 5-9: Change the duplicate Answer ID 349 to a new unique ID (update
the record in this file and any references) to avoid PK collisions with
unit10_힙정렬.sql and problem2.sql; then fix the is_answer flags for the listed
problems so each problem's true answer matches its instruction/content: for
problem 1204 set is_answer=true on the correct choices (answer IDs 3427–3429)
and is_answer=false on 3430; for 1211 set is_answer=true on the
software-interrupt choices (3447–3449) and is_answer=false on 3450; for 1215 set
is_answer=true on timer-related choices (3459–3461) and is_answer=false on 3462;
for 1218 set is_answer=true on the correct interrupt-handling methods
(3467–3469) and is_answer=false on 3470; ensure all updated answer IDs and flags
are consistent across any seed/data load so re-seeding remains idempotent.

In @src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql:
- Around line 5-8: The INSERT uses lesson IDs 179 and 181 which collide with
other files and references unit_id 61 which isn't created; fix by choosing
unused lesson IDs (e.g., pick next available IDs) and ensure unit_id 61 exists
before inserting lessons: either create the unit row for id 61 via an INSERT
into unit (with appropriate fields) or change the lessons to reference an
existing valid unit_id; update the VALUES tuple in the INSERT for the three
lessons to the new lesson IDs and/or change the unit_id to a defined one, and
keep the original lesson titles ('스레드 기초', '스레드 동기화', '멀티스레딩 최적화') intact.
- Around line 52-54: The INSERT into the answer table contains a duplicated
Answer ID (361) used elsewhere; update the conflicting id value in this INSERT
(the row with id 361 referencing problem_id 1259) to a new unique id (for
example 362) and ensure no other answer rows use that id; verify the INSERT
values list now uses distinct ids (e.g., 357, 358, 362) and run a quick
uniqueness check against other SQL files (unit11_기수정렬.sql) to confirm no
collisions.

In @src/main/resources/sql/problem/운영체제/unit08_동기화와병행성.sql:
- Around line 146-148: The INSERT INTO answer row with id 373 has inconsistent
spacing in the answer string: "deadlock,교착 상태,데드락, dead lock" (note the space
before "dead lock"); update the VALUES entry for id 373 in the INSERT INTO
answer statement so the list items are comma-separated with no extra spaces
(e.g., change to "deadlock,교착 상태,데드락,dead lock") to match the formatting used by
other answer rows and ensure exact string matching works.

In @src/main/resources/sql/problem/운영체제/unit10_메모리관리기초.sql:
- Around line 107-108: The description for option with id 3803 is incorrect:
replace the text "세그먼테이션은 내부 단편화를 해결하는 방법이다" with a corrected explanation that
세그먼테이션 divides programs into variable-sized logical segments and can cause 외부
단편화 (while reducing 내부 단편화), and optionally mention 페이징 as fixed-size division
causing 내부 단편화; update the tuple starting with (3803, 1339, ...) so the middle
description reflects that segmentation leads to external fragmentation rather
than solving internal fragmentation.
- Around line 1-8: The file's header comment lists the wrong chapter ID; update
the comment for Unit ID 65 to read "Chapter: 운영체제 (Chapter ID: 5)" instead of
"Chapter: 운영체제 (Chapter ID: 7)"; verify the Unit ID 65 reference remains
unchanged and keep the INSERT for lesson IDs 191, 192, 193 as-is since those
lesson IDs are unique.

In @src/main/resources/sql/problem/운영체제/unit12_페이지관리.sql:
- Around line 33-37: The content string for the INSERT tuple with id 399 has
inconsistent spacing after commas ("belady''s anomaly,벨라디의 모순,벨라디의 역설, 벨라디의
이상현상"); normalize the comma spacing in that VALUES entry in the INSERT INTO
answer statement (either add a space after every comma or remove all spaces
after commas) so all entries follow the same pattern—e.g., change the id 399
content to use consistent ", " separators between answers.

In @src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql:
- Line 55: The problem row for problem ID 1388 (the tuple starting with 1388) is
missing the blank placeholder in its content; replace the literal answer term
"미스수" in the content string with an explicit blank placeholder (e.g., "___") so
the prompt reads that students should fill the blank (e.g., change "...히트수 /
(히트수 + 미스수)..." to "...히트수 / (히트수 + ___)..."), keeping existing quoting/escaping
and leaving the answer ID 413 unchanged.
🧹 Nitpick comments (7)
src/main/resources/sql/problem/운영체제/unit11_가상메모리.sql (1)

1-113: 트랜잭션 처리 및 중복 실행 방지 고려

현재 SQL 스크립트는 다음과 같은 운영상 개선 가능한 부분이 있습니다:

  1. 트랜잭션 미적용: 여러 INSERT 문이 트랜잭션으로 묶여있지 않아, 중간에 실패 시 데이터 불일치 상태가 될 수 있습니다.
  2. 중복 실행 처리 없음: 하드코딩된 ID로 인해 스크립트를 재실행하면 중복 키 오류가 발생합니다.

시드 데이터 관리 정책에 따라 다음을 고려해보세요:

  • 전체 INSERT를 BEGIN TRANSACTION / COMMIT으로 감싸기
  • INSERT IGNORE 또는 중복 키 처리 로직 추가
src/main/resources/sql/problem/운영체제/unit07_CPU스케줄링.sql (1)

1-150: 트랜잭션 래핑으로 원자성 보장 권장

현재 파일에는 트랜잭션 경계가 없어, 중간에 INSERT가 실패할 경우 부분적으로만 데이터가 삽입되어 데이터 무결성 문제가 발생할 수 있습니다. 복잡한 외래 키 관계를 가진 시드 데이터의 경우 트랜잭션으로 감싸는 것이 좋습니다.

♻️ 트랜잭션 래핑 제안

파일 시작 부분에 추가:

+START TRANSACTION;
+
 -- Unit: CPU스케줄링 (Unit ID: 62)
 -- Chapter: 운영체제 (Chapter ID: 7)

파일 끝 부분에 추가:

 -- unit7
+
+COMMIT;

오류 발생 시 자동 롤백을 위해 다음과 같이 작성할 수도 있습니다:

START TRANSACTION;

-- All INSERT statements here

COMMIT;
src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql (1)

46-46: 정답 형식 고려사항.

정답이 소문자 'l1'로 되어 있는데, 시각적으로 숫자 '11'과 혼동될 수 있습니다. 대문자 'L1'을 사용하거나 둘 다 허용하는 것을 고려해보세요.

♻️ 제안하는 수정
-VALUES (409, 1379, 'l1', 'L1 캐시는 CPU 코어 내부에 위치하며 KB 단위의 가장 작은 용량을 가지지만 수 사이클의 가장 빠른 속도를 제공한다.'),
+VALUES (409, 1379, 'L1', 'L1 캐시는 CPU 코어 내부에 위치하며 KB 단위의 가장 작은 용량을 가지지만 수 사이클의 가장 빠른 속도를 제공한다.'),
src/main/resources/sql/problem/운영체제/unit01_운영체제개요.sql (1)

1-151: 이 SQL 시드 파일이 활용되지 않고 있는 것으로 보입니다.

이 파일들은 src/main/resources/sql/problem/ 디렉토리에 있으며, Flyway 마이그레이션 파일(db/migration/V*.sql)과 별개로 관리되고 있습니다. 애플리케이션 코드에서 이 파일들을 참조하는 부분이 없어, 현재 데이터베이스 초기화 프로세스에 포함되지 않은 것으로 보입니다.

만약 이 파일들이 수동으로 또는 별도의 초기화 스크립트로 사용된다면, 재실행 시 기본 키 충돌을 방지하기 위해 다음을 고려하세요:

  • INSERT IGNORE (MySQL) 또는 ON CONFLICT DO NOTHING (PostgreSQL) 추가
  • 스크립트 시작 부분에 기존 데이터 삭제 로직 추가
src/main/resources/sql/problem/운영체제/unit10_메모리관리기초.sql (3)

40-40: 용어 대문자 표기 일관성

"cpu"는 "CPU"로 표기하는 것이 기술 문서의 일반적인 관례입니다. 다른 기술 용어(MMU 등)도 대문자로 표기되어 있으므로 일관성을 유지하는 것이 좋습니다.

♻️ 제안하는 수정
-(3779, 1330, '코드 영역은 실행할 프로그램의 기계어 코드가 저장되며 cpu가 명령어를 실행한다', '코드 영역은 프로그램의 코드가 기계어 형태로 저장되는 공간이며, cpu는 이 영역에 저장된 명령어를 실행한다.', true),
+(3779, 1330, '코드 영역은 실행할 프로그램의 기계어 코드가 저장되며 CPU가 명령어를 실행한다', '코드 영역은 프로그램의 코드가 기계어 형태로 저장되는 공간이며, CPU는 이 영역에 저장된 명령어를 실행한다.', true),

74-83: 배치 전략 용어 대소문자 표기 불일치

동일한 배치 전략(First Fit, Best Fit, Worst Fit)이 일부 옵션에서는 대문자로(lines 74-77), 다른 옵션에서는 소문자로(lines 80-83) 표기되어 일관성이 없습니다. 학습 자료에서 용어 표기의 일관성은 중요합니다.

♻️ 일관된 표기를 위한 수정안

모든 배치 전략 용어를 대문자로 통일:

-(3795, 1335, 'first fit은 첫 번째 적합한 공간에 할당하여 탐색 속도가 빠르다', 'first fit은 첫 번째로 발견한 적합한 공간에 할당한다.', false),
-(3796, 1335, 'worst fit은 가장 큰 공간에 할당하여 큰 빈 공간을 유지한다', 'worst fit은 가장 큰 공간을 선택한다.', false),
-(3797, 1335, 'best fit은 가장 큰 적합한 공간에 할당하여 탐색 속도가 빠르다', 'best fit은 가장 작은 적합한 공간에 할당하며 탐색이 느릴 수 있다.', true),
-(3798, 1335, 'best fit은 공간 효율적이지만 모든 공간을 탐색해야 한다', '공간 효율적이지만 탐색 비용이 커질 수 있다.', false),
+(3795, 1335, 'First Fit은 첫 번째 적합한 공간에 할당하여 탐색 속도가 빠르다', 'First Fit은 첫 번째로 발견한 적합한 공간에 할당한다.', false),
+(3796, 1335, 'Worst Fit은 가장 큰 공간에 할당하여 큰 빈 공간을 유지한다', 'Worst Fit은 가장 큰 공간을 선택한다.', false),
+(3797, 1335, 'Best Fit은 가장 큰 적합한 공간에 할당하여 탐색 속도가 빠르다', 'Best Fit은 가장 작은 적합한 공간에 할당하며 탐색이 느릴 수 있다.', true),
+(3798, 1335, 'Best Fit은 공간 효율적이지만 모든 공간을 탐색해야 한다', '공간 효율적이지만 탐색 비용이 커질 수 있다.', false),

1-124: 트랜잭션 제어 추가 권장

이 시드 스크립트에는 트랜잭션 제어가 없어, INSERT 문 중 하나라도 실패하면 데이터베이스가 불완전한 상태로 남을 수 있습니다. 또한 스크립트를 재실행하면 중복 키 오류가 발생합니다.

💡 개선 방안

스크립트 시작과 끝에 트랜잭션 제어 추가:

-- 파일 시작 부분에 추가
BEGIN;

-- 기존 내용...

-- 파일 끝에 추가
COMMIT;

또는 재실행 가능하도록 만들려면:

-- 기존 데이터 삭제 (주의: 개발 환경에서만 사용)
DELETE FROM answer WHERE id BETWEEN 382 AND 388;
DELETE FROM option WHERE id BETWEEN 3767 AND 3810;
DELETE FROM problem WHERE id BETWEEN 1325 AND 1342;
DELETE FROM lesson WHERE id BETWEEN 191 AND 193;

-- 기존 INSERT 문들...
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 405bd26 and 704250e.

📒 Files selected for processing (14)
  • src/main/resources/sql/problem/운영체제/unit01_운영체제개요.sql
  • src/main/resources/sql/problem/운영체제/unit02_프로세스기초.sql
  • src/main/resources/sql/problem/운영체제/unit03_시스템콜.sql
  • src/main/resources/sql/problem/운영체제/unit04_인터럽트.sql
  • src/main/resources/sql/problem/운영체제/unit05_프로세스관리.sql
  • src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql
  • src/main/resources/sql/problem/운영체제/unit07_CPU스케줄링.sql
  • src/main/resources/sql/problem/운영체제/unit08_동기화와병행성.sql
  • src/main/resources/sql/problem/운영체제/unit09_데드락.sql
  • src/main/resources/sql/problem/운영체제/unit10_메모리관리기초.sql
  • src/main/resources/sql/problem/운영체제/unit11_가상메모리.sql
  • src/main/resources/sql/problem/운영체제/unit12_페이지관리.sql
  • src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql
  • src/main/resources/sql/problem/운영체제/unit14_파일시스템과디스크관리.sql
✅ Files skipped from review due to trivial changes (2)
  • src/main/resources/sql/problem/운영체제/unit09_데드락.sql
  • src/main/resources/sql/problem/운영체제/unit02_프로세스기초.sql
🔇 Additional comments (34)
src/main/resources/sql/problem/운영체제/unit11_가상메모리.sql (2)

1-2: PR 설명과 실제 파일 내용 불일치

PR 제목과 설명에는 "알고리즘, 네트워크 문제 SQL 추가"라고 명시되어 있으나, 이 파일은 운영체제(가상메모리) 관련 SQL입니다. 커밋 메시지("운영체제 문제 SQL 추가")는 파일 내용과 일치합니다. PR 설명을 실제 변경 내용에 맞게 업데이트해 주세요.


11-112: 데이터 품질 및 기술 정확성 우수

전체적으로 데이터 구조가 일관성 있게 작성되었으며, 다음 사항들이 잘 반영되어 있습니다:

  • OBJECTIVE 문제는 4개의 선택지를 가지며 정확히 하나의 정답(is_answer=true)을 포함
  • SUBJECTIVE 문제는 적절한 답안과 해설을 포함
  • 가상메모리, 페이징, 세그먼테이션 등 기술 개념이 정확하게 설명됨
  • "올바르지 않은 것은?" 형태의 부정형 문제도 올바르게 처리됨
  • 답안에 한글/영문 복수 형식 허용 (예: '프레임,frame')으로 유연성 확보
src/main/resources/sql/problem/운영체제/unit12_페이지관리.sql (6)

1-3: PR 설명과 실제 파일 내용 간 불일치

PR 제목은 "알고리즘, 네트워크 문제 SQL 추가"라고 되어 있으나, 실제 파일은 운영체제 챕터의 페이지 관리 유닛에 대한 내용입니다. 커밋 메시지("운영체제 문제 SQL 추가")와는 일치하지만, PR 설명을 업데이트하거나 다른 파일(알고리즘, 네트워크)이 누락되었는지 확인이 필요합니다.


4-8: LGTM!

레슨 데이터가 올바르게 구성되어 있습니다. Unit 67에 대한 3개의 레슨이 명확하고 일관된 제목으로 생성되었습니다.


10-17: LGTM!

Lesson 1의 문제 데이터가 올바르게 정의되어 있습니다. OBJECTIVE와 SUBJECTIVE 문제 타입이 적절히 혼합되어 있으며, 내용도 교육적으로 타당합니다.


19-31: LGTM!

객관식 문제들의 선택지가 올바르게 구성되어 있습니다. 각 문제당 4개의 선택지와 명확한 설명이 제공되며, 정답이 정확히 하나씩 지정되어 있습니다.


40-67: LGTM!

Lesson 2의 모든 데이터가 올바르게 구성되어 있습니다. 문제, 선택지, 정답 간의 참조 관계가 정확하며, 내용도 교육적으로 적절합니다.


70-108: LGTM!

Lesson 3의 모든 데이터가 올바르게 구성되어 있습니다. 총 4개의 객관식 문제와 2개의 주관식 문제가 각각 적절한 선택지와 정답을 가지고 있으며, 계층적 페이징과 관련된 개념들이 잘 다뤄지고 있습니다.

src/main/resources/sql/problem/운영체제/unit07_CPU스케줄링.sql (2)

11-54: 첫 번째 레슨 데이터 구조 및 완성도 양호

스케줄링 기초 레슨의 문제, 선택지, 정답 데이터가 올바르게 구성되어 있습니다:

  • OBJECTIVE 문제는 각각 4개의 선택지를 가지며 정확히 하나의 정답이 지정되어 있음
  • SUBJECTIVE 문제는 answer 테이블에 정답이 제공됨
  • 외래 키 참조가 유효함

5-8: 데이터베이스 테이블 간 ID 격리로 인해 실제 충돌 위험 없음

검색 결과에서 번호 182, 183, 184가 다른 SQL 파일에 나타나지만, 모두 서로 다른 테이블(문제, 선택지, 답변)의 ID입니다. 각 테이블은 독립적인 기본 키 제약을 가지므로, lesson 테이블의 ID 182-184는 다른 테이블의 동일한 번호와 충돌하지 않습니다. 또한 검색 결과에서 lesson 테이블의 ID 182-184 중복은 발견되지 않았으므로, 현재 코드는 데이터 무결성 측면에서 안전합니다.

Likely an incorrect or invalid review comment.

src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql (5)

57-148: 전체 데이터 구조 일관성 양호

세 개 레슨 모두 일관된 구조를 따르고 있습니다:

  • OBJECTIVE 문제는 4개의 선택지를 가짐
  • SUBJECTIVE 문제는 answer 테이블에 정답이 있음
  • 기술적 내용도 스레드, 동기화, 멀티스레딩 개념에 부합합니다

1-148: PR 설명과 실제 변경사항 간 불일치

PR 제목은 "알고리즘, 네트워크 문제 SQL 추가"라고 되어 있으나, 이 파일은 운영체제(스레드와 멀티스레딩) 문제입니다. 커밋 메시지는 "운영체제 문제 SQL 추가"로 올바르게 기술되어 있습니다. PR 설명을 업데이트하여 모든 변경 내용(알고리즘, 네트워크, 운영체제)을 정확히 반영하는 것을 권장합니다.


11-18: 검증 결과: 이 리뷰 의견은 근거가 없습니다

문제 ID 1244-1250은 이 파일에만 존재하며, 다른 SQL 파일의 문제 ID와 충돌하지 않습니다. 또한 원본 의견에서 "1244-1264 범위"라고 언급했으나 실제 코드는 1244-1250 (7개 문제)만 포함하고 있습니다.

Likely an incorrect or invalid review comment.


1-2: 명명 규칙 검토 결과: 문제 없음

파일명의 unit06 프리픽스와 코드의 unit_id 61은 서로 다른 용도를 나타내며 이는 정상입니다. 셀 결과를 통해 확인한 바와 같이, 파일명의 unit0X는 운영체제 챕터 내에서의 상대적 위치를 나타내고, unit_id는 전체 데이터베이스에서 유일한 전역 ID입니다. 운영체제 챕터의 다른 파일들도 동일한 패턴을 따르고 있습니다 (unit01=56, unit02=57, ..., unit06=61). 현재 파일의 명명과 구조는 일관성 있고 올바릅니다.


20-51: 옵션 ID 충돌 문제 없음

검증 결과, 옵션 ID 3543-3562는 이 파일에서만 사용되며 다른 SQL 파일의 옵션 ID와 충돌하지 않습니다. 데이터 구조도 정확합니다(5개 문제 × 4개 옵션 = 20개, ID 범위 적절).

src/main/resources/sql/problem/운영체제/unit03_시스템콜.sql (3)

1-8: LGTM!

레슨 데이터 구조가 올바르게 정의되어 있습니다. Unit ID 58에 대해 3개의 레슨(170-172)이 순차적으로 생성됩니다.


10-55: LGTM!

Lesson 1 (시스템 콜 기초) 데이터가 올바르게 구성되어 있습니다. 7개의 문제와 해당 옵션/답안이 적절하게 매핑되어 있습니다.


106-151: Lesson 3 전체 구조 확인 완료

나머지 문제들(1195, 1196, 1197, 1199, 1200, 1201)의 데이터 구조와 질문-답안 로직이 올바르게 구성되어 있습니다. 주관식 답안에서 여러 허용 답안을 콤마로 구분하여 유연하게 처리하는 방식도 적절합니다.

src/main/resources/sql/problem/운영체제/unit08_동기화와병행성.sql (3)

5-8: 레슨 생성 구조가 정확합니다.

3개 레슨의 ID와 제목이 명확하게 정의되어 있으며, unit_id 참조도 올바릅니다.


11-54: Lesson 1 데이터 구조가 올바릅니다.

객관식 문제마다 정확히 4개의 선택지와 1개의 정답이 있으며, 주관식 문제는 answer 테이블에 적절히 매핑되어 있습니다. 동기화 기초 개념(임계 영역, 상호 배제, TestAndSet, CAS)에 대한 설명도 기술적으로 정확합니다.


99-101: synchronized 키워드 답안의 다국어 지원을 확인하세요.

현재 정답은 "synchronized"만 인정합니다. 학습자가 "동기화" 또는 "싱크로나이즈드" 같은 한글 표현을 입력할 가능성을 고려하여, 허용 답안 범위를 확장할지 검토가 필요합니다.

src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql (2)

4-8: 레슨 구조가 명확합니다.

3개의 레슨이 논리적으로 구성되어 있으며, 캐시 메모리의 기초부터 성능, 매핑 기법까지 단계적으로 학습할 수 있는 구조입니다.


80-112: 캐시 매핑 기법 데이터가 잘 구성되어 있습니다.

직접 매핑, 연관 매핑, 집합 연관 매핑에 대한 문제와 선택지, 정답이 기술적으로 정확하며, 각 매핑 방식의 특징과 차이점을 잘 설명하고 있습니다.

src/main/resources/sql/problem/운영체제/unit04_인터럽트.sql (1)

53-56: 주관식(answer) 구성은 일관되고 좋아요

주관식 문제들(1203/1206/1210/1213/1217/1220)에 대해 동의어를 콤마로 나열하고, 해설도 함께 넣은 형태가 데이터 품질 측면에서 깔끔합니다.

Also applies to: 101-104, 149-151

src/main/resources/sql/problem/운영체제/unit05_프로세스관리.sql (10)

20-50: 객관식 문항(1223/1225/1226/1228/1229)마다 정답 옵션이 1개로 일관되어 좋습니다.


58-66: 레슨 2(IPC) 문제 구성/난이도 흐름이 깔끔합니다.


67-98: 레슨 2 객관식도 문항별 정답 1개 유지되어 좋습니다.


99-102: SIGINT/pipe 등 주관식 정답/해설 매핑이 명확합니다.


105-113: 레슨 3(CPU 스케줄링) 주제 분배가 좋고, 주관식(기아/에이징)도 적절합니다.


114-145: 스케줄링 파트 객관식 옵션/해설 품질이 전반적으로 좋습니다.


146-148: 주관식 정답(기아/에이징)도 동의어 포함 형태가 일관됩니다.
다만 위에서 언급한 “콤마 구분 정답 파싱 규격”과 동일하게만 맞춰 주세요.


11-19: problem.problem_type 값이 DB 제약과 정확히 일치합니다.

데이터베이스 스키마에서 problem_type 제약은 CHECK (problem_type IN ('SUBJECTIVE', 'OBJECTIVE'))로 정의되어 있으며, INSERT 문의 모든 값이 이 두 가지 중 하나입니다. 검토 완료.


52-55: 주관식 answer.content의 "콤마 구분 다중 정답" 포맷 처리 방식 확인 필요

백엔드 코드 검증 결과, answer.content는 데이터베이스에서 DTO를 통해 프론트엔드로 그대로 전달되며, 백엔드에서는 답 비교/채점 로직이 존재하지 않습니다. 채점 로직은 프론트엔드에서 처리되는 것으로 보입니다. 따라서 zombie process, copy on write 등 공백이 포함된 토큰의 파싱, trim/대소문자 처리가 프론트엔드 채점 로직과 일치하는지 확인이 필요합니다.


1-9: 메타 주석의 Chapter ID 수정 필요

파일 헤더의 "Chapter ID: 7"을 "Chapter ID: 5"로 수정하세요. chapter.sql에는 id=5만 존재하며, unit_id=60과 lesson ID(176~178)는 이미 선행 데이터에 존재해 충돌 문제가 없습니다.

Likely an incorrect or invalid review comment.

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/sql/problem/알고리즘/unit12_위상정렬.sql:
- Around line 44-47: Option rows with IDs 1010 and 1012 contain contradictory
explanations: they describe true properties of topological sort but are marked
false. Update the text for the entries with primary keys 1010 and 1012 so the
explanation matches the false flag—e.g., change the explanation to explicitly
state "이 문제에서는 해당 선택지가 정답으로 채택되지 않았습니다(다른 보기가 더 적절함)" or "해당 특징은 맞지만 본 문제의 정답으로는
적절하지 않음"—so the rationale aligns with the false value while preserving the
factual note that multiple orders or cycle detection are valid properties of
topological sort.

In @src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql:
- Line 110: The question string 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수와 _____배 정도이다.'
is grammatically awkward with the answer '1'; update the tuple text to a
grammatically correct form such as 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수의 약 _____배이다.'
while keeping the correct answer value ('1') unchanged so the expected answer
still matches; locate and edit the exact SQL tuple containing that question text
in the INSERT/VALUES list.
🧹 Nitpick comments (2)
src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql (1)

56-56: 들여쓰기 불일치

이 줄은 다른 줄들과 달리 추가 공백이 있어 들여쓰기가 일관되지 않습니다.

♻️ 제안된 수정
-        (1389, 201, '빈칸에 들어갈 용어를 작성하시오', '캐시에서 원하는 데이터를 찾지 못한 경우를 ___라고 한다.', 'SUBJECTIVE'),
+       (1389, 201, '빈칸에 들어갈 용어를 작성하시오', '캐시에서 원하는 데이터를 찾지 못한 경우를 ___라고 한다.', 'SUBJECTIVE'),
src/main/resources/sql/problem/운영체제/unit02_프로세스기초.sql (1)

1-8: 시드 데이터 구조가 잘 구성되어 있습니다.

레슨, 문제, 옵션, 정답 순서로 삽입하여 FK 제약 조건을 만족합니다. 단, unit_id: 57이 사전에 존재하는지 확인이 필요합니다.

대량 삽입 시 원자성 보장을 위해 트랜잭션 래핑을 고려해 보세요.

♻️ 트랜잭션 래핑 제안
+BEGIN;
+
 -- Unit: 프로세스 기초 (Unit ID: 57)
 -- Chapter: 운영체제 (Chapter ID: 5)

 -- Lesson 생성
 INSERT INTO lesson (id, unit_id, title)
 VALUES (167, 57, '프로세스 개념과 구조'),
        (168, 57, '프로세스 상태와 제어'),
        (169, 57, '스케줄링과 문맥 교환');

파일 끝에 COMMIT; 추가

📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 704250e and bd0a566.

📒 Files selected for processing (16)
  • src/main/resources/sql/problem/네트워크/unit04_데이터단위와캡슐화과정.sql
  • src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql
  • src/main/resources/sql/problem/운영체제/unit01_운영체제개요.sql
  • src/main/resources/sql/problem/운영체제/unit02_프로세스기초.sql
  • src/main/resources/sql/problem/운영체제/unit03_시스템콜.sql
  • src/main/resources/sql/problem/운영체제/unit04_인터럽트.sql
  • src/main/resources/sql/problem/운영체제/unit05_프로세스관리.sql
  • src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql
  • src/main/resources/sql/problem/운영체제/unit07_CPU스케줄링.sql
  • src/main/resources/sql/problem/운영체제/unit08_동기화와병행성.sql
  • src/main/resources/sql/problem/운영체제/unit09_데드락.sql
  • src/main/resources/sql/problem/운영체제/unit10_메모리관리기초.sql
  • src/main/resources/sql/problem/운영체제/unit11_가상메모리.sql
  • src/main/resources/sql/problem/운영체제/unit12_페이지관리.sql
  • src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql
  • src/main/resources/sql/problem/운영체제/unit14_파일시스템과디스크관리.sql
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/main/resources/sql/problem/운영체제/unit04_인터럽트.sql
  • src/main/resources/sql/problem/네트워크/unit04_데이터단위와캡슐화과정.sql
  • src/main/resources/sql/problem/운영체제/unit07_CPU스케줄링.sql
  • src/main/resources/sql/problem/운영체제/unit01_운영체제개요.sql
  • src/main/resources/sql/problem/운영체제/unit05_프로세스관리.sql
🔇 Additional comments (34)
src/main/resources/sql/problem/운영체제/unit11_가상메모리.sql (1)

1-113: LGTM!

가상메모리 유닛의 시드 데이터가 올바르게 구성되어 있습니다. Lesson, Problem, Option, Answer 간의 외래 키 관계가 일관성 있게 유지되고 있으며, OBJECTIVE 문제에는 선택지가, SUBJECTIVE 문제에는 정답이 적절히 매핑되어 있습니다.

src/main/resources/sql/problem/운영체제/unit10_메모리관리기초.sql (1)

1-124: LGTM!

메모리 관리 기초 유닛의 시드 데이터가 정확하게 구성되어 있습니다. 모든 문제-선택지-정답 간의 관계가 올바르게 설정되어 있으며, problem_type에 따른 데이터 매핑이 일관성 있게 적용되어 있습니다.

src/main/resources/sql/problem/운영체제/unit12_페이지관리.sql (1)

1-109: LGTM!

페이지 관리 유닛의 시드 데이터가 올바르게 구성되어 있습니다. 세 개의 Lesson에 대한 문제, 선택지, 정답 데이터가 일관성 있게 정의되어 있으며, 외래 키 관계가 정확합니다.

src/main/resources/sql/problem/운영체제/unit13_캐시메모리.sql (1)

1-113: LGTM!

SQL 시드 파일이 전반적으로 잘 작성되었습니다. 데이터 무결성이 유지되어 있으며:

  • 모든 문제가 올바른 lesson_id를 참조함
  • OBJECTIVE 문제들은 각각 4개의 선택지와 하나의 정답을 보유
  • SUBJECTIVE 문제들은 answer 테이블에 정답이 존재
  • 외래 키 관계가 일관되게 유지됨
src/main/resources/sql/problem/운영체제/unit14_파일시스템과디스크관리.sql (4)

1-8: AI 요약과 실제 파일 내용 불일치

AI 요약에서는 Unit 41 "네트워크 보안과 안정성" (Lesson ID 119-121, Problem ID 821-844)을 설명하고 있으나, 실제 파일 내용은 Unit 69 "파일시스템과디스크관리" (Lesson ID 203-205, Problem ID 1397-1414)입니다. 이는 요약 생성 과정에서 다른 파일의 내용이 혼입된 것으로 보입니다.

파일 자체의 데이터 구조는 올바르게 구성되어 있습니다.


10-38: 데이터 구조 정상 확인

Lesson 1의 문제-옵션-정답 매핑이 올바르게 구성되어 있습니다:

  • OBJECTIVE 문제(1399, 1401)는 각각 4개의 옵션과 1개의 정답을 보유
  • SUBJECTIVE 문제(1397, 1398, 1400, 1402)는 모두 answer 테이블에 정답이 등록됨

40-78: LGTM!

Lesson 2의 파일 할당 방식 관련 문제 데이터가 정확하게 구성되어 있습니다. 연속/연결/인덱스 할당 방식의 장단점을 묻는 OBJECTIVE 문제들과 FAT, 인덱스 블록 개념의 SUBJECTIVE 문제들이 적절히 매핑되어 있습니다.


81-108: LGTM!

Lesson 3의 디스크 스케줄링 알고리즘(SCAN, LOOK, C-SCAN, SSTF) 관련 문제들이 올바르게 구성되어 있습니다. 탐색 시간, 기아 현상, 실린더, 엘리베이터 알고리즘 등 핵심 개념이 적절히 다루어지고 있습니다.

src/main/resources/sql/problem/운영체제/unit03_시스템콜.sql (4)

1-8: LGTM!

레슨 생성 구문이 올바르게 작성되었습니다. Unit ID 58에 대해 세 개의 레슨(170-172)이 적절하게 정의되어 있습니다.


12-55: LGTM!

Lesson 1(시스템 콜 기초)의 데이터 구조가 올바릅니다:

  • OBJECTIVE 문제(1181, 1183, 1184, 1186, 1187)는 각각 4개의 선택지와 하나의 정답을 가지고 있습니다.
  • SUBJECTIVE 문제(1182, 1185)는 적절한 answer 레코드를 가지고 있습니다.
  • 시스템 콜, 사용자/커널 모드, 소프트웨어 인터럽트 등의 개념 설명이 정확합니다.

60-103: LGTM!

Lesson 2(주요 시스템 콜)의 데이터가 올바르게 구성되어 있습니다:

  • fork(), exec(), wait() 등 프로세스 관련 시스템 콜에 대한 설명이 기술적으로 정확합니다.
  • 각 OBJECTIVE 문제에 정확히 하나의 정답이 설정되어 있습니다.
  • SUBJECTIVE 문제의 answer에서 다양한 변형(exec, execl, execv 등)을 허용하는 것이 좋은 접근입니다.

108-151: LGTM!

Lesson 3(시스템 콜 비교)의 데이터가 완전하고 정확합니다:

  • 시스템 콜과 함수 호출의 차이점, 라이브러리 래퍼 함수의 개념이 잘 설명되어 있습니다.
  • 모든 문제에 대해 ID 시퀀스와 foreign key 참조가 일관성 있게 유지되고 있습니다.
  • SUBJECTIVE 답변에서 한글/영어 변형을 모두 허용하는 것이 사용자 친화적입니다.
src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql (4)

1-8: LGTM!

Lesson 생성 구문이 올바르게 작성되었습니다. Unit ID 61에 대해 3개의 레슨이 정상적으로 정의되어 있습니다.


10-54: LGTM!

Lesson 1 (스레드 기초) 섹션의 문제, 선택지, 정답이 올바르게 구성되어 있습니다:

  • 7개 문제 (OBJECTIVE 5개, SUBJECTIVE 2개)
  • 각 OBJECTIVE 문제에 4개의 선택지와 1개의 정답
  • 각 SUBJECTIVE 문제에 정답 엔트리 존재

57-101: LGTM!

Lesson 2 (스레드 동기화) 섹션이 올바르게 구성되어 있습니다. 교착 상태, 뮤텍스, 세마포어 등의 동기화 개념이 정확하게 다루어지고 있습니다.


104-148: Lesson 3 전체 구조 확인 완료

Lesson 3 (멀티스레딩 최적화) 섹션의 문제-선택지-정답 매핑이 올바르게 구성되어 있습니다. 스레드 풀, 멀티프로세스 vs 멀티스레드 비교 등의 내용이 포함되어 있습니다.

src/main/resources/sql/problem/운영체제/unit02_프로세스기초.sql (3)

12-55: Lesson 1 데이터 일관성 확인 완료.

  • OBJECTIVE 문제 5개: 각각 4개 옵션과 1개의 정답(is_answer=true) 보유
  • SUBJECTIVE 문제 2개(1161, 1164): 각각 answer 테이블에 정답 매핑 완료
  • 정답 필드에 여러 변형(예: '프로그램,program', 'pcb,process control block,...')을 허용하여 유연한 채점 가능

60-103: Lesson 2 데이터 구조 적절합니다.

OBJECTIVE 문제와 SUBJECTIVE 문제가 올바르게 분리되어 있고, 각 문제 유형에 맞는 옵션/정답 데이터가 삽입되어 있습니다.


108-151: Lesson 3 데이터 일관성 확인 완료.

모든 문제-옵션-정답 관계가 올바르게 설정되어 있으며, ID 시퀀스(문제 1174-1180, 옵션 3343-3362, 정답 337-338)가 연속적으로 할당되어 있습니다. 기존 데이터베이스의 다른 SQL 파일에서 동일 ID 사용 사례가 없으므로 충돌 없이 안전하게 삽입할 수 있습니다.

src/main/resources/sql/problem/운영체제/unit08_동기화와병행성.sql (6)

1-8: 데이터 시딩 구조가 적절합니다.

레슨 ID 185-187이 unit_id 63에 올바르게 연결되어 있습니다. 하드코딩된 ID 사용은 시드 데이터의 일반적인 패턴입니다.


10-54: Lesson 1 데이터 일관성이 올바릅니다.

  • OBJECTIVE 문제(1286, 1288, 1289, 1291, 1292)에 각각 4개의 옵션이 있고, 정답이 하나씩 지정되어 있습니다.
  • SUBJECTIVE 문제(1287, 1290)에 대해 answer 테이블에 답안이 올바르게 등록되어 있습니다.

57-101: Lesson 2 데이터 구조가 일관됩니다.

세마포어와 모니터 관련 문제들이 올바르게 구성되어 있으며, OBJECTIVE/SUBJECTIVE 문제 유형에 맞게 옵션과 답안이 적절히 연결되어 있습니다.


104-148: Lesson 3 데이터가 완전하고 정확합니다.

고전적 동기화 문제(생산자-소비자, 교착 상태, 식사하는 철학자, 우선순위 역전, 독자-저자)를 다루는 문제들이 적절히 구성되어 있습니다.


146-149: 전체 데이터 구조 검증 완료

총 21개 문제(레슨당 7개), 60개 옵션, 6개 주관식 답안이 일관되게 구성되어 있습니다. 외래 키 참조가 모두 올바르며, 각 OBJECTIVE 문제에 정확히 하나의 정답이 지정되어 있습니다.


1-149: ID 충돌 우려사항 없음

다른 SQL 파일들과의 ID 범위 확인 결과, 이 파일의 ID들(lessons 185-187, problems 1286-1306, options 3663-3722, answers 369-374)은 기존 데이터와 충돌하지 않습니다. 하드코딩된 ID는 다른 모든 단원 파일에서 사용하는 표준 패턴이므로 문제가 없습니다.

src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql (4)

1-7: AI 요약과 실제 파일 내용 불일치

AI 요약에서는 "기수 정렬 (Unit 11)"에 대한 시드 데이터로 설명되어 있으나, 실제 파일 내용은 "위상 정렬 (Unit ID: 22)"입니다. 파일명(unit12_위상정렬.sql)과 내용은 일치하지만 요약이 잘못된 파일을 참조하고 있습니다.


87-88: 문제 384의 선택지 개수 확인 필요

문제 384는 OBJECTIVE 타입이지만 선택지가 2개(1025, 1026)만 있습니다. 다른 OBJECTIVE 문제들은 모두 4개의 선택지를 가지고 있습니다.

참/거짓 형식의 문제로 의도된 것이라면 문제가 없으나, 다른 문제들과의 일관성 및 누락된 선택지가 있는지 확인이 필요합니다.


49-55: LGTM!

SUBJECTIVE 문제들(375, 377, 380)에 대한 답안 데이터가 올바르게 구성되어 있습니다. 다양한 정답 변형(영문/한글/약어)을 지원하고, SQL 문법에서 작은따옴표 이스케이프('')도 정확하게 처리되었습니다.


61-107: LGTM!

Lesson 64의 문제, 선택지, 답안 데이터가 올바르게 구성되어 있습니다. 위상 정렬의 응용 사례(빌드 시스템, 작업 스케줄링 등)와 관련 개념(Kahn's Algorithm, DFS/BFS 방식)이 잘 다뤄져 있습니다.

src/main/resources/sql/problem/운영체제/unit09_데드락.sql (5)

1-8: LGTM! 레슨 구조가 적절하게 정의되었습니다.

유닛 ID 64에 대해 3개의 레슨이 명확하게 정의되어 있습니다.


10-37: Lesson 1 데이터 구조가 올바르게 구성되었습니다.

데드락 발생 조건(상호 배제, 점유 대기, 비선점, 순환 대기)에 대한 문제와 답안이 정확하게 매핑되어 있습니다. OBJECTIVE 문제는 옵션을, SUBJECTIVE 문제는 답안을 갖고 있어 일관성이 유지됩니다.


40-77: Lesson 2 데이터가 정확하게 구성되었습니다.

데드락 해결 방법(예방, 회피, 탐지, 회복)에 대한 내용이 올바르게 구성되어 있습니다.


80-122: Lesson 3 데이터 구조가 올바르게 완성되었습니다.

데드락 회피, 탐지, 회복에 대한 심화 내용이 잘 구성되어 있습니다.


1-123: 이 파일은 저장소의 다른 시드 파일들과 동일한 패턴을 따르고 있으므로 특별한 조치가 필요하지 않습니다. 다른 모든 SQL 시드 파일들도 트랜잭션 래핑 없이 여러 INSERT 문을 사용하고 있으며, 각 유닛별로 ID 범위를 분리하여 충돌을 방지하는 구조로 설계되어 있습니다. 검증 결과 해당 ID들(lesson 188-190, problem 1307-1324, option 3723-3766, answer 375-381)은 다른 파일에서 사용되지 않습니다.

Likely an incorrect or invalid review comment.

(1259, 181, '빈칸에 들어갈 알맞은 말을 작성하시오', '스레드를 미리 생성해두고 재사용하는 패턴을 _____ 패턴이라고 한다.', 'SUBJECTIVE'),
(1260, 181, '다음 중 멀티프로세스와 멀티스레드의 선택 기준으로 올바른 것은?', '멀티프로세스와 멀티스레드는 적합한 경우가 다르다.', 'OBJECTIVE'),
(1261, 181, '다음 중 스레드 수와 성능의 관계로 올바른 것은?', '스레드 수는 성능에 영향을 준다.', 'OBJECTIVE'),
(1262, 181, '빈칸에 들어갈 알맞은 말을 작성하시오', 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수와 _____배 정도이다.', 'SUBJECTIVE'),
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

문제 내용의 문법적 어색함

현재 문장 구조("CPU 코어 수와 _____배 정도이다")에 정답 "1"을 채우면 "CPU 코어 수와 1배 정도이다"가 되어 한국어 문법상 어색합니다.

📝 수정 제안
-       (1262, 181, '빈칸에 들어갈 알맞은 말을 작성하시오', 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수와 _____배 정도이다.', 'SUBJECTIVE'),
+       (1262, 181, '빈칸에 들어갈 알맞은 말을 작성하시오', 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수의 약 _____배 정도이다.', 'SUBJECTIVE'),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
(1262, 181, '빈칸에 들어갈 알맞은 말을 작성하시오', 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수와 _____배 정도이다.', 'SUBJECTIVE'),
(1262, 181, '빈칸에 들어갈 알맞은 말을 작성하시오', 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수의 약 _____배 정도이다.', 'SUBJECTIVE'),
🤖 Prompt for AI Agents
In @src/main/resources/sql/problem/운영체제/unit06_스레드와멀티스레딩.sql at line 110, The
question string 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수와 _____배 정도이다.' is grammatically
awkward with the answer '1'; update the tuple text to a grammatically correct
form such as 'CPU 집약적 작업의 적정 스레드 수는 CPU 코어 수의 약 _____배이다.' while keeping the
correct answer value ('1') unchanged so the expected answer still matches;
locate and edit the exact SQL tuple containing that question text in the
INSERT/VALUES list.

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

🧹 Nitpick comments (1)
src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql (1)

1-2: 파일명과 Unit ID 불일치

파일명은 unit12_위상정렬.sql이지만 주석에서 Unit ID는 22로 명시되어 있습니다. 파일명을 unit22_위상정렬.sql로 변경하거나, 파일 네이밍 규칙을 확인하여 일관성을 유지하는 것이 좋습니다.

📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bd0a566 and 23d6dc5.

📒 Files selected for processing (1)
  • src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql
🔇 Additional comments (1)
src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql (1)

49-55: 주관식 답안 매핑 및 형식 적절

주관식 문제(375, 377, 380)에 대한 답안이 올바르게 매핑되어 있으며, 다양한 정답 형태(예: dag,사이클이 없는 방향 그래프,directed acyclic graph)를 쉼표로 구분하여 유연한 채점이 가능하도록 설계되었습니다. SQL 이스케이프(Kahn''s)도 올바르게 처리되었습니다.

Comment on lines +5 to +7
INSERT INTO lesson (id, unit_id, title)
VALUES (63, 22, '위상 정렬 기초 문제집'),
(64, 22, '위상 정렬 응용 문제집');
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify ID conflicts and unit existence

echo "=== Checking for lesson ID conflicts (63, 64) ==="
rg -n "VALUES\s*\(6[34]," --type sql || echo "No conflicts found"

echo ""
echo "=== Checking for problem ID conflicts (373-388) ==="
rg -n "VALUES\s*\(3(7[3-9]|8[0-8])," --type sql || echo "No conflicts found"

echo ""
echo "=== Checking for option ID conflicts (993-1038) ==="
rg -n "VALUES\s*\((99[3-9]|10[0-3][0-9])," --type sql || echo "No conflicts found"

echo ""
echo "=== Checking unit_id 22 existence ==="
rg -n "VALUES\s*\(22," --type sql | head -20 || echo "Unit 22 not found"

echo ""
echo "=== File content verification ==="
cat -n src/main/resources/sql/problem/알고리즘/unit12_위상정렬.sql 2>/dev/null || echo "File not found or cannot be read"

Repository: Team-Gravit/gravit-server

Length of output: 11973


하드코딩된 ID들이 기존 데이터와 충돌함 - 즉시 수정 필요

이 파일의 하드코딩된 ID들이 다른 SQL 파일의 데이터와 중복되어 있습니다:

  • lesson ID 63: unit01_시간복잡도와Big-O표기법.sql에서 이미 사용 중 (unit_id 188)
  • problem IDs 373, 375, 379, 381, 382, 384, 385: unit08_동기화와병행성.sql, unit09_데드락.sql, unit10_메모리관리기초.sql 등에서 이미 사용 중
  • option IDs 993-1038: 범위 내의 여러 ID가 problem5.sql, problem2.sql 등에서 이미 사용 중
  • unit_id 22: 현재 unit 테이블에 존재하지 않음 (외래키 제약 조건 위반)

고유한 ID로 교체하거나, 기존 데이터와의 중복을 해결하는 방안이 필요합니다.

Comment on lines +71 to +76
INSERT INTO option (id, problem_id, content, explanation, is_answer)
VALUES (1013, 381, '빌드 시스템 의존성 해결', '빌드 시스템 의존성은 위상 정렬의 활용 사례이므로 오답이다.', false),
(1014, 381, '최단 경로 탐색', '최단 경로 탐색은 위상 정렬의 활용 사례가 아니므로 정답이다.', true),
(1015, 381, '작업 스케줄링', '작업 스케줄링은 위상 정렬의 활용 사례이므로 오답이다.', false),
(1016, 381, '선수과목 순서 결정', '선수과목 순서는 위상 정렬의 대표적인 활용 사례이므로 오답이다.', false),

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

문제 381의 질문과 정답 논리 불일치

문제 381의 지시문은 "제시된 내용과 관련하여 옳은 것은?"이지만, 정답으로 표시된 "최단 경로 탐색"은 위상 정렬의 활용 사례가 아니기 때문에 정답이라고 설명되어 있습니다.

질문 의도가 "위상 정렬의 활용 사례가 아닌 것"을 찾는 것이라면, 지시문을 수정해야 합니다.

🐛 수정 제안
 INSERT INTO problem (id, lesson_id, instruction, content, problem_type)
-VALUES (381, 64, '제시된 내용과 관련하여 옳은 것은?', '위상 정렬은 다양한 분야에서 활용된다.', 'OBJECTIVE'),
+VALUES (381, 64, '제시된 내용과 관련하여 옳지 않은 것은?', '위상 정렬은 다양한 분야에서 활용된다.', 'OBJECTIVE'),

또는 option의 explanation도 일관되게 수정:

-       (1013, 381, '빌드 시스템 의존성 해결', '빌드 시스템 의존성은 위상 정렬의 활용 사례이므로 오답이다.', false),
-       (1014, 381, '최단 경로 탐색', '최단 경로 탐색은 위상 정렬의 활용 사례가 아니므로 정답이다.', true),
+       (1013, 381, '빌드 시스템 의존성 해결', '빌드 시스템 의존성 해결은 위상 정렬의 대표적인 활용 사례이다.', false),
+       (1014, 381, '최단 경로 탐색', '최단 경로 탐색은 다익스트라 등의 알고리즘을 사용하며, 위상 정렬의 활용 사례가 아니다.', true),

@xunxxoie xunxxoie merged commit 1b2c54d into dev Jan 12, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🌼 Feat to add new Feature!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: 문제 데이터(데이터베이스, 운영체제) 통합 및 관리 구조 변경

1 participant