전체 글
Java Spring 엔티티 of 도메인 생성자
이 문서에서는 of 메서드의 의미와 형태, 테스트 방법에 대해 알아봅니다. of 함수의 의미와 형태 of 함수는 새로운 객체를 생성하기 위한 함수입니다. 생성자 함수와 기능이 같은데 의미는 조금 다릅니다. of 함수는 객체로 새로운 객체를 만든다는 의미를 가지고 있습니다. 예를 들어, 모임 접수를 나타내는 MeetReceipt 객체를 만들기 위해 다음과 같은 of 함수가 정의됩니다. public static MeetReceipt of(Long meetId, MeetReceiptRequestBody meetReceiptRequestBody){ return MeetReceipt.builder() .meetId(meetId) .userId(meetReceiptRequestBody.getUserId()) .st..

Flutter BLOC 기반의 Widget Test
BLOC 패턴을 적용하면 가독성있는 테스트 코드를 작성할 수 있다. 특히 각각의 BLOC 단위 테스트 말고도 BLOC과 상호작용하는 위젯을 테스트하는 코드도 깔끔하게 작성할 수 있다. 이 문서에서는 BLOC 패턴이 적용된 페이지 위젯을 테스트하는 위젯 테스트에 대하여 알아본다. 편의상 Bloc 대신 Cubit을 활용하였다. 위젯 테스트란? 화면에 그려진 위젯에 대하여 클릭이나 스크롤과 같은 이벤트가 발생했을 때 원하는 결과가 발생하는 지 확인하는 테스트. 예를 들어 로그인 버튼을 눌렀을 때 로그인 요청이 발생하는지 테스트하려면 앱을 켜서 직접 눌러보아야 하는데, 매번 사람이 테스트 할 수 없으니 코드 레벨에서 테스트 하여 결과값을 보장받는 것이다. 위젯 테스트는 단위 테스트보다 포괄적인 테스트를 수행한다..
Java Spring 객체 생성 of 함수
Dto나 Entity를 새롭게 생성하는 경우 Setter로 생성하거나 Builder로 생성하게 됩니다. 프로젝트의 규모가 커지면 Dto 클래스나 Entity 클래스 객체를 여러 모듈에서 생성하는 경우가 발생하는데 인라인 형식으로 객체를 생성한다면 해당 클래스가 수정되었을 때 여러 곳에서 오류가 발생합니다. 이러한 문제를 해결하기 위해 도메인으로 정의된 객체를 생성하는 생성자 함수 of 메서드를 정의하는 방법을 활용할 수 있습니다. 예를 들어서 모임 접수를 나타내는 MeetReceipt 도메인 객체를 생성하는 of 함수는 다음과 같의 정의할 수 있습니다. public static MeetReceipt of(Long meetId, MeetReceiptRequestBody meetReceiptRequestBo..
플러터 싱글턴 구현하기
이 문서에서는 플러터에서 싱글턴을 구현하는 방법에 대해 알아봅니다. Class 이름 활용하기 싱글톤으로 만들고 싶은 클래스에 다음과 같이 코드를 작성합니다. class Database { static final Database _instance = Database._internal(); factory Database() => _instance; Database._internal(); } 위와 같이 작성하면 코드 어디에서든 ClassName()로 싱글톤 객체에 접근할 수 있게 됩니다. Database().getSomthing(); 공유 객체 생성하기 공유 객체를 정적으로 하나 선언하고 다른 객체를 만들지 못하도록 생성자를 private 선언합니다. class Database { static final sh..
플러터 원격 저장소 패키지 의존성 추가하기
Flutter 공식 패키지 저장소 pub.dev에 있는 패키지가 아닌 원격 저장소 (Git, Bitbucket ...)에 있는 패키지의 특정 버전을 사용하는 방법 Github 프로젝트 타겟팅 dependencies: package_you_want: git: url: ref: 9f90296751984b359937c38563da5b19db5550f5 Bitbucket 프로젝트 타겟팅 앱 프로젝트에 빗버킷에 올린 ollacare_app_theme 패키지 의존성을 추가하려면 다음과 같이 작성합니다. dependencies: ollacare_app_theme: git: url: git@bitbucket.org:blueant_git/ollacare_app_theme.git ref: master 원격 저장소의 특정 ..

개발자가 알아야 할 모바일 어트리뷰션
마케터와 모바일 어트리뷰션 협업을 하기 위해 작업에 대한 이해를 돕고자 문서를 작성하였습니다. 딥링크란? 딥링크(Deep Link)란 모바일 환경에서 사용자를 앱의 특정 페이지로 이동시키는 링크를 의미합니다. 딥링크는 다음과 같이 생겼습니다. ollacare://navigation/notices/3 딥링크는 URI 형식을 가집니다. 링크를 누르게 되면 특정 앱을 실행시키며 그 이후의 액션은 앱에서 설정해주어야 합니다. 딥링크는 이것이 전부입니다. 모바일 어트리뷰션 마케터는 페이스북, 유튜브, 인스타그램과 같은 매체 광고를 통하여 고객을 유치시키고 싶어 합니다. 광고의 형태에 따라 추구하는 방식이 오가닉, 논오가닉으로 나뉘는데 쉽게 생각하면 다음과 같습니다. 오가닉 : 사용자가 광고에 심어져있는 링크를 클..
flutter 특정 원격 저장소 패키지 의존성 추가하기
목표 Flutter 공식 패키지 저장소 pub.dev에 있는 패키지가 아닌 원격 저장소 (Git, Bitbucket ...)에 있는 패키지의 특정 버전을 사용 Github 프로젝트 타겟팅 dependencies: package_you_want: git: url: ref: 9f90296751984b359937c38563da5b19db5550f5Bitbucket 프로젝트 타겟팅 앱 프로젝트에 빗버킷에 올린 ollacare_app_theme 패키지 의존성을 추가하려면 다음과 같이 작성합니다. dependencies: ollacare_app_theme: git: url: git@bitbucket.org:blueant_git/ollacare_app_theme.git ref: master원격 저장소의 특정 경로 패..
플러터 앱 oAuth 간편 로그인을 직접 구현해보기
이 글에서는 플러터 앱과 백엔드 서버가 oAuth 로그인을 통하여 회원가입을 하는 과정에 대해서 알아봅니다. 예시로 애플 로그인을 언급하고 있지만, 내용 자체는 카카오, 페이스북, 구글과 일치합니다. 배경 회사에서 개발중인 플러터 앱에 간편 로그인 기능을 사용하기로 결정하였습니다. 기존 개발할 때 파이어베이스 서비스를 이용하여 간편 로그인을 구현하였는데, 이번에는 자체 서버가 있기 때문에 oAuth 로그인 규약에 맞춰 개발을 진행해야 했습니다. 개발을 진행하면서 알게된 점, 특징들을 공유하고자 이런 글을 남깁니다. 이 글에서는 애플 로그인을 통하여 서버에 계정을 생성하기까지의 과정을 알아보도록 하겠습니다. oAuth 로그인이란 oAuth 로그인이란 쉽게 생각해서 새로운 서비스를 이용하기 위해 기존에 이용..

Swift | lazy property에 대해 알아보자
Lazy Property Lazy Property는 Property의 종류 중 하나입니다. 사용하는 데에 소모되는 비용이 큰 프로퍼티를 Lazy Property로 사용하면 비용 절감의 효과를 누릴 수 있습니다. 예를 들어서 다음과 같은 클로저 프로퍼티가 있다고 가정해보겠습니다. class MyClass{ var myProperty: Int = { // 비싼 연산 수행 } } MyClass의 인스턴스가 생성될 때마다 myProperty 프로퍼티가 할당되야 하고 클로저 내부의 비싼 연산이 수행될 것입니다. 물론 비싼 비용으로 만든 이 프로퍼티를 사용해야만 한다면 어쩔 수 없이 비용을 감수해야겠지만, 실제로는 이 프로퍼티가 사용되지 않을 수도 있습니다. 만약 사용되지 않을 경우 기껏 비용을 들여 프로퍼티를 만..
플러터 JSON 사용 방법 | the way of using json in Flutter
안녕하세요! 개발자 베베입니다. 이번 포스팅에서는 플러터에서 json 데이터를 다루는 가장 확실한 방법에 대해서 알아보도록 하겠습니다. 시작하기 전에 json이 뭔지 간단하게 알아보도록 할게요! JSON이 뭐지? json은 Javascript Object Notation의 축약어이며, 데이터를 저장 및 전송할 때 데이터 형식으로 자주 사용됩니다. 이름에서 알 수 있듯이 json은 자바스크립트의 객체를 표현하는 형식을 기반으로 만들어졌습니다. 다만 자바스크립트에서는 객체를 표현했다면 json에서는 데이터를 표현한다는 거죠. json은 이렇게 생겼습니다. { "users": [ { "name": "lee", "age": 32 }, { "name": "bebe", "age": 26 } ] } Json 디코딩 ..