전체 글 55

Datadog 에서 GraphQL 모니터링 맛보기

이 글에서는 널리 쓰이는 모니터링 솔루션 중 하나인 datadog을 적용하면서 알게 된 정보를 기록해봅니다. 공식문서에 있는 내용은 언급만 하고 넘어가며, 완결되지 않은 이슈들도 있기에 맛보기로 생각하고 읽어주세요! AS-IS 자동화된 모니터링 룰이 없으며, cloudwatch로 사후 모니터링만 가능. datadog를 도입하기로 했으나, graphql이 제대로 지원되지 않음. datadog 은 공식 문서가 잘 나와있는 편이기에 설치나 일반적인 세팅에는 어려움이 없었습니다. 특히 resource를 기반으로 제공되는 기능들이 강력해서 REST API를 쓰는 환경이라면 크게 어려움 없이 세팅이 가능했습니다. 하지만 당사에서 사용하는 graphql 은 resource 가 모두 POST /graphql로 통일되어..

Series/실전! 2021.12.14

어느 새벽에 작성하는 첫 회고록

백엔드 개발자 커리어를 시작한 지 1년 4개월이 된 어느 날 새벽, 소용돌이치는 생각들을 정리하려 쓴다 쓴다 생각만 했던 회고를 기록해봅니다. 개발자가 되기 위해.. 열정적이지 못했던 인프라/기술지원을 그만두면서 개발자가 되기 위한 방법을 찾았습니다. 늦은 나이에 시작한 개발이기에 돈보다 중요한 건 시간이었습니다. 그래서 국비 지원보다는 부트캠프가 좋다고 판단했고, 몇 개의 비교 끝에 코드스쿼드 교육기관을 선택했습니다. 그리고 그것은 저에게 최고의 선택이었습니다. 기존의 주입식 교육이 아닌 자기 학습을 위한 교육 방법과 몰입할 수 있는 가이드라인을 제시해주었고, 저에게는 꽤나 맞는 교육법이었습니다. 교육기간 내내 교육장에서 가장 늦게 나가는 학생 중 한 명이었고 배수진을 치고 온 만큼 절박하게 공부했습니..

잡담 & ETC 2021.12.10

느슨한 결합도의 설계를 위해! (2)

요구 사항 정리와 AS-IS 분석은 끝났지만 설계하기 전에 개발 범위 산정과 제약 조건을 먼저 생각해야 합니다. 목표 달성을 위한 리팩토링은 끝이 없기에 일정과 범위를 조율해야 하고, 개인의 이해도는 차이가 있기에 실무의 설계는 범용적인 구성을 해야 합니다. 디자인 패턴 공부의 필요성을 느끼는 요즘입니다. 이런 생각을 가지고 개발한 과정을 기록해봅니다. 개발 범위 산정 최소 개발 범위는 심플하지만 앞으로 알림 톡의 종류가 많아질 것을 대비하면 AlarmGqlService의 호출도 interface로 만들고 내부 서비스들도 표준화시키는 것이 좋을 것 같습니다. 하지만 개발 범위를 AlarmGqlService까지 확장하면 입력부에 대한 검증과 interface 설계에 따른 리팩토링도 추가되어야 해서 '알림 ..

Series/실전! 2021.12.04

느슨한 결합도의 설계를 위해! (1)

높은 응집도와 느슨한 결합도의 설계는 객체 지향을 공부하는 사람이라면 누구나 고민하는 주제입니다. 공부는 했었지만 부끄럽게도 잘 활용하지 못하던 중 같이 공부하는 로치의 글을 보고, 또 운 좋게 설계가 필요한 업무를 맡게 되면서 개발한 내용을 기록해봅니다. 응집도와 결합도 응집도와 결합도는 소프트웨어 품질을 결정 짓는 요소이다. 대다수의 사람들은 코드를 작성할때 "응집도" 와 "결합도" 를 생각하지 않은채 관성적으로 코드를 적고는 한다. 응집도와 결합도는 devroach.tistory.com 업무 배경 알림 톡 발송의 주체는 외부 업체로 Lambda를 통해 연동되어 있습니다. 발송 기록은 저장되고 있습니다. (백엔드 - RDB, Lambda - DynamoDB) 개발 요건 Lambda API의 주소가 변..

