gildong 프로젝트 기술서

Glen(OH TaekJoo)·2023년 8월 2일
0

Study

목록 보기
31/53
post-thumbnail
configtitle:💼Gildong(1인프로젝트)기술서config title: 💼Gildong(1인 프로젝트 ) 기술서

👌개요

소개

  • '홍길동' 은 메이플스토리 도적직업군 전용 인벤 게시판 입니다.

유튜브 발표영상

youtubeFCF4HXQEbsyoutube FCF4HXQEb_s

사이트 배포 주소

😋환경

형상관리

개발도구

- SpringBoot
- JAVA
- MariaDB
- GitHub-Action CI/CD
- HTML
- CSS
- JS
- Bootstrap
- CentOS
- jQuery
- NAVER Cloud

개발환경

- IntelliJ IDEA
- DBeaver
- Termius

😸요구사항과 기능구현 여부

목록요구사항구현여부
RQ1회원은 자유게시판 게시글 등록이 가능하다O
RQ2회원은 본인이 작성한 자유게시판 게시글 수정이 가능하다O
RQ3회원은 본인이 작성한 자유게시판 게시글 삭제가 가능하다O
RQ4회원은 자유게시판 게시글에 댓글 등록이 가능하다O
RQ5회원은 본인이 작성한 자유게시판 게시글에 댓글 수정이 가능하다O
RQ6회원은 본인이 작성한 자유게시판 게시글에 댓글 삭제가 가능하다O
RQ7페이지 상단에 네비게이션 바를 구현하고 메뉴에는 자유게시판, 공지사항, 사진첩 이 있고 오른쪽에는 로그인관련 버튼이 있다O
RQ8회원가입이 가능하다O
RQ9가입한 아이디로 로그인이 가능하다O
RQ10로그인 상태에서 로그아웃이 가능하다O
RQ11게시글을 페이징처리 한다.O
RQ12자유게시판 목록 상단의 버튼으로 인해 해당 장르의 게시글만 필터링하여 확인이 가능하다O
RQ13로그인시 네비게이션바에 로그인 버튼이 사라지고 로그아웃 버튼이 생긴다O
RQ14게시글 목록의 게시글제목 옆에 댓글수가 나타난다O
RQ15게시글 목록에 해당 게시글의 조회수가 표시된다O
RQ15자유게시판의 게시글을 접속 할 때마다 조회수가 올라간다O
RQ16회원은 사진첩 게시글 등록이 가능하다O
RQ17회원은 본인이 작성한 사진첩 게시글 수정이 가능하다O
RQ18회원은 본인이 작성한 사진첩 게시글 삭제가 가능하다O
RQ19회원은 사진첩 게시글에 댓글 등록이 가능하다O
RQ20회원은 본인이 작성한 사진첩 게시글에 댓글 수정이 가능하다O
RQ21회원은 본인이 작성한 사진첩 게시글에 댓글 삭제가 가능하다O
RQ22공지사항의 게시글을 작성할 수 있다O
RQ23공지사항의 게시글을 수정할 수 있다O
RQ24공지사항의 게시글을 삭제할 수 있다O
RQ25메인페이지에는 설정한 배너가 슬라이드쇼로 나타난다O
RQ26메인페이지에는 자유게시판의 게시글과 공지사항의 게시글이 최신순으로 5개까지 리스트로 나타난다O
RQ27메인페이지에는 해당 이름의 페이지로 이동할 수 있는 버튼이 존재한다O

밑줄 예시


🤘ERD 구성

초기 ERD

최종 ERD

초기 설계와 다른점

  • 초기기획과 다른점: 공지사항의 댓글 테이블이 없어진것. / 파일업로드 테이블이 생긴 것.

👩🏽‍🦱구현화면 및 주요 소스코드

메인화면

codepenhttps://codepen.io/ohtj6644/pen/qBQjbYZcodepen https://codepen.io/ohtj6644/pen/qBQjbYZ

게시글 리스트

