[ 항해99] 53일차

카테고리 없음|2021. 7. 29. 23:18

항해 99

 

53일 차:

 

Backend api를 1차 배포했다. 아직 typescipt을 제대로 사용한 것도 아니고 흉내만 낸 것 같고,

convention을 지켜서 짠 코드도 아니고 여기저기 손볼곳이 많지만 프런트분들이랑 MVP를 만들기 위해 일단 1차 배포를 했다. 

 

1차 배포를 일단 해놓고 architecture에 관해서 회의를 가졌다.

여러 가지 design pattern들 중 제일 멋있어 보이는  DDD (domain driven design) 이었었다.

마치 이리저리 엉켜있는 우리의 스파게티 코드를 서랍에 잘 이쁘게 잘라서 넣어놓는 방식인 것 같은데. 

이 코드 들을 잘라도 실행이 되게 하려면 서로 연결을 따로 해줘야 하니깐... 뭔가 어려운 것 같았다.

 

지금 타입 스크립트도 제대로 못하고 있는 우리들이 하기엔 너무 이것도 저것도 확실하게 가져가지 못하는 것 같아서 과감히 포기하기로 하고

OOP 를사용해서 그중에 제일 유명한  MVC design pattern을 적용하기로 했다.

 

 

1) architecture 

 

MVC 

 

 model view controller로 web framework에서 많이 쓰이는 design pattern.

장고도 이걸로 되어있지 않나? 

 

https://www.geeksforgeeks.org/mvc-design-pattern/

 

MVC Design Pattern - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

Domain Driven Design

 

언젠가는 적용할 수 있을 거라 믿어..

https://khalilstemmler.com/articles/domain-driven-design-intro/

 

An Introduction to Domain-Driven Design - DDD w/ TypeScript | Khalil Stemmler

Domain-Driven Design is the approach to software development which enables us to translate complex problem domains into rich, expressive and evolving software. It's the way we design applications when the needs of our users are complex.

khalilstemmler.com

 

이것 외에도 OOP. Design pattern 이 여러 개 있는데, 현업에서도 사용하면서 다른 개발자들과 소통을 위해서라도 꼭 배워야 한다고 

그럣는데 기억은 안 난다. 그중에 유명한 것들  abstrac, factory  design pattern 등은 제대로 알고 있어야 한다. 

 

 

 

 

2)  JS

Javascript에 기본을 모르는 것 같아 Typescript를 공부하는 틈틈이 같이 공부하기로 했다.

제일 중요한 것은 기본적으로 Javascript 는 싱글 스레드  synchronous (동기적) 언어 (파이썬 등과 같이 위에서부터 한 줄씩 실행되는  언어).

하지만 다른 언어와 다르게 Asynchronous (비동기적) process도 가능하다. 

 

파이썬 등과 다르게   JS가 실행될 때 한번 사이즈를 보고 , 오래 걸릴 것 같은 것들 ( setTimeout, ajax, eventlistenr...)등을 Web Api라는 공간에  Queue 형식으로 되어서 오래 걸릴 것들이 쌓여있다가 하나씩 실행된다.  이 process 가  asynchronous process인데,

하지만 이 process (비동기적 process)를 개발자가 원하는 대로 사용하려면 , callback 함수를 사용하면 된다.

 

그래서 말로만 듣던 callback hell이 여기서 나오게 된다.

first_function(callback(){
	second_function(callback(){
    	third_function(callback(){
        		})
             })
         });

 

콜백이 다음 콜백을 부르고 또 다음 콜백을 부르고.... 이것을 해결하기 위해서  promise 개념이 나온다.

 

promise는 design pattern이며  callback함수를 사용해서 그냥 써도 되지만 "다른 사람들" 눈에는 callback함수들이 별로 안 이쁜가 보다. 그래서 가독성을 높이기 위해서 promise를 사용한다.

 

var promise = new Promise(function(resolve, reject)
	var something = 1+1
    reject// or  resolve
    
promise.then(function(){
	console.log("yes ")
})catch(function(){
	console.log("no ")
})

프로미스는 object type인데,  promise를 설정할 때  reject 나 resolve를 설정해준다.

만약 resovle 되었다면. then으로 가서 해당하는 다음 code를 실행한다.

reject 되었다면 또 해당하는 catch로가서 해당하는 다음  code 를실행한다.

 

Promise의 중요점은  : 

1. design pattern이라는 것 

2. 성공 (resolve) 혹은 실패(reject)를 나눠서 logic을 짤 수 있다

3. 성공 혹은 실패에 대한 data를  reject(data) or resolve(data)로 넘길 수 있다.

4. 상태가 있다.       -성공하면 resolved, 실패하면 rejected, 아직 처리가 안됬으면(pending)

 

하지만 promise로는 좀 더 발전시키고 싶으신 똑똑하신 분들이  await/async를 만들었다.

 

async함수 안에서 await을 쓸 수 있다.

asynce함수가 끝난 자리에는. then을 사용할 수 있다. (promise object가 남는다) 하지만 only 성공한 것만 쓸 수 있다

catch를 사용하지 못한다.

async function add(){
  return 1 + 1 
}

add().then(function(result){
  console.log(result)
});

위에서 보면  add function 은 async이고 return으로  1+1을 준다.

result는 then으로 다음 function을 실행할 수 있다.

 

 

await으로 기다려서 값을 받을 수 있다.

app.get('/'. asynce(req.res)=>{

   await User.find()
   res.send("hi")
})

근데  async의 제일 중요한 점은 ONLY  성공한 것만 사용할 수 있다

then만사용이 가능하고 catch가 사용이 불가하다.

그래서 나온 것이 try catch인가?

어쨌든 이것을 해결하기 위해 try catch를 사용할 수 있다.

 

JS 배운 것 1줄 정리 :

JS비동기식으로 사용하려면 -> callback ->코드 더러움 -> promise -> 이것도 복잡해 보임 -> await async -> try catch쓰샘 

 

2-2) TS 추가예정 : 귀찮으면 내일것에 씀

 

 

3)  비트코인 형이 다시 4만 불에 올라가셨다.

   

    항해하면서 제대로 트레이딩도 못하고 차트도 잘못 본다. 확실히 현금화랑 defi에 넣어놓은 게 좋은 결정이었다.

     

나는 개인적으로는 블록체인 -크립토 시장은 4차 산업혁명에 중요한 역할을 할 거라고 믿는다. 

다음 학기 resreach project도  블록체인 쪽 project가 많으니 내가 멍청이는 아닌듯하다.

그중 하나가  decentalized web인데  간단히 읽어보기 좋은 article : 

Decentralized Web :

https://www.investopedia.com/tech/can-decentralized-blockchainbased-internet-become-reality/

 

Can Decentralized, Blockchain-based Internet Become a Reality?

Here’s what a decentralized, blockchain-based internet promises, and where it may face issues.

www.investopedia.com

 

반응형

댓글()