스프링+자바에서는 종종 static 클래스나 매서드를 쓴다. static 매서드/클래스를 쓰게 되면, 빈보다 먼저 생성되기 때문에 굉장히 유용하게 쓸 수 있는데, 코틀린에서는 특이하게 static이라고 명명하지 않고 다른 이름으로 사용한다. companion object라는 이름으로 사용하는데 자바에서의 static과는 사용법이 조금 다르다. 공용 클래스에 static 매서드로 만들어진 UTC KST 시간 변환 매서드가 있다고 해보자. Java public class CommonUtils { public static LocalDateTime convertToUtc(LocalDateTime localDateTime) { if (localDateTime == null) { return null; } Zone..
이전 프로젝트는 현재 담당하고 있는 것 보다 규모가 훨씬 커서 테이블의 종류가 많았다. 그래서 다양한 테이블에 insert하는 매서드의 경우 중간에 오류가 발생하는 경우를 대비해 별도의 Exception을 정의하고 데이터 무결성을 위해서 rollback 처리를 반드시 해줬어야 했다. 그런데 현재 프로젝트로 넘어와서 코드를 확인해보니, @Transational 어노테이션만 붙이고, rollback은 따로 처리하지 않고 있었다. 지금 생각해보면 이유라기보다는 개발자의 미숙에 가까운게, 해당 프로젝트는 단 하나의 CustomException이 없었다. Checked Exception이 없기 때문에 굳이 rollbackfor를 정의할 필요가 없다는 생각이었을까? 정말 안전할지 알아보자. Transcational..
키나 환경변수를 관리하는 툴은 정말 많다. AWS에서 자체적으로 제공하는 경우도 있고, GitHub에서 심어줄 수도 있고 다양한 방법이 있다. 가장 최악의 경우는 Application.yaml 파일에 실수로 그냥 실어버리고 GitHub에 배포하는 경우다. (OpenAI의 경우, 이 부분을 어떻게 캐치해서 강제로 키를 새로 발급해버린다.) 개인적으로 이것저것 써봤을 때, 가장 맘에 들었던게 DotEnv다. 간단하게 사용법을 안내하자면, src아래에 .env 파일에 키를 저장해놓고, 쓰면 되고 .gitignore에 등록해놓고 쓰면 된다. 파일을 만들어놓고 gitignore에 설정해놓으면, 다시 볼일이 없어서 관리하기 편했기 때문에 사용하기 편했다. 이제 설정하는 법을 알아보자. build.gradle.kts..
들어가기 앞서 아직 이 기능은 GPT 홈페이지에서는 제공하지 않는다. 아직은 API로만 사용 가능한 것으로 확인된다.(GPT-Turbo를 개발자에게 우선 제공한다고 하긴 했다) 11월 6일부터 GPT-4 Turbo를 사용할 수 있게 되었다. 가장 눈에 띄는건 토큰 수가 12만 8천개 까지 증가했다는 것이다. 11월 6일 샘 알트먼의 발표에 따르면, 토큰 활용 개수를 증가시키고 가격도 인하했다고 한다. 또한, 23년 4월까지 학습시킨 데이터를 기반으로 응답을 주기 때문에 기존 22년 1월까지의 데이터에 비해 비교적 최신 데이터로 갱신 되었다고 한다. 그리고 몇 가지 기능이 추가 되었는데, 그 중 하나가 모델들을 살펴보면, gpt-4-vision-preview가 추가 되었는데 이 모델을 통해 이미지 인..
이전 글에서는 GitHub Actions에서 컨테이너를 만들고 ECR에 업로드까지 진행해봤다. 하지만 ECR에 업로드할 컨테이너 이미지를 만드는 과정에서 Dockerfile을 필요로하고, 빌드도 포함해야 한다. 이 과정이 불필요하게 프로세스를 잡아 먹기 때문에 아래와 같이 JIB을 이용해 이미지를 바로 생성한다. Jib는 애플리케이션을 컨테이너 이미지로 패키징하는 모든 단계를 처리합니다. Dockerfile을 만들거나 Docker를 설치하기 위한 권장사항을 알 필요가 없습니다. 구글에서 제공하는 JIB 공식 사이트에서 소개한 말인데 딱 적절하게 소개해 준 것 같다. 사용방법은 간단하다. 의존성은 따로 정의할 필요 없이 build.gradle 파일에 필요한 내용들을 작성하고, github acti..
이전 글에서 SMS 본인 인증(엄밀히 말하면 휴대폰 인증)을 구현하는 법을 간단히 알아봤다. 하지만 문제는, 반복 요청에 대한 처리를 하지 않았는데 이 외에도 몇 가지 문제가 더 있다. 1. 이미 인증한 사람이 인증 번호 반복 요청 2. 아직 인증하지 않은 사람의 인증 번호 반복 요청 3. 인증한 사람이 다른 번호로 인증 번호 반복 요청 인증 번호를 요청하는 것은 단순하게 생각하면 FE에서 막아줄 수 있다. 문제는 새로고침 했을 때, 이 사람이 인증을 했거나 대기 중인 상태란 걸 내려 줄 수 있어야 한다. (그렇지 않으면 당연히 반복 요청을 할 수 있을 것이다) 방법은 여러가지가 있을 것 같다. user 테이블에서 sms_cert 와 같은 컬럼을 생성하고 , "Y", "N", "P"(pending) 값을..
Java와 다른점이 보일때마다 쓰는 Kotlin - 2 자바에서는 매서드 파라미터나 return 값을 범용적으로 사용하고 싶을 때 Object로 타입을 지정한다. (Object는 모든 객체의 최상위 부모 클래스이다.) 코틀린에서는 비슷한 의미로 Any를 쓴다. Any도 코틀린의 최상위 클래스이다. Any를 타고 들어가보면 아래와 같은 설명이 있다. The root of the Kotlin class hierarchy. Every Kotlin class has Any as a superclass. 따라서 Any는 Object와 사실상 큰 차이가 없다. 차이가 있다면 이후에 타입을 판별하는 부분인데, 코틀린에서는 스마트 캐스트라는 기능을 추가적으로 제공한다. 그리고 자바에서 Object를 사용할 때 어떤 객..
Java와 다른점이 보일때마다 쓰는 Kotlin - 1 application.yml에 지정해놓은 환경 변수 값 혹은 environment 값을 가져올 때 Spring-Java에서는 @Value를 쓴다. 예를 들어, Spring-Java에서 프로필 값을 가져올 때는 별도의 설정 없이 아래와 같이 값을 가져올 수 있다. @Value("${spring.config.activate.on-profile}") String profile; 그런데 코틀린에선 위와 같이 Value를 지정해선 동작하지 않는다. 코틀린에서는 조금 다르게 사용해야 한다. @Value("\${spring.config.activate.on-profile}") lateinit var profile: String 일단 자바랑 다르게 이스케이프 문자..
- Total
- Today
- Yesterday
- 오블완
- terraform
- GIT
- elasticsearch
- springboot
- serverless
- 람다
- OpenAI
- 후쿠오카
- cache
- java
- Log
- JWT
- EKS
- AOP
- docker
- S3
- OpenFeign
- openAI API
- 티스토리챌린지
- 스프링부트
- Spring
- Kotlin
- Elastic cloud
- ChatGPT
- CloudFront
- AWS
- MySQL
- lambda
- AWS EC2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |