
개요간단한 검색 기능을 넣어놨는데... iOS에서 올린 데이터가 검색이 안된다는 이슈가 올라왔다. 그래서 DB를 뒤적거려보니... 아래와 같이 저장되어 있었다. 사실 처음부터 데이터가 이렇게 저장되고 있다는건 알고 있긴했다. 그런데, 문자열 기반 검색이 아닌 단순 조회에서는 신기하게 제대로 출력되서 큰 걱정은 안하고 있었다. 그런데 문자열 기반 검색이 안되기 때문에 조치가 필요했다. 가장 쉬운 방법은 쿼리에서 데이터 마이그레이션을 하고, 클라이언트에서 NFC 방식으로 업로드하는 것을 유도하는 것이다. 그런데, 클라이언트가 바로 패치를 못하는 경우가 있다. 이 때는 서버에서 단독으로 조치를 해줘야한다. 해결 방법을 하나씩 알아보자. 1. PostgresSQL에서 NFD방식을 NFC로 마이그레이션하기특정 버..

개요현재 프로젝트에서 파일 저장소로 S3를 사용하고 있다. 파일을 저장하면서 몇 가지 요구 사항이 붙게 됐다. 1. 업데이트를 하면 파일이 새로 업로드됨2. 그런데 업데이트 하기 전 파일로 롤백하려는 요구 사항이 있을 수 있음3. 그럼 업데이트된 파일을 어떻게 관리할 것인가? 사용하지 않는 파일에 아이디를 일일히 부여하는게 맞는가? 그럼 로우가 계속 늘어날텐데?4. 그러면 삭제 정책이 필요한데, 얼마나 저장할 것이며 어떻게 삭제할 것인가? 스케줄러를 돌리는 것도 말이 안되지 않나? 이런식으로 계속 꼬리질문이 나오는 상황에서 S3를 뒤져보던 중 객체 버저닝이란 것을 알게 됐다.https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/versioning-w..

이 글에서 조금 더 나아간 버전이다.2024.02.01 - [개발/Kotlin] - 코틀린에서 static class 사용하기 : companion object - 자바와 다른 점 3 Utility 클래스 용으로 static을 사용하기 위해서 companion object를 쓰다가 확장함수까지 알게되서 정리한 글이었고, 이번엔 object를 걸 알게되서 다시 작성해본다. 아래에 작성한 내용들은 내가 사용하면서 느낀 점들이 조금씩 녹아있어서 오피셜한 내용을 파악하고 싶으면 코틀린 공식 문서를 보는 것을 추천한다. https://kotlinlang.org/docs/object-declarations.html#data-objects 목차를 따고 들어가면 다음 순서로 정리된다. 1. compaion object..

서비스의 규모가 커짐에 따라 수정 사항도 늘어나고, 서로 간의 의존성도 커지면서 다른 한쪽의 문제를 예상하지 못하고 수정해버려서 발생하는 이슈가 늘어났다. 그래서 개발을 할 때나 수정할 때 점점 부담이 많이 생기게 되서, 제대로된 테스트의 도입 방식을 검토했다. 이전에 강의를 하나보고 여기에 감명을 받았다. 2024.04.15 - [일상] - [인프런 강의] Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트를 듣고위 그래프처럼 개발 양은 많아지는데, 이게 잘 동작할까? 에 대한 부담감이 점점 커지는 상황이라 조치가 필요해졌다. 그러나 테스트 도입에는 정말 많은 애로 사항들이 있었는데... 다음과 같은 의사결정이 필요했다. 1. 테스트의 종류 선정: 몇 종류의 테스트를 실행할 것인가?2. 어..

스프링+자바에서는 종종 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..

일단 나는 API 문서화 + 공유용으로 Postman을 더 선호한다. 그런데 내가 Postman을 선호하고 잘 쓸 수 있었던 가장 큰 이유는 팀 규모가 크지 않았기 때문이라 생각한다. 팀 규모가 커지면 Postman은 상당히 비싼 툴이기 때문이다. 팀 규모가 커져서 Postman을 놓아줄 경우 대안은 여러 종류가 있지만, OpenAPI + Swagger-ui 를 많이 쓴다. 그런데 난 Swagger를 선호하지 않는다. 거기엔 이유가 몇가지 있다. 1. SpringBoot에서 쓰기엔 코드에 너무 많은 어노테이션들이 들어가서, 오히려 코드의 가독성을 망친다. 2. springdoc, springfox에 spring 버전, openapi 버전, java/kotlin 버전에 따라 사용법이 너무 달라서 잘 쓰기 ..

문제 상황은 다음과 같다. 단건 저장 위해서 아래와 같은 요청 객체를 만들었다. data class QuizRequestDto( val question: String, val answer: String, val hint: String? val order: Int, val visible: String ) 그리고 정상적으로 동작하는 것을 확인하고, Bulk 수행을 위해서 다음과 같은 요청 객체를 만들었다. data class QuizListRequestDto( val quizList: List ) 테스트 요청을 날려보니 아래와 같은 에러를 뱉는다. 11:36:51.103 [http-nio-8080-exec-4] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.se..

키나 환경변수를 관리하는 툴은 정말 많다. AWS에서 자체적으로 제공하는 경우도 있고, GitHub에서 심어줄 수도 있고 다양한 방법이 있다. 가장 최악의 경우는 Application.yaml 파일에 실수로 그냥 실어버리고 GitHub에 배포하는 경우다. (OpenAI의 경우, 이 부분을 어떻게 캐치해서 강제로 키를 새로 발급해버린다.) 개인적으로 이것저것 써봤을 때, 가장 맘에 들었던게 DotEnv다. 간단하게 사용법을 안내하자면, src아래에 .env 파일에 키를 저장해놓고, 쓰면 되고 .gitignore에 등록해놓고 쓰면 된다. 파일을 만들어놓고 gitignore에 설정해놓으면, 다시 볼일이 없어서 관리하기 편했기 때문에 사용하기 편했다. 이제 설정하는 법을 알아보자. build.gradle.kts..
- Total
- Today
- Yesterday
- AWS
- CloudFront
- terraform
- lambda
- MySQL
- S3
- cache
- 후쿠오카
- springboot
- serverless
- 오블완
- Kotlin
- 티스토리챌린지
- ChatGPT
- AWS EC2
- elasticsearch
- EKS
- Elastic cloud
- AOP
- Log
- 스프링부트
- Spring
- openAI API
- GIT
- java
- OpenAI
- object
- JWT
- docker
- 람다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |