---
template: policy-doc@1
doc_id: 07-content
title: 콘텐츠·게시 도메인 — 게시판 종류와 접근허용 축 · 미답변 조회 · 답변자 기록 · 노출 여부 두 갈래 · 배너·팝업 위치 축 · 광고 지표 · 기관 일시중지 스위치
config: ../_meta/template-config.yaml
last_verified: 4d798f55
policies:
  - id: BOARD_TYPE_AND_ACCESS
    status: active-prod
    evidence: [S-constant, S-guard]
    limitations:
      - 게시판이 종류 축과 접근허용 축을 따로 갖는다는 것까지가 관측이다. 두 축의 조합 중 실제로 쓰이는 것이 무엇인지는 운영 자료라 이 문서가 세지 않았다
      - 접근허용 값이 목록 질의에서 어떻게 걸러지는지는 부분만 확인했고 전수로 추적하지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/board/board/board.entity.ts:6
      - insuniverse-server/apps/api/src/modules/board/board/board.entity.ts:13
      - insuniverse-server/apps/api/src/modules/board/board/board.controller.ts:39
      - insuniverse-server/apps/api/src/modules/board/board/board-admin.controller.ts:42
  - id: BOARD_UNANSWERED_QUERY
    status: active-prod
    evidence: [S-route, S-contract]
    limitations:
      - 미답변 게시글을 모으는 전용 조회가 있다는 것까지가 관측이다. 답변 여부의 판정 기준이 댓글 존재 하나인지는 이 문서가 단언하지 않는다
      - 이 조회를 누가 소비하는지는 세지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/board/board/board.service.ts:40
  - id: BOARD_ANSWER_AUTHOR
    status: active-prod
    evidence: [S-schema, S-contract]
    limitations:
      - 답변에 작성 관리자 식별자가 함께 남는다는 것까지가 관측이다. 그 식별자가 화면에 노출되는지는 이 문서가 판정하지 않는다
      - 답변 수정·삭제 시 작성자 기록이 유지되는지는 세지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/board/comment/board-comment.entity.ts:5
      - insuniverse-server/apps/api/src/modules/board/comment/board-comment.repository.ts:15
  - id: CONTENT_VISIBILITY_SPLIT
    status: active-prod
    evidence: [S-contract, S-component]
    limitations:
      - 목록 산출이 관리자 여부로 갈린다는 것까지가 관측이다. 그 분기가 게시판·분류·배너·팝업 넷 모두에 같은 형태인지는 부분만 확인했다
      - 노출 여부 값의 기본값은 운영 자료라 적지 않는다
    anchors:
      - insuniverse-server/apps/api/src/modules/board/category/board-category.repository.ts:35
      - insuniverse-server/apps/api/src/modules/banner/banner.service.ts:26
      - insuniverse-server/apps/api/src/modules/popup/popup.service.ts:26
  - id: BANNER_POPUP_LOCATION
    status: active-prod
    evidence: [S-constant, S-guard]
    limitations:
      - 배너와 팝업이 각각 위치·종류 축을 코드값으로 갖는다는 것까지가 관측이다. 같은 위치에 여러 건이 걸렸을 때의 우선순위는 이 문서가 판정하지 않는다
      - 이미지 저장 위치와 수명은 세지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/banner/banner.entity.ts:6
      - insuniverse-server/apps/api/src/modules/popup/popup.entity.ts:6
      - insuniverse-server/apps/api/src/modules/banner/banner.controller.ts:9
  - id: ADS_METRIC_INCREMENT
    status: active-prod
    evidence: [S-route, S-constant]
    limitations:
      - 클릭·재생 지표를 올리는 입구가 따로 있다는 것까지가 관측이다. 그 입구에 중복 방지가 있는지는 이 문서가 판정하지 않는다
      - 광고 위치·종류·재생방식 세 축의 조합 제약은 세지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/advertisement/advertisement.entity.ts:6
      - insuniverse-server/apps/api/src/modules/advertisement/advertisement.entity.ts:19
      - insuniverse-server/apps/api/src/modules/advertisement/advertisement.controller.ts:32
      - insuniverse-server/apps/api/src/modules/advertisement/admin-advertisement.controller.ts:41
  - id: INSTITUTION_BLOCK_SWITCH
    status: active-prod
    evidence: [S-constant, S-roles]
    limitations:
      - 기관별 일시중지 스위치와 그 상태를 되묻는 공개 조회가 있다는 것까지가 관측이다. 스위치가 켜졌을 때 실제 수집 경로가 어디서 막히는지는 이 문서가 추적하지 않았다
      - 안내 문구의 표시 종류가 코드값으로 갈린다는 것은 관측이되 각 값의 화면 형태는 화면 축 소관이다
    anchors:
      - insuniverse-server/apps/api/src/modules/institution-block/institution-block.entity.ts:7
      - insuniverse-server/apps/api/src/modules/institution-block/institution-block.entity.ts:13
      - insuniverse-server/apps/api/src/modules/institution-block/institution-block.controller.ts:27
      - insuniverse-server/apps/api/src/modules/institution-block/institution-block-admin.controller.ts:38
---

# 콘텐츠·게시 도메인 — 게시판 종류와 접근허용 축 · 미답변 조회 · 답변자 기록 · 노출 여부 두 갈래 · 배너·팝업 위치 축 · 광고 지표 · 기관 일시중지 스위치

**운영이 무엇을 걸어 두고 사용자가 무엇을 보는가**를 다룬다. 게시판의 종류·접근허용 두 축, 미답변 게시글 전용 조회, 답변에 남는 작성자 기록, 목록이 관리자 여부로 갈리는 노출 분기, 배너·팝업의 위치·종류 축, 광고 지표 증가 입구, 외부 기관 일시중지 스위치가 여기 있다.

**여기 없는 것** — 강의 책갈피는 `02-treat.md` 가, 알림 발송은 `06-communication.md` 가 진다. 역할 어휘와 권한 층의 정의, 개인정보 노출 규칙은 총론 소관이며 이 문서는 그 층이 이 도메인 자료에 걸리는 자리만 낸다.

## 정책 (기획)

### BOARD_TYPE_AND_ACCESS

**게시판은 종류 축과 접근허용 축을 따로 갖는다.** 무엇에 관한 글인가와 누가 볼 수 있는가가 서로 다른 코드값이며, 사용자 입구와 관리자 입구가 따로 있다. 관리자 입구는 역할로, 사용자 입구는 로그인으로 열린다.

### BOARD_UNANSWERED_QUERY

**아직 답이 달리지 않은 게시글만 모으는 전용 조회가 있다.** 전체 목록을 받아 거르는 것이 아니라 별도 자리다.

### BOARD_ANSWER_AUTHOR

**게시글 답변에는 작성한 관리자의 식별자가 함께 남는다.** 답변 자료가 그 값을 자기 열로 갖고, 생성 시점에 실린다.

### CONTENT_VISIBILITY_SPLIT

**목록 산출은 관리자 여부로 갈린다.** 같은 자료를 보더라도 관리자 쪽은 노출 여부와 무관하게 전부를, 사용자 쪽은 노출로 표시된 것만 받는다. 이 분기는 게시판 분류·배너·팝업에 같은 형태로 있다.

### BANNER_POPUP_LOCATION

**배너와 팝업은 각각 자기 위치·종류 축을 코드값으로 갖는다.** 어디에 걸리는가가 자유 문자열이 아니라 고정 어휘이며, 조회는 로그인 뒤에 열린다.

### ADS_METRIC_INCREMENT

**광고에는 클릭 수와 재생 수를 올리는 별도 입구가 있다.** 광고 자체는 위치·종류·재생방식 세 축을 갖고, 등록은 관리자 한 종류만 한다.

### INSTITUTION_BLOCK_SWITCH

**외부 기관별로 일시중지 스위치가 있다.** 관리자가 켜고 끄며, 그 상태를 되묻는 공개 조회가 따로 있어 화면이 미리 안내할 수 있다. 안내 문구의 표시 종류도 코드값으로 갈린다.

## 강제 지점 (개발)

### BOARD_TYPE_AND_ACCESS

종류 축은 `insuniverse-server/apps/api/src/modules/board/board/board.entity.ts:6`, 접근허용 축은 `insuniverse-server/apps/api/src/modules/board/board/board.entity.ts:13` 의 열거형이다. 사용자 입구의 결선 층은 `insuniverse-server/apps/api/src/modules/board/board/board.controller.ts:39`, 관리자 입구의 허용 역할은 `insuniverse-server/apps/api/src/modules/board/board/board-admin.controller.ts:42` 가 선언한다.

