MyModel 패턴 PostgreSQL 확장 — 기존 패턴 100% 유지하며 PG 기능 추가
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. PostgreSQL의 INSERT ... RETURNING 절의 주요 장점은?
💡 RETURNING 절은 INSERT/UPDATE/DELETE 후 영향받은 행의 컬럼 값을 즉시 반환합니다. 이를 통해 DB 기본값(gen_random_uuid(), NOW(), SERIAL 생성값 등)을 추가 SELECT 없이 한 번의 쿼리로 얻을 수 있어 성능과 코드 간결성이 향상됩니다.
Q2. PostgreSQL의 UPSERT에서 충돌 시 새로 삽입하려던 값을 참조하는 방법은?
💡 ON CONFLICT DO UPDATE SET 절에서 새로 삽입하려던 값(충돌된 값)은 EXCLUDED 의사 테이블을 통해 참조합니다. 예: `SET visit_count = EXCLUDED.visit_count + 1` 처럼 사용합니다. EXCLUDED는 충돌된 새 행의 값을 담고 있습니다.
Q3. MyModel 패턴을 PostgreSQL로 확장할 때 권장하는 설계 방식은?
💡 기존 MyModel은 변경하지 않고, 이를 상속한 PgModel 추상 클래스를 만들어 PostgreSQL 전용 기능을 추가합니다. 이렇게 하면 기존 MyModel 기반 코드가 100% 호환되면서 PostgreSQL 고급 기능도 사용할 수 있습니다. Open/Closed Principle(확장에는 열려있고, 수정에는 닫혀있음)을 준수하는 설계입니다.
Q4. Bulk Insert 시 RETURNING을 사용하는 주요 목적은?
💡 대량의 행을 삽입한 후 각 행의 생성된 PK(SERIAL/BIGSERIAL), UUID, 또는 기타 DB 기본값을 알아야 할 때 RETURNING을 사용합니다. 삽입 후 SELECT를 따로 실행하지 않고 한 번의 INSERT 쿼리로 모든 삽입 결과를 반환받을 수 있습니다.
Q5. ON CONFLICT DO NOTHING과 ON CONFLICT DO UPDATE의 차이는?
💡 ON CONFLICT DO NOTHING은 충돌(중복 키 등)이 발생하면 해당 삽입을 조용히 무시하여 아무 변경도 하지 않습니다. ON CONFLICT DO UPDATE는 충돌 시 지정한 컬럼을 업데이트합니다. 조회수 증가, 설정값 동기화, 소셜 로그인 등 'insert or update' 패턴에 DO UPDATE를 사용합니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.