분류 전체보기 55

대량 데이터 조회와 유지보수는 어떻게 해야될까?

GC에 익숙한 사람이라면 모두 Generational GC가 최고라고 이야기합니다. 'generational hypothesis는 대부분 상황에서 Young Object는 Old Object 보다 죽을 가능성이 클 것으로 내다본다.' 2008년에는 맞는 말이었죠. 하지만 지금은 설득력이 떨어집니다. Red Hat 개발자 Christine Flood - DevNation 2016 中 기술의 발전과 시장의 변화에 따라 과거에는 옳았던 것이 지금은 재해석되고 있습니다. 클라우드의 도입으로 어려웠던 확장/고가용의 기술이 쉬워지고, 하드웨어의 비용이 낮아진 것이 하나의 예입니다. 회사의 성장에 따라 다뤄야 하는 데이터는 기하급수적으로 늘어나고 기존의 방법으로는 해결하기 힘든 순간이 옵니다. 지금 다니는 회사에도 ..

Study 2022.04.02

마이크로 서비스도 리소스 동기화가 필요할까?

이번에 회사 최초로 시작하는 MSA 개발의 첫 삽을 제가 뜨게 되었습니다! 사실 이 개발을 하면서 제일 큰 걱정은 MSA 책 한 개도 안 봤는데 내가 설계해도 되나......... 였습니다. 설상가상으로 설계기간도 충분하지 못했죠. 하지만 틈틈이 읽은 서적과 블로그들이 큰 도움이 되었고, 부족하지만 제가 설계하고 개발한 기록을 공유합니다. 개발한 내용 기본 구성 오래되고 사용자가 많은 플랫폼 B와 비교적 최근에 개발되었지만 사용자가 적은 플랫폼 P가 존재합니다. 서로 다른 환경에서 운영되고 있던 플랫폼의 각 DB와 회원 등록/수정 로직이 통합 중에도 유지되어야 합니다. 구현된 언어와 프레임워크도 달랐고, 통합 대상인 회원의 식별자와 업무 내용도 미묘하게 달랐습니다. 이해를 돕기 위해 업무 내용의 일부를 ..

Study 2022.03.04

Custom LocalDateUtils 리팩토링

이번에 회사 업무의 일부를 확장/분리하는 업무를 맡았습니다. 프로젝트의 세팅부터 해야 되는 작업이었기에 제가 주도적으로 개발할 수 있었는데요. 이 과정에서 작업한 Legacy의 공통 Util 리팩토링의 일부를 기록해봅니다. AS-IS의 문제점 // 0. 이 프로젝트에 의존적인 로직이 존재합니다. // ex) 입력 값이 파싱할 수 없는 isEmpty() 라면 빈 값을 반환. (에러가 아니라) @UtilityClass public class LocalDateUtils { // 1. LOCAL_DATE_FORMAT_WITH_HYPHEN, LOCAL_DATE_FORMAT 이 String 변수로 존재합니다. public static final String LOCAL_DATE_FORMAT_WITH_HYPHEN = ..

Series/실전! 2022.01.04

'수십억건에서 QUERYDSL 사용하기' 를 보고..

기술 영상의 요약이나 후기는 웬만하면 작성하지 않는 편입니다. 하지만 우아콘 2020의 이동욱 님 발표 영상은 하나하나가 너무나도 실무적이고 주옥같은 내용들 뿐이라서 꼭 기억하고 싶은 마음에 정리해봅니다. [우아콘2020] 수십억건에서 QUERYDSL 사용하기 테스트 환경 OpenJDK 1. 8.0_252 Querydls_JPA 4.2.1 AWS Aurora MySQL 5.6 1.19.6 1. 워밍업 extends / implements 사용하지 않기 발표 자료에는 없지만 JPAQueryFactory를 Bean으로 설정해주는 작업이 필요합니다. @Configuration public class QueryDslConfig { @PersistenceContext private EntityManager ent..

Study 2021.12.19

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