Series/실전! 2021.12.03

DB 값을 enum 으로 표현해보자

enum 은 서로 연관된 상수들의 집합으로 반복적으로 사용되는 코드 값을 표현할 때 유용합니다. 실무에서는 개발 편의성을 위해 DB에 있는 업무 코드들을 표현하기도 합니다. (등급 코드, 사용 여부 등) 하지만 프로젝트가 나눠지면 매번 복사해줘야 되고, 변경점이 생기면 반영이 필요하기에 썩 좋은 아이디어는 아닙니다. 때문에 쉬운 방법으로는 코드 테이블을 만들거나, 최신의 개발에서는 코드 정보를 MSA로 나누기도 합니다. 그럼에도 불구하고 업무 성격상 변경이 매우 적은 경우에는 개발 편의성과 성능 향상을 위해 사용할 수 있기에 실무에서 해본 리팩토링 내용을 기록해봅니다. Java Enum 활용기 | 우아한형제들 기술블로그 {{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 ..

좋은 개발 문화란? - (2) 준비

소프트웨어 장인정신은 소프트웨어 개발자가 스스로가 선택한 커리어에 책임감을 가지고, 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다. 즉 소프트웨어 장인 정신은 소프트웨어 개발의 프로페셔널리즘에 대한 것이다. - 소프트웨어 장인. 3장 소프트웨어 장인정신 이전 글에서는 실패와 개발 문화의 중요성에 대해 이야기했습니다. 이번 글에서는 지금 제 환경에서 시도할 수 있는 좋은 개발 문화의 준비를 기록합니다. 업무 설명 기간 산정 예시 A 외부 솔루션 도입 연구가 필요하기에 단순 표기가 어려움 모니터링 솔루션 B 단순 화면 기능 개발 단순 표기 가능 API response 변경 C 업무 이해..

잡담 & ETC 2021.11.15

좋은 개발 문화란? - (1) 실패

과거의 애플리케이션은 아마도 충분한 계획을 기반으로 개발되었으며, 변경점도 비교적 많지 않았습니다. 그리고 대부분 SI 식 개발로 비즈니스가 분리되었기에, 지속성보다는 요구 사항 충족과 납기일이 우선 되었었습니다. 이때에는 단어조차 생소한 개발 문화는 중요하지 않았으며, 위에서 내려온 계획에 맞는 개발을 하나라도 더 하는 게 미덕이었습니다. 하지만 현대의 애플리케이션은 긴 생명 주기와 모호해진 개발과 운영의 경계로 개발보다는 운영하면서 더 많은 이슈를 만나게 됩니다. 그러다 보니 자연스럽게 개발의 지속성에 대해 생각하게 되고 그것들을 아우르는 것으로 개발 문화가 나오게 되었습니다. 이제는 개발이 비즈니스의 성공에 직결적인 요소가 되었기에 개발 문화의 중요성이 업계 전반에 퍼져 있고 채용에도 중요한 화두가..

잡담 & ETC 2021.11.15

업무에 적절한 pagination 선택하기

pagination은 백엔드 구현에서 가장 많이 고려해야 되는 기술 중 하나입니다. 일반적으로 알려진 pagination 기술에는 page, slice 가 있고 특수한 경우에 사용되는 noOffset과 Covering Index 기술이 있는데요. 이번 글에서는 실무에서 만난 특이한 pagination 사례에 대해 각색하여 기록해봅니다. 업무 요건 전체고 조회가 필요합니다. 상품군이 신설되었습니다. 기존에는 회사와 상품이 존재했으며 M:N 관계입니다. 상품군과 상품은 1:N 관계입니다. 상품군과 회사의 관계는 M:N 관계입니다. 서로 다른 재고처에 있는 재고를 합쳐야 합니다. 각 상품군별, 회사별로 소계를 보여주어야 합니다. 페이지당 300개 안팎은 허용 범위입니다. 기술적 배경 각 도메인별 조인이 많이 ..

Series/실전! 2021.11.07