[
  {
    "courseSlug": "spring-intro",
    "question": "스프링의 '의존성 주입(DI)'을 이 코스의 식당 주방 비유로 가장 잘 설명한 것은?",
    "option1": "요리사가 요리할 때마다 직접 마트에 가서 재료를 사 오고 도구까지 스스로 준비하는 것",
    "option2": "손님이 주방에 직접 들어가서 원하는 요리를 자기 손으로 만들어 먹는 것",
    "option3": "요리사가 \"재료 주세요\"라고 선언만 하면 주방(컨테이너)이 필요한 재료를 알아서 가져다주는 것",
    "option4": "주방장이 모든 요리를 혼자 도맡아 하고 나머지 요리사들은 주문만 받게 하는 것",
    "answerIndex": 2,
    "explanation": "섹션 1의 핵심 비유입니다. 스프링은 앱이 켜질 때 필요한 객체들을 미리 만들어 컨테이너(주방 창고)에 보관해 두고, \"이거 필요해요\"라고 선언한 곳에 알아서 넣어 줍니다 — 이것이 의존성 주입(DI)입니다."
  },
  {
    "courseSlug": "spring-intro",
    "question": "코스의 '어노테이션 5총사' 설명에서, 주방에서 실제 요리(비즈니스 로직)를 하는 요리사 역할을 맡는 어노테이션은 무엇인가?",
    "option1": "@RestController — 요청을 받는 카운터 직원",
    "option2": "@Service — 주방에서 실제 요리를 하는 요리사",
    "option3": "@Repository — 창고(DB)에서 재료를 꺼내오는 담당",
    "option4": "@Configuration — 주방 설비를 설치하고 빈을 등록하는 담당",
    "answerIndex": 1,
    "explanation": "섹션 2에서 @Service는 \"주방에서 실제 요리(비즈니스 로직)를 하는 요리사\"로 설명됩니다. @RestController는 주문을 받는 카운터, @Repository는 창고(DB) 담당이에요."
  },
  {
    "courseSlug": "spring-intro",
    "question": "코스에서 Controller에 비즈니스 로직을 쓰지 말라고 하는 이유로 든 것은 무엇인가?",
    "option1": "각 층이 자기 일만 한다는 원칙이 깨져서, 나중에 규칙을 바꾸려 할 때 어디를 고쳐야 할지 찾기 어려워지기 때문",
    "option2": "비즈니스 로직이 들어가는 순간 서버가 켜지지 않고 시작하자마자 에러가 나기 때문",
    "option3": "스프링이 그 클래스를 더 이상 빈(Bean)으로 등록해 주지 않게 되기 때문",
    "option4": "Controller에서는 Service를 생성자 주입으로 받을 수 없게 되기 때문",
    "answerIndex": 0,
    "explanation": "섹션 3의 핵심입니다. 코스는 \"당장은 돌아가지만\" 검증·로그 같은 주방의 일이 카운터에 쌓이고, 나중에 \"로그인 규칙만 바꾸고 싶은데\" 할 때 어디를 고쳐야 할지 아무도 모르게 된다고 설명합니다."
  },
  {
    "courseSlug": "spring-intro",
    "question": "application.yml에서 ${DB_URL:jdbc:postgresql://localhost:5432/mirim} 같은 ${환경변수:기본값} 문법이 뜻하는 것은?",
    "option1": "기본값을 먼저 사용하고, 기본값이 비어 있을 때만 환경변수를 읽는다",
    "option2": "환경변수의 값과 기본값을 이어 붙여서 하나의 최종 값으로 만든다",
    "option3": "환경변수는 참고용일 뿐이고 실제로는 항상 기본값만 사용된다",
    "option4": "환경변수가 있으면 그 값을 쓰고, 없으면 콜론 뒤의 기본값을 쓴다",
    "answerIndex": 3,
    "explanation": "섹션 4의 핵심 문법입니다. 환경변수가 있으면 그걸 쓰고 없으면 기본값을 쓰기 때문에, 같은 코드가 내 PC에서는 로컬 PostgreSQL로, 운영 서울 EC2에서는 환경변수로 덮어쓴 진짜 DB로 돌아갑니다."
  },
  {
    "courseSlug": "spring-intro",
    "question": "수습 개발자가 이메일과 역할(role)이 모두 일치하는 사용자를 찾으려고 JPA 메서드 findByEmailAndRole(String email, String role)을 만들었다. 코스에서 배운 이름 규칙대로라면 스프링이 대신 써 주는 SQL은?",
    "option1": "SELECT * FROM users WHERE email = ? OR role = ?",
    "option2": "SELECT * FROM users WHERE email = ? AND role = ?",
    "option3": "SELECT * FROM users WHERE email = ? ORDER BY role DESC",
    "option4": "SELECT COUNT(*) > 0 FROM users WHERE email = ? AND role = ?",
    "answerIndex": 1,
    "explanation": "섹션 5의 규칙 응용입니다. findBy 뒤의 필드명은 WHERE 조건이 되고, And는 두 조건을 함께 거는 접속사예요. COUNT(*) > 0 형태는 existsBy로 시작할 때 만들어지는 SQL입니다."
  }
]
