본문 바로가기

분류 전체보기

(48)
[DDD 첫걸음] 1-1. 전략적 설계 - 비즈니스 도메인 분석하기. Part 1 전략적 설계의 첫 장에서 알아볼 것. 기업이 존재하는 이유와 추구하는 목표가 무엇이며, 그 목표를 달성하기 위한 전략을 배워보자. 보통의 (일단 우리회사 포함) SW개발자의 경우, 코드를 작성하는게 아니라 이러한 것을 알아야하는지 의문을 가질 수 있다. 하지만 업무에 대한 시스템을 개발하기 위해서는 해당 업무에 대한 문제에 대한 이해, 이에 앞서 그것이 존재하는 맥락을 이해할 필요가 있다. 즉, 조직의 비즈니스 전략과 소프트웨어를 만들면서 얻고자 하는 가치를 이해해야 한다. 비즈니스 도메인이란? - 비즈니스 도메인은 기업의 주요 활동 영역을 정의한다. - 일반적으로 말하자면 회사가 고객에게 제공하는 서비스를 말함 ex) 페덱스는 배송 서비스, 스타벅스는 커피, 월마트는 소매업체 - 기업은 여..
[DDD 첫걸음] 1. 전략적 설계 우리가 해결하고자 하는 문제가 무엇인지 합의하기 전에 해결책을 얘기하는 것은 의미가 없다. 또한 해결책에 대해 합의하기 전에 어떻게 구현하는지 얘기하는 것도 의미가 없다. - 애프랏 골드랫 - 아쉬라그 도메인 주도 설계 (DDD - Domain Driven Design)에는 크게 두가지 부분으로 나눌 수 있다. 1. 전략적 측면 - 무엇?과 왜?라는 질문에 대한 정답을 찾는 것. - 우리가 어떤 소프트웨어를 만드는지, 그리고 왜 그 소프트웨어를 만드는지에 대한 해답을 찾는 것. 2. 전술적 측면 - 어떻게?라는 방법에 대한 것. - 소프트웨어 각각의 구성요소가 구현되는 방법을 찾는 것. 이번 장에서는 전략적 측면에 대해서 알아보도록 한다. 전략적 설계 관점에서 알아볼 것. 1. 기업의 비즈니스 전략을 분..
[Javascript] async와 await에 대하여 async와 await를 이용하면 Promise를 좀 더 편하게 사용할 수 있다. 즉 읽고, 쓰기 쉬운 비동기 코드 작성이 가능하다! async 함수 async 키워드는 function 앞에 위치한다. async function func() { return true; } function 앞에 async를 붙이면 해당 함수는 항상 Promise를 return함. Promise가 아닌 값을 반환하더라도 resolved promise로 값을 감싸 이행된 Promise가 반환되도록 함. async function func(){ return Promise.resolve(1); } func().then(alert) //1로 alert 표시. async function func(){ return 1; } func()..
[Javascript] Promise chaining 에 대하여 자바스크립트에서 순차적으로 수행되어야하는 비동기 작업은 promise chaining으로 해결할 수 있다. 아래는 promise chaining의 예시이다. new Promise((resolve, reject)=>{ setTimeout(()=>resolve(1), 1000); }).then((result)=>{ alert(result); //1 return result * 2; }).then(()=>{ alert(result); //2 return result * 2; }).then(()=>{ alert(result); //4 return result * 2; }); promise chaining은 result가 then 핸들러의 체인을 통해 전달된다는 점에서 착안. then 핸들러의 return값이 다..
[Javascript] Promise의 기본 Promise는 어떤 액션이 실행(Execute)되고 그 이후에 성공여부에 따라 특정한 액션(resolve/reject)을 할 수 있도록 하는 기능을 가지고 있다. 따라서 어떠한 액션의 실행을 완료한 후, 특정한 액션이 발생하도록 하기위해서 이 기능을 사용한다고 볼 수 있다.(비동기 처리 등) Promise를 만드는 방법 let promise = new Promise(function(resolve, reject) { // executor - 실행하길 원하는 액션 }); new Promise에 전달되는 함수 파라미터는 Executor(실행자, 실행 함수)라고 부른다. Executor는 Promise가 만들어질때 자동으로 실행되는 코드이다. Executor의 인수인 resolve와 reject는 콜백함수로 ..
[기초] Go 기초 정리 - 5 (Interface) Tour of Go를 기반으로한 Go의 기본 내용입니다. Interface Interface는 메소드의 시그니쳐 집합으로 정의된다. 인터페이스 유형의 값은 해당 인터페이스의 메소드를 모두 구현하는 타입이라면 어떤 유형이든 가질 수 있음. package main import ( "fmt" "math" ) type Abser interface { Abs() float64 } func main() { var a Abser f := MyFloat(-math.Sqrt2) v := Vertex{3, 4} a = f // a MyFloat implements Abser a = &v // a *Vertex implements Abser // In the following line, v is a Vertex (not *..
[기초] Go 기초 정리 - 4 (Method) Tour of Go를 기반으로한 Go의 기본 내용입니다. Methods 기본적으로 Go언어는 클래스를 가지지 않음. 하지만 비슷하게 타입의 메서드를 정의할 수 있다. 메서드는 특별한 receiver인자가 있는 함수인데, func 키워드와 메서드 이름 사이에 위치하고 있다. package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } //Vertex 구조체 타입에 Abs 메서드 func (v Vertex) Abs() float64 { //func와 함수명 사이에 리시버가 위치하고있다. return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := Vertex{3, 4} fmt.Println(v.Ab..
구조체를 포함하는 구조체 구조체는 구조체의 필드로 다른 구조체를 포함하는 방법이 있다. type User struct { Name string ID string Age int } type VIPUser struct { UserInfo User //구조체를 포함하는 구조체 필드 VIPLevel int Price int } User는 일반 고객의 정보를 나타내고, VIPUser는 일반고객의 정보에 VIPLevel과 Price정보까지 포함한다. 따라서 위 struct와 같이 "다른 구조체를 포함하는 구조체"형태로 작성될 수 있다. 이와 같이 작성하게 되면 VIPUser에 별도로 Name, ID, Age 필드를 작성할 필요없이 UserInfo를 이용하면 된다. package main import "fmt" type User struct..