sbb 스프링부트 기술서

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

Study

목록 보기
32/53
post-thumbnail
configtitle:💼OhtjSbb기술서config title: 💼Ohtj Sbb 기술서

👌개요

소개

  • 점프 투 스프링부트 서적으로 공부하며 만든 게시판 페이지 입니다.

👉사이트 배포 주소

😋환경

형상관리

👉개발도구

- 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

👉밑줄 예시


🤘ERD 구성

Erd

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

메인화면

Erd

 public String list(Model model, @RequestParam(value="page", defaultValue="0") int page,@RequestParam(value = "kw", defaultValue = "") String kw) {
        Page<Question> paging = this.questionService.getList(page,kw);
        model.addAttribute("paging", paging);
        return "question_list";
    }

👉게시글 상세페이지

Erd

@PreAuthorize("isAuthenticated()")
    @GetMapping("/modify/{id}")
    public String questionModify(QuestionForm questionForm, @PathVariable("id") Integer id, Principal principal) {
        Question question = this.questionService.getQuestion(id);
        if(!question.getAuthor().getUsername().equals(principal.getName())) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다.");
        }
        questionForm.setSubject(question.getSubject());
        questionForm.setContent(question.getContent());
        return "question_form";
    }

    @PreAuthorize("isAuthenticated()")
    @PostMapping("/modify/{id}")
    public String questionModify(@Valid QuestionForm questionForm, BindingResult bindingResult,
                                 Principal principal, @PathVariable("id") Integer id) {
        if (bindingResult.hasErrors()) {
            return "question_form";
        }
        Question question = this.questionService.getQuestion(id);
        if (!question.getAuthor().getUsername().equals(principal.getName())) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "수정권한이 없습니다.");
        }
        this.questionService.modify(question, questionForm.getSubject(), questionForm.getContent());
        return String.format("redirect:/question/detail/%s", id);
    }

    @PreAuthorize("isAuthenticated()")
    @GetMapping("/delete/{id}")
    public String questionDelete(Principal principal, @PathVariable("id") Integer id) {
        Question question = this.questionService.getQuestion(id);
        if (!question.getAuthor().getUsername().equals(principal.getName())) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "삭제권한이 없습니다.");
        }
        this.questionService.delete(question);
        return "redirect:/";
    }

💕배포

👉배포환경

    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 보안 권한설정 / 깃헙토큰 /깃헙플로우

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

깃헙에서 러너 생성

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

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

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

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개의 댓글