개발 9

[디자인 패턴] 디자인 패턴이란?

참고: 리팩토링 구루✳️ 디자인 패턴이란,소프트웨어를 만들다 보면 비슷한 문제들이 반복해서 등장한다.디자인 패턴은 이런 문제를 해결하는 공통된 방식이라고 생각하면 된다. 표준화된 라이브러리나 함수들을 코드에 복사해서 사용하는 것과는 다르다.디자인 패턴은 문제를 해결하는 방식을 알려주는 개념이다.패턴의 세부 개념들을 적용해서 프로그램에 맞는 해결책을 구현할 수 있다.✅ 알고리즘과 디자인 패턴, 뭐가 다를까?둘 다 알려진 문제를 해결하는 방법이지만, 개념 자체는 완전히 다르다.알고리즘은 어떤 목표를 달성하기 위한 일련의 절차를 정의한다.반면에 디자인 패턴은 문제를 해결하기 위한 상위 개념과 구조를 제시한다.쉽게 말해서, 알고리즘은 레시피, 디자인 패턴은 청사진 같은 느낌이다.✅ 디자인 패턴의 기원디자인 패턴..

도커(Docker)

🐳 도커(Docker)란?앱이 실행되는 환경 자체를 하나로 묶어서 어디서든 동일하게 실행할 수 있도록 도와주는 도구용어뜻이미지앱 + 실행환경 + 설정을 통째로 묶은 파일 (요리 재료 패키지)컨테이너이미지를 실행한 실체 (요리해서 실제로 먹는 음식)Dockerfile이미지 만드는 레시피 같은 설정 파일Docker Hub도커 이미지들을 올려두는 저장소, 깃허브의 이미지 버전🔥 실무에서 도커를 이해하다[🧨 사건 발생 개요]AA가 신버전 이미지를 만들고 기존 이미지를 삭제함문제는 서비스 설정이 여전히 구버전 이미지를 참조하고 있었던 것근데 그러고 나서 정기배포 진행됨[💥 결과]✅ 배포는 됐음 (스크립트 실행)❌ 근데 실제로는 참조 중인 이미지가 존재하지 않음❌ 그래서 컨테이너를 새로 띄우지 못함❌ 결국 ..

클라우드 DB vs 물리 서버 DB

🌐 클라우드 DB vs 물리 서버 DB, 웹 개발자가 꼭 알아야 할 이야기웹 개발을 하든, 앱 개발을 하든,우리가 어떤 데이터를 저장해야 하는 상황은 꼭 생기기 마련이다.사용자가 로그인했는지어떤 상품을 주문했는지작성한 글은 뭔지 등등...이런 데이터를 저장해두는 공간이 필요한데,그게 바로 우리가 흔히 말하는 데이터베이스(DB)다.💡 쉽게 말하면, 데이터 베이스는 '데이터를 안전하게 보관해주는 저장소'라고 생각하면 된다.(물론 더 깊게 들어가면 RDB니 NoSQL이니 여러 종류가 있지만, 여기서는 개념 위주로~)🏠  그럼 이 DB는 어디에 있을까?우리가 개발하면서 만드는 UI나 화면은 프론트엔드에서 담당하지만,그 뒤에서 실제 데이터를 주고받고 저장하는 건 서버와 DB의 역할이다. 그런데 이 DB가 어..

데브옵스(DevOps)

DevOps란?DevOps = Development (개발) + Operations (운영)개발팀과 운영팀의 협업 문화를 통해,코드를 더 빠르고 안정적으로 배포하고 운영하는 방식 개발 -> 배포 -> 운영 -> 피드백 -> 개선의 전체 사이클을 자동화하고 효율화하려는 문화이자 방법론DevOps 사이클DevOps는 단순한 "직무"가 아니라 사이클로 존재한다DevOps 관련 기술/도구범주도구설명CI/CDGitHub Actions, Jenkins, GitLab CI코드 변경 시 자동 빌드/테스트/배포IaC (인프라 코드화)Terraform, Ansible서버 인프라를 코드로 관리컨테이너/오케스트레이션Docker, Kubernetes환경 통일, 배포 자동화모니터링Prometheus, Grafana, ELK서버 ..

카프카(Kafka)

✏️ 한 줄 정리많은 시스템 간에 데이터를 실시간으로 주고받게 해주는 고성능 메시지 브로커 Kafka란?Apache Kafka는 대용량의 데이터를 빠르고 안정적으로 처리하기 위한 분산 메시지 큐 시스템Kafka를 왜 사용할까?웹 서비스에서 시스템이 많아지면 각 시스템 간 데이터 연동이 굉장히 복잡해지기 때문에 !예를 들어, 주문이 발생하면 결제, 배송, 재고, 알림 등 연관된 모든 시스템이 "주문 발생" 이벤트를 알아야하는데,이때 Kafka를 이용하면 한 번의 메시지 발행으로 여러 시스템이 동일한 이벤트를 받을 수 있다.기본 개념개념설명Producer메시지를 Kafka로 보내는 주체 (ex. 주문 서버)ConsumerKafka에서 메시지를 구독해서 처리하는 주체 (ex. 배송 서버, 알림 서버 등)Top..

래디스(Redis)

1. Redis는 무엇일까?Redis(Remote Dictionary Server)는 메모리에 데이터를 저장하는 NoSQL 데이터베이스이다.보통 DB라고 하면 디스크에 저장하는 걸 떠올리지만, Redis는 데이터를 RAM(메모리)에 저장하기 때문에 속도가 엄청 빠르다.키(Key)와 값(Value) 형태로 데이터를 저장하는 인메모리 기반의 Key-Value Store다양한 데이터 타입을 지원 -> 단순 캐시 이상으로 활용 가능2. 왜 캐시로 Redis를 많이 쓸까?웹 서비스에서는 DB 요청이 많아지면 속도가 느려지고 서버 부하가 굉장히 심해지기 때문에,이때 자주 조회되지만 자주 바뀌지 않는 데이터를 Redis에 저장해두면,웹 서버는 DB가 아닌 Redis에서 빠르게 데이터를 가져올 수 있어서 속도 향상과 ..

BeanCopy는 편한데 왜 불안할까? 실무에서 setter로 바꾸게 된 이유

BeanCopy, 처음엔 정말 편했는데 ..서비스에서 DTO Entity 변환을 할 때,처음에는 BeanUtils.copyProperties(source, target) 같은 방식이 너무 편하게 느껴졌다.코드도 짧고, 작성도 빠르고, 당장은 문제 없어 보였다.하지만 점점 마음 한구석이 불편해진다?처음엔 편했지만, 시간이 지날 수록 이런 문제가 생기기 시작했다.어떤 값이 복사되는지 명확하지 않다.필드를 추가/삭제해도 에러가 안 나서 눈치 못 채고 버그 발생디버깅할 때 이 값 왜 들어가 있지? 같은 현상도 발생결국 복사되는 흐름이 코드에 드러나지 않다 보니,읽는 나도 헷갈리는데, 나중에 유지보수하는 사람은 더 헷갈리지 않을까? 하는 생각을 하게됐다.그래서 setter 방식으로결국 명시적으로 하나하나 설정하..

Java에서 CollectionUtils.isEmpty 대신 Optional을 써야할까?

CollectionUtils.isEmpty ? Optional ?개발 중에 이런 상황이 있었다.메서드 파라미터로 List를 받는데, 나는 아래와 같이 null 및 empty 를 체크하고 있었다.if (CollectionUtils.isEmpty(list)) { return;}// 처리 로직그러던 중, 선임 개발자한테 아래와 같은 피드백을 받은 적이 있다."왜 Optional 안 써? Optional 쓰면 더 깔끔하지 않아?" 그래서 궁금해졌다.Optional을 쓰면 정말 더 좋은 걸까?✔️  선임 개발자가 원하는 방향Optional.ofNullable(list) .filter(l -> !l.isEmpty()) .ifPresent(l -> { // 처리 로직..

[이니시스] PC 결제 요청하기 (인증)

개발 환경 : IntelliJ IDEA 2023.2 프레임워크 : Vue.js 기반의 Nuxt.js v2.15.7 개발 서버 : Node.js v16.16.0 패키지 관리자 : npm 이니시스를 개발하기 위해서는 이니시스 측에서 제공하는 이니시스 개발 가이드 사이트를 참조하면 매우 도움이 된다. https://manual.inicis.com/pay/stdpay_pc.html#popup_46 Web manual PC 일반결제 KG이니시스 결제창을 호출하여 다양한 지불수단으로 안전한 결제를 제공하는 서비스 manual.inicis.com 만약에 개발을 하다가 문의할 사항이 있다면 ts@kggroup.co.kr 이메일문의를 이용하면 된다. 이니시스에서 결제는 PC와 모바일 버전이 나뉘어있기 때문에 잘 봐야 한..

개발/결제 2023.09.22