
개요저번에도 언급했지만, 구글 드라이브와 같은 파일 저장소 서버를 계속 개발하고 있다. 올 4월 전시회 출품하는 단계까지는 개발을 완료했지만, 우려되는 부분이 많아서 고민들 중 하나를 정리해보려고한다. 가장 걱정되는 부분 중 하나가 업로드다. 현재 구현 방식에는 문제가 있을 수밖에 없다. 이전 글도 사실 파일 업로드를 어떻게하면 효과적일지에 대한 고민을 하면서 작성한 글이었다. MultipartFile에서 부터 찾아들어간 Multipart/form-data 전송 방식. 그리고 chunked 업로드 그리고 결론부터 말하면, 내가 고민한 것에 대한 정답은 이미 나와있었고 의외의 곳에서 힌트를 얻었다. 문제점현재 서비스의 업로드의 가장 큰 문제는 서버가 파일 업로드/다운로드를 중개해준다는 것이다.사용자 ..

개요서비스에 파일 다운로드 시나리오가 추가되었다. 과부하에 대응하기 위해 파일을 인메모리에 저장하지 않고 스트림을 통해 클라이언트에 전달하는 방식을 사용했다. 이에따라 응답에 파일 이름을 전달할 수 없게 됐고, 파일명을 다른 방식으로 전달할 수 밖에 없었다. 어떻게 처리할까 고민하다가 Content-Disposition 헤더를 알게되서 이번에 사용해봤다. 동작 자체는 잘 됐지만, 다기종과 연동하면서 생긴 문제를 함께 정리해보려고 한다. Content-Disposition란?일반적인 HTTP 응답에서 Content-Disposition 헤더는 컨텐츠가 브라우저에 inline 되어야 하는 웹페이지 자체이거나 웹페이지의 일부인지, 아니면 attachment 로써 다운로드 되거나 로컬에 저장될 용도록 쓰이는 것..

개요 현재 담당하고 있는 제품이 해외 결제 시스템을 추가하게 됐다. 이에 따라 고려해야할게 몇 가지 있었다. 1. 어느 지역 까지 커버할 것인가? 2. 구독이 정상적으로 동작할 것인가?3. 데이터 유실 없이 안정성은 보장할 수 있을 것인가?4. 개발하기 간편한가?5. 환불이나 CS 운영적인 부분도 커버가 가능한가? 이리저리 알아볼 것도 없이 Stripe가 가장 강력한 후보가 됐다. Twilio 때도 그랬지만 북미에서 제공하는 SaaS 형식의 제품들은 사용하기는 편하지만 생각보다 비싸다. 그래도 자체 인프라 없이, 월간 결제 형식이 아니라 on-demand + 수수료로 책정되는 모델이라 초기 모델로는 더할 나위 없을 것 같았다. 이번 글에서는 완전히 도입까진 아니고 developer 사이트에서 결제 세션..

개요간단한 검색 기능을 넣어놨는데... 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..
- Total
- Today
- Yesterday
- AWS
- springboot
- GIT
- docker
- EKS
- CORS
- java
- ChatGPT
- Spring
- 티스토리챌린지
- 인프런
- object
- 스프링부트
- Log
- lambda
- elasticsearch
- 오블완
- OpenAI
- 후쿠오카
- terraform
- cache
- ecs
- AWS EC2
- CloudFront
- AOP
- JWT
- serverless
- Kotlin
- S3
- 람다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |