에러 상세 내역

e: file:///C:/Users/TUF/workspace/together-english-backend/src/main/kotlin/com/together_english/deiz/data/member/entity/Member.kt:23:5 Platform declaration clash: The following declarations have the same JVM signature (getPassword()Ljava/lang/String;):
    fun `<get-password>`(): String defined in cohttp://m.together_english.deiz.data.member.entity.Member
    fun getPassword(): String defined in cohttp://m.together_english.deiz.data.member.entity.Member

 

오랫만에 프로젝트를 실행해보니 위와같은 에러를 만나게 되었다. 확인해보니 UserDetails의 getPassword 메소드를 오버라이딩해야되기 때문에 다음과같이 선언했던 password를 return 하도록 만들었다.

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    var password: String = password
        private set
        
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    override fun getPassword(): String {
        return this.password
    }

코틀린에서는 변수의 getter와 setter를 자동으로 만들어주는 기능이 있기 때문에 password라는 변수가있으면 자동으로 getPassword 메소드를 만들게 된다. 하지만 이와 같은 이름의 메소드를 구현하였기 때문에 충돌하여 발생한 에러였다. 

 

해결책

UserDetails 인터페이스를 상속받아 getPassword 메소드를 오버라이딩 해야되기 때문에 해당 메소드의 명은 변경할 수 없다. 그렇기 때문에 password의 변수 명을 변경하여 해당 문제를 해결할 수 있다.

위 url은 ec2에 연결된 역할을 반환하는 url입니다. ec2에 연결된 역할이 없을 경우 해당 오류를 반환하게 됩니다.

해당 오류로 인해 프로그램이 실행되거나 프로세스를 진행할 때 문제가 되진 않습니다.

 

https://stackoverflow.com/questions/58378329/aws-instance-metadata-for-iam-is-not-found

 

AWS: instance metadata for iam is not found

I'm trying to set up elasticsearch s3 snapshots on my ec2 instances. And it fails with following error: nested: NotSerializableExceptionWrapper[sdk_client_exception: The requested metadata is not f...

stackoverflow.com

 

원인

자바 entity와 DB의 table이 일치하지 않아서 발생

생각했던 영어 질문지의 형태가 영어 질문, 한국어 해석으로 구성된 다는 것을 만든 후에 알게 되어 추후에 수정후 ddl을 update로 두고

실행하였더니 위와같은 에러가 발생하였다. ddl이 update로 설정돼있기 때문에 알아서 업데이트될 거라 생각했지만 DB를 확인해보니 업데이트되지 않았다. 

 

해결 방법

DB가 자동으로 변경되지 않은 점으로 보아 DB를 수정한대로 변경하면 해결될 것으로 추측했고 해결되었다.

 

Incorrect string value: '\xEC\x98\x81\xEC\x96\xB4...'

 

위와 같은 에러가 나며 maria db를 사용한다면

 

ALTER TABLE 테이블 이름 convert to charset utf8;

위 명령어로 해결 가능하다. 위 명령어는 테이블의 charset 을 utf8로 변경하는 것이다.

ec2 프리티어에서 만든 프로젝트를 빌드해보았다. 하지만 예상외로 시간이 많이 걸려 빌드를 실패하였다.

한 번에 50분이 넘어가는 경우도 있었다. 이를 해결하기 위해서 빌드를 빠르게 하는 방법과 해당 문제를 가진 사람들이 있는지 서치한 결과 gradle.properties 파일에 해당 값을 넣어주는 것으로 17분 만에 빌드에 성공하였다.

 

# for memory issue
org.gradle.daemon=false

# memory allotted to JVM
org.gradle.jvmargs=-Xmx1024m 

# configure on demand
org.gradle.configureondemand=true

# parallel builds
org.gradle.parallel=true

# build Cache
android.enableBuildCache=true

# gradle caching
org.gradle.caching=true

램 1기가를 최대한 빌드하는데 쏘다 부으라는 ? 명령어로 보인다. 만약 gradle.properties 파일이 없다면 build.gradle 파일이 위치한 경로로 gradle.properties 파일을 생성해서 사용하면 된다. 

 

쿼리 dsl 경로 설정 부분을 변경하니 해결되었다.

// QueryDSL
idea {
   module {
      val kaptMain = file("$buildDir/generated/querydsl")
      sourceDirs.add(kaptMain)
      generatedSourceDirs.add(kaptMain)
   }
}

기존 경로

"build/generated/source/kapt/main"

변경한 경로

"$buildDir/generated/querydsl"

 

Spring boot 2.6버전 이후에 spring.mvc.pathmatch.matching-strategy 값이 ant_apth_matcher에서 path_pattern_parser로 변경되면서 swagger를 포함한 몇몇 라이브러리를 사용할 때 오류가 발생한다고한다. 

application.yml 에 아래 설정을 추가하면 오류가 발생 하지 않는다.

 

spring:

  mvc:

    pathmatch:

      matching-strategy: ant_path_matcher

 

 

https://www.inflearn.com/questions/230160

 

swagger 연동을 할려고 하는데 에러가 발생합니다 - 인프런 | 질문 & 답변

지금 현재 swagger 해보고 있는데  org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exc...

www.inflearn.com

 

오류 invalid source release: 11


 

 

오류의 원인


프로젝트 JDK 버전은 11로 설정 되어있지만 세팅이 JDK 8로 설정 되어있기 때문이다.

 

해결책


Settings > Build, Exception, Deployment > Build Tools > Gradle

 

 

클라이언트에서 서버로 &, + 등의 특수 문자를 보낼 때 발견되었다.

 

오류를 위한 해결책


encodeURIComponent() 

서버로 데이터를 보내기전 해당 데이터를 encodeURlComponent()로 감싸서 서버에게 보내면 성공적으로 특수문자(&,+)을 사용할 수 있었다.

 

encodeURIComponent() 


URL의 특정한 문자를 UTF-8로 인코딩하여 하나, 둘, 셋, 혹은 네 개의 연속된 이스케이프 문자로 나타낸다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

 

 

encodeURIComponent() - JavaScript | MDN

encodeURIComponent() 함수는 URI의 특정한 문자를 UTF-8로 인코딩해 하나, 둘, 셋, 혹은 네 개의 연속된 이스케이프 문자로 나타냅니다. (두 개의 대리 문자로 이루어진 문자만 이스케이프 문자 네 개로

developer.mozilla.org

 

외래 키를 설정하려면 Collation 값이 일치해야 한다.

 

Collation 값 확인하는 방법

show full columns from article ;

 

아래와 같은 방법으로 Collation 값을 변경한다.

alter table category convert to character set utf8 collate utf8mb3_general_ci;

 

 

SQL Error [1452] [23000]: (conn=3205) Cannot add or update a child row: a foreign key constraint fails 

 

Collation 값을 일치시켜준 후 외래 키를 생성하려고 하니 위와같은 오류를 만나게 되었다.

위 오류는 외래키를 생성하려는 테이블에서 외래키를 만들려는 값에 참조 테이블에 없는 값을 가지고 있기 때문이다.

 

+ Recent posts