본문 바로가기
Study/JAVA

[Spring] 게시판 만들기 1

by 까다로운오리 2022. 12. 3.

https://www.youtube.com/@hancoding

 

한코딩

안녕하세요. 한코딩입니다. 학습한 코딩 지식을 공유하여 구독자님들과 함께 좋은 개발자로 발전하고 싶습니다. 영상이 도움이 되셨다면 구독과 좋아요 부탁드리고 영상의 부족한 부분이나 피

www.youtube.com

 

면접 가기 전에 뭐라도 만들고 싶어서 

유튜브 한코딩님 강의를 들으며 Spring으로 간단한 게시판 만들기 실습을 진행하고 있습니다.'

 

 

먼저 다음과 같이 start.spring.io 에서 스프링 프로젝트를 생성하였습니다. 하나하나 기능들을 왜 쓰는지 살펴보면

 

1. Spring Web

:  자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크

 

2. Spring Data JPA

: JPA를 편히 쓰기 위해 만들어 놓은 모듈이다. 그럼 JPA가 무엇인고 하니 Java Persistence API 의 약자로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스라고 한다. 즉 자바 ORM을 위한 표준 기술로  Hibernate, Spring, EcliplseLink등과 같은 구현체가 있다.

 

3. MariaDB

RDBMS로 Mysql과 동일한 소스코드 기반으로 한다. Mysql개발자 분들이 만들었다고 한다.

MariaDB가 Mysql보다 좋은 점이 무엇인지 궁금했기에 찾아봤더니.. 

 

  • 동일 하드웨어 사양으로 MySQL보다 향상된 성능
  • 좀 더 활성화된 커뮤니티
  • 다양한 기능
  • 다양한 스토리지 엔진
  • 빠르고 투명한 보안패치 릴리즈

라고 한다.

 

 

4. Thymeleaf

view template로 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해준다. django에서는 

template language로 동적 화면을 구성하는데 spring은 타임리프로 사용한다.

 

5. Lombok

Java라이브러리로 반복되는 getter, setter, toString등의 메서드 작성 코드를 줄여주는 라이브러리다. 

https://mangkyu.tistory.com/78

 

 


DB랑 연동하기 위해 MariaDB를 설지했는데 이런!  MySQL이 이미 3306포트를 사용하고 있었다.

다음과 같은 명령어로 포트 번호의 PIN을 찾았다.

삭제를 하려는데.. 액세스 거부...?!?!!?  관리자모드로 열여줘야 삭제할 수 있다.

다시 MariaDB 설치를 진행하니 정상적으로 설치가 완료되었다.

 

 

 


 

MariaDB 설치 후 MySql 워크브랜치를 열어 board라는 스키마를 생성한 후 board라는 테이블을 만들어 줬다.

 

이후 Spring 프로젝트를 열어 DB설정을 하였다.

 

 

 


 

spring프로젝트를 처음 실행 시 다음과 같은 화면이 뜨면 성공적으로 셋팅이 된거다. 나는 DB설정 부분에서 계속 오타가 나서 한 20분을 .. 날려먹었다 ....

 

 

Hello World를 출력할까요?

Django의 View부분이 Spring에선 Controller이다. Django는 MVT패턴 Spring은 MVC 패턴~

또 하나 신기했던게 Django에서는 url을 관리하는 부분이 따로 있지만, Spring은 @GetMapping으로 url을 관리한다. 찾아보니까 @RequestMappping도 있다.

Dajgno의 include같은 기능은..뭐지.... Spring에서는 페이지를 간단하게 설정하는 방법이 없는것인가..!!

 

어쨋든 Hello World 출력! 완료!


 

 

패키지를 보면 controller, entity, repository, service로 나눠진다. 강의 보면서 띠용..? 하면서 무작정 따라 쳤지만.. 알아야지!!!! 그냥 따라치는것은 손가락 운동밖에 더 되겠느냐~~

 

 

 

1. Controller

클라이언트의 요청이 가장 먼저 수행되는 곳으로, API를 모아놓은 클래스라고 생각하면 된다. 즉, 요청 주소를 Mapping시키고 받은 정보들을 Service에 전달해주는 역할을 한다.

 

package com.board_project.board.controller;

import com.board_project.board.entity.Board;
import com.board_project.board.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {
    @Autowired
    private BoardService boardService;

    @GetMapping("/board/write")
    public String boardWriteForm(){

        return "boardwrite";
    }

    @PostMapping("/board/writepro")
    public  String boardWritePro(Board board) {

        boardService.write(board);
//        System.out.println(board.getTitle());
        return "";
    }
}

 

 

2. Service

Controller에 요청된 것을 처리하기 위한 부분, 알맞게 정보(데이터)를 가공하는 부분이다. 

package com.board_project.board.service;


import com.board_project.board.entity.Board;
import com.board_project.board.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BoardService {

    @Autowired
    private BoardRepository boardRepository ;
    public void write(Board board) {

        boardRepository.save(board);
    }
}

 

 

3. Repository

Entity에 의해 생성된 DB에 접근하는 메서드(ex findAll()) 들을 사용하기 위한 인터페이스라고 하는데.. 좀 더 쉽게 풀어쓰자면, DB에 접근하는 모든 코드가 모여있다고 생각하면 된다.

 

해서 비즈니스 로직과 관련된 부분에 문제가 발생하면 Service를 DB접근과 관련된 문제는 Repository를 확인하면 된다.

package com.board_project.board.repository;

import com.board_project.board.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BoardRepository extends JpaRepository<Board, Integer> {
}

 

 

4. Entity

DB에 쓰일 필드와 

package com.board_project.board.entity;


import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;

@Entity
@Data
public class Board {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String title;
    private String content;

}

 

 

각 코드는.. 쓰다 만 일부이고 전체 코드와 자세한 분석은 다음 게시물에 하도록 하것다!

 

현재까지 구현한 것은 CRUD 인데 우선 boardwrite페이지를 만들어서 DB에 저장이 되는지 확인했다.

 

 

이후 임의로 데이터를 120개 정도 생성을 하고 boardlist를 만들어 출력이 되는지 확인했다.

 

여기까진 C하고 R~ 아 상세 페이지 기능도 만들었다.

이후 UD 기능까지 만들었음..!

자세한 코드는 다음게시물에 올리도록 하겠습니다~