본문 바로가기

전체 글

(45)
mockk를 선택한 이유 현재 팀에서 kotlin + SpringBoot 조합을 이용하여 프로젝트를 진행 하고 있다. 우리팀의 경우 mocking 하는 방식을 mockito 라이브러리를 이용하여 테스트코드를 작성하고있는데, 계속해서 사용하다보니 아래와 같은 불편함을 느꼈다. 1. when을 이용하여 mocking을 하려고 하면 `when`과 같은 식으로 mocking을 해야한다. 2. 코틀린의 장점은 간결함이라고 생각하는데, mockito를 이용하면 뭔가 간결함이 느껴지지 않는다. 그래서 kotlin 친화적인 테스트 라이브러리를 찾게 되었고, 그중 mockk 를 도입하여 사용하고 있다. why mockk? 일단 mockk의 경우 spring 공식문서에도 소개 되어있어 좀 더 인정(?) 받는 다는 느낌을 받았고, 공식문서를 보다보..
도메인주도 설계 철저 입문 리뷰 최근에 읽은 도메인 주도설계 철저입문 에 대해 리뷰를 작성해보려고한다. 간단하게 책에 대해서 설명하자면, DDD란 무엇인가를 부터 시작하여, ValueObject, Entity, repostiory, service등 각각의 내용에 대해서 예제와 함께 쉽게 풀어 설명하는 책이다. 나의 경우에는 기존에 DDD의 개념 및 쓰이는 단어에 대해서만 대략적으로 알고 있는 상황이였는데, 도메인 주도설계 철저입문 책을 읽고 난 후에는 대략적으로만 알고 있는 개념들에 대해 이해하는데 엄청나게 많은 도움이 되었다. 특히 value object의 경우 그전까지만 하더라도 왜사용하고, 언제 쓰이는것이지? 라는 의문만 있었는데, 이번에 해당 책을 읽으면서 개념들이 확실히 정리된것 같다. 또한 서비스영역을 도메인서비스, 어플리케..
iOS 인앱결제시 서버에서 오류가 발생한다면? 이번에 새롭게 iOS앱을 오픈 함에 따라 인앱결제를 넣는 작업을 진행 하였고, 서버에서 오류가 발생할 수 있는 상황에 대해서 대처한 방법을 적어보려고한다. 설명을 하기위해서 간단하게 만든 플로우차트이다. 로직 흐름을 크게 4가지로 나눠볼 수 있다. 1) 상품정보 및 중복 구매 검증 상품정보의 경우에는 현재 판매중인 상품의 이름 및 가격정보 상세내용을 내려주는 API이며, 해당 내용을 App 뷰에 뿌려지는 내용이다.중복구매 검증의 경우에는 현재 인앱결제로 진행하고자하는 상품은 구독 상품이며, 중복구매가 불가능하기 때문에, 중복구매검증을 체크한다. 2) 결제시도 결제시도는 App에서 처리하는 부분으로써, 내가 구현한 부분이 아니라 어떤식으로 개발했는지는 잘모른다,,, 패쓰 하겠다. 아무튼 결제를 완료하게 ..
루비로 배우는 객체지향 디자인 리뷰 객체지향 관련 된 책을 읽어 보고 싶어 인터넷을 서칭 하던 중 루비로 배우는 객체지향 디자인 책이 주니어들이 읽기 쉽게 잘 되어있다는 글을 보았다. 마침! 어느정도 루비코드를 이용해서 개발을 했던적이 있어 좋구나~ 하면서 바로 구매하였다. 루비로 배우는 객체지향 디자인은 책 이름에 걸맞게 풍부한 예제와 함께 객체지향의 원칙들에 대해서 알기 쉽게 설명해준다. 그래서 좀 더 쉽게 객체지향 원칙 들에 대해서 알아 갈 수 있었다. 해당 책을 읽으면서 가장 인상깊었던 부분은 단일 책임 원칙 부분이다. 책에서 단일 책임 원칙을 잘 지키고 있는지 판별하는 방법은 다음과 같이 설명하고 있다 . 작성한 클래스가 정말 단일책임의 원칙을 지키고 있는지 판별하는 방법은 해당 클래스가 하는일을 한문장으로 정의 해봐라 여러가지 ..
만들면서 배우는 클린 아키텍쳐를 리뷰 보호되어 있는 글입니다.
약정이 있는 구독상품 개발 이번에 새롭게 런칭하는 신규 서비스에 참여하게 되었고, 프로젝트도 마무리 되어 기능 구현한것에 대해서 기록을 남겨보려고 한다. 신규 서비스에 대해서 간단히 설명하자면 구독 서비스 상품이다. 다른 구독 서비스 상품과 조금 다른 점은 약정기간을 걸 수 있는 상품이라는 것이다. (어떻게 보면 휴대폰 요금제와 비슷하다고 보면 될 것 같다.) 신규 서비스의 요구사항 부터 간단하게 정리해보자 1. 약정 상품이 존재하고, 약정기간 동안에는 가격이 변동되더라도 약정금액을 유지해야한다. 2. 상품의 가격은 한달에 한번씩 변동 가능성이 있으며, 약정이 끝난 상품 or 무약정 상품의 경우에는 변동된 가격을 바라보고 결제를 진행해야한다. 어떤식으로 변동되는 가격을 구현하였는가? 일단 판매 상품은 할인 가격, 기본 가격 2가지..
환불 프로세스 자동화에 대한 경험과 기록 최근에 운영팀에서 수동으로 대부분 진행하던 환불 기능을 자동화 시켜 조금 더 효율적으로 운영할 수 있도록 개발을 진행하였다. 어떤식으로 진행했는지 기록을 남겨보려고 한다. 현재 어떤식으로 환불을 진행하고 있는가? 1. 가격이 비싼 상품이기 때문에 운영팀에서 환불 전화가 올 시 해지방어를 시도하고, 그래도 안되면 환불을 진행 하고 있다. 2. 환불을 하기 위해선 환불 선물지를 작성해야한다. 3. 환불 건이 들어오면 유저에게 수동으로 설문지 링크를 전달 해준다. 4. 환불 설문지가 완료가 되면 작성이 잘 완료 되었는지 확인을 하고, 어드민을 통해서 환불을 진행한다. 위와 같은 형태로 운영팀에서 환불을 진행 하고 있었다. 누가 봐도 수동으로 처리하는 부분과 신경써야하는 부분이 많아보이는 현재상황이였다. 그럼 ..
QueryMethod는 어떻게 만들어지는 것일까? SpringDataJpa를 사용하다보면 QueryMethod를 만들어서 데이터베이스에 쿼리를 자주 날리게 된다. 그럼 어떻게 SpringDataJpa는 메소드명만 갖고 쿼리를 날리는것일까? 1. 일단 SpringDataJpa는 해당 메소드가 쿼리메소드인지, 아니면 커스텀메소드인지 구분을 한다. 2-1. 커스텀 메소드일 경우엔 해당 메소드를 바로 실행시킨다. 2-2. 쿼리메소드일 경우에는 쿼리메소드의 이름을 갖고 파싱하게 됩니다. 그럼 어떤 방식으로 파싱을 하게 되는것인가? 일단 findBy나 orderBy와 같은 접두어들은 메소드에서 분리시키고 나머지 부분을 파싱하게 됩니다. findByUserName을 예를 들어 설명하자면 findBy는 분리시키고 UserName만 따로 파싱을 한 후 쿼리를 만든다고합..