본문 바로가기
728x90
반응형

분류 전체보기362

Template Method pattern 배경 결제 관련된 페이지를 만드는 도중 이런 상황과 마주했다. 결제(이하 멤버십)에는 세 가지 단계가 존재(베이식, 스탠다드, 프리미엄) 각 결제 단계마다 1) 해당 단계의 이미지 2) 해당 단계의 문구 3) 해당 단계 신청 api 가 존재 위와 같은 상황에서 베이직, 스탠다드, 프리미엄 멤버십 객체는 어떻게 구성되어야 할까? class Membership { } class Basic extends Membership { image = require('basic.png') description = '배이직 멤버십 입니다' apply() { // 베이직 멤버십 신청 함수 } } class Standard extends Membership { image = require('standard.png') desc.. 2023. 8. 20.
Postgresql date_trunc 함수를 통한 날짜별 조회 Postgresql DBMS를 사용하고 있다. id content created_at 0 abc 2023-07-25 07:27:17.407684+00 1 abc 2023-07-25 07:47:50.772492+00 2 ㄱㄴㄷ 2023-07-26 09:26:02.968429+00 3 ㄹㅁㅂ 2023-07-27 01:30:09.382792+00 다음과 같은 데이터가 존재하는 상황! 날짜별로 각 데이터가 몆 개 생성되었는지 조회해 달란 요구사항이 있었다. 일반적인 상황... 예를 들어 content별로 각 데이터가 몇 개 존재하는지 조회해야 했다면 SELECT content, count(*) FROM TABLE GROUP BY content group by를 통해 간단하게 조회할 수 있을 테다. 그런데 문제는.. 2023. 8. 20.
첫 실무 test code 작성 및 고민 2023-03-02 작성된 글입니다. import {describe, expect, it} from '@jest/globals' import convertToIndexGroup from './converToIndexGroup' describe('convert array to index group object', () => { describe('group by 4 item', () => { const ITEM_NUMBER_IN_EACH_ARRAY = 4 it('given length one array', () => { expect(convertToIndexGroup([{id: 0}], ITEM_NUMBER_IN_EACH_ARRAY)).toEqual( { 0: [{id: 0}], }, ) }) it('giv.. 2023. 8. 20.
클린 코드 나쁜 코드는 개발 속도를 크게 떨어뜨린다. (...) 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생긴다. 간단한 변경은 없다. 매번 얽히고설킨 코드를 '해독'해서 얽히고설킨 코드를 더한다. (...) 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 여럿 개발자의 마음을 쿡쿡 찌르는 문구. 아마 모두가 겪어본 적이 있을 테다. 누군가가 작성한 코드를 수정하고, 문제가 터지고, 해독하고, 한참 시간이 걸리고, 수정하고, 문제가 터지고, 이해하고, 비슷한 엉망 코드를 얹고. 반복. 반복. 사실 최근 아키텍처, 테스트, 클린 코드에 관심을 가지는 것도 이러한 맥락에서다. 앱과 비슷한, 혹은 동일한 기능의 웹을 개발하는데... 앱에서 작성한 코드 중 활용할 수 있는 게 거의 없었다. 불과 6,7개월 전에 내가 작성한 .. 2023. 8. 20.
클린 아키텍처 1장 - 설계와 아키텍처란? 소프트웨어 아키텍처의 목표는 필요한 시스탬을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다. 비용은 최소화하고 생산성은 초대화할 수 있는 설계와 아키텍처를 가진 시스템을 만드려면, 이러한 결과로 이끌어 줄 시스템 아키텍처가 지닌 속성을 알고 있어야 한다. 2장 - 두 가지 가치에 대한 이야기 모든 소프트웨어 시스템은 이해관계자에게 '행위(behavior)'와 '구조(structure)' 란 두 가지 가치를 제공한다. ... 소프트웨어를 만든 이유는 기계의 행위를 쉽게 변경할 수 있도록 하기 위해서다. ... 이해관계자가 기능에 대한 생각을 바꾸면, 이러한 변경사항을 간단하고 쉽게 적용할 수 있어야 한다. 이러한 변경사항을 적용하는 데 드는 어려움은 변경되는 범위(.. 2023. 8. 20.
23.08.13~23.08.20 업무 1. R&D 과제 수행 기술 연구 과제를 수행했다. 1) 학습 데이터 생성 현재 약 30만 개의 반려 동물 미용 예약 데이터를 보유 중이다. 이를 분류 모델의 학습에 필요한 데이터로 변환했다. 그중 처음부터 정형화된 형태로 수집된 데이터는 아무런 문제가 없었지만... 운영 중인 서비스 및 도메인 특성상 그러지 못한 데이터 들도 많았고, 따라서 이들을 학습 데이터 형태에 맞게 일일이 변환하는 과정을 거쳐야만 했다. 그 과정에서 굉장히 아쉬웠던 점 → 팀 내부에 도메인 전문가가 없다는 사실! 물론 개발자인 나도, 팀원들도 약 3년 정도 해당 도메인에서 서비스를 운영했기 때문에, 기본적인 도메인 지식은 보유한 상태였다. 하지만 해당 도메인에 속한 전문가만큼은 (당연히) 알지 못하는 게 사실이었고, 학습 .. 2023. 8. 20.
testing-library/react-native를 통한 컴포넌트 테스트 2 2023.08.18 - [source-code/FrontEnd] - testing-library/react를 통한 컴포넌트 테스트 (with RN + expo) 테스트 코드 작성 중 겪었던 에러 핸들링. 1. Jest를 통한 React-Query (useQuery) 테스트 현재 서비스에서는 server data 관리를 위해 react-query를 사용하고 있다. 테스트 대상 컴포넌트에서는 토글 on/off 데이터를 서버로부터 받아온 후, 해당 데이터에 맞는 UI를 그려주고 있었다. // useGetToggleStatus const useGetToggleStatus = (options) => useQuery(['key'], getToggleApi, options) // Page const Page = ().. 2023. 8. 18.
testing-library/react를 통한 컴포넌트 테스트 (with RN + expo) 2023.08.18 - [source-code/FrontEnd] - Jest를 통한 unit test Jest를 통한 unit test 테스트 코드. 초기 스타트업 개발자, 특히 프론트엔드 개발자들이 가장 놓치기 쉬운 요소가 아닐까. 왜? → 제품의 명확한 기능이나 디자인 시스템이 갖춰지지 않은 상태로 개발이 진행되는 경 23life.tistory.com Jest를 통해 특정 Class내 method가 의도대로 동작하는지에 대한 단위 테스트를 작성했었다. 하지만 (특히) 프론트엔드 개발자가 테스트하고 싶은 항목은 특정 상황에서 의도한 화면이 잘 뜨는지 사용자 액션 발생 (클릭, 타이핑, 스크롤 등) 시 의도대로 동작하는지 비동기 작업 발생 시 화면의 의도대로 표시되는지 와 같은, UI적 요소가 대부분일 .. 2023. 8. 18.
Jest를 통한 unit test 테스트 코드. 초기 스타트업 개발자, 특히 프론트엔드 개발자들이 가장 놓치기 쉬운 요소가 아닐까. 왜? → 제품의 명확한 기능이나 디자인 시스템이 갖춰지지 않은 상태로 개발이 진행되는 경우가 많기 때문. 끊임없이 바뀌는 요구 사항과 화면 설계서를 열심히 반영하다 보면... (거기다 기간은 어찌나 촉박한지) 기껏 작성한 테스트 코드가 쓸모 없어지는 경우가 비일비재해지며, 이런 일이 반복되면서 오히려 테스트가 생산성을 떨어뜨리는 주범이 되기도 한다. 현 서비스 역시 이러한 상황 속에서 운영 및 개발이 진행되어 왔는데... 초창기 때만 해도, 테스트 코드가 없다고 해서 별 다른 불편함이 느껴지지는 않았다. 구현된 결과물은 직접 서비스를 동작하면서 확인할 수 있었고 (끽해야 버튼 몇 개 클릭이니) 수정 사항이 .. 2023. 8. 18.
728x90
반응형