티스토리 뷰

반응형

블로그 프로젝트 시작이유

현대 백엔드 기술 중 가장 많이 쓰이는 기술들을 골라보라고 하면 대표적으로 Redis, Spring Boot, JPA 그리고 MySQL 등이 있습니다. 블로그 프로젝트는 이 기술들을 적절하게 사용하는 법을 제시할 예정입니다. 

또한 FE와 협업하기위한 최적의 솔루션을 제시할 예정입니다. (본인피셜이니 거를 사람들은 걸러도 됩니다.) 

 

혹시나 본인이 간단한 게시판 프로젝트를 통해서 실력을 높이고자 한다면 제 블로그를 보며 하는 것도 추천 드립니다. 

 

그러면 우선 설계 부터 해봅시다. 블로그에서 일어날 수 있는 이벤트 들을 정리해보면 다음과 같습니다. 

게시판 스터디 회원님 분들과 같이 작성한 이벤트 들입니다. 도메인 별로 이벤트를 나눴습니다. 그렇다면 이제 여기서 백엔드 영역의 기능들로 분리하여 API를 설계해야할 필요가 있습니다. 

 

https://abaft-memory-a20.notion.site/e15953d2ed014d238930179253b61d25?v=b1ad15f0c85f4e65bccce24dd4e89cc1 

 

Blog Project

A new tool for teams & individuals that blends everyday work apps into one.

abaft-memory-a20.notion.site

양이 많아서 사진으로 첨부하진 못하였고 링크로 노션 첨부 드렸습니다. 간략히 보여드리자면 다음과 같습니다.

 

API 설계가 완료되었습니다. 중간에 변경될 수는 있습니다. 우선은 이렇게 해서 사전 준비를 마쳤습니다. api 설계가 완료되었고 이제 그러면 코딩을 해야합니다. 

 

개발 환경은 다음과 같습니다. 

  • Server
    • Spring Boot 2.6.x
    • Java 11 (Open JDK)
  • DataBase
    • MySQL 8.x.x
    • JPA (Spring Data JPA)
    • QueryDSL
    • Redis (Cache)
  • Test
    • Junit5
    • h2 database
  • API Docs
    • Rest Docs
  • SCM
    • GitHub
  • Authentication
    • JWT 
    • Spring Security
  • Dev Tool
    • Data Grip
    • IntelliJ

위 환경을 권장 드리지만 아니어도 상관은 없습니다. 그리고 현재 의존성은 다음과 같이 설정하였습니다. 

plugins {
    id 'org.springframework.boot' version '2.6.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'org.asciidoctor.convert' version '1.5.8'
    id 'java'
}

group = 'me.golf'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

ext {
    set('snippetsDir', file("build/generated-snippets"))
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'

    // jwt
    implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'

    // QueryDSL
    implementation 'com.querydsl:querydsl-jpa'
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"

    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt'
    annotationProcessor group: 'com.querydsl', name: 'querydsl-apt', classifier: 'jpa'
    annotationProcessor("jakarta.persistence:jakarta.persistence-api")
    annotationProcessor("jakarta.annotation:jakarta.annotation-api")

    // mysql
    implementation 'mysql:mysql-connector-java'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    // test
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
    testImplementation 'org.springframework.security:spring-security-test'
}

tasks.named('test') {
    outputs.dir snippetsDir
    useJUnitPlatform()
}

// clean task 실행시 QClass 삭제
clean {
    delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성 위치
}


tasks.named('asciidoctor') {
    inputs.dir snippetsDir
    dependsOn test
}

 

마찬가지로 권장사항이긴 하지만 편한대로 하셔도 상관 없습니다. 또한 개발 시 더 편리한 문서 자동화 시스템을 원하는 경우 Swagger를 추천드립니다. 

또한 환경 세팅은 start.spring.io 에서 세팅 하시면 편하게 가능합니다. 

 

환경 세팅을 마쳤으니 이제 컨트롤러 부터 하향식으로 개발을 시작해보도록 하겠습니다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함