프로젝트 구조 및 설명
1. 메인 프로젝트 디렉토리 구조
blahblah/ # 메인 프로젝트 루트 폴더
│
├── blahblah-frontend/ # 프론트엔드 원본 코드 서브모듈
│
├── blahblah-backend/ # 백엔드 원본 코드 서브모듈
│
├── blahblah-frontend-obfuscated/ # 난독화된 프론트엔드 코드 서브모듈
│
├── blahblah-backend-obfuscated/ # 난독화된 백엔드 코드 서브모듈
│
├── .gitmodules # 서브모듈 정보가 포함된 설정 파일
├── update.sh # (선택) 프로젝트 업데이트용 스크립트 파일
├── obfuscated_update.sh # (선택) 난독화 업데이트용 스크립트 파일
└── .gitignore # Git에서 무시할 파일/폴더 목록
2. 각 폴더 및 파일의 역할
- blahblah/: 메인 프로젝트의 루트 폴더로, 모든 서브모듈을 포함하는 최상위 디렉토리.
- blahblah-frontend/: 프론트엔드 원본 코드가 포함된 서브모듈로, 개발과 업데이트가 이루어지는 폴더.
- blahblah-backend/: 백엔드 원본 코드가 포함된 서브모듈.
- blahblah-frontend-obfuscated/: 난독화된 프론트엔드 코드가 포함된 서브모듈로, 배포를 위한 난독화된 파일들이 이곳에 저장됩니다.
- blahblah-backend-obfuscated/: 난독화된 백엔드 코드가 포함된 서브모듈.
- .gitmodules: 서브모듈의 경로와 URL 정보가 포함된 파일로, 모든 서브모듈의 관리 정보를 기록.
- root_update.sh: (선택적) 원본 프로젝트 업데이트 작업을 자동화하기 위한 스크립트.
- obfuscated_update.sh: (선택적) 프로젝트 빌드, 난독화, 서브모듈 업데이트 등의 작업을 자동화하기 위한 스크립트.
- .gitignore: Git에서 추적하지 않을 파일 및 디렉토리를 지정.
3. 서브모듈 설정 및 관리 방법
- .gitmodules 파일에서 각 서브모듈의 URL 및 브랜치를 명시합니다:
[submodule "blahblah-frontend"]
path = blahblah-frontend
url = https://github.com/blahblah/blahblah-frontend.git
branch = main # 해당 서브모듈의 브랜치 명시
[submodule "blahblah-backend"]
path = blahblah-backend
url = https://github.com/blahblah/blahblah-backend.git
branch = main
[submodule "blahblah-frontend-obfuscated"]
path = blahblah-frontend-obfuscated
url = https://github.com/blahblah/blahblah-frontend-obfuscated.git
branch = main
[submodule "blahblah-backend-obfuscated"]
path = blahblah-backend-obfuscated
url = https://github.com/blahblah/blahblah-backend-obfuscated.git
branch = main
4. Git 서브모듈 관리 명령어
git submodule init //서브모듈 초기화
git submodule update --remote --recursive //서브모듈 업데이트
git submodule update --init --recursive //서브모듈을 초기화하고 업데이트까지 동시에 수행, 하위 서브모듈까지 처리.
//서브모듈의 변경사항 커밋 및 push 예시:
# 1. 프론트엔드 난독화된 서브모듈
cd blahblah-frontend-obfuscated
git add .
git commit -m "Update obfuscated frontend"
git push origin main
# 2. 백엔드 난독화된 서브모듈
cd ../blahblah-backend-obfuscated
git add .
git commit -m "Update obfuscated backend"
git push origin main
# 3. 프론트엔드 원본 서브모듈
cd ../blahblah-frontend
git add .
git commit -m "Update frontend source code"
git push origin main
# 4. 백엔드 원본 서브모듈
cd ../blahblah-backend
git add .
git commit -m "Update backend source code"
git push origin main
5. 로컬에서 빌드 및 난독화 과정 (프론트엔드 예시)
더보기
npm 전역 설치 경로 변경 (권장)
전역적으로 설치할 때 발생하는 권한 문제를 해결하기 위해 전역 패키지 설치 경로를 사용자 홈 디렉토리로 변경할 수 있습니다. 이렇게 하면 앞으로 전역적으로 패키지를 설치할 때마다 권한 문제 없이 진행할 수 있습니다.
- 전역 설치 디렉토리 변경:
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global' - 환경 변수 설정: 다음 명령을 실행하여 새 경로를 환경 변수에 추가합니다:
export PATH="$HOME/.npm-global/bin:$PATH"
- 환경 변수 설정을 영구적으로 적용: 이 설정을 영구적으로 유지하려면 ~/.bashrc 또는 ~/.bash_profile에 추가합니다:
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
- 만약 zsh를 사용한다면 ~/.zshrc에 추가하세요:
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
- 만약 zsh를 사용한다면 ~/.zshrc에 추가하세요:
- 다시 전역적으로 javascript-obfuscator를 설치합니다:
npm install -g javascript-obfuscator
1.빌드실행 build/ 폴더에 빌드된 파일이 생성됩니다.
cd blahblah-frontend # 프론트엔드 원본 코드 폴더로 이동
npm run build # 빌드 실행
2.난독화 작업 이 명령을 통해 build-obfuscated/ 폴더에 난독화된 파일들이 생성됩니다.
javascript-obfuscator build --output ../build-obfuscated-frontend
3.난독화된 파일을 blahblah-frontend-obfuscated로 이동 및 업데이트:
cp -r ../build-obfuscated-frontend/* ../blahblah-frontend-obfuscated/
cd ../blahblah-frontend-obfuscated
git add .
git commit -m "Update obfuscated frontend build"
git push origin main
6. 자동화 스크립트 (obfuscated_update.sh) 예시
프로젝트 빌드 및 난독화 과정을 자동화하기 위한 스크립트로, obfuscated_update.sh를 다음과 같이 구성할 수 있습니다:
#!/bin/bash
# 스크립트 실행 중 오류 발생 시 중단
set -e
# 1. 프론트엔드 빌드 및 난독화
cd blahblah-frontend
npm run build
# 난독화된 파일을 저장할 디렉토리 생성
mkdir -p ../build-obfuscated-frontend
# rsync를 사용하여 build 폴더 내용을 build-obfuscated-frontend로 복사
rsync -av --delete build/ ../build-obfuscated-frontend/
# main JS 파일 경로 찾기
MAIN_JS_FRONT_FILE=$(find build/static/js -name "main.*.js")
# 난독화 수행 (난독화된 파일을 정확한 위치에 복사)
javascript-obfuscator $MAIN_JS_FRONT_FILE --output ../build-obfuscated-frontend/static/js/$(basename $MAIN_JS_FRONT_FILE)
# 기존 난독화 폴더에서 필요한 파일만 유지하고 나머지 파일 업데이트
find ../blahblah-frontend-obfuscated -type f ! -name '.git*' -exec rm -f {} +
# 난독화된 파일만 blahblah-frontend-obfuscated로 복사
cp -r ../build-obfuscated-frontend/* ../blahblah-frontend-obfuscated/
echo "Build and obfuscation process completed for frontend."
7. 자동화 스크립트 (root_update.sh) 예시
프로젝트 업데이트를 하기 위한 스크립트로, update.sh를 다음과 같이 구성할 수 있습니다:
#!/bin/bash
# 스크립트 실행 중 오류 발생 시 중단
set -e
# 커밋 메시지 입력
echo "Please enter a commit message for this update (it will be prefixed with 'root_update.sh:'): "
read user_message
# 전체에 적용할 커밋 메시지 생성
commit_message="root_update.sh: $user_message"
# 1. 서브모듈들에 대한 업데이트 수행
for module in blahblah-backend blahblah-backend-obfuscated blahblah-frontend blahblah-frontend-obfuscated
do
echo "Processing submodule: $module"
# 서브모듈 디렉토리로 이동
cd $module
# 항상 main 브랜치로 이동 시도 (실패해도 스크립트가 계속되도록)
git checkout main || echo "Already on main or unable to switch to main"
# 변경 사항이 있을 경우 임시로 저장 (stash)
git stash save "Stashed changes in $module before pull" || echo "No changes to stash in $module"
# 최신 변경 사항을 가져오기 (pull)
echo "Pulling latest changes from origin/main in $module..."
git pull origin main --rebase || echo "Failed to rebase; please check for conflicts."
# Stash에서 복원
git stash pop || echo "No stash to apply in $module"
# 변경 사항을 스테이징 (add)
echo "Staging changes in $module..."
git add .
# 변경 사항 커밋 (commit)
git commit -m "$commit_message" || echo "No changes to commit in $module"
# 변경 사항 푸시 (push)
echo "Pushing changes to origin/main for $module..."
git push origin main || echo "Failed to push changes to $module"
# 메인 디렉토리로 돌아오기
cd ..
done
# 2. 메인 레포지토리에 대한 업데이트 수행
echo "Updating the main repository..."
# 변경 사항이 있을 경우 임시로 저장 (stash)
git stash save "Stashed changes in main repository before pull" || echo "No changes to stash in the main repository"
# 최신 변경 사항을 가져오기 (pull)
echo "Pulling latest changes from origin/main..."
git pull origin main --rebase || echo "Failed to rebase; please check for conflicts."
# Stash에서 복원
git stash pop || echo "No stash to apply in the main repository"
# 변경 사항을 스테이징 (add)
echo "Staging changes..."
git add .
# 변경 사항 커밋 (commit)
git commit -m "$commit_message" || echo "No changes to commit in the main repository"
# 변경 사항 푸시 (push)
echo "Pushing changes to origin/main..."
git push origin main || echo "Failed to push changes in the main repository"
echo "Update complete! All changes have been committed and pushed for all submodules and the main repository."
마무리
- 원본 코드는 blahblah-frontend 및 blahblah-backend에서 개발 및 업데이트가 이루어집니다.
- 난독화된 코드는 blahblah-frontend-obfuscated 및 blahblah-backend-obfuscated에 배포용으로 관리됩니다.
- 메인 프로젝트 디렉토리(blahblah/)에서 모든 서브모듈을 관리할 수 있으며, GitHub Actions 또는 스크립트(root_update.sh)를 통해 자동화할 수 있습니다.
'개인서버' 카테고리의 다른 글
AWS 배포 방법 정리 (1) | 2024.09.26 |
---|---|
AWS S3와 EC2 설명 및 S3연결 방법 (0) | 2024.09.25 |
Node.js/Express + MySQL 백엔드 설정 및 AWS RDS 연동 가이드 (0) | 2024.09.19 |
전체 웹사이트 구축 프로세스 정리 (0) | 2024.09.19 |