매일 특정 시간마다 알림톡을 발신하는 기능을 만들려고 한다. 스케줄러 역할에는 AWS의 EventBridge를 사용했고 이벤트 메세지 발신용도로 SQS를 사용했다. 개발 환경은 아래와 같다. Kotlin 플러그인 버전 1.7.22 스프링부트 3.0.5 id("org.springframework.boot") version 3.0.5 JDK 17 java.sourceCompatibility = JavaVersion.VERSION_17 MySQL, JPA, QueryDSL 기타 id("io.spring.dependency-management") version 1.1.0 지금부터 소개할 내용들은 아래 자료를 참고하였다. 소개할 내용들이 이해가 가지 않는다면 아래 자료를 읽어볼 것을 권장한다. AWS SQS + ..
스프링에서 Mock을 활용한 테스트를 할 때, Mockito를 가장 많이 사용할 것이다. 그리고 검증 로직을 만들 때 호출 횟수 기준으로 테스트 코드를 짜는 경우가 있다. // when userService.create(userSignUpRequest) // then verify(userRepository, times(1)).save(any()) verify(emailSender, only()).send(any(), any()) 처음에는 2가지 모두 1회만 사용한다는 점에서 동일한 용도가 아닐까 했다. 즉 아래와 같다. // userRepository라는 Mock bean은 save를 1회만 호출한다 verify(userRepository, times(1)).save(any()) // emailSende..
한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다...만진심이 담겨있습니다. 허위 사실 유포는 😎일절 없음. 안드로이드 개발 서적을 고르는 기준 수많은 개발 서적이 있고, 그 중 베스트셀러도 있기 마련. 그 중에서도 하나를 고를려면 어떤 기준으로 골라야할까. 개발 분야는 짧은 기간에 많은 것들이 바뀐다. 트렌드부터 Deprecated되는 기술까지 여러 형태로 업데이트된다. 그래서 공부를 할 때 최신 정보가 맞는지 중요하다. 물론 기본서라면 기본서의 역할에 맡게 쉽고 충분한 설명이 포함되어야 한다. 그리고 그 기본서가 안드로이드 개발 서적이라면 '최신' 정보가 포함되어 있는지도 중요하다. 왜 그럴까? 위에서 보이는 것처럼 안드로이드는 수많은 API 버전이 존재한다. API 버전이 올라가면서 안드로이..
⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) 문제 발견 Sequence 인터페이스를 학습하고 있었다. 공부하던 예시에서 구현한 라이브러리를 보려고 추적을 했는데 아래와 같이 2개의 파일을 발견했다. 아래 이미지에서 가장 왼쪽은 Sequence 인터페이스, 그리고 중간이 Sequence.kt, 오른쪽이 _Sequence.kt 파일이다. 왜 동일한 package에 언더바를 제외하면 동일한 이름의 파일이 2개나 있을까? The Kotlin Standar..
서두 본 글은 코틀린 + 스프링부트 환경에서 @Valid가 동작하지 않는 케이스를 다루었고 해당 이슈를 완전히 해결하지 못했음. 해결을 하기는 했는데 해결이 된 이유를 알 수 없음. 완벽한 해결책을 찾고자 했다면 "뒤로가기" 버튼을 누르기 바람 설명에 앞서 개발환경을 간단히 소개하고자 한다. 혹시나 나와 비슷한 상황을 겪고 이를 해결한 분이 계시다면 댓글로 안내를 부탁드...립니다. (제발) 아래는 gradle 스크립트 중 일부이다. plugins { id("org.springframework.boot") version "2.5.0" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version "1.5.10" ko..
⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) 연관관계로 엮여있는 엔티티를 조회했을 때, 분명히 FetchType.LAZY를 적용했음에도 연관관계의 모든 엔티티가 조회되는 상황을 볼 수 있다. 그럼 혹시 아래 경우인지 확인해보자. 코프링 (코틀린 + 스프링) JPA를 사용한다 연관관계에 지연로딩을 적용한다. (FetchType.LAZY) // 예) @Entity class Product @ManyToOne(fetch = FetchType.LAZY) ..
인프라 지식이 거의 없는 나에게 AWS 이슈는 재앙과 같다. 이번에는 직장 동료와 함께 5시간 가까이 이 문제만 갖고 머리를 싸매고 있었다. 그 경험을 공유해본다. 사내 프로젝트 Git에서 dev 브랜치의 소스를 개인 브랜치에 merge를 하고 난 뒤 생긴 이슈였다. 먼저 확인된 에러 로그의 일부는 다음과 같다. (보안적인 이유로 일부 내용을 수정하였다.) Error creating bean with name '★★★★★★' defined in file [/Users/★★★★★.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory...
같이 공부하는 친구들끼리 얘기하다가 나온 이슈. Intellij에서 Java로 코드를 만들 때와 kotlin으로 코드를 만들 때, main 함수의 모습이 왜 다를까? 우선 아래 코드를 보자. // Java : Sample.java public class Sample { public static void main(String[] args) { // blah blah } } // Kotlin : Sample2.kt fun main(args: Array) { // blah blah } 자바 코드는 내부에 클래스를 선언하는 부분이 있다. 그 내부에 main 함수가 있다. 하지만 코틀린은 클래스를 별도로 선언하는 부분이 없다. 자바에서는 Sample을 객체화하려면 이 선언이 필수다. 그러면 코틀린은 이 선언이 없..
자고로 제목은 (적당히) 자극적으로 쓰는게 재밌다. 지나친 어그로가 아니라면 조회수도 오르고 쓰고 읽는 맛도 나니깐. 이번 제목은 단순한 어그로는 아니다. 개발자끼리 대화, 구직중 면접 등에서 코틀린의 장점을 수도 없이 물어보고 답하게 된다. 지난 1년간 수십번은 이 얘기를 한 것 같다. 그래서 누군가 물어볼 때 차라리 보고 읽도록 정리를 하려고 포스팅 소재를 "코틀린의 장점"으로 정했다. 자잘해보이는 장점도 다루고자 한다. 이번 글은 요즘 필자가 공부하는 서적인 "코틀린 프로그래밍 쿡북"을 많이 참고 하였다. 구글이 안드로이드 개발을 위한 공식언어로 코틀린을 지정했다. 기술적 접근이 아니지만 구글이 채택했다는 것은 장점으로서 매우 큰 부분이다. 안드로이드는 전세계 모바일 환경을 양분하는 시장 중 하나이..
효율적인 안드로이드 앱 개발https://www.slideshare.net/deview/1-a5-39609525초급에서 벗어나기 위해 참고하면 좋을 글 안드로이드에 Clean Architecture 적용하기https://academy.realm.io/kr/posts/clean-architecture-in-android/코틀린 예시로 만든 레이어 구조
Comment