본문 바로가기
개인서버

프로젝트 구조 정리

by 데이빗제이2 2024. 9. 24.

프로젝트 구조 및 설명

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 전역 설치 경로 변경 (권장)

전역적으로 설치할 때 발생하는 권한 문제를 해결하기 위해 전역 패키지 설치 경로를 사용자 홈 디렉토리로 변경할 수 있습니다. 이렇게 하면 앞으로 전역적으로 패키지를 설치할 때마다 권한 문제 없이 진행할 수 있습니다.

  1. 전역 설치 디렉토리 변경:
    mkdir -p ~/.npm-global
    npm config set prefix '~/.npm-global'
  2. 환경 변수 설정: 다음 명령을 실행하여 새 경로를 환경 변수에 추가합니다:
     
    export PATH="$HOME/.npm-global/bin:$PATH"
  3. 환경 변수 설정을 영구적으로 적용: 이 설정을 영구적으로 유지하려면 ~/.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
       
  4. 다시 전역적으로 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)를 통해 자동화할 수 있습니다.