summaryrefslogtreecommitdiff
path: root/README.md
blob: 230e3440c429ae592c532789c543fb344f0d5eac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# SHI eVCP

## 마이그레이션

1. 마이그레이션을 위한 최소 압축

```bash
# zip 은 심볼릭 링크 정보가 누락되는 문제 있음
# zip -r archive_$(date +%Y%m%d_%H%M%S).zip . -x "node_modules/*" "public/*" ".next/*" ".git/*" "tmp/*" "temp/*"

# h 옵션 필수임. 심볼릭링크 날려먹으면 node_modules 내부에서 문제생김.

tar -czhvf archive_$(date +%Y%m%d_%H%M%S).tar.gz --exclude="node_modules" --exclude="public" --exclude=".next" --exclude=".git" --exclude="tmp" --exclude="temp" .

zip -r archive-$(date +%Y%m%d_%H%M%S).zip . -x "./public/*" "./.git/*" "./.next/*" "./tmp/*" "./temp/*" "./.cursor/*"
zip -r archive-$(date +%Y%m%d_%H%M%S).zip . -x "./public/*" "./.git/*" "./.next/*" "./tmp/*" "./temp/*" "./.cursor/*" "./node_modules/*"
```

2. 전체 압축

```bash
# zip -r archive_$(date +%Y%m%d_%H%M%S).zip . -x ".git/*"

# 1단계 상위 디렉토리에서 실행
tar -czhf ./archive_$(date +%Y%m%d_%H%M%S).tar.gz \
    --exclude=".git" \
    --exclude="public" \
    --exclude=".next" \
    -C ./evcp .

tar -czvf ./archive_$(date +%Y%m%d_%H%M%S).tar.gz \
    --exclude=".git" \
    --exclude="public" \
    --exclude=".next" \
    -C ./evcp .

# .git 경로 제외 압축
tar -czhf ./archive_$(date +%Y%m%d_%H%M%S).tar.gz --exclude=".git" \-C ./evcp .

# 전달용
tar -czhf ./archive_$(date +%Y%m%d_%H%M%S).tar.gz \
    --exclude=".next" \
    --exclude="public/*.zip" \
    -C ./evcp .
```

3. 압축 해제

```bash
# 원본 구조 그대로 바로 풀기
tar -xzvf archive_[date].tar.gz

# 특정 경로에 풀기
tar -xzvf archive_20240101_123456.tar.gz -C /path/to/directory

# 압축파일 미리보기
tar -tzvf archive_20240101_123456.tar.gz

# 특정 파일만 압축 해제하기
tar -xzvf archive_20240101_123456.tar.gz path/to/specific/file
```

- `-x`: 압축 해제 (e**x**tract)
- `-z`: gzip 압축 해제
- `-v`: 압축 해제 과정 출력 (생략 가능)
- `-f`: 파일 이름 지정

## 실행

1. 종속성 설치 `npm i`
2. pdfTron 라이브러리 복사
   `@/public/pdftronWeb` 경로에 `core`, `ui` 폴더를 복사
   - `cp -r node_modules/@pdftron/webviewer/public/ public/pdftronWeb/`
3. 실행 `npm run dev`

## 로컬 실행을 위한 DB 준비

1. postgres 17 버전을 준비 (환경변수에 따라 계정 및 데이터베이스 생성)
2. drizzle-kit 으로 ORM to Database 처리
3. 환경변수 선택을 위한 dotenv-cli 설치 `npm i -g dotenv-cli`

development:

```bash
npx dotenv -e .env.production -- npx drizzle-kit push
```

production:

```bash
npx dotenv -e .env.development -- npx drizzle-kit push
```

3. 필요시 seeding 진행 (`@/db/` 경로 참조, drizzle 문서 확인)

## 주의사항

- 개발한 부분과 관련없는 부분에 대해 포매팅 변경사항을 만들지 마세요.
- 자동 포맷 기능을 종료해두세요 (vscode, prettier, biome 등)
  - formatOnSave 옵션을 비활성화하는 설정이 `.vscode/settings.json` 설정에 작성되어 있습니다.

## 협업전략

- main, dev 브랜치에 다이렉트 푸시 X (PR 사용)
- features 브랜치에서 새로운 브랜치 생성하기

### github 사용하기

1. 조직 내 팀에 개발 인원 추가
2. 개발 인원은 깃허브 로그인 후 클론 & 작업 내역 PR

인증 절차는 HTTPS, SSH 등 특정 방식으로 제한하고 있지는 않으며, 적절한 방법으로 진행하시면 됩니다.

예시 상황: AWS EC2 - CentOS 에서 크레덴셜 셋업하기

> ```bash
> # GH 설치하기
> # 저장소 파일 다운로드
> sudo curl -L https://cli.github.com/packages/rpm/gh-cli.repo -o /etc/yum.repos.d/gh-cli.repo
>
> # 저장소 활성화 및 설치
> sudo yum install -y gh
>
> # 인증 처리하기
> gh auth login # 이후 CLI를 통해 인증처리 진행
> ```

[gh cli에 대해 알아보기](https://github.com/cli/cli)

## SAML 2.0 SSO (For Knox Portal)
# === [시작] SSO 설정 ===

# ! SSO Redirect 주소로 활용되며, 상단에서 적절한 URL을 쓴다면 이 변수는 주석처리할 것
# NEXTAUTH_URL="http://60.101.108.100"

# SAML 2.0 SP로서 신청할 때 기입하는 사항
# 메타데이터 XML에서 추출 가능하나, 개발 편의성을 위해 추출로직 제거하고 환경변수에 하드코딩함

### sp_metadata.xml ###
```bash
SAML_SP_ENTITY_ID="SP 측 ID(사전 정의됨)"
SAML_SP_CALLBACK_URL="SP 측이 콜백을 받을 주소(사전 정의됨)"
# POST
SAML_SP_ACS_BINDING_PRIMARY="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
# Redirect
SAML_SP_ACS_BINDING_SECONDARY="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
SAML_SP_AUTHN_REQUESTS_SIGNED=false #(사전 정의됨)
SAML_SP_WANT_ASSERTIONS_SIGNED=false #(사전 정의됨)

### idp_metadata.xml ###
SAML_IDP_ENTITY_ID="(수신한 메타데이터 기준으로 추출)"
SAML_IDP_SSO_URL="(수신한 메타데이터 기준으로 추출. 이 위치로 브라우저는 사용자를 리다이렉트함)"
SAML_IDP_CERT="BASE64로 인코딩된 IDP의 CERT"
SAML_ENCRYPTION_METHOD="CERT 암호화 기법"
```