본문 바로가기
728x90

Kotlin Spring39

2) Spring Boot란? (맛보기) 1. Spring 이란? : Spring Framework는 자바 기반의 엔터프라이즈 애플리케이션 개발을 위한 핵심 프레임워크로, IoC(제어의 역전)와 DI(의존성 주입), AOP 등을 통해 유연하고 확장성 있는 애플리케이션 개발을 지원하는 기술 2. Spring Boot 란? - Spring Boot는 Spring Framework를 더 쉽게 사용할 수 있도록 만든 도구. - 설정을 최소화하고, 빠르게 실행 가능한 애플리케이션을 만들 수 있음. - 핵심 특징 1) 자동 설정(Auto Configuration): 의존성 기반 자동 Bean 등록 2) 내장 서버(Embedded Server): Tomcat/Jetty 등을 내장 → 별도.. 2025. 8. 25.
1. (2) Kotlin 주요 문법 1. 변수 선언 var name: String = "Bill" // 값 변경 가능val age: Int = 25 // 값 변경 불가능 (final)var nickname: String? = null - var: 가변 변수 - val: 불변 변수 (초기화 후 값 변경 불가 - ? = null: nullable 변수 선언 2. 형변환 val number: Int = 10val text: String = number.toString() - Kotlin은 명시적 형변환만 지원 (toInt(), toString() 등) 3. 함수 선언//일반함수fun sum(a: Int, b: Int): Int { return a + b}//단일 표현식 함수fun sum(a: I.. 2025. 8. 25.
1. Kotlin 이란? & (1) 주요 자료구조 1. Kotlin 이란? : Kotlin은 JetBrains에서 개발한 정적 타입 프로그래밍 언어로, JVM 위에서 실행되며 Java와 100% 상호 운용이 가능. 간결하고 안전하며 현대적인 프로그래밍 패러다임을 지원하도록 설계 1) 주요 특징 간결성Kotlin은 불필요한 코드를 줄이고, 표현력을 높여 개발자의 생산성을 향상시킴안전성Kotlin은 널(null) 안전성을 내장하여 런타임 오류를 방지함수형 프로그래밍 지원람다 식, 고차 함수, 불변 컬렉션 등 함수형 프로그래밍 개념을 포함상호 운용성Kotlin은 기존 Java 코드, 라이브러리, 프레임워크와 원활하게 통합 가능 2) 활용분야Android 애플리케이션 개발서버 사이드 애플리케이션데스크톱 및 웹 애플리케이션 자세한 내용은 .. 2025. 8. 24.
0. [과정을 들어가면서] 과정소개 1. 강의제작 배경 및 학습목표 1) 많은 주니어 개발자들이 CRUD와 같은 기본 기능은 익숙하지만, 언어의 핵심이 되는 자료구조, 실무에 필요한 패키지 구조 설계, 데이터 흐름 제어, 동시성 처리(DB Lock, Redis, Kafka 등과의 연계 활용) 등은 정확히 이해하지 못하는 경우가 많음 2) Java Spring 기반 개발자들에게 Kotlin은 가장 빠르게 적응할 수 있는 언어 임 (Spring 프레임워크 내에서 Kotlin만 적용하면 개발은 그대로 가능함) → 이제는 ‘어떻게 Kotlin답게 개발할 것인가?’에 집중해야 할 때! (OOP 중심의 Java에서 OOP + FP 지향의 Kotlin으로 자연스럽게.. 2025. 8. 24.
CloudWatchClient로 CPUUtilization 메트릭 Data 가져오기 (feat. CPU 상태 확인) for Kafka Throttling implementation("software.amazon.awssdk:cloudwatch:2.25.30") import software.amazon.awssdk.services.cloudwatch.CloudWatchClientimport software.amazon.awssdk.services.cloudwatch.model.*@Componentclass CloudWatchMetricsService { private val cloudWatchClient: CloudWatchClient = CloudWatchClient.create() fun getCpuUtilization(instanceId: String): Double { val request = GetMetricStatistic.. 2025. 4. 26.
단방향 암호화 sha512 단방향 암호화는?: 암호화 수식을 이용하여 원 input 을 암호화된 digest 로 변경하는 역할을 수행한다. 왜 단방향이냐? 복호화가 불가능 하다(그렇다고 100프로 안전한건 아니다. 1234와 같은 숫자를 암호화 화면 똑같은 결과가 나와서 이는 누구나 유추 가능 할 수 있기 때문이다.)암호의 글자수와 조합이 얼마나 중요한지 나오는 대목이다. 단방향 암호화의 종류에는…SHA(256), (512)MDHAS우리는 일반적으로 사용되는 SHA-512로 암호화에 대해 알아보겠다.fun transSHA512(input: String): String { val digest = MessageDigest.getInstance("SHA-512") val hashDigest = digest.digest(in.. 2024. 12. 18.
오토와이어링할 수 없습니다. '' 타입의 bean을 찾을 수 없습니다. 오토와이어링할 수 없습니다. '' 타입의 bean을 찾을 수 없습니다. 와 같은 오류를 개발을 하다보면 볼 수가 있다. 주로 pakage 구조를 변경하거나 초기세팅에서 보았을 것이다!그도 그럴 것이 두가지 대표적인 원인을 확인할 수 있는데, 1. @SpringBootApplication(scanBasePackages = ["com"]) class Application : main 에서 위와 같이 옯바른 경로로 잡혀있는지 확인 필요하다 root package 내에 포함되지 않은 package 의 bean 을 인식할 수 없다ㅣ. 2. 최근에 pacakge 구조를 변경한 경우 : 참조하고 있는 package 에 접속을 해서 오류나는 부분이 없는지, 이전경로로 import 되어있는게 없는.. 2024. 12. 18.
Kotlin when 문 Kotlin 기본 문법 중 when 문에 대해 알아보겠다. 코틀린 when 은 여러 조건 중 조건을 만족하는 것을 선택하여 명령어를 실행한다.다른 언어의 switch 와 매우 유사한 형태이나, 한가지 차이점이 있다. 그건 바로 " fallthrough" 하지 않는다는거!switch 문의 경우 어떤 조건을 만족할 때 까지 조건문을 찾고 실행하고 명시적으로break가 있어야만 동작을 마무리 한다. 하지만, when은 만족하는 한가지 명령만 수행하고 fallthrough(폴스루)하지 않는다. 예시)fun testFun(n:Int): Int = when(n) { 10 -> n + 1 100 -> n + 11 1000 -> n + 111 else -> 0} 2024. 12. 15.
DataFetchingEnvironment 세팅하는 방법 graphql 을 사용한다는 것은 당연히 resolver 에 대한 개념도 알고 있을 것이다.그럼 DataFetchingEnvironment 은 무엇이냐? 그건 각각의 resolver 단에서 사용자 정보와 같은 공통정보에 바로 접근이 가능하다는 것이다.없을 경우? f/e 로 부터 받던지, JWT payload 값을 분해하는 로직을 호출해야 한다. 하지만, 이걸 resolver 에서 전달 받기 전에 한번에 처리해서 받으면은 어떨까??그럴때 사용하는 것이 DataFetchingEnvironment 이다. 사용법은 우선 Graphql contect factory 로 하여금 어떤 context 를 생성할 것인지 명시해준다. request time과 user name, user id 정도? 호출 받아서 toGrap.. 2024. 12. 11.
Webflux 는 어디서 동작하나? WebFlux는 서블릿 기반이 아닌 비동기적, 논블로킹 방식으로 동작하는 리액티브 웹 프레임워크에서 동작한다.하지만 예외인 경우가 있다!!(알고있었나?) 우선 WebFlux와 서블릿관계부터 알아보자 WebFlux는 기본적으로 두 가지 실행 모델을 지원한다.서블릿 기반 (@EnableWebFlux): 전통적인 서블릿 컨테이너인 Tomcat, Jetty, Undertow와 같은 서버에서 실행될 수 있고, 이 경우, WebFlux는 ReactiveAdapter를 통해 서블릿 환경에서 리액티브 모델을 지원 한다.리액티브 서버 기반 (Netty, Undertow 등): 비동기 및 논블로킹 방식의 리액티브 서버에서 WebFlux를 실행할 수 있는데, 이 경우 서블릿 API와는 다르게 완전히 논블로킹 방식으로 동작하.. 2024. 12. 10.
org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid in a profile specific resource [origin: class path resource [applic org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid in a profile specific resource [origin: class path resource [application-dev.yml] 와 같은 오류는!!스프링 부트 2.4 이전에는 profiles 에 구분자를 추가하고 applicatioin.yml 등의 default profiles 에 "-" 로 구분 되는 yml 파일로 사용이 가능했다 예) applicatio.. 2024. 12. 9.
Kotlin Spring Boot docker file 빌드 배포 kotlin spring boot 로 개발하면서 jar 로만 배포하는 개발자들이 아직도 있어서 글을 작성! 이제는 docker 를 써야할때!!아래와 같이 프로젝트 내 dockerfile 을 생성한다. FROM azul/zulu-openjdk-alpine:17 as builderCOPY build.gradle settings.gradle gradlew ./COPY ./gradle ./gradleCOPY ./src ./srcRUN chmod +x ./gradlewRUN ./gradlew clean bootJarFROM azul/zulu-openjdk-alpine:17-jreCOPY --from=builder /build/libs/*.jar /app.jarEXPOSE 8080ENTRYPOINT ["java",.. 2024. 12. 5.
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref : "/settings.gradle.kts": not found 도커를 사용하다가 빌드 시 아래와 같은 오류가 났다면!! ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref : "/settings.gradle.kts": not found 방법은 간단하다! 해당 파일이 없다는 뜻이며, 오류가 난부분이 copy 영역이면 확장자까지 고려하여 동일한 파일이 있는지 확인필요! 끝.. 2024. 12. 5.
코루틴에 대해서 ( about " Coroutine ") 코틀린 스프링에 적용하는 코루틴에 대해서 얼마만큼 알고 있는가?기본적인 내용을 간략 하게 정리해 보겠다. 코루틴!범 코틀린 라이브러리 중 하나이며, async, await, future, promise, actor 등을 이용하여 동시성 지원이 가능하다.추가로, 아래와 같은 동서성문제를 해결하는 기능들을 제공한다. 1. thread 의 가벼운 대안2. 유연한 thread dispatch3. 일시중단이 가능한 sequence와 iterator4. Channel 을 사용한 메모리 공유5. actor 를 통한 message 전송방식 지원 Java web mvc 기반을 고려하면(web flux 아님), 대부분의 동시성 연산이 블로킹(blocking) 처리된다.thread 를 블로킹 후 다시 실행을 이어가려면, c.. 2024. 12. 3.
Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Not Found, status=404) graphql expediagroup 해결하기 Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Not Found, status=404) 라는 오류 본적이 있는가?(흔하게 봤을 것이다.)일반적인 경우는 쉽게 해결가능하다(말그대로 default page 든 아무것도 없기 때문이다.) 하지만, graphql 을 사용하는데, 제대로 세팅한거 같은데 위와 같은 오류가 발생할 경우!???이를 해결하기 위한 자료가 부족하기 때문에, 꼭 필요한 사람을 위해 글 작성을 해본다. 위와 같은 오류가 뜨는데, 여러가지 원인이 있겠지만,일반 SpringMVC.. 2024. 11. 29.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schema' defined in class path resource [com/expediagroup/graphql/server/spring/NonFederatedSchemaAutoConfiguration.class]: Failed to instantiate [graphql.schema.GraphQ 제목과 같은 오류 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schema' defined in class path resource [com/expediagroup/graphql/server/spring/NonFederatedSchemaAutoConfiguration.class]: Failed to instantiate [graphql.schema.GraphQLSchema]: Factory method 'schema' threw exception with message: Invalid query object type - no valid queries are available. 가 뜬다면!!?!.. 2024. 11. 28.
Failed to bind properties under 'graphql' to com.expediagroup.graphql.server.spring.GraphQLConfigurationProperties: 오류 해결 하기 expediagroup 에서 제공하는 graphql 을 처음 세팅하다보면 아래와 같은 오류 화면을 보게되는 경우가 있다. 당황하지 말자!!해결방법은 간단하다. application.yml 또는 application.properties에서 graphql 관련 설정을 추가하거나 수정하면 끝!graphql: packages: - "com.project.servername” 2024. 11. 28.
자동 주입을 할 수 없습니다. 정규화된 bean은 ‘xxxx’ 타입이어야 합니다. , 조회 빈이 두개일 때 문제점 !! 어떻게 해결할 것인가? feat Spring 오류 코드자동 주입을 할 수 없습니다. 정규화된 bean은 ‘xxxx’ 타입이어야 합니다. 보통 조회되는 빈이 2개일 때 발생하는 오류 코드이다.여러 방법이 있지만 아주 간단하게 @Primary annotation 만을 적용하여 쉽게 해결할 수 있다. @Primary // 이부분@Bean("bean name")fun project(): projectResult { return responseTemplete()} 간단하게 해결되는 것을 볼 수 있다! 2024. 11. 21.
@EnableConfigurationProperties을(를) 통해 등록되지 않았거나 Spring 구성 요소로 표시되었거나 @ConfigurationPropertiesScan을(를)통해 검사됨 [오류] 해결방법!! Java or Kotlin Spring 으로 초기 세팅개발을 하다보면(혹은, 개발중이라도)아래의 오류를 간혹 보곤한다.@EnableConfigurationProperties을(를) 통해 등록되지 않았거나 Spring 구성 요소로 표시되었거나 @ConfigurationPropertiesScan을(를)통해 검사됨 그게 고민할 필요없이@ConfigurationProperties 사용을 할때에는 아래의 annotation 만 추가해주자! @ConfigurationPropertiesScan 소스에서 적용한것을 보면~@ConfigurationPropertiesScan // 이부분@SpringBootApplicationclass MainApiApplicationfun main(args: Array) { runAp.. 2024. 11. 21.
728x90