반응형
A problem occurred configuring root project 'project-name'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.0.
     Required by:
         project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.3.0
      > Dependency requires at least JVM runtime version 17. This build uses a Java 8 JVM.

* Try:
> Run this build using a Java 17 or newer JVM.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

 

intelliJ , gradle 환경 에서 JVM 예전걸 사용한다고 한다.

 

IntelliJ -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle  에서 보면

Gradle JVM 에 보면 기본 JAVA_HOME에 1.8 이 선택되어져 있다.

요거를 17버전으로 변경해서 선택해주고 Apply 후

Gradle 에서 다시 Raload all Gradle Project 해주었다.

 

메이븐 레포지토리에서 필요한 의존성을 다운로드 받고

 

Download https://repo.maven.apache.org/maven2/org/objenesis/objenesis/3.3/objenesis-3.3-sources.jar, took 48 ms (52.69 kB)

BUILD SUCCESSFUL in 1m 28s

반응형
반응형
C:\Users\user01\.jdks\corretto-17.0.17\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.3\lib\idea_rt.jar=58148:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.3\bin" -Dfile.encoding=UTF-8 @C:\Users\user01\AppData\Local\Temp\idea_arg_file2055952646 qsol.digital_water.DigitalWaterApplication
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
	at qsol.digital_water.DigitalWaterApplication.main(DigitalWaterApplication.java:16)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	... 1 more

Process finished with exit code 1

 

빌드는 잘됬는데 머가 문젠지 실행이 안된다.

 

1. spring Boot 실행 구성 확인 (권장)
실행/디버그 구성 편집
현재구성에 Spring Boot 유형 과 메인 메서드 클래스 지정이 되어있는지 확인

2. Gradle 실행 위임 설정 변경 (대안)
IntelliJ가 Gradle에게 빌드 및 실행을 위임하도록 설정하여 Classpath 문제를 해결할 수도 있습니다.
설정 (Settings/Preferences) 열기: File (파일) → Settings (설정) (macOS는 Preferences)로 이동합니다.
Gradle 설정으로 이동: Build, Execution, Deployment → Build Tools → Gradle로 이동합니다.

실행 위임 확인:
"Build and run using" 및 "Run tests using" 설정을 Gradle 대신 **IntelliJ IDEA**로 설정하는 것이 Classpath 문제를 더 잘 해결하는 경우가 많습니다. (만약 현재 IntelliJ IDEA로 되어 있는데도 문제가 발생한다면, **Gradle**로 바꿔보고 다시 시도해 보세요.)

3. Gradle bootRun 태스크 사용

./gradlew bootRun



난 3번 Gradle bootRun 으로 실행이 됬다.

1번과 2번은 아무리 설정을 맞춰줘도 안된다.

반응형
반응형

intelliJ 스프링부트  실행이 안안된다.

C:\Users\user01\.jdks\corretto-17.0.4.1\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.3\lib\idea_rt.jar=61616:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.3\bin" -Dfile.encoding=UTF-8 @C:\Users\user01\AppData\Local\Temp\idea_arg_file1501926487 qsol.digital_water.DigitalWaterApplication
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
	at qsol.digital_water.DigitalWaterApplication.main(DigitalWaterApplication.java:16)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
	... 1 more

Process finished with exit code 1

빌드가 안되어 main 클래스를 못찾는거다.

 

Gradle clean 하고 build 하면 된다고 해서 시도함.

clean 은 잘 지나다고

build 하면 에러

Execution failed for task ':test'.
> Process 'Gradle Test Executor 5' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.8/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD FAILED in 10s
7 actionable tasks: 7 executed

 

test 작업에서 에러 난다고 정확한 원인을 확인 해보자

 

> ./gradlew test --warning-mode all

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'digital-water'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.0.
     Required by:
         project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.3.0
      > Dependency requires at least JVM runtime version 17. This build uses a Java 8 JVM.

* Try:
> Run this build using a Java 17 or newer JVM.
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

BUILD FAILED in 5s

 

java17 이상의 버전으로 빌드를 실행 해야 한다고 한다

 

IntelliJ 사용중이라서 설정 확인

 

IntelliJ IDEA 설정: IntelliJ IDEA 내에서 프로젝트가 사용할 JDK를 명시적으로 설정해 줍니다.
**File (파일) → Project Structure (프로젝트 구조)**로 이동합니다.
SDKs 섹션에서 Java 17 이상의 JDK가 등록되어 있는지 확인합니다.
Project 섹션에서 Project SDK를 Java 17 이상으로 선택합니다.

 

IntelliJ Gradle 설정 확인
IntelliJ가 빌드를 실행할 때 특정 JDK를 사용하도록 설정할 수도 있습니다.
File (파일) → Settings (설정) (macOS는 IntelliJ IDEA → Preferences)로 이동합니다.
Build, Execution, Deployment → Build Tools → Gradle로 이동합니다.
Gradle JVM 항목을 Java 17 이상으로 변경합니다.

 