@GetMapping(value = "/freenotice/sort/{key}")
    public String sortlist(Model model , @PathVariable("key") String sortkey ,@RequestParam(value = "page",defaultValue = "0")int page ,
                           @RequestParam(value = "kw",defaultValue = "")String kw ){
        String key;
        if(sortkey.equals("free")){
            key="자유";
            Page<FreeNotice> paging = this.freeNoticeService.getList(page,kw,key);
            int FreeNoticeCount = paging.getNumberOfElements();

            model.addAttribute("paging",paging);
            model.addAttribute("FreeNoticeCount",FreeNoticeCount);
        } else if (sortkey.equals("vote")) {
            key="추천";
            Page<FreeNotice> paging = this.freeNoticeService.getList(page,kw,key);
            int FreeNoticeCount = paging.getNumberOfElements();

            model.addAttribute("paging",paging);
            model.addAttribute("FreeNoticeCount",FreeNoticeCount);
        } else if (sortkey.equals("party")) {
            key="파티원구함";
            Page<FreeNotice> paging = this.freeNoticeService.getList(page,kw,key);
            int FreeNoticeCount = paging.getNumberOfElements();

            model.addAttribute("paging",paging);
            model.addAttribute("FreeNoticeCount",FreeNoticeCount);
        } else if (sortkey.equals("question")) {
            key="질문";
            Page<FreeNotice> paging = this.freeNoticeService.getList(page,kw,key);
            int FreeNoticeCount = paging.getNumberOfElements();

            model.addAttribute("paging",paging);
            model.addAttribute("FreeNoticeCount",FreeNoticeCount);
        }


        return "FreeNotice_list";
    }

💕배포

배포환경

    1. 가비아
      - 도메인 구매 , 설정
    1. 네이버클라우드
      - 서버 생성 및 고정ip 할당
    1. Linux
      - Termius
    1. GitHub-Action CI/CD

깃헙액션 배포

네이버 클라우드에서 생성한 서버에 프로젝트 ci/cd 환경으로 배포하기

서버 ssh 터미널 접속

터미어스(or moba)를 이용해 해당 서버의 터미널로 접속을 한다.

배포도구 다운로드

epel-release / docker / mariaDB

// yum 업데이트

yum install epel-release -y
yum update -y

//도커 설치

  • Set up the repository
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  • Install Docker Engine
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 도커 시작
systemctl start docker
  • 도커 활성화
systemctl enable docker

// 컨테이너 실행 (mariaDB)

docker run \
  --name mariadb_1 \
  -d \
  --restart unless-stopped \
  -e MARIADB_ROOT_PASSWORD=root123414 \
  -e TZ=Asia/Seoul \
  -p 3306:3306 \
  -v /docker_projects/mariadb_1/conf.d:/etc/mysql/conf.d \
  -v /docker_projects/mariadb_1/mysql:/var/lib/mysql \
  -v /docker_projects/mariadb_1/run/mysqld:/run/mysqld/ \
  mariadb:latest

mariaDB 보안 권한설정 / 깃헙토큰 /깃헙플로우

보안상 해당 설정은 비공개로 포스팅.

https://velog.io/@ohtj6644/%EA%B9%83%ED%97%88%EB%B8%8C%EC%95%A1%EC%85%98-%EB%B3%B4%EC%95%88%EC%84%A4%EC%A0%95-%EB%B3%B4%EC%95%88%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%84%A4%EC%A0%95%ED%8C%8C%EC%9D%BC

깃헙에서 러너 생성

깃헙 레포지토리 > 셋팅 > 액션 > 러너 > 리눅스

나오는 명령문을 실행하고 오류가 날경우 아래 유틸 다운로드

깃헙액션 오류 해결을 위한 유틸 다운로드

shasum 설치

-shasum은 SHA 메시지 다이제스트, 암호화 체크섬 또는 암호화 해시코드를 계산하는 데 사용됩니다.
#Reference : https://linuxhint.com/shasum-linux/

yum install perl-Digest-SHA -y

환경변수 설정

-GitHub action 은 기본적으로 루트 권한으로 실행되지 않도록 설계
-환경 변수 설정을 통해 루트 권한으로 실행할 수 있도록 허용해주면 원하는 작업을 성공할

export RUNNER_ALLOW_RUNASROOT="1"

Dotnet 6.0 설치

-닷넷 종속성 누락 설치
-아래의 명령어로 누락된 종속성을 설치할 수 있다.

./bin/installdependencies.sh

러너 실행

Enter the name of the runner group to add this runner to : #엔터
Enter the name of runner : #엔터
Enter any additional label : work-1 #워크플로우에 작성했던 라벨명
Enter name of work folder : #엔터

-완료 후 ./run.sh를 백그라운드로 실행

nohup ./run.sh &

실행 완료 / 오류 해결로그

완료 시 아래처럼 main branch에 git push를 할경우 자동으로 반영되어 재배포 된다.

도커이미지 빌드와 푸시 시 403오류: 권한설정 문제로 토큰설정이 잘못되어 발생하였다.
워크플로우의 yml파일 안에 토큰파일명이 잘못되어 해당내용 수정 후 해결

도커배포 시 무한대기 : 설정한 워크플로우 이름과 yml의 워크플로우 이름이 상이해 발생하였다. yml 워크플로우 이름 변경 후 해결

profile
병아리 개발자 의 우당탕탕 성장기

0개의 댓글