서비스의 규모가 커짐에 따라 수정 사항도 늘어나고, 서로 간의 의존성도 커지면서 다른 한쪽의 문제를 예상하지 못하고 수정해버려서 발생하는 이슈가 늘어났다. 그래서 개발을 할 때나 수정할 때 점점 부담이 많이 생기게 되서, 제대로된 테스트의 도입 방식을 검토했다. 이전에 강의를 하나보고 여기에 감명을 받았다. 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..
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
- AOP
- AWS EC2
- 스프링부트
- Elastic cloud
- lambda
- openAI API
- Spring
- Log
- JWT
- CloudFront
- 후쿠오카
- elasticsearch
- GIT
- springboot
- cache
- OpenFeign
- 람다
- 티스토리챌린지
- AWS
- S3
- EKS
- OpenAI
- MySQL
- terraform
- docker
- ChatGPT
- 오블완
- serverless
- java
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |