인프런 커뮤니티 질문&답변

양지웅님의 프로필 이미지
양지웅

작성한 질문수

실전! 스프링 데이터 JPA

스프링 부트 버전에 대한 질문입니다.

작성

·

715

1

학습을 하면서 개인 프로젝트를 진행하려 프로젝트를 생성하였습니다.

다음 코드는 프로젝트 설정입니다.

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

group = 'project'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

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

	// Querydsl 추가
	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"

//	// 쿼리 파라미터 로그
//	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'


}

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

clean {
	delete file('src/main/generated')
}

 

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/healthcommunity
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        # show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
# org.hibernate.type: trace

다음은 애플리케이션 코드입니다.

 

package project.healthcommunity;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class HealthCommunityApplication {

	public static void main(String[] args) {
		SpringApplication.run(HealthCommunityApplication.class, args);
	}
}

 

package project.healthcommunity.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

 

위와같이 스프링 빈에 정상 등록되는지 테스트 해보았습니다.

8080포트로 접속하면 정상적으로 오류 페이지가 떴습니다.

 

하지만 8080/hello로 접속해도 404오류가 발생하였습니다.

 

한참을 구글링 했지만 해답을 찾지 못했습니다.

 

그러다

스프링 부트의 버전을 3.0.3에서 3.00으로 바꾸어 보았더니 스프링 빈에 정상적으로 등록되어 조회되는것을 볼수 있었습니다.

 

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

group = 'project'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

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

	// Querydsl 추가
	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"

//	// 쿼리 파라미터 로그
//	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'


}

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

clean {
	delete file('src/main/generated')
}

 

 

단순히 build.gradle에서 스프링 부트의 버전을 바꾸어주었는데 정상 작동하였습니다.

 

3.03에서는 컴포넌트 스캔이 정상적으로 작동하려면 어떻게 해야하는지 궁금합니다!

 

3.03에서는 설정이 변경된 것인가요?

 

 

 

 

 

 

 

 

 

 

 

답변 1

0

안녕하세요, 양지웅 님. 공식 서포터즈 y2gcoder 입니다.

해당 현상을 저도 재현해보고자 최대한 비슷한 라이브러리와 설정값으로 만들어보고자 했습니다.

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

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

	//querydsl
//	implementation "com.querydsl:querydsl-core"
//	implementation "com.querydsl:querydsl-jpa"
//	annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
//	annotationProcessor "jakarta.persistence:jakarta.persistence-api"
//	annotationProcessor "jakarta.annotation:jakarta.annotation-api"

	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"

	//쿼리 파라미터 로그
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
}

tasks.named('test') {
	useJUnitPlatform()
}
spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/healthcommunity
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
logging:
  level:
    org.hibernate.SQL: debug
package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

이렇게 하고 h2 db를 실행한 상태에서 호출해본 결과

image

잘 작동하는 것을 확인할 수 있습니다.

 

제 생각에는 환경 설정 과정에서 뭔가가 꼬인 것 같습니다.
다시 설정해보시는 것은 어떠실까 생각합니다. ㅜㅜ

감사합니다.

양지웅님의 프로필 이미지
양지웅

작성한 질문수

질문하기