설정은 잘 되어 있어서 변경하진 않았다.

 

./gradlew test --stacktrace 

A problem occurred configuring root project 'digital-water'. > Could not resolve all artifacts for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.3.0. > Dependency requires at least JVM runtime version 17. This build uses a **Java 8 JVM**.

 

계속 JVM 버전을 맞추라고 만 한다.

 

IntelliJ java 업데이트 알림 뜨길래 17.0.4 -> 17.0.17로 업그레이드 했다.

 

intelliJ Settings -> build -> gradle 에서
build and run using 과 run test using 을 Gradle 에서 intelliJ IDEA 로 변경해보았다.

 

그래도 빌드 안됨.

IntelliJ 껏다가 다시 실행했다.

 

다시 재빌드

오전 10:38:03: Executing 'build'...
Download https://services.gradle.org/distributions/gradle-8.8-bin.zip, took 26 s 726 ms
Starting Gradle Daemon...

먼가를 다시 받으면서 빌드가 실행된다.

 

오류 수정하고 다시 빌드

오전 11:06:05: Executing 'build'...

> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes
> Task :resolveMainClassName
> Task :bootJar
> Task :jar
> Task :assemble
> Task :compileTestJava UP-TO-DATE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2025-12-02T11:06:47.592+09:00  INFO 56308 --- [ionShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler     : Stopping...
2025-12-02T11:06:47.593+09:00  INFO 56308 --- [ionShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler     : BrokerAvailabilityEvent[available=false, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@7231c423]]
2025-12-02T11:06:47.593+09:00  INFO 56308 --- [ionShutdownHook] q.d.websocket.WebSocketEventListener     : Broker availability event: false
2025-12-02T11:06:47.593+09:00  INFO 56308 --- [ionShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler     : Stopped.
2025-12-02T11:06:47.631+09:00  INFO 56308 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2025-12-02T11:06:47.634+09:00  INFO 56308 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2025-12-02T11:06:47.681+09:00  INFO 56308 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
> Task :test
> Task :check
> Task :build

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.8/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 42s
7 actionable tasks: 5 executed, 2 up-to-date
오전 11:06:48: Execution finished 'build'.

 

결론은 IntelliJ java 설정 잘 확인하고, 그래도 안되면 껏다 켜보는거다.

반응형
반응형

 

DynodbDB partiQL

NoSQL은 처음이라 

사실 등록, 조회, 수정, 삭제 모두 처음이다.

 

DynamoDB는 기본 키를 사용하여 테이블의 각 항목을 고유하게 식별하므로 등록 시 주의 점은 

기본키만 중복 안되게 하면 됐었다.

 

업데이트 쿼리를 진행하다 보니 하다 보니 아래 문구가 나왔다.

Where clause does not contain a mandatory equality on all key attributes

RDBMS에선 가능한 업데이트가 안된다.

where절엔 구분이 가능한 키 값이 들어가야 된다고 한다.

 

업데이트 후엔 리턴 값 설정이 있다.

  • ALL OLD * - 업데이트 작업 전에 표시된 항목 속성을 모두 반환합니다.
  • MODIFIED OLD * - 업데이트 작업 전에 표시된 업데이트된 속성만 반환합니다.
  • ALL NEW * - 업데이트 작업 후에 표시되는 항목 속성을 모두 반환합니다.
  • MODIFIED NEW * - UpdateItem 작업 후에 표시되는 업데이트된 속성만 반환합니다.

일단은 ALL NEW *  설정으로 사용해보기로 했다.

 

MODIFIED OLD  옵션은 업데이트된 내용을 속성만 반환된다고 했는데, 

실제 변경된 건지 안된 건지 중요해 보이지 않는다. 기존 값과 업데이트 값이 같아도 값이 리턴된다.

기존 값과 업데이트 값이 같든 다르든 해당 업데이트되는 속성은 무조건 업데이트되는 거 같다.

 

업데이트 문에

각 항목마다 SET을 추가해주고, 각 항목이 배열 형식이 있어서 다음과 같은 옵션이 있다.

  • LIST_APPEND: 목록 형식에 값을 추가합니다.
  • SET_ADD: 숫자 또는 문자열 집합에 값을 추가합니다.
  • SET_DELETE: 숫자 또는 문자열 집합에서 값을 제거합니다.

 

 

반응형
반응형

 

javascript로 dynamoDB 연동중

조회 후 리턴 정보가 object로 되어 있길래 

찾아보니 unmarshall 하는 게 있었다.

 

https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html

 

What is Amazon DynamoDB? - Amazon DynamoDB

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

공식문서엔 관련 내용이 없다. 

 

마샬링이란 한 객체의 메모리에서의 표현방식을 저장 또한 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다.

DynamoDB에서 전송에 적합에 데이터 형식으로 변환해서 보내준다고 이해하면 되겠다.

조회 결과의 데이터는 object로 사용하려면 언마샬링이 필요하다.

 

https://hwanine.github.io/network/Marshalling/

 

import  { unmarshall } from '@aws-sdk/util-dynamodb';

// marshall된 오프젝트를 unmarshall 함수를 통해 변환해서 사용해야 한다.
const dataRow = unmarshall(data.Items[0]);

 

 

공통 조회에서 결과 리턴전에 처리하는 것도 고려해볼 만하다.

 

const send = async (queryParams) => {
  try {
    const data = await ddbDocClient.send(new ExecuteStatementCommand(queryParams));
    // console.log(data.Items[0]);
    // return unmarshall(data.Items);
    return {Items : data.Items.map(item => unmarshall(item)) };
    // return data
  } catch (err) {
    return {
      message: err.message,
      httpStatusCode: err.$metadata.httpStatusCode
    };
  }
};

 

 

참고

https://www.tabnine.com/code/javascript/functions/marshall

반응형
반응형

DynomoDB local

dynamoDB 도커로 검색하면 아래 링크로 안내한다.

https://hub.docker.com/r/amazon/dynamodb-local

 

Docker Hub

 

hub.docker.com

 

Simply run docker run -p 8000:8000 amazon/dynamodb-local to execute DynamoDB locally.

 

저걸 믿고 실행한 후  aws-sdk를 이용하여 접속 테스트를 했는데,테이블 목록이 조회도가 안되는 것이다.

 

AWS NoSQL Workbanch로는 접속이 되고 조회가 되는데도 안됐다.

하루 온종일 찾아봤다.

 

docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -inMemory -sharedDb

-inMemory는 필요 없다.

inMemory는 옵션은 도커 껐다 켜면 데이터가 없어지는 거 같다.

 

중요한 건 -sharedDB 요거다.

저거 한 줄 때문에. 2일 정도 고생. 

반응형
반응형

환경 sourcetree 3.4.7,  window 11에서 

소스트리 커밋 메시지에 한글 입력 시 중간에 한글이 없어진다.

 

해결 방법 :

설정 -> 시간 및 언어 > 언어 및 지역 > 옵션 > Microsoft  입력기에서

이전 버전의 Microsoft IME를  켬(ON)으로 한다.

 

설정 -> 시간 및 언어 > 언어 및 지역 > 옵션 > Microsoft  입력기

반응형
반응형

kotiln

// 처음 시행 함수정의는 main 으로 
fun main() {
 println("Hello, world!")

 // 주석은 이렇게

 // 한번 값 할당, 변경할 수 없다.
 val age = "5"
// Val cannot be reassigned 
 age = "6"

 // 값 할당과 변경 필요한다.
 var roll = 6
 roll = 7 
 // 타입 정의 
 var rolledValue: Int = 4
 
 // 문자열 템플릿 
 println("You are already ${age}!")
}

// 데이터 타입
Int       //  숫자 
String    // 쌍따옴표 사이 문자
IntRange  // 숫자 범위 정의 1..6
Boolean   // true or false


// 함수 정의
fun printHello () {
    println ("Hello Kotlin")
}

// 함수 호출
printHello()

// arguments 가 있는 함수 정의
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}

// 리턴값이 있는 함수 정의
fun roll(): Int {
     val randomNumber = (1..6).random()
     return randomNumber
}

// 기본 연산자
*     // 곱
/     // 나누기
+     // 더하기
-     // 빼기
=     // 할당

// 논리 연산자
>    // 큰다
<    // 작다.
==   // 같다.
>=   // 크거나 같다
<=   // 작거나 같다.
!=   // 같지 않다


// 랜덤 숫자 생성
val diceRange: IntRange = (1..7)
val randomNumber = diceRange.random()

fun roll() {
     val anotherRandomNumber = (1..6).random()
     println(randomNumber)
     println(anotherRandomNumber)
}

// repeat 함수를 이용한 반복 실행
fun printBorder() {
    repeat(23) {
        print("=")
    }
}

// if /else 조건문
fun main() {
   val num = 4
   if (num > 4) {
       println("The variable is greater than 4")
   } else if (num == 4) {
       println("The variable is equal to 4")
   } else {
       println("The variable is less than 4")
   }
}


// when 조건문 

when (rollResult) {
    luckyNumber -> println("You won!")
    1 -> println("So sorry! You rolled a 1. Try again!")
    2 -> println("Sadly, you rolled a 2. Try again!")
    3 -> println("Unfortunately, you rolled a 3. Try again!")
    4 -> println("No luck! You rolled a 4. Try again!")
    5 -> println("Don't cry! You rolled a 5. Try again!")
    6 -> println("Apologies! you rolled a 6. Try again!")
}

// when 을 활용한 변수 값 할당.
val drawableResource = when (diceRoll) {
    1 -> R.drawable.dice_1
    2 -> R.drawable.dice_2
    3 -> R.drawable.dice_3
    4 -> R.drawable.dice_4
    5 -> R.drawable.dice_5
    else -> R.drawable.dice_6
}

// 간단한 클래스 : property와 메서드
class Dice {
 // class property 선언
    var sides = 6

 // class method 선언
    fun roll() {
        val randomNumber = (1..6).random()
        println(randomNumber)
    }
}


// 클래스 파라메터 
class Dice (val numSides: Int) {
    fun roll(): Int {
        val randomNumber = (1..numSides).random()
        return randomNumber
    }
}

val myFirstDice = Dice(6)

 

https://developer.android.com/courses/android-basics-kotlin/kotlin-quick-guide/?hl=ko

반응형
반응형

moov coach - Sprint Intervals

 

 

Sprint Intervals  6 레벨로 처음 도전해 봤다.

Speed Edurance과, Running Efficiency는 4, 5 레벨은 무난히 통과되어 인터벌은 6 레벨로 시작을 했다.

 

처음 3번은 100%로 못 미쳐 실패했다.

Forward-back swing 각도가 해당 레벨에 못 미쳤다.95도 이상으로 하라는데 생각보다 잘 안됐다.제일 빠른 스피드로 달리며 뒤로 엄청나게 세게 차야 해당 각도에 미쳤다.45초 동안 전력질주를 하란 예긴데, 내가 그동안 얼마나 전력질주를 안 해본 지 알 것 같다.달리면서 내가 다리에 뒤로 차는 연습을 거의 안 하다 보니. 각도가 거의 안 나왔다.

 

나머지 다섯 번의 인터벌은 100% 이상으로 달설 했다.

 

케이던스를 높게 유지하여 임팩트를 낮추라고 한다.
여기서 높은 케이던스는 달릴 때 위아래가 아니고 앞으로 나가게 가게 함으로써 보폭을 넓게 하여 분당 160-180 걸음이 이상적인 케이던스라고 한다.

 

임팩트는 12 g's 미만으로 하라고 한다. 

20 g's가 넘어가면 부상의 위험이 있다고 경고하고 있다.

난 22 g's 인데 교정이 필요하다.

임팩트 내리는 건 어떻게 뛰면 내려갈지 모르겠다.

살짝 디디라는 건데, 가능할지 모르겠다. 좀 더 연구가 필요하다.

 

 

반응형
반응형

moov  coach running efficiency highlights

 

아침에 초등학교 운동장을 달렸다.

아래 지도 사진에 보니 10바퀴 정도 달린 거 같다.

거리  2.3 km, 운동시간 14:45, 칼로리 : 171 kcal 로 하이라이트로 표시된다.

획득 레벨 3이다. 
한 번에 100% 이상으로 3개의 인터벌을 통과해야 준다고 한다.


케이던스 범위는 이상적인 범위가 160 이상이라는데, 난 190 이면 좀 높은 거 같기도 하다.

분당 160-180 걸음은 대부분의 러너에게 이상적인 케이던스라고한다.

쓸데없이 발걸음 수가 많은 거 같다.

 

발의 앞뒤 스윙 각도의 이상적인 각은 40-95도라는데

나는 76°다.
더 천천히 달릴 땐 아무리도 각도가 더 낮아지긴 했었다.

가동범위는 95도가 효율적인 동작 범위라고 한다.
좀 더 앞으로 뛰려는 느낌으로 발을 차 봐야겠다.

뒤로 차는 게 아무래도 약한 거 같다.

Impact Score는 충격 점수 범위인데 
발에 가해지는 충격을 말하는 건지. 정확히는 모르겠다.
1-12 점수가 적당하다고 하는데, 난 16.8이다.
강한 충격은 부상을 초래할 수 있습니다. 
발 앞쪽으로 착지하고 케이던스를 높게 유지합니다.
가벼운 충격을 위해 충격을 12g 미만으로 유지하라고 한다. 
20g 이상의 지속적인 충격은 관절에 무리를 주어 부상을 입을 수 있다고 한다.

 

Impact Score를 보고 내 달리기에 문제가 있는 건가 생각이 들었다.
좀 더 확인해봐야겠다.

케이던스를 높이라는 말이 발을 더 많이 구르라는 말인 건지 잘 모르겠다.
총평은 딛는 발은 좀 더 사뿐히 딛고, 발을 구를때 좀더 앞으로 뛰려고 노력하면 되는 거 같다.

 

 

반응형

+ Recent posts