### BOARD_UNANSWERED_QUERY

전용 조회 처리기는 `insuniverse-server/apps/api/src/modules/board/board/board.service.ts:40` 이다.

### BOARD_ANSWER_AUTHOR

답변 자료형은 `insuniverse-server/apps/api/src/modules/board/comment/board-comment.entity.ts:5`, 작성자 식별자를 함께 싣는 생성 처리기는 `insuniverse-server/apps/api/src/modules/board/comment/board-comment.repository.ts:15` 다.

### CONTENT_VISIBILITY_SPLIT

게시판 분류 쪽 분기는 `insuniverse-server/apps/api/src/modules/board/category/board-category.repository.ts:35`, 배너 쪽은 `insuniverse-server/apps/api/src/modules/banner/banner.service.ts:26`, 팝업 쪽은 `insuniverse-server/apps/api/src/modules/popup/popup.service.ts:26` 이 진다. 셋 다 관리자 여부를 인자로 받는다.

### BANNER_POPUP_LOCATION

배너 위치 축은 `insuniverse-server/apps/api/src/modules/banner/banner.entity.ts:6`, 팝업 종류 축은 `insuniverse-server/apps/api/src/modules/popup/popup.entity.ts:6` 의 열거형이다. 배너 조회 입구의 결선 층은 `insuniverse-server/apps/api/src/modules/banner/banner.controller.ts:9` 다.

### ADS_METRIC_INCREMENT

광고 위치 축은 `insuniverse-server/apps/api/src/modules/advertisement/advertisement.entity.ts:6`, 재생방식 축은 `insuniverse-server/apps/api/src/modules/advertisement/advertisement.entity.ts:19` 다. 지표 증가 입구는 `insuniverse-server/apps/api/src/modules/advertisement/advertisement.controller.ts:32`, 등록 입구의 허용 역할은 `insuniverse-server/apps/api/src/modules/advertisement/admin-advertisement.controller.ts:41` 이 선언한다.

### INSTITUTION_BLOCK_SWITCH

기관 어휘는 `insuniverse-server/apps/api/src/modules/institution-block/institution-block.entity.ts:7`, 안내 표시 종류는 `insuniverse-server/apps/api/src/modules/institution-block/institution-block.entity.ts:13` 의 열거형이다. 상태 되묻기 입구는 `insuniverse-server/apps/api/src/modules/institution-block/institution-block.controller.ts:27`, 설정 입구의 허용 역할은 `insuniverse-server/apps/api/src/modules/institution-block/institution-block-admin.controller.ts:38` 이 선언한다.

## 적용 범위 (actor × 서비스)

| 정책 id | server | site | admin |
|---|---|---|---|
| BOARD_TYPE_AND_ACCESS | 두 축 어휘 · 두 입구의 결선 층·역할 | 게시판 목록·작성 | 게시판 관리 화면 |
| BOARD_UNANSWERED_QUERY | 전용 조회 처리기 | — | 미답변 목록 화면 |
| BOARD_ANSWER_AUTHOR | 답변 자료형 · 작성자 기록 | 답변 열람 | 답변 작성 화면 |
| CONTENT_VISIBILITY_SPLIT | 세 자리의 관리자 여부 분기 | 노출된 것만 받는다 | 전부를 받는다 |
| BANNER_POPUP_LOCATION | 두 축 어휘 · 조회 입구 결선 층 | 배너·팝업 표시 | 배너·팝업 등록 화면 |
| ADS_METRIC_INCREMENT | 두 축 어휘 · 지표 입구 · 등록 역할 | 광고 표시와 지표 전송 | 광고 등록 화면 |
| INSTITUTION_BLOCK_SWITCH | 두 어휘 · 상태 조회 · 설정 역할 | 중지 안내 표시 | 중지 설정 화면 |

`—` = 그 서비스가 이 정책의 경로에 등장하지 않음.

이 표의 열은 서비스 3종이며 actor 는 열이 아니다. 이 문서의 축은 콘텐츠 자원에 걸리는 판정이라 actor 를 열로 두면 서버 한 칸만 차는 표가 된다. 열 이름 집합과 순서는 `../_meta/template-config.yaml` 의 `services` 를 그대로 따른다.

## 예외·폴백

| 정책 id | 예외 조건 | 폴백 동작 | 확인 근거 |
|---|---|---|---|
| BOARD_TYPE_AND_ACCESS | 관리자가 아닌 주체가 관리자 입구를 쓸 때 | 역할 판정에서 거부된다 | `insuniverse-server/apps/api/src/modules/board/board/board-admin.controller.ts:42` |
| BOARD_TYPE_AND_ACCESS | 접근허용 축이 막는 글을 열려 할 때 | 목록 질의에서 걸러진다. 전수 추적은 이 문서가 하지 않았다 | `insuniverse-server/apps/api/src/modules/board/board/board.entity.ts:13` |
| BOARD_UNANSWERED_QUERY | 전체 목록에서 미답변만 찾으려 할 때 | 전용 조회가 따로 있다. 전체 목록은 답변 여부로 거르지 않는다 | `insuniverse-server/apps/api/src/modules/board/board/board.service.ts:40` |
| BOARD_ANSWER_AUTHOR | 작성자 정보 없이 답변을 만들려 할 때 | 생성 처리기가 요청 주체의 식별자를 함께 싣는다 | `insuniverse-server/apps/api/src/modules/board/comment/board-comment.repository.ts:15` |
| CONTENT_VISIBILITY_SPLIT | 사용자 쪽에서 미노출 항목을 열려 할 때 | 목록 산출이 관리자 여부로 갈려 받지 못한다 | `insuniverse-server/apps/api/src/modules/board/category/board-category.repository.ts:35` |
| BANNER_POPUP_LOCATION | 어휘 밖 위치값을 실어 등록할 때 | 입력 검증에서 거부된다 | `insuniverse-server/apps/api/src/modules/banner/banner.entity.ts:6` |
| BANNER_POPUP_LOCATION | 같은 위치에 여러 건이 걸릴 때 | 우선순위를 이 문서가 판정하지 않는다 | `insuniverse-server/apps/api/src/modules/popup/popup.entity.ts:6` |
| ADS_METRIC_INCREMENT | 같은 노출에서 지표를 반복 올릴 때 | 중복 방지 여부를 이 문서가 판정하지 않는다 | `insuniverse-server/apps/api/src/modules/advertisement/advertisement.controller.ts:32` |
| INSTITUTION_BLOCK_SWITCH | 스위치가 켜진 기관으로 수집을 시도할 때 | 상태 조회가 그 사실을 미리 알린다. 실제 차단 자리는 이 문서가 추적하지 않았다 | `insuniverse-server/apps/api/src/modules/institution-block/institution-block.controller.ts:27` |

## 연혁

릴리스 태그가 존재하지 않는다. 릴리스 열은 `—` 로 두고 커밋 SHA 로 추적한다.

| 릴리스 | 날짜 | SHA | 변경 요약 |
|---|---|---|---|
| — | 2024-12-09 | `6ed3e157` | 팝업 자료와 종류 축 신설 |
| — | 2024-12-09 | `0ada98ef` | 배너 조회 입구 정리 |
| — | 2025-01-08 | `57fa79e2` | 배너 위치 축에 값 추가 |
| — | 2025-01-16 | `a0eb8be9` | 게시판 사용자 입구 정리 |
| — | 2025-01-17 | `bf86cdc0` | 배너·팝업 목록에 관리자 여부 분기 도입 |
| — | 2025-03-27 | `958e0f32` | 게시판 종류 축이 열거형으로 고정됨 |
| — | 2025-04-02 | `8cf4f355` | 게시판에 접근허용 축 추가 |
| — | 2025-04-04 | `5728e608` | 미답변 게시글 전용 조회 신설 |
| — | 2025-04-17 | `63ccc6b8` | 게시판 분류 목록에 노출 여부 분기 도입 |
| — | 2025-04-17 | `379e44c3` | 게시글 답변에 작성 관리자 기록 추가 |
| — | 2025-06-05 | `866f5392` | 광고 자료와 위치·종류·재생방식 세 축 신설 |
| — | 2025-06-11 | `f90da31f` | 광고 클릭·재생 지표 증가 입구 신설 |
| — | 2026-05-20 | `005b7856` | 외부 기관 일시중지 스위치와 상태 조회 신설 |
