본문 바로가기

전체 글

(34)
[JS] 에러 핸들링 (Error Handling) - callback vs Promise vs async/await 비동기 호출 하면서, Error 이벤트에 대한 핸들링이 필요 합니다. 이번에는 callback, Promise , async / await 각각 동일한 비동기 개발 시 이벤트 핸들링 하는 예제를 비교해보겠습니다.  샘플 예제// Erro Handling : Callback const delayAdd = (index, callback, errCallback) => { setTimeout(() => { if (index >10){ errCallback(`${index}는 10보다 큽니다.`); return; } console.log(index); callback(index + 1); },1000);}d..
[JS] async / await 으로 비동기를 동기처럼 써보자 비동기 방식으로 ( Callback , Promise ) 작성한 기존 프로그램을 await을 통해서 좀더 간결하게 만들 수 있습니다.정확하게 말해서 비동기식 프로그램을 마치 동기식 프로처럼 만들수 있습니다.  aync / await 사용 방법await으로 호출하기 위해서는 async 로 묶은 함수 내부에서만 사용 해야합니다. await 으로 호출하는 함수는 Proimse를 동일하게 반환 해야 하며, 항상 Promise.resolve() 가 반환 됩니다.console.log('Test Aysnc Call - Promise await')const a = () => { return new Promise ((resolve)=> { // Promise 객체를 반환하고 resolve를 인자로 받는다. ..
[JS] 비동기 (Async) 호출 방식 이해하기 Callback , Promise 웹의 기본 컨셉은 Aysnc 비동기 방식의 호출을 합니다. 비동기 방식은 일반적인 함수의 실행 결과를 기다리지 않고 다음 코드를 차례대로 실행합니다. 그렇기 때문에 여러개의 함수를 순차적으로 코딩을 하더라도, 각 함수의 수행 시간이 다를수 있어서, 순서 보장이 안되어서 에러를 야기 할수 있습니다.  예를들어, 고객이름을 변경하는 프로그램을 만들고 , 내부적으로 고객정보 조회 , 고객명 변경의 2개 함수를 만들었다고 가정합시다. 고객이름은 반드시 존재하는 고객정보를 조회하여 기존 수정할 고객정보와 이름을 조회하고 그 다음 조회된 고객정보의 고객명을 바꾸는것이 일반적이 패턴이고, 그렇게 개발했다고 합시다.  1) seachCustomer( customerId )2) modifyCustomer( custome..
싱글톤 패턴 이란? (Singleton Pattern) 객체지향의 디자인 패턴 중에서 아주 많이 들어봄 직하고, 비교적 간단한 패턴인 Singletone에 대해서 알아보겠습니다.Single 이라는 말 그대로, 하나의 인스턴스를 가지는 패턴을 의미합니다. 디자인 패턴은 결국 어떠한 상황/문제를 해결하고 유지보수 하는데 효율적인 패턴의 한 형태입니다.  싱글톤은 언제, 왜 필요한가? 위 그림에서 처럼, 3명의 사람이 동시에 카메라를 사용할 수 없고, 1명씩만 사용해야하는 경우를 생각해봅시다.실제 컴퓨팅 환경에서도 특정 앱(프로세스)이 PC Cam을 사용하고 있을때 다른 앱은 접근이 제하는 되는것이 일반적입니다. 그 외에도 생각보다 많습니다. DB Connection pool의 경우 프로그램에서 여러개의 Connection을 만들고 프로세스는 1개의 연결을 관리 ..
[DDD]바운디드 컨텍스트(Bounded Context)란? 바운디드 컨텍스트(Bounded Context)는 무엇인가요? 비지니스를 개념화 시키는 것이 모델링이며, 우리가 모델링을 할때 도메인을 정의를 통해서 모델링을 하게됩니다. 앞서 상품, 청구 각각의 도메인을 정의할때 각각은 서로 구분되어지는 경계 즉 Boundary가 있고, Boundary를 묶을때 의미(Context)가 동일하고 유사한 것들끼리 묶은 활동을 우리는 바운디드 컨텍스트를 정의 한다고 할수 있습니다. 바운디드 컨텍스트의 범위는 어디까지 일까요? 유사한것들 끼리 나누지만 유사의 정도가 차이 있으므로, 아래그림 처럼 경계를 더 크거나 더 작게 나눌 수 있습니다. 바운디드 컨텍스트는 어디까지 비지니스 환경이나 시스템 개발 환경에 따라 전략적으로 판단해서 나눌수 있으므로 정답은 없습니다. 예를들어 상..
[DDD] 도메인 주도 디자인(Domain Driven Design)의 시작 : 도메인 정의 Domain Driven Design 에서 말하는 '도메인'(Domain)을 사용하지만, 실무에서도 업무의 구분 등의 목적으로 '도메인' 이라는 용어를 자주 사용합니다. 시스템 혹은 회사의 비지니스를 잘 안다고 가정한다면, SW Arch. 관점에서 Biz. 상세하게 구조화 하고 분류 해야 할 필요가 있습니다. 이 단위가 도메인이라고 생각하면 될 것 같습니다. 20년째 제가 운영/개발을 하고 있는 통신 Biz. BSS 시스템에서도 도메인이라는 용어를 사용하고 있었습니다. "오더, 상품, 청구, 수납, 자원 등등.. " 또는 쇼핑몰 시스템이라면 "회원(고객)관리, 상품관리, 주문/계약, 파트너 관리 .. " 역시 이미 내부적으로 기능의 응집도와 결합도를 고민해서 나름의 작은 덩어리를 만들어서 사용하고 있을 ..
[Springboot]bundle.gradle 의존성 주입 시 에러 발생 대응 Springboot 프로젝트를 진행하다보면, 의존성 주입을 하게 됩니다. Gradle을 Build로 사용할 경우를 예로 들어봅니다. 문제 상황 MySQL 을 연결하고자 mysql Connector 의존성을 주입 하였습니다. bundle.gradle 파일을 열고 dependencies 부분에 아래와 같이 책/강좌에 나오는데로 입력했습니다. 프로젝트를 실행 하면, 아래와 같이 mysql-connector-java 를 찾지 못하고 에러가 발생합니다. 해결방법 build.gradle 의 의존성 주입시 주의 해야할 부분이 있습니다. 의존성 범위 변경 : complieOnly 가 아니라, implementation 으로 변경합니다. compileOnly 와 implementation 은 어떤 차이 점이 있을까요? ..
[Springboot]Intellij 에서 lombok 인식 안될 때 해결 Spring을 사용하면서 생상선 향상을 위해, lombok 은 설치하여 사용합니다. Intellij 는 마켓플레이스에서 바로 lombok을 조회해서 설치 하기가 쉽습니다. lombok 사용을 위해 해야 할 일! lombok 설치 : marketplace 검색 하여 설치!!! intellij annotation 활성화 : intellij -->setting --> build .. --> compiler --> annotation processor 에 "Enable annotation processing" 체크 패키지 dependency 추가 : 저는 Gradle을 사용 했으므로, build.gradle 파일 수정이 필요합니다. 빌드 (Gradle) reload 하여 다시 의존성 빌드 진행 즉시 설치하고 기..