[Spring] 나만의 게시판 만들기 1 - 구조

최진민·2022년 1월 27일
0

게시판 만들기

목록 보기
1/9
post-thumbnail

들어가기에 앞서, 프로젝트 경험이 전무한 주니어 개발자들은 자신만의 게시판을 만들곤 합니다. 게시판을 만들기 전, 저는 기존에 경험한 프로젝트에서 사용했지만 제 것으로 만들지 못했던 AWS의 EC2, RDS와 Firebase의 FCM을 사용해보기 위해 게시판을 만들었습니다.
또한, 별도의 프론트의 구현이 없고 서버 사이드에서만 개발했습니다. 확인은 Swagger 또는 Postman으로 확인할 수 있고 데이터의 송-수신은 REST API를 활용했습니다.
참고용으로 봐주면 감사하겠슴미당!

의존성


  • build.gradle
    plugins {
        id 'org.springframework.boot' version '2.5.3'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
    }
    
    group = 'me.jinmin'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '11'
    
    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-validation'
        implementation 'org.springframework.boot:spring-boot-starter-web'
    
        //swagger
        implementation 'io.springfox:springfox-swagger2:2.9.2'
        implementation 'io.springfox:springfox-swagger-ui:2.9.2'
    
        //database
        runtimeOnly 'com.h2database:h2'
        runtimeOnly 'mysql:mysql-connector-java'
    
        //lombok
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
    
        //firebase sdk
        implementation 'com.google.firebase:firebase-admin:6.8.1'
        //okhttp
        implementation 'com.squareup.okhttp3:okhttp:4.2.2'
    
        //test
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    test {
        useJUnitPlatform()
    }
    • 스프링 부트 : 2.5.3
      • 스프링 부트의 버전별로 호환이 되는 기술 들의 차이가 있기 때문에 최신의 버전보다는 가장 안정화된 버전을 사용하는 것이 좋습니다. 특히, Gradle도!
    • 자바 : 11
      • 자바 8과 11의 차이점 등에 대해 알면 좋습니다.
    • 데이터 처리를 위해서 사용한 기술 : Spring data jpa
    • web을 통해 스프링 기반의 서버 아키텍처를 구현할 수 있습니다.
    • swagger : REST 웹 서비스의 여러 작업을 도와주는 오픈 소스 프레임워크
      • 구현한 REST API 의 결과를 확인하기 위해 swagger를 주입했습니다.
    • 데이터 베이스 : h2, MySQL
      • H2는 로컬 환경에서 사용했으며, MySQL은 AWS의 RDS(MySQL)에서 환경에서 사용했습니다.
    • 댓글 알림 기능을 구현하기 위해 FCM을 추가했습니다.
      • okhttp는 REST API와의 통신을 위해서 사용

패키지 구조


  • 메인 패키지인 me.jinmin.boardver2 아래에 각 도메인(여기선 엔티티)들을 설정 했으며, 각 도메인 패키지마다 필요한 패키지들을 구성했습니다.
    • 특히, 아래와 같이 api, exception, model, repository, service로 구성했습니다.
  • 또한, resources 패키지에는 필요한 설정파일들을 구성했습니다.
    • application의 자동 설정을 나눈 이유는 로컬 환경에서의 운영과 클라우드 환경에서의 운영을 따로 구현하기 위한 것입니다.
      • application.ymlspring.profiles.include를 통해 application-XXX.yml을 실행할 수 있습니다.
        spring:
          profiles:
            include: cloud # local or cloud
    • ec2, firebase는 후에 알아보자!
  • application.properties가 아닌 application.yml을 사용한 이유
    • 계층화된 표현을 통한 가독성 향상

API 설계


User

METHODURLEXPLANATION
POST/users/signup회원가입
POST/users/login로그인
GET/users/{userId}단일 회원 조회
GET/users전체 회원 조회
PUT/users/update/{userId}회원 정보 수정
DELETE/users/delete/{userId}회원 삭제

User - Board

METHODURLEXPLANATION
POST/boards/{userId}/write유저 게시물 등록
GET/boards전체 게시물 조회
GET/boards/{boardId}단일 게시물 조회
GET/boards/category/{category}카테고리별 게시물 조회
PUT/boards/update/{userId}/{boardId}게시물 수정
DELETE/boards/delete/{userId}/{boardId}게시물 삭제
GET/boards/user/{userId}유저가 쓴 게시물 전체 조회

User - Comment - Board

METHODURLEXPLANATION
POST/comments/write/{userId}/{boardId}댓글 작성
GET/comments/{boardId}게시물 전체 댓글 조회
PUT/comments/update/{userId}/{boardId}댓글 수정
DELETE/comments/delete/{userId}/{boardId}댓글 삭제

git 주소 : https://github.com/JinMinChoi/Board_ver2

profile
열심히 해보자9999

0개의 댓글