[트러블슈팅] 클라우드 아키텍처 설계&배포 과제

wonyeol shin·2026년 8월 6일

트러블슈팅

목록 보기
3/4

webMvc 실패 (JPA metamodel must not be empty)

wyshin@wyshinui-noteubug profile % ./gradlew clean build
Starting a Gradle Daemon, 1 busy Daemon could not be reused, use --status for details
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

> Task :test

ProfileControllerTest > 프로필 생성 API 성공 FAILED
    java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:195
        Caused by: org.springframework.beans.factory.BeanCreationException at BeanDefinitionValueResolver.java:377
            Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1815
                Caused by: java.lang.IllegalArgumentException at Assert.java:399

ProfileControllerTest > 프로필 단건 조회 API 성공 FAILED
    java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:157

2026-07-30T15:54:51.983+09:00  INFO 77317 --- [profile] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2026-07-30T15:54:51.985+09:00  INFO 77317 --- [profile] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2026-07-30T15:54:52.004+09:00  INFO 77317 --- [profile] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

빌드 도중 테스트 실패


기존에 잘 되던 테스트였음

//@EnableJpaAuditing 를 주석처리 하니깐 테스트가 잘 됨

이유는 WebMvcTest가 Controller나 filter등만 가볍게 띄우고
EntityManager 같은 DB 관련된 건 로드하지 않음

그런데, WebMvcTest가 로드가 되면
@SpringBootApplication를 읽게 되는데
@EnableJpaAuditing가 붙어 있으면
JPA Bean 을 가져오려고? 노력을 한다고 한다.

근데 @WebMvcTest에는 가짜 객체만 있으니
JPA metamodel must not be empty 같은 에러가 발생한다고 한다.

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}

@EnableJpaAuditing를 위한 @Config 클래스 생성하여 해결


실행 실패

ernate.exception.JDBCConnectionException: Unable to obtain isolated JDBC connection [Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Failed to parse the host:port pair '${DATABASE_IP}:${DATABASE_PORT}'.] [n/a]
	at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:80) ~[hibernate-core-7.4.1.Final.jar:7.4.1.Final]
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:34) ~[hibernate-core-7.4.1.Final.jar:7.4.1.Final]
	at 

local -> prod로 커스텀 환경을 사용하니
DB가 연결에 문제가 발생함

prod 설정 파일은 환경 변수 설정을 해두었음

분명 Application -> Enviroment Variables에 환경 변수도 잘 넣어뒀음
그런데 Application -> Enviroment Variables는 기본값(yaml)에만 적용 되는 변수였음..

지금 같은 화면처럼 Spring boot -> ProfileApplication -> Enviroment Variables에
환경 변수 세팅을 해줘야 prod 같은 환경에서 변수가 적용됨..

RDS 생성 시 보안그룹의 vpcID와 vpcID가 일치하지 않다고 나옴

분명히 서브넷 그룹은 새로 생성하기를 하고
vpc는 새로만든 vpc로 연결 하려고 했는데

The DB subnet group doesn't meet Availability Zone (AZ) coverage requirement. Current AZ coverage: ap-northeast-2a. Add subnets to cover at least 2 AZs.

계속 이렇게 나옴;;;

그래서 그냥 서브넷 그룹을 새로 만들어서
생성한 vpc에 연결하기 후 연결 해줬음

은근히 aws도 잔 버그 많이 있는듯..


git 충돌

git pull origin main --no-rebase 로 해결


Could not find io.awspring.cloud:spring-cloud-starter-aws-parameter-store-config:2.4.5

Could not find io.awspring.cloud:spring-cloud-starter-aws-parameter-store-config:2.4.5

스프링 부트 버전이 4.1.0인데 aws-parameter-store 버전은 2.4.5라서 컴파일이 실패

이후 3.0 버전대로 올렸고 빌드는 됐음

12:20:51.075 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter --



***************************

APPLICATION FAILED TO START

***************************



Description:



An attempt was made to call a method that does not exist. The attempt was made from the following location:



io.awspring.cloud.autoconfigure.config.AbstractAwsConfigDataLocationResolver.registerBean(AbstractAwsConfigDataLocationResolver.java:89)



The following method did not exist:



'org.springframework.boot.ConfigurableBootstrapContext org.springframework.boot.context.config.ConfigDataLocationResolverContext.getBootstrapContext()'



The calling method's class, io.awspring.cloud.autoconfigure.config.AbstractAwsConfigDataLocationResolver, was loaded from the following location:



implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:4.0.2")
    implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store'

그러나 이번엔 jar로 실행 후 method that does not exist 라고 에러가 나오는 상황

implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:4.0.2") 4.0 버전 사용하라고 나옴

4.0.2로 업그레이드 하니 정상


Configured region () and tags ([]) resulted in an invalid URI

software.amazon.awssdk.core.exception.SdkClientException: Configured region (%24%7Baws.region%7D) and tags ([]) resulted in an invalid URI: https://ssm.%24%7Baws.region%7D.amazonaws.com. This is usually caused by an invalid region configuration. Valid regions: [af-south-1, ap-east-1, ap-east-2, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ap-southeast-4, ap-southeast-5, ap-southeast-6, ap-southeast-7, ca-central-1, ca-west-1, eu-central-1, eu-central-2, eu-north-1, eu-south-1, eu-south-2, eu-west-1, eu-west-2, eu-west-3, fips-ca-central-1, fips-us-east-1, fips-us-east-2, fips-us-west-1, fips-us-west-2, il-central-1, me-central-1, me-south-1, mx-central-1, sa-east-1, us-east-1, us-east-2, us-west-1, us-west-2, cn-north-1, cn-northwest-1, fips-us-gov-east-1, fips-us-gov-west-1, us-gov-east-1, us-gov-west-1, us-iso-east-1, us-iso-west-1, us-isob-east-1, us-isob-west-1, eu-isoe-west-1, us-isof-east-1, us-isof-south-1, eusc-de-east-1]
        at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:130)
        at software.amazon.awssdk.core.exception.SdkClientException.create(SdkClientException.java:43)
        at software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider.clientEndpointFromServiceMetadata(AwsClientEndpointProvider.java:253)
        at software.amazon.awssdk.awscore.endpoint.AwsClientEndpointProvider.lambda$resolveClientEndpoint$2(AwsClientEndpointProvider.java:101)
        at software.amazon.awssdk.utils.OptionalUtils.firstPresent(OptionalUtils.java:47)

jar로 압축 해제를 했는데 로그에서 리전 정보가 잘못 되었다고 나옴
This is usually caused by an invalid region configuration

원인은 리전또한 파라미터로 처리를 하고 Parameter Store에 저장했음
이건 Parameter Store가 위치한 리전 정보를 Parameter Store에 넣어버려서
리전을 찾지 못한 상황

금고 위치에 대한 정보를 금고안에다 넣어버린것과 같은 느낌

금고 위치를 알아야 금고 안에서 물건을 꺼내는데
금고 위치를 금고에 넣고 금고를 찾아! 라고 한셈..


s3 서비스 주입 실패

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'profileService' defined in URL [jar:nested:/home/ubuntu/profile/app.jar/!BOOT-INF/classes/!/com/example/profile/profile/service/ProfileService.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 's3ProfileService': Injection of autowired dependencies failed
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1380) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1219) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:1232) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1711) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1658) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-7.0.8.jar!/:7.0.8]
	... 26 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 's3ProfileService': Injection of autowired dependencies failed
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:499) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1444) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:1232) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1711) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1658) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-7.0.8.jar!/:7.0.8]
	... 40 common frames omitted
Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'aws.bucket' in value "${aws.bucket}" <-- "${spring.cloud.aws.s3.bucket}"
	at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) ~[spring-core-7.0.8.jar!/:7.0.8]
	at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:296) ~[spring-core-7.0.8.jar!/:7.0.8]
	at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:129) ~[spring-core-7.0.8.jar!/:7.0.8]
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:96) ~[spring-core-7.0.8.jar!/:7.0.8]
	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:286) ~[spring-core-7.0.8.jar!/:7.0.8]
	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:257) ~[spring-core-7.0.8.jar!/:7.0.8]
	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:184) ~[spring-context-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:959) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1679) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1658) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:764) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:748) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:146) ~[spring-beans-7.0.8.jar!/:7.0.8]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:493) ~[spring-beans-7.0.8.jar!/:7.0.8]
	... 52 common frames omitted

s3 컨트롤러의 의존성 주입에 실패를 했음
실패 원인읜 s3 컨트롤러의 환경변수를 읽지 못함

s3 컨트롤러에는 bucketName을 불러옴

그 파라미터는 aws param store에 있는데
aws.bucket를 저장하지 않고 누락했기 때문

profile
백앤드 개발자 준비생

0개의 댓글