[개발환경 설정] - 의존성 주입, 프론트앤드 프로젝트 생성, 백앤드와 프론트앤드 통신

2025. 11. 18. 17:47프로젝트/게시판 프로젝트 - JSP, SERVLET, ORACLE

1. 의존성 주입

 
 
-- 추가적인 유용한 의존성 [밑에 문장에 포함]
 

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.5.7'
    id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.cbPr'
version = '0.0.1-SNAPSHOT'
description = 'TestCRUD'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {

    /* ===== Spring Boot Starters ===== */
    // REST API 웹 애플리케이션 개발
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // JPA를 사용한 데이터베이스 연동
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    // 입력값 검증 (@Valid, @NotNull 등)
    implementation 'org.springframework.boot:spring-boot-starter-validation'

    // Spring Security (인증/인가)
    implementation 'org.springframework.boot:spring-boot-starter-security'

    // Actuator (헬스체크, 메트릭 모니터링)
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

    // AOP (관점 지향 프로그래밍 - 로깅, 트랜잭션 등)
    implementation 'org.springframework.boot:spring-boot-starter-aop'

    // Cache 추상화 (선택사항)
    implementation 'org.springframework.boot:spring-boot-starter-cache'


    /* ===== Database ===== */
    // MariaDB JDBC 드라이버
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'


    /* ===== QueryDSL ===== */
    // QueryDSL JPA 지원 (타입 안전 쿼리 작성)
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"


    /* ===== Lombok ===== */
    // 보일러플레이트 코드 자동 생성 (@Getter, @Setter, @Builder 등)
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'


    /* ===== API 문서화 (Swagger) ===== */
    // SpringDoc OpenAPI 3.0 (Swagger UI)
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'


    /* ===== JWT 인증 (선택사항) ===== */
    // JWT 토큰 생성 및 검증
    implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
    runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.3'
    runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.3'


    /* ===== JSON 처리 ===== */
    // Jackson Java 8 날짜/시간 타입 지원
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
    // Jackson Java 8 Optional 지원
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'


    /* ===== 유틸리티 라이브러리 ===== */
    // Apache Commons Lang (문자열, 배열 유틸리티)
    implementation 'org.apache.commons:commons-lang3:3.14.0'
    // Apache Commons Collections (컬렉션 유틸리티)
    implementation 'org.apache.commons:commons-collections4:4.4'
    // Google Guava (강력한 유틸리티 라이브러리)
    implementation 'com.google.guava:guava:32.1.3-jre'


    /* ===== MapStruct (DTO 변환) ===== */
    // 객체 간 매핑 자동화
    implementation 'org.mapstruct:mapstruct:1.5.5.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
    // Lombok과 MapStruct 함께 사용
    annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'


    /* ===== 캐싱 구현체 (선택사항) ===== */
    // Caffeine 고성능 인메모리 캐시
    implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'


    /* ===== 개발 도구 ===== */
    // 개발 시 자동 재시작, LiveReload 등
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    // application.yml 자동완성 지원
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'


    /* ===== 테스트 ===== */
    // Spring Boot 테스트 지원 (JUnit 5, Mockito 등)
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // Spring Security 테스트 지원
    testImplementation 'org.springframework.security:spring-security-test'
    // JUnit Platform
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
    useJUnitPlatform()
}

/* ===== QueryDSL 설정 ===== */
// QueryDSL Q클래스 생성 경로 설정
def querydslDir = "$buildDir/generated/querydsl"

sourceSets {
    main.java.srcDirs += [querydslDir]
}

tasks.withType(JavaCompile) {
    options.generatedSourceOutputDirectory = file(querydslDir)
}

// clean 시 QueryDSL 생성 파일도 삭제
clean {
    delete file(querydslDir)
}