{"id":22847733,"url":"https://github.com/evans-kim/gnu-migration","last_synced_at":"2025-04-30T03:49:42.645Z","repository":{"id":34073508,"uuid":"168658417","full_name":"evans-kim/gnu-migration","owner":"evans-kim","description":"그누보드4 기반 웹사이트를 라라벨로 마이그레이션 하는데 필요한 도구 개발 프로젝트","archived":false,"fork":false,"pushed_at":"2023-02-28T09:03:47.000Z","size":778,"stargazers_count":6,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-30T03:49:36.861Z","etag":null,"topics":["gnuboard","laravel","migration-tool"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evans-kim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-01T07:21:32.000Z","updated_at":"2023-08-25T01:49:45.000Z","dependencies_parsed_at":"2023-01-15T04:25:46.014Z","dependency_job_id":null,"html_url":"https://github.com/evans-kim/gnu-migration","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evans-kim%2Fgnu-migration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evans-kim%2Fgnu-migration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evans-kim%2Fgnu-migration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evans-kim%2Fgnu-migration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evans-kim","download_url":"https://codeload.github.com/evans-kim/gnu-migration/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251638760,"owners_count":21619663,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gnuboard","laravel","migration-tool"],"created_at":"2024-12-13T04:09:19.726Z","updated_at":"2025-04-30T03:49:42.628Z","avatar_url":"https://github.com/evans-kim.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gnu-migration\n그누보드4 기반 웹사이트를 라라벨로 마이그레이션 하는데 필요한 도구 개발 프로젝트\n\n그누보드4 기반 사이트를 아래와 같이 리펙토링 하는 프로젝트 입니다.\n\n    데이터베이스 - 그누보드4\n    서버 - 라라벨 5.7 RESTful API\n    프론트 - Vue.js\n\nPHP 5.6 이 더 이상 지원되지 않는 이슈를 포함하여 모던 PHP 확산을 위해\n기존 레거시에서 신규 모던 PHP 로 가는 작은 디딤돌이 되면 좋겠습니다.\n\n한 때, 너무나 편하게 접근할 수 있었기에 저 같은 컴맹도 스크립팅에 도전하게 해 준 그누보드에 진심 감사를 표합니다.\n그러나 이제는 애물단지가 된...현실...\n\n앞으로는 모던PHP에게 길을 내어 주십시오!\n\ngnu4 R.I.P\n\n\n#### TODO\n- ~~기존 사용자 로그인~~\n- ~~비밀번호 찾기~~ \n- ~~사용자 가입~~\n- ~~게시판~~\n    - ~~게시판 CRUD~~\n    - ~~게시판 스킨설정 (Vue Dynamic Components)~~\n    - ~~게시글 CRUD~~\n    - ~~답글 CRUD~~\n    - ~~코멘트 CRUD~~\n    - 첨부파일 CRUD\n    - 접근권한설정\n- 관리자 페이지\n    - 사용자관리\n    - 게시판관리\n    - 파일관리\n    - ...\n- ...\n\n그누보드 특성상 여러가지로 커스터마이징 된 사례가 많아 통합하기 어렵겠지만\n필수적이다고 생각되는 기능이 있다면 리퀘스트나 이슈 올리시면 고민해 보겠습니다.\n\n## 사용방법\n\n#### 설치하기\n라라벨을 설치한 폴더에서 패키지를 설치합니다.\n라라벨 5.5 이상은 자동으로 서비스 프로바이더를 등록됩니다.\n이후 필요한 기능을 아래에서 찾아 적용하시면 됩니다.\n\n    composer require evanskim/gnu-migration\n\n\n그누보드4 데이터베이스를 사용하는데 가장 큰 문제는 date 타입 컬럼에 디폴트로 '0000-00-00 00:00:00' 설정된 점 입니다.\n최근 (mysql 5.7 이상) 에서는 이를 허용하지 않으므로 디폴트를 null 로 변경해 주어야 합니다. 아니면 \n이를 위해서는 마이그레이션을 실행하기 전에 config/database.php 의 strict 값을 false 로 변경하고 실행해야 에러가 무시되고\ndate 타입의 디폴트 값이 null 로 변경됩니다. \n(MYSQL에서 해당 옵션을 변경하면 바꾸지 않아도 됩니다.)\n\n기존의 컬럼을 변경해야 하기 위해선 아래의 패키지가 설치되어 있어야 합니다.\n\n    composer require doctrine/dbal\n    \nconfig/database.php\n\n    'mysql' =\u003e [\n        'driver' =\u003e 'mysql',\n        'host' =\u003e env('DB_HOST', '127.0.0.1'),\n        'port' =\u003e env('DB_PORT', '3306'),\n        'database' =\u003e env('DB_DATABASE', 'forge'),\n        'username' =\u003e env('DB_USERNAME', 'forge'),\n        'password' =\u003e env('DB_PASSWORD', ''),\n        'unix_socket' =\u003e env('DB_SOCKET', ''),\n        'charset' =\u003e 'utf8mb4', // 경우에 따라 utf8 으로 설정\n        'collation' =\u003e 'utf8mb4_unicode_ci', // 경우에 따라 utf8_unicode_ci 으로 설정\n        'prefix' =\u003e '',\n        'prefix_indexes' =\u003e true,\n        'strict' =\u003e false, // true 값을 false 로 변경!\n        'engine' =\u003e null,\n    ],\n\nsession 드라이버를 사용할 때에는 반드시 g4_member 테이블에 mb_no (auto increment primary key) 필드가 있어야 합니다.\n만약에 해당 필드가 없다면 마이그레이션 파일을 추가하고 마이그레이션 하세요.\n자동로그인 기능을 위해서도 아래의 마이그레이션을 추가하고 실행하세요.    \n\n    php artisan vendor:publish --provider=\"EvansKim\\GnuMigration\\GnuMigrationServiceProvider\"\n    php artisan migrate\n\n#### 1.사용자 인증\n기존의 g4_member 테이블에 있는 사용자 정보를 그대로 이용하여 라라벨에서 로그인 할 수 있습니다.\n아래의 파일과 같이 해당 파일을 수정해 주세요.\n\nLoginController.php\n    \n    use EvansKim\\GnuMigration\\AuthenticatesGnuMembers;\n    \n    class LoginController extends Controller\n    {\n         use AuthenticatesGnuMembers; // 기존의 트레이스를 교체합니다.    \n\n\nconfig/auth.php\n인증 드라이버는 file, session 만 지원됩니다. \n\n    'web' =\u003e [\n        'driver' =\u003e 'session',\n        'provider' =\u003e 'members', // 원래값은 users \n    ],\n    'providers' =\u003e [\n        // 프로바이더에 새로 추가 또는 \n        'members' =\u003e [\n            'driver' =\u003e 'gnu'\n        ],\n    ]\n\n폼필드 값을 보낼 라우트는 기존의 값과 동일합니다. 대부분의 정적 라우트 값을 그대로 차용하는 것을 원칙으로 합니다.\n\nAPI\n\n    curl -X POST \"http://mydomain/bbs/login.php\" \n        -d \"mb_id\"=\"test\" -d \"mb_password\"=\"test\" -d \"remember\"=\"false\" //or true\n\n#### 2. 비밀번호 찾기\n라라벨의 비밀번호 찾기 기능도 동일하게 사용할 수 있습니다. 아래의 설정파일에서 provider를 변경해 주세요.\n\nconfig/auth.php\n\n    'passwords' =\u003e [\n        'users' =\u003e [\n            'provider' =\u003e 'members', // users -\u003e members 로 바꾸어 주세요. \n            'table' =\u003e 'password_resets',\n            'expire' =\u003e 60,\n        ],\n    ],\n    \n아래의 컨트롤러 트레이스를 변경해 주세요.\napp\\Http\\Controllers\\Auth\\ResetPasswordController.php\n    \n    //use Illuminate\\Foundation\\Auth\\ResetsPasswords;\n    use EvansKim\\GnuMigration\\GnuResetsPasswords as ResetsPasswords;\n    \n    \nAPI\n\n    curl -X POST \"http://mydomain/bbs/password_lost2.php\"     -d \"email\"=\"test@test.com\"\n    \n#### 3. 회원가입\n라라벨의 인증 기능을 그대로 차용하여 확장하였기 때문에 라라벨의 이벤트와 리스너 , Telescope 에서도 라라벨 기본 인증과\n동일하게 확장하여 쓸 수 있습니다.\n \nAPI\n\n    curl -X POST \"http://gnu-migration.com/bbs/register_form_update.php\"     \\\n        -d \"mb_id\"=\"test\" \\\n        -d \"mb_password\"=\"Test1234\" \\\n        -d \"mb_name\"=\"홍길동\" \\\n        -d \"mb_nick\"=\"테스터\" \\\n        -d \"mb_email\"=\"tester@test.com\" \n\n#### 4. 게시판 목록\n\n게시판은 모델과 프론트엔드가 분리된 형태로 구조화 했습니다. 하나의 게시판은 하나의 모델을 가지며 설정에 따라 다른 스킨을 입힐 수 있습니다.\n프론트엔드는 모두 vue.js 로 처리되며 api 호출을 통해 ajax 로 데이터 수발신이 이루어 집니다.\n보통 게시판 스킨에는 프론트와 컨트롤 모델이 모두 혼재해 있으므로 이를 적절하게 구분지어야 합니다.\n\n    모델 - app/Boards \n    뷰 - Vue \n        ( vue-router 이용하여 List, Show, Edit, Create, Reply 페이지 라우팅)\n    컨트롤러 - EvansKim\\GnuMigration\\Controller\\Board\\GnuBoardController\n        (index,store,update,destroy) \n\n이번에 선택한 게시판 스킨의 주요 기술은 Vue Dynamic Component 입니다. 비동기 방식으로 Vue component 를 불러오는 방식인데요.\n게시판에 설정된 스킨명을 따라 게시판의 전체 테마 그리고 각 기능별 주요 페이지를 별도로 커스터마이징 할 수 있습니다.\n아래와 같이 Theme 컴포넌트 안에 슬롯으로 BoardList,CreateForm,UpdateForm,ReplyForm,ShowPage 등이 들어갈 수 있습니다.\n    \n    \u003cboard-dynamic\u003e\n        \u003ctheme\u003e\n            \u003cboard-list\u003e\u003c/board-list\u003e\n        \u003c/theme\u003e\n    \u003c/board-dynamic\u003e \n\n###### 4.1. 게시판 모델\n\n그누보드는 게시판 기능을 확장하여 다양한 커스터마이즈를 하는 구조가 많아 게시판 하나당 엘로퀀트 모델 클래스를 생성하고\n이 클래스에 확장된 기능을 구현하게 됩니다. 아래의 명령을 통해 스캐폴딩을 생성하세요. app/Boards 디렉토리 아래에 생성됩니다.\n\n    php artisan make:g4board test //게시판명\n\n###### 4.2 게시판 프론트 에셋 컴파일링\n\n프로젝트 루트에 있는 webpack.mix.js 파일을 열어 아래의 내용을 추가합니다.\n    \n    mix .js('resources/vendor/gnu/js/gnu.js', 'public/js')\n        .webpackConfig({\n            output: {           \n                chunkFilename: 'js/lazy/[name].js'\n            }\n        });\n        // 라라벨에 기본적으로 세팅 되어 있는 값을 바꾸지 마세요.\n        // bootstrap.js 는 반드시 필요합니다. (axios 및 crsf 설정 필요) \n\n컴파일링을 위해 필요한 노드 패키지를 설치합니다.\n\n    npm install vue-router @babel/plugin-syntax-dynamic-import\n\npublic/js 으로 해당 스크립트를 컴파일링 합니다.\n\n    npm run dev\n    \n기존의 라우트를 그대로 활용하기 때문에 아래와 같이 접근할 수 있습니다.\n\nhttp://gnu-migration.com/bbs/board.php?bo_table=test\n\n![Image of Example](https://evans-kim.github.io/gnu-migration/shots/shot01.png)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevans-kim%2Fgnu-migration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevans-kim%2Fgnu-migration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevans-kim%2Fgnu-migration/lists"}