본문 바로가기
반응형
Paging3 - insertSeparators 활용하여 갤러리 구현하기 사진 갤러리에서 날짜 데이터를 추가해야 할 일이 생겼습니다. Paging3는 PagingData로 데이터가 감싸져 있어서, 내부 데이터를 다룰 수가 없는 불편함이 있는 만큼insertHeaderItem(), insertFooterItem(), insertSeparator() 같은 내부 함수들을 지원합니다.  이 중 insertSeparator()를 활용하면, 우리가 갤러리 앱에서 볼 수 있는 UI를 쉽게 구현할 수 있습니다.@CheckResult@JvmSyntheticpublic fun PagingData.insertSeparators( terminalSeparatorType: TerminalSeparatorType = FULLY_COMPLETE, generator: suspend (T?, .. 2025. 2. 20.
Spring Data JPA 에는 ON DUPLICATE KEY UPDATE 가 없다 ! 어떻게 해야할까 ! 이번에 새로운 서비스를 개발하다가 필요한 기능이 생겼다.이번 서비스는 일종의 크롤링과도 관련이 있다.  주기적으로 타 API를 호출하여 데이터를 가져와서1. 기존 데이터셋에 추가하거나2. 기존 데이터의 필드 중 변경사항이 있다면 업데이트해주어야 한다. 문제는, 타 API에서 하나의 데이터를 두 개로 관리해주고 있다.그래서 나는 이 데이터를 합쳐서 하나의 테이블로 관리해주어야 한다.  API 1은 기본 정보에 관한 것이다.{ userId: 1, name: "john", phone: "012-3456-789"}  API 2는 세부 정보에 관한 것이다.{ userId: 1, job: "Student", introduce: "Hello, my name is jonh", vi.. 2025. 2. 19.
AWS 불완전한 멀티파트 업로드 용량 관리하기 백엔드 서버를 개발함에 있어서 파일 업로드 기능을 구현할 때 대표적인 방법은 3가지가 있습니다. 1. Stream2. MultipartFile3. AWS Multipart upload 1, 2번 방식을 이용하면 파일 업로드나 임시 파일 관리에서 결국 서버를 경유해야 하기 때문에하나의 통합된 서버에서 서버의 리소스가 충분치 않다면, 업로드 작업을 처리하느라 다른 작업들에 대해 영향을 받을 수 있게 됩니다. 적은 자원으로 서버를 운영하면서 파일 업로드도 구현하기 위해서는 3번 방법이 적절하나, 구현 난이도는 제일 복잡하며이는 단순 이미지 파일만 업로드가 필요한 서비스의 경우에는 오버엔지니어링이라고 볼 수도 있습니다.   저는 파일/이미지 업로드를 제공하는 서비스이기에 3번(AWS Multipart uploa.. 2025. 2. 19.
Spring Kotlin에 Ktlint 적용하기 Ktlint는 Kotlin 언어의 공식적인 컨벤션을 준수할 수 있도록 스타일을 검사해 주는 도구입니다.깔끔한 코드를 작성하는데 있어서의 약속이자 규약이기도 합니다. 꼭 지켜야 하는 것은 아니지만, 가독성을 고려하여 협업을 위해선 권장되는 방식입니다.우아한테크코스 6기를 진행하는 동안에도 현직자분들과 코드리뷰를 할 때 Ktlint를 적극적으로 활용하고 있습니다.개행이나 들여쓰기가 제각각 멋대로라면 코드 읽기가 불편하겠죠? 협업을 한다면 적극적으로 활용하시길 바랍니다!  build.gradle.kts에 다음 의존성을 추가합니다.plugins { id("org.jlleitschuh.gradle.ktlint") version "12.1.0"} 그러면 설정이 끝났습니다!  2가지 방법으로 사용합니다대표적으로.. 2025. 2. 19.
Exceeded limit on max bytes to buffer: 해결하기 AWS EC2 서버에서 크롤링을 진행하는 과정에서 문제가 발생하였다.API 호출에 대해 3번까지 retry를 걸었지만, 3번 모두 실패한 경우가 발생하였고특정 페이지 특정 데이터를 가져오려고 할 때에만 문제가 발생한다는 특이점을 얻었다. 처음 마주한 Exception은 아래와 같았다org.springframework.web.reactive.function.client.WebClientResponseException: 200 OK from GET 내 EC2 서버에서는 WebClient를 사용했고, 이 에러는 WebClient를 사용해서 데이터는 200 OK로 성공적으로 호출했으나데이터 변환 등의 과정에서 문제가 발생했다는 오류였다. 곧바로 내 로컬 서버에서도 돌려본 결과 마찬가지로 특정 페이지에 대해서만 .. 2024. 11. 5.
Spring Scheduled가 EC2 에서 시차가 생길 때 Spring에서 Scheduled를 사용하면, 정해진 시간 또는 일정 간격 마다 특정 함수를 실행시킬 수 있습니다.혹시 해당 기능을 EC2에서 사용해보셨나요? 일정 간격 마다 실행할 경우에는 문제가 되지 않겠지만, 고정된 시간을 설정했을 경우엔 의도한 대로 실행되지 않을 것입니다.예를 들어 다음과 같이 "매일 아침 8시, 오후 1시" 를 기대하고, zone을 Seoul로 맞추기까지 했지만@Scheduled(cron = "0 0 8,13 * * ?", zone = "Asia/Seoul") // 매일 아침 8시, 오후 1시 로컬에서는 잘 실행될지 몰라도 EC2에 올라갔을 때에는 의도했던 시간에 실행되지 않습니다.  그 이유는, EC2의 기준 시간이 UTC 이기 때문이며, 그렇기 때문에 이밖에도 기존에 사용하.. 2024. 11. 2.
✓ Built build/app/outputs/flutter-apk/app-debug.apk 무한 로딩 옛날에는 이런 적이 없었는데 요즘에는 앱을 빌드하다 보면 아래 부분에서 무한으로 멈춥니다..✓ Built build/app/outputs/flutter-apk/app-debug.apk  언젠가는 갑자기 됐다가.. 언젠가는 또 갑자기 안되고..이건 정말 앱을 개발하면서 굉장히 스트레스 받는 시간이었습니다 ㅜ..ㅜ이런 저런 방법을 다양하게 시도해봤고, 그 과정을 통해 일종의 방식을 나열해보게 되었습니다. 터미널에서 다음과 같은 순서로 진행하면 됩니다. 1.dart fix --apply 2.flutter clean  3.flutter build apk 4.휴대폰의 연결을 해제했다가 연결 5.adb shell pm clear {패키지} 6.flutter run  도움이 되셨길 바랍니다..저는 정말 다양하게 검색.. 2024. 11. 2.
Spring Kotlin - WebClient 인코딩 주의사항 ! WebClient를 이용하다 보면, API_KEY나 serviceKey 개념을 사용하실 경우도 있을 텐데요이 때, 주의하셔야 할 점이 있습니다. (물론 정..상 적인 api 명세라면 문제가 없을 겁니다) 올바른 API KEY를 전달했음에도 불구하고 WebClient 자체적으로 인코딩을 적용하기 때문에개발자가 넣은 API KEY가 변형되어 전달될 수 있기 때문입니다. 공감하시는 분들은 인증 Key를 잘 입력했는데도 불구하고, 올바르지 않은 키가 입력되었다는 경험을 하고 계실 겁니다.직접 로그를 찍어보시면, 전달했던 API KEY와 실제로 적용되고 있는 API KEY가 다르다는 것을 요청 url을 통해 확인할 수 있습니다. %3D -> %253D이런식으로 말이죠! WebClient의 기본적인 인코딩 방식은 .. 2024. 8. 18.
우아한테크코스 6기 조기 수료, 삼성전자 입사 "참 많은 것"상투적이지만 정말 함축적인 의미 우아한테크코스에서는 참 많은 것을 배웠다. 다른 많은 사람들에게도 도움이 되는 과정이었겠지만나에겐 정말 꼭 필요한 과정이었다. 우아한테크코스를 통해 Kotlin의 기본부터 다시 복습해 배워나갔고Android, Test Code, Clean Architecture, Design Pattern, Corporation, Mindset 등정말 다양한 분야를 공부하였다. 매일같이 보내는 동기들과 함께 협업도 하고, 의견도 주고받고 정말 꿈의 과정이었다.어쩌면 대학보다 우아한테크코스 과정을 모든이에게 전면 추천해주고 싶다. 그리고 삼성전자에 덜컥 입사했다. 기대 없이 갑작스럽게 찾아왔다.그동안 내가 해왔던 분야들을 뒤로 해야 할지도 모른다는 생각에 고민이 많았고, 지금.. 2024. 8. 16.
반응형