# CJKWord 일부 공개 설정

이 설정은 Rocky Linux 8과 Apache 2.4를 기준으로 합니다.

## 공개 영역

```text
https://cjkword.com/
https://cjkword.com/docs/
https://cjkword.com/cawplus/
https://cjkword.com/game/
https://cjkword.com/en_game/
https://cjkword.com/japan/
https://cjkword.com/hsk/
https://cjkword.com/buildhanja/
https://cjkword.com/key_oper/key_oper.html
https://cjkword.com/touch_hanja.html
https://cjkword.com/classic1000.html
https://cjkword.com/manual.html
https://cjkword.com/api/sdk/
https://cjkword.com/api/example/simple_editor.html
https://cjkword.com/api/v1/health.php
https://cjkword.com/api/v1/data-health.php
https://cjkword.com/api/v1/caw/plain-convert.php?code=ma
https://cjkword.com/caw_alphabet_code_table/
```

## 비밀번호 보호 영역

```text
/power/
/voca44K1/
/cawsocket/
```

## 직접 접근 차단 영역

```text
/api/caw_data/
/api/_lib/
/working_storage/
```

JSON 직접 접근을 차단해도 PHP API는 서버 파일시스템에서 JSON을 계속 읽을 수 있습니다.

## 1. 암호 도구 설치

```bash
sudo dnf install httpd-tools
```

## 2. 최초 사용자 만들기

아래의 `cjkadmin`은 원하는 사용자 이름으로 바꿀 수 있습니다.

```bash
sudo htpasswd -c /etc/httpd/cjkword.passwd cjkadmin
```

명령을 실행하면 비밀번호를 두 번 입력합니다. 비밀번호 파일은 `/var/www/html` 안에 두지 않습니다.

사용자를 추가할 때는 `-c`를 사용하지 않습니다.

```bash
sudo htpasswd /etc/httpd/cjkword.passwd customer1
```

## 3. Apache 설정 파일 업로드

로컬 파일:

```text
server_config/cjkword-access.conf
```

서버 위치:

```text
/etc/httpd/conf.d/cjkword-access.conf
```

예시 명령:

```bash
sudo cp cjkword-access.conf /etc/httpd/conf.d/cjkword-access.conf
sudo chown root:root /etc/httpd/conf.d/cjkword-access.conf
sudo chmod 644 /etc/httpd/conf.d/cjkword-access.conf
sudo chown root:apache /etc/httpd/cjkword.passwd
sudo chmod 640 /etc/httpd/cjkword.passwd
```

## 4. 설정 검사와 적용

```bash
sudo apachectl configtest
sudo systemctl reload httpd
```

`Syntax OK`가 나오지 않으면 reload하지 말고 설정 파일을 다시 확인합니다.

## 5. 확인

로그인 없이 열려야 합니다.

```text
https://cjkword.com/
https://cjkword.com/docs/
https://cjkword.com/cawplus/
https://cjkword.com/game/
https://cjkword.com/en_game/
https://cjkword.com/japan/
https://cjkword.com/hsk/
https://cjkword.com/api/v1/health.php
https://cjkword.com/api/v1/data-health.php
https://cjkword.com/api/v1/caw/plain-convert.php?code=ma
https://cjkword.com/api/example/simple_editor.html
```

아이디와 비밀번호를 요구해야 합니다.

```text
https://cjkword.com/power/
https://cjkword.com/voca44K1/
https://cjkword.com/cawsocket/
```

접근 거부가 나와야 합니다.

```text
https://cjkword.com/api/caw_data/combined_characters_sorted.json
https://cjkword.com/api/_lib/caw.php
```

## 해제 방법

문제가 있을 때 설정 파일을 다른 이름으로 이동하고 Apache를 다시 불러옵니다.

```bash
sudo mv /etc/httpd/conf.d/cjkword-access.conf /etc/httpd/conf.d/cjkword-access.conf.disabled
sudo apachectl configtest
sudo systemctl reload httpd
```

## 주의

공개 예제 API는 비밀번호 없이 테스트할 수 있게 두고, 서버 상태를 바꾸는 업로드·삭제·데이터 재생성·관리자용 빌드 기능은 별도 인증 영역에 둡니다. Basic 인증은 반드시 HTTPS에서 사용합니다. 고객별 사용량 제한이나 상용 API가 필요해지면 Basic 인증보다 고객별 API 키와 요청 횟수 제한을 추가하는 것이 좋습니다.
