우리가 부르는 통상적으로 부르는 '서버'는 두 가지로 나누어진다.

하나는 웹 서버 (Web Server) - WS

또 다른 하나는 웹 어플리케이션 서버(Web Application Server) - WAS 이다. 

 

일단 이렇게 웹 서버(WS)와 웹 어플리케이션 서버(WAS)로 나누어서 사용하는 이유는 효율성 때문이다.

웹 서버(WS)는 정적인 컨텐츠를 처리하며, 웹 어플리케이션 서버(WAS)는 주로 동적인 컨텐츠 처리를 담당하고 있다. 

그렇다면

 

정적인(Static) vs 동적인(Dynamic)


으로 나누어서 생각해보아야 한다.

 

정적인(Static)

일반적으로 이야기하는 정적(Static)의 의미는 만들어놓은 것 그대로 제공하는 것 자체를 정적이라 할 수 있다. 예를 들면, HTML 템플릿을 작성하고 홈페이지를 열어보면 이것 자체가 정적인 페이지가 되는 것이다. 정적인 웹사이트는 만들기 쉽기 때문에 처음에는 정적인 웹사이트를 만들어보며 사이트를 만든다.

( 다른 컴퓨터 혹은 클라이언트에서 접속해도 항상 같은 페이지를 보여주는 것을 정적 사이트라 한다.)

 

동적인(Dynamic)

동적의 의미는 상호작용을 통한 데이터 처리가 필요한 경우 동적인 페이지라 한다. 대표적으로 데이터베이스의 처리가 필요한 경우 '동적'이라는 말이 붙는다. (서버가 사용자의 '요청(Request)'에 따라 데이터를 가공처리한 뒤에 생성되어진 웹 페이지를 보여주는 것이다.)

 

 

웹 서버(Web Server)


웹 서버는 일반적으로 정적인 컨텐츠를 제공합니다.

  • 클라이언트가 요청한 정적인 컨텐츠를 HTTP를 통해 제공해주는 서버입니다. 
  • 클라이언트로부터 들어온 요청에 대해 사용자 인증을 처리하는 역할을 한다. 
  • 요청한 파일이 없거나 문제가 발생하면 특정한 코드 값을 전달해준다. (대표적으로 404)

404 error

 

그렇다면 여기서 의문이 하나 듭니다. 정적인 컨텐츠를 처리해준다면, 동적인 컨텐츠는 어떻게 처리해야할지 생각해야 합니다.  여기서 웹 서버의 다른 역할이 있습니다.

  • 동적인 요청 ( 예를 들면, 데이터베이스 쿼리문 처리 )가 들어오면 이 요청을 웹 서버에서는 처리가 불가능하므로 컨테이너(Container)에 보내주는 역할을 합니다. 

※ 웹 서버는 정적 처리만 하기 때문에, 웹 서버 혼자만은 처리가 불가능하므로 동적 처리를 위해 요청을 보내는 것이다. HTML 페이지 자체에서는 서버에 저장된 데이터를 가져오거나 저장하는 것이 불가능하므로 요청을 통해 데이터를 가져오거나 저장해야 한다.

 

웹 서버의 종류에는 NGINX, APACHE 등이 있습니다.

그렇다면 여기서 이야기하는 컨테이너(Container)란 무엇인가?

컨테이너는 서블릿의 생명 주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 지닌 프로그램이다. 

(서블릿의 생명주기는 서블릿을 관리해주는 역할이라 생각하면 된다.)

Servelt Container 생명주기

 

컨테이너는 두 가지 종류가 있는데, 서블릿 컨테이너와 JSP 컨테이너가 있다.

(실상, 서블릿 컨테이너와 JSP 컨테이너는 같은 개념이다. JSP 자체가 PHP 처럼 스크립트 형식으로 동작하지 않고 서블릿으로 변경된 이후에 실행되기 때문이다. JSP를 서블릿으로 컴파일 해주는 것이 JSP엔진이다. 그런데 여기서 톰캣(TomCat)의 경우, 이러한 JSP엔진이 JSPServlet이다. JSP를 동작시켜주고 컴파일 하는 것이 JSPServlet이 담당하고 있으므로 어떠한 의미에서는 JSP컨테이너라고도 볼 수 있는 것이다.

 

  • 서블릿 : 서블릿은 자바로 구현된 CGI를 의미한다. [자바를 사용하여 웹 페이지를 동적으로 생상하는 서버 측 프로그램을 이미한다.]
  • CGI : 공용 게이트웨이 인터페이스 (Common Gateway Interface) 로 웹 서버와 프로그램 간의 교환방식을 의미한다. (정적 처리를 하는 웹 서버와 컨테이너를 연결하기 위한 통신 장치이다. 쉽게 생각해서 웹서버와 컨테이너 간의 통신을 도와주는 장치이다. )
  • JSP(Java Server Pages) : 자바 서버 페이지는 HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어이다. 

JSP의 기본적인 동작 구조는 클라이언트에서 서비스가 요청되면 JSP의 실행이 된다. JSP는 웹 어플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환 → 서블릿 원시코드가 컴파일되어서 HTML 형태로 클라이언트에게 돌려준다.

 

※ 개인 홈페이지에서는 HTML, CSS, JavaScript만으로도 충분한 표현이 가능합니다. 하지만 요새는 트위터, 페이스북, 개인 쇼핑몰 운영 그리고 댓글이 달리는 기능이 있는 홈페이지와 같이 기능이 추가되어져서 웹 페이지를 만듭니다. 이러한 데이터는 데이터베이스 상에 저장되는데, HTML으로는 막대한 양의 데이터를 저장과 처리가 불가능하므로 이러한 데이터를 처리를 감당하기 위해 만들어진 곳이 동적 페이지 입니다. (대표적인 언어가 CGI, ASP, PHP, JSP 등이 있다.)

 

웹 어플리케이션 서버(Web Application Server)


웹 서버로부터 오는 동적인 요청을 처리하는 서버를 웹 어플리케이션 서버라 한다. 일반적으로 WAS라 한다.

위키백과에서 WAS는 이렇게 정의되고 있다. 인터넷 상의 HTTP를 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행주는 미들웨어(소프트웨어 엔진)으로 볼 수 있다. 

WAS는 웹서버 + 컨테이너로 이루어진 서버라 생각하면 편하다.

[ko.wikipedia.org/wiki/%EC%9B%B9_%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98_%EC%84%9C%EB%B2%84]

 

웹 어플리케이션 서버 기능은

  • 프로그램 실행 환경과 데이터베이스 접속 기능을 제공
  • 여러 개의 트랜잭션을 관리
  • 업무를 처리하는 비즈니스 로직 수행

웹 어플리케이션의 종류는 아파치 톰캣, 제우스, 제티(Jetty), 레진(Resin) 등이 있다.

 

더욱 자세한 내용은

rrhh234cm.tistory.com/456

 

웹 어플리케이션 서버

웹 서버와 웹 애플리케이션 서버 구분 구분 역할 프로그램 명 웹 서버 웹 클라이언트의 요청을 받아서 요청을 처리하고, 그 결과를 웹 클라이언트에게 응답한다. 주로 정적 페이지인 HTML, 이미지

rrhh234cm.tistory.com

gmlwjd9405.github.io/2018/10/29/web-application-structure.html

 

[Web] web.xml 설정 내용, 역할 및 간단한 예시 이해하기 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

developer.mozilla.org/ko/docs/Learn/Common_questions/What_is_a_web_server

 

웹 서버란 무엇일까? - Web 개발 학습하기 | MDN

웹 서버란 무엇일까? Jump to sectionJump to section"Web server"는 하드웨어, 소프트웨어 혹은 두 개가 같이 동작하는 것을 의미할 수 있습니다.  하드웨어 측면에서, web server는 web server의 소프트웨어와 we

developer.mozilla.org

를 참조하도록 하자.

영어 문장의 기본 형식인 1형식부터 5형식까지 보어가 필요한 곳은 

2형식 문장 [S + V + S.C] - 주격보어가 필요

5형식 문장 [S + V + O + O.C] - 목적격 보어가 필요

이다.

 

근본적으로 보어는 '의미를 보충해주는 말'이다.

 


※ 많이 헤깔리는 것 중 하나가 품사 vs 문장의 성분 을 혼동해서 사용되는 경우가 있는데 주의하자.

[품사 : 명사, 대명사, 동사, 형용사, 부사 등과 같이 단어를 기능 및 형태의 의미에 따라 나눈 것]

[문장 성분 : 주어, 서술어, 목적어, 보어, 부사 등 문장을 구성하는 기능적 단위를 의미한다.]

 

품사는 '단어'로써 나뉘어지는 것 

문장 성분은 '문장을 구성하는 기능적 단위'로 나누어진 것 

으로 이해해야 한다. 그래서 문장 성분에서 문장의 주어 역할을 하는 것, 부사 역할을 하는 수식어구 등으로 나누어서 설명하는 것이다. 

 


1. 주격 보어로 쓰이는 경우

그렇다면 to부정사와 동명사가 주어를 보충설명해주는 주격 보어로 쓰이는 상황에 대해 살펴보자.

일반적으로 주격 보어가 나오는 경우이면 2형식 문장인 [주어 + 동사 + 주격보어]에서 많이 쓰인다.

2형식 문장에서 많이 쓰이는 동사는 be동사의 형태이므로 be동사 뒤에 to부정사와 동명사가 주어를 설명하고 있으면

주격보어로 사용되고 있는 것이다.

 

예를 들어보로독 하자. 

i.e)

One of the best ways to hold yourself to a stduy schedule is to study in groups

그냥 보면 어려우므로 문장의 성분별로 자르자.

One of the best ways to hold yourself to a stduy schedule   is  to study in groups

주어 + 동사 + 보어의 형태로 나누어짐을 확인할 수 있다.

[공부 스케줄을 유지하는 가장 좋은 방법 중 하나 // 는 // 그룹으로 공부하는 것이다.]

 

여기서 보어로 쓰인  to study in groups 가 주어를 설명해주고 있는 상태다. 

to부정사 말고 동명사로 바꾸어서 다시 써보자면, studying in groups로 쓸 수 있다.

 

One of the best ways to hold yourself to a stduy schedule   is  studying in groups 

 

주격 보어에서 많이 혼동되는 것은 동명사와 현재 진행형으로 쓰여진 문장을 자주 헤깔린다.

예를 들어,

My hobby is playing tennis.  → My hobby == playing tennis 로써 주어와 보어와 같은 의미를 갖는다.

[내 취미는 테니스이다.]

I am playing a tennis with my son. 

→ am playing이라는 동사와 I가 같은 의미를 가지지 않는다. 내가 play를 하고 있을 뿐이다. 

[나는 아들과 함께 테니스를 하고 있다.]

 


2. 목적격보어로 사용되는 to부정사, (v-ing)현재분사, 동사원형, 과거분사(p.p)

주격보어와 비슷하게 목적격 보어도 목적어를 보충 설명한다. 그래서 목적어 뒤에 to부정사와 동사원형, (v-ing)현재분사가 오게 되면 목적격 보어로 사용되는 형태로 쓰이게 된다. 목적격 보어가 필요한 문장은 5형식 문장으로 [S + V + O + O.C]의 형태이다.


* 앞서 v-ing의 형태를 동명사라고 이야기했는데, 이제는 v-ing의 형태를 현재분사로 바꿔서 사용하고 있다.

동명사와 현재분사 모두 v-ing의 형태로 쓰인다. 하지만 문장 내에서 역할이 다르다.

 

동명사

동명사의 경우, 명사에 가깝다. 그래서 명사 역할만을 맡고 있다.

learning (배우는 것), reading(읽는 것), eating(먹는 것)

동사 자체는 행위를 나타내고 있지만 명사화해서 사용한다.

(동사는 움직이는 동영상이라면, 동명사는 한 장면에 대한 사진 같은 느낌이다. 혹은 행위에 대한 명사화라 볼 수 있다.)

일반적으로 해석은 '~하는 것', '~하기' 로 해석된다.

 

분사

분사는 두 가지 종류가 있다. 하나는 현재분사(-ing), 다른 하나는 과거분사(-ed)의 형태가 있다. 분사는 모두 형용사의 역할을 하며, 현재분사는 능동의 의미, 과거분사는 수동의 의미가 된다. 

일반적으로 해석은 '~은', '~는'으로 해석된다.

sleeping (잠자는), exciting (신나는)

의 느낌으로 해석된다. i.e.) sleeping cat (잠자는 고양이) , exciting travel (신나는 여행)

 


목적격보어로 사용할 수 있는 형태는 to부정사, 동사원형, v-ing(현재분사), p.p(과거분사)가 목적어를 보충 설명해주는 역할을 한다. 여기서 의미상 to부정사, 동사원형, v-ing(현재분사) // p.p(과거분사) 로 나뉜다.

 

to부정사, 동사원형, v-ing(현재분사) : 는 목적어 뒤에 사용되면서 목적어가 하는 행위 자체를 나타내는데 사용된다.

p.p(과거분사) : 목적어에게 보어에 해당하는 행위를 한 것으로 나타낸다.

 

목적격보어로 쓰는 to부정사

목적격 보어를 to부정사로 쓰이는 동사 : ask, advise, invite, want, allow, expect, promise, cause등이 있다.

The teacher advised me to study hard : 선생님은 나에게 열심히 공부하라고 충고했다. 

"me가 목적어로, 목적어에게 study하라고 하다" 로 해석된다. 

'목적어에게 목적격보어 하다' 가 해석방법이다. 

 

목적격보어로 쓰이는 동사원형과 v-ing(현재분사)

The movie made me happy : 그 영화는 나를 기쁘게 했다. 

'목적어'가 '목적격보어'하게 하다. 로 해석된다. 

 

*지각 동사( look, see, hear, smell 등)은 v-ing(현재분사)형태가 사용될 수도 있다.

Have you ever seen J.J riding a car : 너는 J.J가 차를 타는 것을 본적 있니?

 

목적격보어로 쓰이는 p.p(과거분사)

Atter the hurricane, father found his house destroyed. : 허리케인이 지난 이후에, 아버지는 자신의 집이 파괴된 것을 발견했다.

집이 파괴된 것 -> 집(목적어)가 파괴당했다. (목적격보어)

로 수동 관계처럼 해석된다. 

 

[have + O + C(p.p)] 의 형태는 문맥에 따라 해석되는 방향이 달라진다.

O가 C되도록 시키다. ( 사역의 의미로 사용되는 경우 )

O가 C를 당하게 되다. ( 수동의 의미로 사용되는 경우 )

 

여기서 사역이란 말을 풀어서 쓴다면 '시키다'라는 의미로 사용된다. 사역 동사는 내가 행위를 행하는 행위자가 아닌 것을 알려줄 때 사역동사를 사용한다. 

  • I had my car repaired : 나는 내 차를 수리했다. (차를 수리한 사람이 내가 아니라 다른 사람으로 하여금 수리를 받은 것이다. == 다른 사람을 시켜서 내 차를 수리한 것! )
  • I repaired my car : 나는 내 차를 수리했다. (이는 차를 내가 직접 수리한 것이다.)

이렇게 행위자가 누구인지를 확실하게 이야기하고자 사역의 의미를 사용하게 된다. 

 

I had my phone stolen yesterday : 어제 나는 핸드폰을 훔침을 당했다. (수동적의미로 핸드폰이 훔침을 당한 것이다.)

* 지난 시간에는 수동태에 대해 살펴보았다.

[중학영어] 07강. 수동태

 

[Chapter 4 - 동사의 태] 07강. 수동태

능동태와 수동태 · 능동태 능동 : 문장의 주어가 동사의 동작을 실행하는 것을 능동태라 한다. 그렇다면 이러한 능동태는 어떤 의미를 가지는가?         행위자가 대상에 동작을 행

studium-anywhere.tistory.com

 

우리가 일반적으로 주어 자리와 목적어 자리에는 명사가 와야한다.

하지만 간혹 문장마다 주어와 목적어 자리에 동사가 오는 경우가 분명히 존재한다. 

 

* 명사와 동사가 구분이 안 간다면 단어를 다시 외우는 것이 좋다. 문장을 분석하면서 단어가 주어인지 동사인지 하나하나 검색을 통해 찾아보며 머릿속으로 정리하는 것이 좋다. 2 ~ 3일 정도 시간을 들여 고생을 한 뒤에는 익숙해져서 동사인지 명사인지 구분하기 쉬워진다. 최소한 시간을 들여서 공부하겠다는 마인드로 미리 공부를 해두는 것이 좋다.

 

여기서이야기하는 to-v 의 형태는 to부정사

                       v-ing의 형태는 동명사로 이야기한다.

 

이번 시간에는 to부정사와 동명사에서는 명사역할을 하는 명사적 용법에 대해 알아보고자 한다.

[이외에는 형용사적 용법부사적 용법으로 나누어져 있다.]


그렇다면 to부정사와 동명사의 명사역할은 3가지로 나누어서 생각해볼 수 있다.

주어목적어 자리에 오는 명사가 와야하므로 주어 자리에 들어갈 형태와, 목적어 자리에 들어갈 형태로써 나누면 된다. 크게 나누면 주어와 목적어 자리에 들어갈 명사로 생각하면 되고 조금 더 세분화시켜서 

 

1. 주어에 들어갈 명사의 형태로 쓰이는 경우

2. 목적어에 들어갈 명사의 형태로 쓰이는 경우

3. 보어에 들어갈 명사의 형태로 쓰이는 경우 [주격 보어, 목적격 보어]

 

로 나눌 수 있다.

 

1. 주어자리에 쓰이는 to부정사와 동명사의 형태

To부정사

먼저, to부정사는 하나의 명사를 만들어주는 명사구 역할을 한다. 그래서 동사 앞에서 끊어서 읽어준다. 일반적으로 to부정사는 단수 취급이므로 그 뒤에 오는 문장의 동사는 단수 동사가 온다.

to부정사의 명사적 용법은 ~ 하는 것의 형태로 해석이 된다. 

 

* 여기서 나오는 것이 가주어 it이 나온다.

(to부정사는 대부분의 문장이 가주어it을 많이 쓴다. 동명사는 잘 안쓴다)

 

to부정사가 주어에 들어간 명사로 사용된 예 : To play game is difficult

to부정사가 가주어 It으로 쓰인 경우 : It is difficult to play game

 

위의 문장을 아래의 문장으로 바꾸어 보았다.

 

To play game is difficult

It is difficult to play game

 

이러한 형태로 바뀌게 된다. 일반적인 해석으로 ~하는 것으로 해석하면 된다.

그렇다면 해석은 "게임을 하는 것은 어렵다" 로 해석된다. 

 

i.e.)

To watch Tv is exciting

It is exciting to watch Tv

 

해석은 Tv를 보는 것은 즐겁다. 

 

이렇게 주어로 쓰일 경우 '~하는 것은(는)'으로 해석된다.

 

동명사

to부정사와 비슷하게 단수 취급을 하며 '~하는 것은(는)'으로 해석된다. 

 

i.e)

Eating Vitamin C is good for health

It is good for health eating Vitamin C

비타민C를 먹는 것은 건강에 좋다.

 

동명사에서도 to부정사와 비슷하게 가주어 it을 사용하는데, 동명사는 자주 사용되진 않는다. 

그런데 간혹 사용되는 경우도 있으므로 간략하게는 알아둬야 한다.

 

* to부정사와 동명사의 주어로 쓰이는 경우에 대해 살펴보았는데, 이는 

동사 eat (먹는다) -> Eating vitamin C ~ 으로 쓰이면서 '먹는 것' 이라는 명사의 느낌으로 바꾼 것이다. 

혹은 eat(먹는다) -> to eat (먹는 것) 으로 변환이 되어서 명사의 형태로 쓰이게 된다.

 


2. 목적어 자리에 쓰이는 to부정사와 동명사

목적어 자리에 쓰이는 to부정사와 동명사의 경우는 의미에 따라 차이가 존재한다.

통상적으로 to부정사는 '미래'의 의미가 담겨져 있다

그리고 동명사는 '현재'와 '과거'의 의미가 담겨져 있다.

 

I want to go school : 나는 학교 가는 것을 원한다. [want to -v : v하는 것을 원한다.]

I plan to go school : 나는 학교 가는 것을 계획하다. [plan to -v : v할 것을 계획하다.]

I hope to go school : 나는 학교 가는 것을 바라다. [hope to -v : v할 바라다]

I expect to go school : 나는 학교 가는 것을 기대하다. [expect to -v : v할 것을 기대하다.]

 

이런 느낌으로 사용된다. 앞으로의 기대와 미래의 의미를 지니고 있다. 

 

J.J give up studying a few years ago. : J.J는 공부하는 것을 포기했다. 몇 년 전에 [give up v-ing : v 하는 것을 포기하다.]

동명사의 경우 이런 느낌으로 현재와 과거의 의미를 가진다. 이러한 문장의 해석은 '~하는 것을', '~ 한 것을' 이라는 말로써 해석한다. 

 

간혹 to부정사와 동명사의 차이에 따라 뜻이 미묘하게 바뀌는 것이 존재한다.

 

i.e.) 

 

I forget to play next week.  → 다음주에 노는 것을 잊어버리다. (미래에 할 행동)

I forget playing yesterday.  → 어제 놀았던 것을 잊어버리다. (과거에 한 행동)

 

I tried to turn off the TV, but I couldn't it.  → TV를 끄려고 노력했지만, 끄지 못했다.

( try to 부정사 : ~하려고 애쓰다. 노력하다.)

I tried eating some food, but I feel still hungry → 음식을 먹어보았지만, 여전히 배가 고팠다. 

(try 동명사 : 시험 삼아 ~를 해보다.)

 

의 형태로 사용될 수 있다. 각각의 경우마다 문맥상의 해석이 다른 의미를 가질 수 있으므로 항상 어떤 의미인지 생각해보며 공부해야 한다. 

 

  Matlab이란? 무엇인가? 우리는 왜 Matlab을 써야하는가? 일단 Matlab이란 파이썬과 비슷하게 자연어에 가까운 고수준 언어이다. 여기서 고수준이란 수준이 높다는 것이 아닌 기계어 (이진수로 표현된 010100) 보다 우리가 흔히 사용하는 자연어에 가까운 언어를 이야기한다. 

 

실상 Matlab자체가 기계어를 이해하고 싶어서 만든 것보다는 수학적 계산, 여러 신호 처리, 영상 처리, A.I.와 관련한 다양한 수치해석 등 다양한 형태에 대한 수치를 다루기 위해 만들어졌다. C언어 보다 더 고수준 언어이지만, 다양한 공학과 관련한 수학적 연산이 매우 빠르기에 많이 사용된다. 이전에 이야기한 Octave는 Matlab과 비슷하지만 Matlab을 따라가진 못한다. 그리고 우리의 선대가 만들어놓은 좋~은 함수가 많으므로 우리는 편하게 쓰면 된다. (물론 가져다 쓰는 것도 박사과정쯤 되면 못한다. 직접 만들어서 써야지 뭐... 굴러라 대학원생!)

 

요새 유명한 파이썬과도 비슷하다고 볼 수 있지만, 솔직히 공학과 관련한 연산은 Matlab이 매우 빠르기에 Matlab이 많이 사용된다. 빅데이터를 다루는 곳에서는 파이썬도 나쁘지 않은 선택이지만, 내 생각에는 다 써봐야 한다고 생각한다. 특정 범위에서는 Matlab이 이점이 있을 것이고 특정 분야에서는 파이썬이 좋을 것이다. 당연히 오픈 소스로써 파이썬은 좋은 대책이지만, 학생이라면 꼭 Matlab을 사용해보기를 추천한다. 정말 좋은 툴이다.  

 

이러한 여러 장점을 가지고 있음에도 Matlab이 쓰기 꺼려지는 가장 큰 이유는 무료가 아니라는 점이다. 다른 프로그래밍 언어와의 호환성이 떨어지는 점, 그리고 단순히 공학적 연산을 하기 위한 스크립트 언어라는 점을 탈피하기 위한 여러 노력을 하고 있다. Matlab코드를 Java, C, C++에 적용할 수 있게끔 노력하는 중이다. 요새는 버전업을 통해 범용성을 늘려가려는 노력을 많이 한다. (General Purpose Progrmming Language를 달성하기 위해 노력하는 듯하다.) - 요새는 4차 산업 혁명에 발 맞춰서 머신러닝과 딥러닝 등 A.I 설계과 모델링에 맞추고 있는 모습을 보인다. 

* kr.mathworks.com/

Matlab 홈페이지

 

처음 시작하면 이러한 모양을 볼 수 있다.

 

여러 가지를 타이핑 함으로 다양한 수치를 얻을 수 있는데, 

가장 간단한 계산인

 

>> 1 + 2

타이핑하고 확인할 수 있다.

 

간단한 계산에서부터 추가로 시각화할 수 있는 다양한 도구를 가지고 있다.

>> A = magic(7);
>> B = bar3(A);
>> colorbar

를 입력하면 ( * 그냥 입력해보자. 매트랩의 편안함을 보여주기 위함이다.)

이렇게 신박한 그래프를 바로 그려준다. (너무 간편해서 좋다.)

 

* 매트랩 자체가 수치 해석과 더불어 선형적인 모형을 다룰 수 있도록 설계되어 졌으므로 행렬(matrices)와 벡터를 사용하기 아주 편안하게 되어있다. (그래서 공대생은 매트랩을 쓰면 아주 편-안- 하게 느끼게 되는 것이다. 한번 써보면 헤어나올 수 없는 편안함 - 심지어 내가 설계 안했는데 석사 수준까지는 이미 준비되어 있는 편안함! 아 물론 없는건 만드셔야 합니다. 씽긋 ^ㅡ^)

 

 

Matlab을 대체하기 위한 소프트웨어를 간략히 소개한적이 있다. 

Matlab(매트랩)을 대체하기 위한 소프트웨어! Octave

 

Matlab(매트랩)을 대체하기 위한 소프트웨어! Octave

대학교 때, 한창 매트랩(Matlab)을 사용했었다. 학교를 졸업하고 매트랩(Matlab) 다시 사용하기 위해 매트랩 공식 사이트에 접속해보니! 간단하게 사용하기에는 가격이 너무 비싼 가격을 형성하고

studium-anywhere.tistory.com

 

간단하게 사용하기에는 좋지만, 심화학습을 위해서는 좋지 않아 결국에는 Matlab으로 돌아오게 되었다.

그래서 이번에는 Matlab을 배우기 위한 여러 레퍼런스를 소개하고자 한다. (당연히 추천 레퍼런스이며, 앞으로 Matlab과 관련한 포스팅은 이러한 레퍼런스를 기반으로 포스팅을 이어나갈 예정이다.)

 

* 설치 문제와 라이센스 문제는 이곳에서 다루지 않을 예정이다. 비싼 라이센스를 가지지만 이후에는 정말 쓸모가 많기 때문에 구매하는 것도 나쁘지 않다고 생각한다.

(학생이라면 당연히, 학교의 라이센스를 충~분하게 쓰시는게 정말 도움이 됩니다. 대학생은 기본적으로 학교에 라이센스가 존재합니다. 꼭 알아보고 쓰시기 바랍니다. )

( 일반인이라면 어쩔 수 없습니다. 구매하세요. ^ㅡ^)


역시 특정 프로그래밍 언어를 배우기 위해 가장 좋은 레퍼런스는 그 프로그래밍 언어를 배포하는 곳에 가서 직접 배우는 것이 가장 좋다. 그러므로 Matlab 공식 사이트에 들어가서 배우는 것이다.

우리는 당연한 일을 당연하게 간과하는 경향이 있다. 이걸 보고서 1차로 학습을 한 뒤에, 책을 쓰는 것이므로 당연히 기본 사이트에 들어가서 보는 것이 좋다. 하지만 처음 프로그래밍을 접한 사람은 이러한 방식은 힘들 수도 있다. 튜토리얼을 작성하는 사람마다 당연하게 생각하는 부분이 다르기에 차분하게 알려준다고 생각하진 않는다. 그러므로 처음 프로그래밍 언어를 배운다면 내게 맞는 책을 골라서 보는 것도 하나의 방법이다. 

 


kr.mathworks.com/help/matlab/index.html

 

MATLAB Documentation - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

▲Matlab Documentation으로 많은 내용을 담고 있으며, 한국어로도 번역이 되어 있다. (단, 최신 문서는 영문으로만 볼 수 있으므로 유의하자. 그리고 이제는 영어를 할 때가 왔다.)

 


matlabacademy.mathworks.com/kr

 

MATLAB 및 Simulink 교육

MATLAB Fundamentals (English) 데이터 분석, 모델링 및 프로그래밍을 위한 MATLAB의 핵심기능을 배워보세요.

matlabacademy.mathworks.com

▲앞서 본 것이 스스로 1번부터 쭈욱 봐야하는 곳이라면 이곳은 자기 주도형 학습을 배울 수 있는 곳이다. 하나하나 필요한 내용을 배울 수 있어서 좋은 듯하다.


ubcmatlabguide.github.io/

 

http://ubcmatlabguide.github.io/

 

ubcmatlabguide.github.io

▲Matlab의 공식 사이트가 딱딱함이 있다면 개인적으로 느끼기에 부드럽게 설명해준 곳이라 생각하는 곳이다. 

University of British Columbia에서 사용되는 Yet Another Guide to Matlab이다. (사실 개인적으론 이 곳이 더 좋다.)

 

능동태와 수동태

· 능동태

 

능동 : 문장의 주어가 동사의 동작을 실행하는 것을 능동태라 한다.
그렇다면 이러한 능동태는 어떤 의미를 가지는가?
        행위자가 대상에 동작을 행하는것을 나타내는 것이 바로 능동태다. 
(그래서 동사 앞에 행위자(주어)가 오는 것이다.) 

주어 (행위자) -> 동사(동작, 행위) -> 목적어 (동작 행위의 대상)
[이러한 기본적인 사고의 흐름에 따라, 그 해석도 비슷하다. 
주어가 어떠한 행위를 한다. 그 행위의 대상이 목적어이다.]

· 수동태 

수동 : 수동태는 주어가 동사의 행위와 동작을 받거나 당하는 형태를 의미한다.
수동태는 어떤 일이 벌어진 것 자체, 일어난 일 자체가 중요하다!!
누가 그 일을 했는지는 중요하지 않다. 그렇기에 행위자를 모르거나, 행위자 자체가 중요하지 않은 것이다. 그르므로 행위의 대상을 이야기의 중요 요소로 놓고 싶을 때 수동태를 쓰는 것이다.
(그래서 행위자는 동사 뒤에 오거나 언급되지 않는 것이 일반적이다.)

주어(행위의 대상) + be + p.p(주어진 동작, 행위를 이야기함) + by 목적어 (행위자)

J.J house was painted last year
→ J.J의 집은 작년에 페인트칠해졌다.



J.J painted the ceiling of the his house
J.J는 그의 집 천장에 그림을 그렸다.


1. 수동태 be p.p.

수동태 만드는 방법

  1. 능동ㄴ태 문장의 목저어를 주어로 옮긴다.
  2. 동사의 시제를 생각해서 be + p.p. (과거분사) 형태로 고친다.
  3. 능동태 문장의 주어를 목적격으로 바꾸어서 by + 목적격 으로 만들고 문장 끝에 둔다.
  4. 다른 수식어구는 그대로 냅둔다.

예를 들어보자면, 다음의 문장을 

 

My sister draw the picture

→ [내 여동생이 그림을 그려줬다.]

 

수동태로 바꾸면

The picture drawn by my sister

→[그 그림은 내 동생에 의해서 그려졌다.]

의 형태로 바꾸어진다. 

 

* 주의할 점 : 수동태 공부 자체는 능동태를 수동태로 바꾸고, 수동태를 능동태로 바꾸는 것이 학습의 중점이 아닌다. 이러한 행위를 하는 이유는 주어가 동사의 뜻을 행하는 주체인지, 아니면 동사의 뜻을 받는 대상인지 판단하는 것을 활용해서 자유롭게 사용할 수 있는 능력을 키우기 위함이다. 이를 주의하자!


2. 수동태에서 동작의 행위가 되는 대상

수동태 구문에서 [by + 행위자] 는 언제나 쓰여지는 대상이 아니다. 

앞서 수동태를 쓰이는 상황에서 보았듯이, 수동태는 집중하고 싶은 대상이 있는 상태일 때 사용되는 것이 수동태이다. 

 

예를 들어, 백화점에서 유리컵 매장을 구경하다가 모르고 유리컵을 깨서 매우 당황한 상태라 생각하자.

그러면 어머! 유리컵이 깨졌어! 이렇게 이야기할 것이다. ( '나'라는 행위의 주체는 빼고 이야기하는 것이 포인트이다.)

 

 Glass was broken suddnely 

→ [유리컵이 갑자기 깨졌어]

 

이러한 형태로 이야기하게 된다. 내가 깨긴 했지만, 그리고 잘못이란 것을 알고 있지만 누군가의 비난이 너무 두려운 상황이라면 '에구머니나 유리가 깨졋어 어떻하지?' 란 느낌일 때 사용한다. 이런 상황에서는 by + 행위자를 붙이지 않는다. 

 

 The results of the exam were announced yesterday.

 → [시험의 결과가 어제 발표되었어.] 

 

이러한 발표의 행위가 중요하지 않은 상황에서 [by + 행위자]는 생략되곤 한다. 

발표를 해준 주체가 중요한 것이 아니라 발표된 그 상황 자체가 중요한 것이라 [by + 행위자]가 생략된 것이라 생각하면 된다.

 

 [by + 행위자] 가 생략되는 경우는 다음과 같다.

  1. 행위자를 누군지 정확하게 알 수 없는 경우
  2. 위에서 유리컵을 깬 상황처럼 행위자가 누군지 알리고 싶지 않은 경우
  3. 문맥상 행위자가 누군지 추측이 가능한 경우
  4. 행위자보다 그것을 한 행위(행동) 자체가 더 중요한 경우

그렇다면 [by + 행위자] 는 언제 쓰이는가?

  1. 행위자가 새로운 정보이거나, 행위자가 전체 행위에서 중요한 역할을 맡고 있다면 반드시 써야 한다.

Student will be taught by an expert

→ [학생은 가르침을 받을 것이다. 전문가에 의하여]

 

만약에 이 문장을

 

Student will be taught

→ [학생은 가르침을 받을 것이다.] 

 

로 바꾼다면, 행위자가 정해지지 않은 상태로 누군가가 교육을 받을 것임을 암시함을 알 수 있다.

만약에 과외를 받는 상황이라 한다면, 첫 번째 문장은 선생님이 정해진 상황이고, 두 번째 상황은 가르쳐줄 선생님을 구하고 있으므로 아직은 누가 가르칠지 모른다는 의미를 갖고 있다.

 

[by + 행위자]가 항상 쓰이는 것은 아니다. by 이외의 다른 전치사가 이용되기도 한다. 

  • 감정을 나타내는 경우

  be interrested in : ~에 흥미가 있다.

  be surprised at[by] : ~에 놀라다

  be satisfied with : ~에 만족하다.

  be disapointed with[by, at] : ~에 실망하다.

 

  • 상태를 나타내는 경우

  be covered with : ~로 덮여 있다.

  be known as : ~으로 알려져 있다.

  be engaged in : ~에 종사하다.

  be known to : ~에게 알려져 있다.

  be filled with : ~로 가득 차다

  be known for : ~으로 유명하다.

  be caught in : (비 따위를) 만나다.

 


앞에서 학습한 바와 비슷하게 우리는 조동사와 함께 수동태가 쓰이는 경우도 있다. 

이럴 때는 수동태의 형태와 조동사가 의미하는 바가 합쳐져서 헤깔리기 때문에 주의해야 한다.

 

  능동태 수동태
조동사 + 동사원형 will teach
ex) J.J will teach students
J.J는 학생들을 가르칠 것이다.


will be taught
ex) Students will be taught by J.J
학생들은 J.J에 의해 가르침을 받을 것이다.
현재진행 am / are / is teaching
ex) J.J is teaching students
J.J는 학생들을 가르치고 있다.

am / are / is being taught
ex) Students are being taught by J.J
학생들은 J.J에 의해 가르침을 받는 중이다.
과거진행 was / were teaching
ex) J.J was teaching students
J.J는 학생들을 가르치고 있었다.
(지금도 가르치는 중이다.)
was / were being taught
ex) Students were being taught by J.J
학생들은 J.J에 의해 가르침을 받고 있었다. (지금도 가르침을 받는 중이다.)
현재완료 have / has taught
ex) J.J has taught students
J.J는 학생들을 가르쳐왔다.
have / has been taught
ex) Students have been taught by J.J
학생들은 J.J에 의해 가르침을 받아왔다.

* 현재진행 : 지금하고 있는 행위에 대한 이야기를 할 때, 현재진행을 쓴다. 

* 과거진행 : 과거 진행은 과거에 시작되고 이를 말하고 있는 지금에서도 계속해서 진행하고 있는 사건을 이야기한다. 

말하는 시점보다는 이전에 이야기하였으며, 아직까지도 진행되는 것이다. 

* 현재완료 : 현재까지 ~을 했는지에 대한 이야기, 과거로부터 이어져와서 지금에 와서 진행 중일 수도 있고, 지금에 와서 끝난 일일수도 있다. 

* 진행형과 완료형의 차이점은 둘 다 과거로부터 지금까지 이어져온 것인데, 문장이 가지는 의미에서 차이가 난다. 

진행형의 경우, 사건 자체가 중요할 경우에 사용되는 표현, 완료형은 사건으로 인해 생기는 결과 혹은 그로 인해 영향을 받는 것이 중요하다고 생각할 때 사용되는 것이다. 

 


3. 4형식과 5형식 문장을 수동태로 바꾸는 방법

4형식과 5형식 문장의 경우 바꾸는 방법이 살짝 다르다.

앞에서 바꾼 문장은 [주어 + 동사 + 목적어] 형태의 수동태를 바꾸어 보았다.

그렇다면

[주어 + 동사 + 간접목적어 + 직접목적어]의 형태인 4형식 문장

[주어 + 동사 + 목적어 + 목적격 보어]의 형태를 갖는 5형식 문장은 어떻게 수동태로 바꿀 것인가?

 


 

4형식 문장의 경우

[주어 + 동사 + 간접목적어 + 직접목적어] 에서

간접목적어가 수동태의 주어가 되고, 직접목적어는 뒤에 그대로 둔다. 

 

예를 들어,

  J.J teaches us Math

 → J.J 는 우리에게 수학을 가르친다.

 

  We are taught Math by on J.J

   우리는 수학에 대한 가르침을 받는다. J.J에게

 

이러한 형태로 변환됨을 볼 수 있다.

 

5형식 문장의 경우

[주어 + 동사 + 목적어 + 목적격보어]

목적어가 수동태에서 주어로 바뀌며, 목적어 뒤에 있는 보어는 be p.p. 뒤에 남아 있게 된다.

변환하면 → [주어 + be p.p. + 보어]의 형태로 바뀌는 것이다.

 

예를 들어, 

  J.J found his card missing

  → J.J는 발견했다, 그의 카드가 잃어버린 것을 [의역하자면, J.J는 그의 카드가 없어진 것을 발견했다.]

 

  His card be founded missing by J.J

  그의 카드는 J.J에 의해 분실되었다. 

 

이런 느낌으로 바꿀 수 있는 것이다. 

 

지난 시간까지 Node.js의 특징을 간략하게 살펴보았다.

2020/12/31 - [Web(웹)/Node.js] - [Node.js]어딜가나 Node.js! Node.js란 무엇인가?

 

[Node.js]어딜가나 Node.js! Node.js란 무엇인가?

어디에나 보이는 Node.js 웹과 관련한 서비스라면 Node.js 어디에나 보인다. 그렇다면 Node.js는 무엇인가? Node.js는 크롬 V8 자바스크립트 엔진으로 만들어진 JavaScipt 런타임이다. [여기서 런타임(runtime)

studium-anywhere.tistory.com

 


Node.js를 설치해보자 

일단은 노드js 홈페이지로 들어가보자. nodejs.org/ko/ 

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

홈페이지에 들어가면 이러한 형태로 나온다. 두 가지 버전이 나온다.

  하나는 LTS버전이고 다른 하나는 최신 버전이다. LTS는 Long Term Support 의 약자로 업데이트가 천천히 이루어지는 버전을 이야기한다. 일반 버전과 LTS 버전을 구분하는 기준은 안정성이 기준이다. 새로 나온 제품이 여러 버그를 생성할 가능성이 많듯이 빠르게 업데이트 되는 일반 버전은 안정성이 LTS 버전보다 떨어질 확률이 높다. 그렇기에 상용화 버전에서는 LTS 버전 이용해서 개발한다. 개발하는 환경 자체가 매번 업데이트 되며 진행되면 당연히 좋다. 하지만 긴 기간 동안에 특정 버전에 맞춰서 개발을 진행했는데, 업데이트 된다면, 개발환경의 변화로 인해 다양한 문제가 생길 가능성이 있으므로 LTS 버전을 쓴다. 실제로 위의 14.15.3 LTS 버튼에는 "안정적, 신뢰도 높음"이란 말이 써져 있다.

 

  자신에게 맞는 운영체제를 기준으로 다운로드 받은 다음에 설치하자.

 

설치가 완료되면 아무일도 일어나지 않는다. Node.js는 윈도우 기준으로 명령 프롬프트를 통해 실행된다. 다른 프로그램으로도 가능하지만 이번에는 CMD로 진행할 예정이다.

  1. 윈도우키 + R 키를 누르고 "CMD"를 입력하면 명령 프롬프트가 실행된다.
  2. "node" 를 치고 엔터!
  3. > 이러한 모양이 나올 것이다. 그러면 제대로 설치가 된 것이다.  

꺽쇠 모양(">")이 나오는 시점부터는 자바스크립트를 브라우저에서처럼 마음껏 쓸 수 있다.

 

 


그렇다면 다른 폴더에 있는 파일을 실행시켜 보자!

먼저,

console.log('HelloWorld');

를 적은 다음에, 원하는 위치에 HelloWolrd.js를 저장하자.

( D:\Pratice\TestHTML\Ch01\HelloWorld.js 에 위치하고 있다.)

 

설명을 위해서 차례로 입력해보았다. 

여기서

$ cd ..

은 상위 폴더로 가기이다. 실제로 

C:\Users> cd .. 를 타이핑하고 엔터를 하면

C:\                로 전환되는 것을 볼 수 있다.

 

C:\ 에서 D 폴더로 가고 싶으면 

C:\ > 에서 

$ C:\> D:

D: 를 타이핑하면 된다. 

 

한번에 가려면 C:\Users> cd D:\Pratice\TestHTML\Ch01\를 쳐주자.

 

그 다음에

$ node HelloWorld.js

를 타이핑하면 잘 실행된다!

 

 


자바스크립트와 관련한 글

[Web(웹)/JavaScript(자바스크립트)] - [JavaScript]자바스크립트는 어떻게 동작하는가?

 

[JavaScript]자바스크립트는 어떻게 동작하는가?

자바스크립트가 많이 쓰임에 따라 다양한 곳에서 쓰여지고 있다. (프런트엔드, 백엔드, 하이브리드 애플리케이션, 임베디드 장치 등등 다양하게 서비스된다.) 그렇다면 이렇게 다양하게 쓰이는

studium-anywhere.tistory.com

 

'Web(웹) > Node.js' 카테고리의 다른 글

npx란 무엇일까?  (0) 2021.01.19
[Node.js]어딜가나 Node.js! Node.js란 무엇인가?  (0) 2020.12.31

 

Node.js 대표이미지

어디에나 보이는 Node.js 웹과 관련한 서비스라면 Node.js 어디에나 보인다.

그렇다면


Node.js는 무엇인가?

Node.js는 크롬 V8 자바스크립트 엔진으로 만들어진 JavaScipt 런타임이다. 

[여기서 런타임(runtime)은  프로그램이 실행되고 있는 동안의 동작을 이야기 한다.

JavaScript 런타임은 자바스크립트가 구동되는 환경을 이야기한다. 그러므로 Node.js를 활용해서 자바스크립트를 구동시킬 수 있는 환경을 만들어주는 것이다.]

 

Node.js가 나오기 전에는  자바스크립트를 구동하려면 웹 브라우저를 통해서 실행시킬 수 밖에 없었는데, Node.js는 이를 극복시켜주었다. 그래서 브라우저의 엔진을 사용하는 것이 아니라 서버에 Node.js를 설치하고 서버 쪽에서 자바스크립트를 구동할 수 있게 만들어 준 것이 Node.js가되는것이다.

 

그래서 Node.js를 활용한 서버 구동이라는 말이 많이 나오게 되는 것이다. 

[한마디로 노드는 서버사이드 자바스크립트로써 많이 사용된다. - Node.js가 백엔드라고 오해하면 안된다. ]

Node.js를 통해 서버를 구현할 수 있을 뿐이다. 

* 그래도 Node.js는 확장성 있는 네트워크 애플리케이션을 위해 설계되었으며, 서버를 위해 설계된 플랫폼이다.

* JavaScript를 쓰면 브라우저에 종속적인데, Node.js를 쓰게 되면 컴퓨터 내부에 있는 File System등 System Call도 가능해진다.  - 이러한 부분을 Node.js는 libuv를 통해 처리한다.

 

물론 Node.js가 유일한 서버사이드 자바스크립트는 아니다. 여러 서버사이드 자바스크립트가 존재하며, 요즘 Node.js 가 많이 사용되고 있을 뿐이다.     

 

* 결국 Node.js가 많이 쓰이는 이유는 자바스크립트라는 하나의 언어를 통해 프론트 엔드와 백엔드 둘 다 다룰 수 있게 해주기에 생산성의 향상으로 이어진다. (솔직히, 서버를 위해 추가적인 언어를 사용하기에는 많은 공부와 더불어 인내가 필요하다. 결과를 빨리 보고 싶지만 느려서 짜증이 난다!  이를 해결해준 것은 Node.js이다. 그렇기에 Node.js가 인기를 끌고 있다고 생각한다.)

 

 


Node.js의 장점은 그 동작 원리에 의해 나온다.

Node.js는 기본적으로 이벤트 기반 ( Event-Driven ), 논블로킹 I/O( Non - Blocking I/O), 싱글 스레드 라는 특성을 갖는다. 

[ 다른 특징적인 장점은 구글 V8 자바스크립트 엔진을 채용해서 빠른 코드 실행과 더불어 단일 스레드와 확장성을 가지며, 버퍼링이 없으며, 데이터를 Chunk로 출력한다. ]

 

* 빅데이터를 사용하기에는 적합하지 않으며, 많은 데이터 처리용으로는 파이썬의 장고(Django)가 더 적합하다.

 

블로킹(Blocking), 논블로킹(Non-Blocking) I/O Model

그렇다면 나머지 두 가지는 나중에 알아보도록 하고 논블로킹 I/O에 대해 살펴보도록 하자.

 

  • 블로킹(Blocking) I/O는 동작하고 있는 동안에는 다른 일을 처리하지 못하는 상태가 된다. 프로그램의 제어권이 호출된 함수가 일을 모두 마무리 될 때까지 넘어가지 않는 것을 이야기한다. 
  • 논 블로킹(Non - Blocking) I/O의 경우, 동작을 한 뒤에 바로 다음 제어가 돌아옴으로써 다음 처리로 넘어갈 수 있게 해준다. (앞서 호출된 함수가 일을 마무리 짓지 않아도 다른 함수가 다른 일을 진행할 수 있도록 해주는 것이다.)

* 블로킹과 논 블로킹은 호출된 함수가 언제 return 하는 가에 대한 차이로 나누어 진다.

 

블로킹 I/O에 비해 논 블로킹 I/O가 일반적으로 효율적으로 사용할 수 있다. 특히, 웹에서 사용되는 자바스크립트의 경우 싱글 스레드를 사용하므로 블로킹으로 진행되게 되면 사용자는 특정 요청을 보내놓은 상태로 무한정 대기해야 한다. (한 마디로 클릭 한번 했다가 홈페이지에서 아무것도 못하는 상태로 기다려야 하는 것이다.) 

그래서 이러한 상태를 막기 위해 비동기(Asynchronous) 방식을 채택한다. 백그라운드에서 돌아가야 할 함수는 Web-API를 호출하면서 해결해버린다. (Web-API와 Event-Loop를 활용해서 케어한다.)

* 자세한 사항은 [JavaScript]자바스크립트는 어떻게 동작하는가? 를 통해 확인하면 된다. 

 

동기(Synchronous)와 비동기(Asynchronous) 

  • 동기(Synchronous) : 호출하는 함수가 호출된 함수의 작업 완료 후 리턴을 기다거나, 호출된 함수로부터 리턴을 받더라도 작업 완료 여부를 호출하는 함수 자체가 계속 체크하는 경우이다. 
  • 비동기(Asynchronous) : 호출되는 함수에게 CallBack을 전달해서, 호출되는 함수가 작업이 완료되면 호출되는 함수가 이전에 전달받은 CallBack을 실행한다. 호출하는 함수는 작업 완료 여부를 체크하지 않는다.

 

* 동기와 비동기의 차이점은 호출되는 함수의 완료 여부를 누가 체크하냐에 따라 다르다. 작업 완료를 호출하는 함수 스스로가 계속 체크하면 동기(Synchronous)이며, 작업 완료 여부를 체크하지 않는다면 비동기(Asynchronous) 방식이다.

 

* 더 자세한 내용은 homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

 

Blocking-NonBlocking-Synchronous-Asynchronous

꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면

homoefficio.github.io

  동기/비동기, 블럭/논블럭의 차이점은 동기/비동기의 경우 작업의 결과물을 CallBack인 메시지를 통해 주고 받는데, 작업 완료 여부를 신경쓰는지 안 쓰는지에 따라 차이점이 있으며, 블럭/논블럭의 경우 함수 호출이후에 넘어오는 제어권에 따라 블럭이냐 논블럭이냐를 나누는 것이다. 그렇기에

동기(Synchronous) - 블럭(Blocking), 동기(Synchronous) - 논블럭(Non - Blocking), 비동기(Asynchronous) - 블럭(Blocking), 비동기(Asynchronous) - 논블럭(Non - Blocking)

형태로 4가지로 볼 수 있다. 

 

싱글스레드(Single Thread)?

  프로그램은 실행하지 않으면 메모리에 탑재(Load)되지 않은 상태로 저장만 되어 있다. 저장된 상태에서 프로그램을 실행하게 되면 메모리에 탑재(Load)되며 이제부터는 프로세스로써 실행되게 된다. 스레드란 프로세스 상에서 하나의 실행 흐름을 이야기한다. 스레드가 1개 일수도 있고 여러개가 될 수도 있다. 각각의 스레드마다 독자적인 스택영역을 가지지만 힙 영역을 공유한다. (한 마디로, 여러개로 작업 처리를 하지만 줄을 서는 대기열은 1줄이라는 소리이다.) 멀티 프로세스의 경우 스택 영역과 힙 영역을 따로 가지는게 일반적이다. 

  싱글 스레드는 이러한 스레드가 1개인 것을 이야기한다. 1개의 스택 영역과 1개의 힙 영역을 가지는 상태를 의미한다. 

그래서 직접적인 다중처리가 불가능하지만 이를 외부 함수 libuv를 통해 비동기적 처리를 넘긴다. 그렇게 싱글스레드이지만 효율적인 처리를 통해 NGINX, 아파치(Apache)와 비슷한 성능을 얻게 되었다. 물론 데이터양이 많이 늘어남에 따라서 기존에 사용하던 서버가 더 좋은 경우도 생길 수 있다. 하지만 간편하게 자바스크립트만 알아도 서버를 만드는 것은 매우 좋은 일이다!

 

* 근본적으로 자바스크립트는 Block하지 않는 것을 원칙으로 한다. 대부분의 I/O처리는 이벤트와 콜백으로 처리함으로써 콜백을 기다리는 상황에서도 계속 가동될 수 있도록 두는 것이다. (효율적으로 가동한다!)

 

* 싱글 스레드라곤 하지만 실제로는 몇 개의 스레드가 더 있는 상황이라 봐도 좋다. 내부적으로 싱글스레드일뿐!

 

그런고로 다음 시간에는 Node.js를 입문해보도록 하자.

 

'Web(웹) > Node.js' 카테고리의 다른 글

npx란 무엇일까?  (0) 2021.01.19
[Node.js] 1강 - Node.js를 시작해보자!  (0) 2020.12.31

자바스크립트가 많이 쓰임에 따라 다양한 곳에서 쓰여지고 있다. 

(프런트엔드, 백엔드, 하이브리드 애플리케이션, 임베디드 장치 등등 다양하게 서비스된다.)

 

그렇다면 이렇게 다양하게 쓰이는 자바스크립트가 기본적으로 어떻게 작동되는지에 대해 살펴보고자 한다. 

자바스크립트의 여러 엔진 중 하나인 자바스크립트 V8엔진을 통해 알아보도록 하자.

 

* 이 부분은 어려운 부분이기에 간략하게 읽고 넘어가도 좋다.

너무 어려운 부분을 깊게 파고 들면 자칫 흥미를 잃을 수도 있으므로 아 이러한 구도로 진행되는 군! 정도면 충분하다고 생각한다. 


자바스크립트 V8 엔진이란?

V8엔진 로고

V8 자바스크립트 엔진은 구글에서 C++로 작성된 자바스크립트 엔진이다. 구글 크롬(Google Chrome)이 아니더라도 따로 실행이 가능하다. 대표적으로 Node.js가 V8로 빌드되었다. 이러한 V8엔진은 기본적으로 싱글 스레드 (Single-thread)와 콜백 큐(Callback-Queue)가 있다. 

 

크롬은 기본적으로 자바스크립트 엔진 V8을 탑재하고 있다. 

자바스크립트 엔진은 구글의 V8엔진 외에도 다른 여러 엔진이 존재한다. 하지만 구글은 더 빠르고 효율적으로 구동하는 엔진을 가지고 싶어했다. 그래서 자바스크립트 코드를 인터프리터를 사용하는 대신 특정 컴파일러를 활용해서 별다른 변형 없이 기계 코드로 변환하는 방식으로 채택하였다. Rhino(Moziila)나 SpiderMonkey 엔진 처럼 JIT(Just in Time) 컴파일러를 구현해서 다이렉트로 기계코드로 변환시키는 것이다. [ V8엔진은 bytecode나 intermediate code를 만들지 않는다. ]

* 사실 자사에 맞는 조금 더 효율적인 자바스크립트 엔진을 갖기 위해서 V8 엔진을 만들었다고 생각한다.

 

  • 싱글 스레드(Single-thread)?

스레드란 기본적으로 하나의 프로그램에서 프로세스가 실행되는 흐름의 단위를 이야기한다.

그렇다면 프로세스란 무엇인가? 

 

 

프로세스는 우리가 작업관리자에서도 볼 수 있다. 프로그램은 실행되기를 기다리는 특정한 코드(명령어들)과 데이터들의 묶음이라 볼 수 있다. 이러한 프로그램을 실행하게 되면 코드와 데이터들의 묶음이 메모리에 적재(Load)되면 프로세스가 된다.

프로세스는 일반적으로 실행 중인 프로그램이라 생각할 수 있으며, 실행 중인 무언가라 생각할 수 있다.

 

반대로 하나의 프로세스는 여러개의 스레드로 구성이 가능하다.

쓰레드는 결국 프로세스에서 하나의 흐름을 이야기한다고 보면 된다. 싱글 스레드는 결국 프로그램에서 하나의 흐름을 갖는다는 이야기이다. (프로세스 내에서 할당 받은 실행의 한 단위라고 생각하면 된다.)

* 스레드는 프로세스 안에서 메모리 공간을 공유하지만, 프로세스는 프로세스 별로 각각의 메모리 공간을 갖는다.

 

싱글 스레드는 하나의 콜 스택(Call Stack)과 하나의 힙(Heap)을 가진다. 하나의 콜 스택이 있으면 한 번에 하나의 동작만 실행할 수 있다. 하지만 단순히 자바스크립트가 한 번에 하나의 동작만을 실행하고 있다고 생각되진 않는다.

단적인 예로 방 청소를 할 때를 생각해보면 된다. 청소기를 돌리고 있는 상황에서는 청소기 밖에 못 돌리는 것이다. 다른 어떤 일도 처리할 수 없다. 이를 홈페이지에서 적용해보면 된다. 특정 화면이 변하고 있는 상황에서는 아무것도 클릭하지도 조작할 수도 없다. 로딩이 끝날 때까지 기다려야 하는 것이다. 하지만 우리는 클릭도 가능하고, 마우스 스크롤을 통해 홈페이지를 살펴볼 수도 있다. 

즉 자바스크립트를 비동기적으로 코드를 실행시킬 수 있게 해주는 것이 Web API, Task Queue, Event Loop가 된다.

 

자바스크립트 자체는 한번에 하나의 코드만을 실행시킬 수 있지만, 여러 외부 요소가 Web API, Task Queue, Event Loop가 되는 것이다. 

 

 

기본적인 도식도를 생각해보면 이러한 형태로 이루어져 있다. 

( Stack은 컴퓨터에서 사용되는 자료구조의 한 종류로써 블럭을 쌓는 구조라 생각하면 된다. 먼저 넣은 블럭은 차곡차곡 쌓여서 다시 꺼낼때에는 제일 나중에 빼야하는 구조이다. - 자료구조에서 더 자세히 볼 수 있다. )

( Heap은 컴퓨터에서 사용되는 자료구조의 한 종류로써 매점에서 줄을 서는 구조와 비슷하다. 먼저 서서 기다리면 가장 먼저 처리되는 구조이다. - 자료구조에서 더 자세히 보도록 하자.)

 

  • Event Loop : Call Stack이 비어잇는지 아닌지 체크를 하고 비어있다면 callback을 Call Stack으로 옮긴다. (그림 상에서 Stack이라 불리는 부분이 Call Stack이다.)
  • Task Queue : 실행해야할 여러 일을 임시로 대기시키는 큐이다. 일종의 대기열이라고 생각하면 된다. 
  • Web API : Web API는 브라우저 자체에서 지원하는 여러 API들을 의미합니다. 여기서 Web API는 setTimeout, DOM이벤트, Ajax (XMLHttpRequest) 등의 비동기 작업을 수행하도록 API로 지원한다.

EventLoop 참조 : developer.mozilla.org/ko/docs/Web/JavaScript/EventLoop

* API ( Application Programming Interface) : (응용 프로그램 프로그래밍 인터페이스) 이하 API는 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만드는 인터페이스를 의미한다. 

 

* 인터페이스(Interface) : 영어 자체를 들여다보면 Inter(사이에, 중간에, 도중에 = between) + face(어떤 것을 바라보다) 란 느낌으로 둘이 서로를 바라보는 것을 의미한다. 그렇다면 interface는 서로가 바라보고 있는 연결면, 접점 등을 의미한다. 하드웨어 인터페이스는 컴퓨터에 있는 랜선과 랜선 연결 커넥터 같은 것들도 하드웨어 인터페이스라 볼 수 있다. 대표적인 인터페이스는 User Interface인 UI가 있으며 이는 컴퓨터와 사람 간의 상호작용에 대한 접점으로 볼 수 있다.

 

이러한 기본 구조를 통해 자바스크립트가 어떻게 구동되는지 간단하게 옅볼 수 있다.

 


코드 상에서는 어떻게 작동되는가?

자바스크립트가 비동기적으로 작동하고 있다는 사실은 아래의 코드를 실행해봄으로써 바로 알 수 있다.

function first_call_function() {
	setTimeout(() => {
    	console.log("first_call")
        }, 1000);
    };
    
    
 function second_call_function() {
 	setTimeout( () => {
    	console.log("second_call")
        }, 500);
    };
    
    first_call_function();
    second_call_function();

원래대로라면 first_call_function()이 먼저 call하고, second_call_function()이 그 다음으로 call 되엇으므로 first_call이 먼저 나오고 second_call이 메시지로 나와야 한다. 하지만 결과는 다르다. 

 

결과는 second_call이 나오고 그 다음으로 first_call이 나온다. 이렇게 비동기적 작동이 가능한 이유는 위에 보았듯이 Event Loop와 Web API, Task Queue로 인해 가능해진 것이다.

 

비동기적 구성 자체를 처리하기 위해서 비동기적 실행이 필요한 것은 Web API를 호출하면서 따로 진행한다.

(이는 Node.js에서는 libuv를 통해 처리한다.)

 

이러한 콜 스택과 Web API 그리고 콜백 큐에 대해서 순서도를 눈으로 확인하려면 

latentflip.com/loupe/ 에서 간략하게 확인할 수 있다. 

 

더보기

1. 콜 스택(Call Stack)에서 first_call_function함수에서 setTimeout 함수가 호출되면 setTimeout은 WebAPI에 의해서 백그라운드에서 실행된다. 이후에 first_call_function함수의 setTimeout함수는 콜 스택(Call Stack)에서 사라진다.

2. first_call_function함수의 setTimeout 함수의 실행이 끝난 뒤에 바로 콜 스택(Call Stack)에서 second_call_function함수의 setTimeout함수가 호출된다. 1과 마찬가지로 setTimeout은 WebAPI에 의해서 백그라운드에서 실행되며, second_call_function함수의 setTimeout함수는 콜 스택(Call Stack)에서 사라진다.

 

3. WebAPI에서 의해 백그라운드 상에서 정해진 시간이 지난 뒤에 console.log("second_call")이 Task Queue로 옮겨진다. 그리고 그 다음 시간이 지난 후에 console.log("first_call")이 Task Queue로 옮겨진다. 

 

4. 이제 콜 스택(Call Stack)이 비워졌으므로 Task Queue에 있는 console.log("second_call")와 console.log("first_call")가 차례로 실행된다.     

이러한 구도로 움직인다고 생각하면 된다. 

조금 더 알고 싶다면, new93helloworld.tistory.com/361beomy.github.io/tech/javascript/javascript-runtime/

blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf 를 참조하도록 하자.

 

 

헤로쿠(Heroku)를 선택한 이유

홈페이지를 만들기 위해서는 서버가 반드시 필요하다. 그렇다면 일반적으로 우리가 홈페이지를 만들기 위해서 선택할 수 있는 선택지가 3가지 존재한다.

 

1. 직접 서버 구축하기

2. 아마존 웹 서비스를 활용해서 서버 구축하기

3. 헤로쿠(Heroku)를 활용한 서버 구축하기 ( *이하 헤로쿠라 지칭하겠다.)

 

정도로 생각할 수 있다.

여기서 가장 쉽게 접근할 수 있는 플랫폼이 헤로쿠를 활용한 홈페이지 구축하기가 가장 쉽다. 

 

1. 직접 서버 구축하기의 경우, 직접적으로 하드웨어를 사야함과 더불어 서버와 관련한 지식, 보안과 관련한 지식이 필요하기 때문에 가볍게 접근하기 어렵다. 만약에 개발자로써 이미 일을 하고 있으면서, 많은 지식을 보유한 사람이라면 가장 좋은 방법일 수도 있지만, 가볍게 시작하는 마음으로는 어렵다.

2. 아마존 웹 서비스(AWS)의 경우, 많이 쓰기도 하며 현업에서 많이 사용된다. 하지만 시스템에 대한 고려가 필요하며, 보안 문제로 인해 트래픽의 증가는 우리의 지갑을 위협하기도 하기에 불안하다.

( * 성능면에서는 당연히 아마존 웹 서비스(AWS)가 더 좋으며, 관련 기기를 대여하는 비용은 아마존 웹 서비스(AWS)가 더 저렴하다. 하지만 갑작스럽게 늘어난 트래픽을 감당하지 못하면 큰 비용을 내야할 수도 있기에 배우는 입장에서 AWS는 좋지 않은 선택이라 생각한다. - 언제까지나 가벼운 마음으로 접근하는 것이기에)

 

1번과 2번에 이유에 따라 헤로쿠를 사용하게 되었다.

 

* 가벼운 마음으로 간단한 프로젝트를 진행하면서 여러 가지 실험을 하고 싶은 경우* 포트폴리오를 제시하고 싶은 경우

 

우리는 이 두 가지에 해당하기에 헤로쿠로 진행하도록 한다. 

 

(헤로쿠는 PaaS 서비스이며, AWS는 IaaS, PaaS, SaaS를 다 제공하고 있으며 점차 시장을 확장해나가고 있다. 초기에는 IaaS를 통해 성장하였으며, 대표적으로 IaaS는 Amazon EC2 서비스가 있다. 오래된 기업인 만큼 신뢰도가 높다.)

 

* PaaS : Platform as a Service를 의미 - 서버를 위한 기기와 그에 따른 응용 프로그램을 개발할 수 있는 API까지 제공하는 환경을 PaaS라 합니다. (하드웨어와 소프트웨어를 주고서 알아서 관리해줍니다. 사용자는 프로그램 개발에 사용되는 애플리케이션과 데이터에 해당하는 부분만 신경쓰면 됩니다.)

 

* IaaS : Infrastructure as a Service를 의미 - 업체가 데이터센터를 구축해서 서버를 직접 관리해줍니다. 물리적 서버를 가상화 기술을 통해 여러개의 가상화 서버로 나누어서 제공합니다. 제공되는 업체가 관리해주는 서버 외에는 대부분의 필요한 시스템을 직접 구축해야 하므로 많은 지식이 필요합니다. (그래서 담당 인력이 필요하기도 합니다.)

 

* SaaS : Software as a Service를 의미 - 제공되는 업체에서 대부분의 요소를 제공해주고 관리해준다. 편하게 제공되는 서비스만 받아서 사용되는 것을 의미한다. (대표적으로 Google Docs, 네이버 이메일 등이 있다.)

 

사용자의 자유도에 따라 도식화해보자면 이런 느낌으로 그릴 수 있을 것이다. ▼

IaaS를 쓰면 자유도가 높지만 관리해야할 요소가 늘어나고 필요한 지식과 시간 그리고 인력이 필요하다.

 

클라우드 3대장 PaaS, IaaS, SaaS의 차이점 비교

2020/12/28 - [클라우드 및 서버] - [PaaS, IaaS, SaaS의 차이점]PaaS, IaaS, SaaS 너희들은 뭐니?

 

[PaaS, IaaS, SaaS의 차이점]PaaS, IaaS, SaaS 너희들은 뭐니?

 

studium-anywhere.tistory.com

 


Heroku

헤로쿠의 가장 큰 장점은 무료로 쓸 수 있다는 점이죠! 

가장 기본이 되는 Free 버전을 제공해주고 있다. (완전하게 무료로 제공되고 있다. 550 - 1000시간을 쓸 수 있다. 신용카드 정보를 넣으면 1000시간을 쓸 수 있으며, 1달 - 30일 기준으로 720 시간이므로 우리가 잠들어 있는 시간을 감안한다면 충분하다. 부족하다면 신용카드 정보를 입력하면 1000시간을 제공받을 수 있으므로 상관없다. 물론 결제는 되지 않으니 안심해도 된다.)

 

유일한 단점이라면 30분 정도 입력이 없을 경우 Sleep에 들어간다는 점이다. 다시 접속했을 때 구동까지 4~5초 정도의 시간이 걸린다. (물론 더 걸릴 수도 있다.) 하지만 우리의 가벼운 프로젝트에는 이러한 점은 전혀 문제가 되지 않는다. 

 

* 여기에 한 달에 $7을 지불하면[Hoby버전] sleep 없이 서버를 운영할 수 있게 된다.

(무료 버전과 Hoby 버전에서의 주요 차이점은 SSL을 통한 HTTPS를 적용하는것이 가능해진다. 구글에서는 HTTPS를 권장하고 있으므로 구글 검색에 나오게 하려면 SSL를 통한 HTTPS 구현을 해두어야 한다. 

 

이렇게 자물쇠가 잠겨져 있으면 HTTPS 연결이 된 것이다. // 느낌표가 뜬다면 HTTPS 연결이 아닌 일반 HTTP연결이다.

구글 크롬 기준으로 HTPPS 연결이 안 이루어지면 무시무시한 '주의요함' 이 뜬다.

어차피 연습해볼 기분으로 블로그를 만드는 것이기에 헤로쿠 Free 정도면 충분하다.

 


Dyno(다이노)?

헤로쿠에 들어가면 다이노(Dyno)가 존재한다. 우리가 사용하고자 하는 서비스도 다이노이다. 

다이노란 사용자가 쓰기 좋게 만들어놓은 가상화된 Unix의 컨테이너를 의미한다. 

 

가상화란?

가상화는 하나의 물리 하드웨어에 가상으로 소프트웨어를 여러 개로 나누어 놓는 것을 의미한다. 

실제가 존재하는 물리적 하드웨어는 한계가 존재한다. 예를 들면, 하드웨어 성능을 모두 다 활용하기 힘든 점을 들 수 있다. 100%의 성능 활용이 힘들다면 투자한 비용 대비 효용을 낼 수 없다. 그렇기에 하드웨어 성능을 모두 활용하기 위해 도입한 것이 가상화 기술이라 볼 수 있다.

출처 - VMware

물리적인 한계를 추상화를 통해 어느정도 극복하기 위한 기술이 가상화라 볼 수 있다.

(1대의 컴퓨터로 10대의 컴퓨터가 있는 것처럼 행동할 수 있는 것이다. 이는 많은 비용을 아껴주며 새로운 부가가치를 가져다 주는 것이다. )

* 이것 이외에도 가상화가 가져다 주는 이득은 다양하지만 간략하게만 설명했다. 

더 자세한 내용을 알고 싶다면 : www.redhat.com/ko/topics/virtualization

 

가상화 이해

Virtualization makes a single physical machine act like multiple—saving you the cost of more servers and workstations.

www.redhat.com

 

그래서 여기에 가상화 기술은 생각보다 실행하기에 무거운 부분이 있었는데, 이를 경량화 시킨 것이 컨테이너(Containers)이다. 대표적인 컨테이너가 Docker(도커)이다.

귀여운 고래 이미지를 가지고 있는 도커, 그리고 고래 위에 컨테이너가 있다.

 

가상화 기술은 각 가상화된 OS가 별도로 존재하고 있어서 그만큼 더 무겁다. 하지만 도커는 필요한 만큼만 사용하면 되므로 가볍다! 그래서 컨테이너를 사용하는 것이다. 

 

컨테이너에 대한 자세한 이야기는 나중에 다루도록 한다. 간단하게 컨테이너는 우리가 특정 서비스를 제작하고자 할 때, 제작하고자 하는 서비스에만 집중할 수 있도록 도와준다는 의미로 생각해두자.

(+Keyword : 쿠버네티스(Kubernetes) - 컨테이너를 관리하는 도구)

 

 


Heroku

www.heroku.com/

 

Cloud Application Platform | Heroku

Heroku is a platform as a service (PaaS) that enables developers to build, run, and operate applications entirely in the cloud.

www.heroku.com

 

이 부분을 클릭해준다. 

회원가입(Sign up)을 하자. 

 

 

* 표시가 있는 곳을 꼼꼼히 작성한 후에 Create Free Account를 클릭하자.

이후에 이메일 인증을 하고 나면 

비밀번호를 설정하면 된다.

 

 

그리고 

devcenter.heroku.com/articles/getting-started-with-nodejs#set-up

 

Getting Started on Heroku with Node.js | Heroku Dev Center

This tutorial will have you deploying a Node.js app to Heroku in minutes. Hang on for a few more minutes to learn how to get the most out of the Heroku platform. In this step you’ll install the Heroku Command Line Interface (CLI). You use the CLI to mana

devcenter.heroku.com

우리는 Node.js를 활용해서 헤로쿠를 사용하려 한다. 그런데 헤로쿠는 명령어를 통해 작동되므로 이를 위한 프로그램을 설치해줘야 한다. [Heroku Command Line Interface (CLI)]를 설치해줘야 한다. 

 

대부분 사용자가 윈도우 이므로 64-bit installer를 설치하도록 하자. (윈도우10 기준 일반적으로 64-bit이다.)

[설치는 다음, 다음, 다음을 누르도록 하자.]

 

설치가 마무리 된 이후에는 hreoku명령어를 사용할  수 있다.

윈도우 검색창에

CMD라 입력하면 '명령 프롬프트'가 나온다. (git bash 혹은 Powershell을 이용해도 좋다.)

 

$ heroku login

을 입력하면

이러한 문구가 나온다. 그러면 Enter를 눌러주면 이후에 인터넷 창이 열린다.

 

이렇게 나오는데, 로그인을 눌러주면 된다. (로그인 이후에는 인터넷 창을 닫아도 된다.)

 

$ heroku logout

헤로쿠는 한번 로그인 되면 컴퓨터가 꺼져도 로그인이 지속됩니다. 그래서 로그아웃을 위해서는 로그아웃 명령어를 통해 로그아웃을 해줘야 합니다. 

 


기본적인 환경 구성

node.js와 git이 필요하므로 각각의 버전을 확인하면서 컴퓨터에 설치되었는지 확인해보도록 하자.

 

$ node --version
v14.15.1

$ npm --version
6.14.8

$ git --version
git version 2.92.2.windows.3

이러한 형태로 나온다면 모두 설치되어 있는 것이다. 만약에 설치가 안되어 있으면 설치해야 한다.

Node.js 설치

nodejs.org/ko/download/

 

 

다운로드 | Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

Git 설치

git-scm.com/downloads

 

Git - Downloads

Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific

git-scm.com

 


heroku 간단한 sample 만들어보기!

git은 내 컴퓨터에 있는 것을 버전관리 해주는 것이고, gitHub은 로컬에 있는 것을 클라우드로 올려서 버전관리를 할 수 있도록 도와주는 것이다. 우리는 git을 쓰므로 로컬에 있는 것을 활용할 것이다. 

 

간단하게 우리는 헤로쿠에서 제공하는 sample예제를 통해 진행해보도록 하자.

 

* heroku에 로그인되어 있는 상태에서 시작하면 된다. 

 

$ git clone https://github.com/heroku/node-js-getting-started.git
$ cd node-js-getting-started

여기서 사용되는 clone은 https://github.com/heroku/node-js-getting-started.git 을 내 컴퓨터로 복사해오는 것이다. 

 

들어가서 확인하면 github로 들어가지며, heroku에서 제시한 예제를 구경할 수 있다.

일단은 그냥 따라하면서 진행하도록 하자.

 

두번째 줄에 써져 있는 

$ cd node-js-getting-started

cd 명령어는 특정 폴더로 이동하는 이동 명령어이다. 

해당 폴더에 있는 node-js-getting-started 폴더로 이동하라는 명령어이다.

 

간략한 명령어들

$ cd ..

을 해주게 되면 하위 폴더로 이동한다. 자주 쓰이는 명령어이므로 알아두도록 하자. 

 

C드라이브 말고 다른 드라이브로 이동하고 싶다면 

$ d:

를 타이핑 한 뒤 엔터를 누르면 D로 이동하는 것을 볼 수 있다.

 

D:\heroku 에 해당하는 폴더로 이동하고 싶다면

$ cd D:\heroku

를 쳐주면 해당하는 폴더로 이동하게 된다. 

 

 

이제 Heroku에 만들어 보도록 하자.

$ heroku create

실행하면 아래와 같이 나오게 된다.  gentle-cliffs-00258이 생성되었따는 소리이다.

$ Creating app... done, ⬢ gentle-cliffs-00258
$ https://gentle-cliffs-00258.herokuapp.com/ | https://git.heroku.com/gentle-cliffs-00258.git

 

https://gentle-cliffs-00258.herokuapp.com/ 이 부분은 실행하는 사람마다 다르게 나올 것이다. 

인터넷 창을 통해 주소를 적고 접속할 수 있다. 우리가 방금 만든 홈페이지에 접속할 수 있는 것이다.

gentle-cliffs-00258은 임시로 생성되는 우리의 주소라 생각하면 된다. (이는 나중에 도매인을 구매해서 자신만의 도매인으로 변경할 수 있다. )

 

 

헤로쿠 사이트에서 확인해보면 새로운 app이 추가됨을 확인할 수 있다.

(git을 통해서 조작한 것이다!)

 

이제 배포를 해보자!

$ git push heroku main

을 실행하면 스스로 슥슥슥슥~ 무언가가 나온다.

 

완료가 되면 실행하기만 하면 된다.

 

$ heroku ps:scale web=1

스케일이란 다이노의 성능을 올리거나 줄이는 형태를 이야기한다. (CPU, 메모리를 더 할당하거나 줄이는 것을 말한다.)

여기서는heroku ps:scale [다이노의 타입]=[다이노의 크기] 를 통해 입력하는 것이다. web 버전의 다이노 타입과 크기는 1을 입력했다.( * 항상 스케일을 사람이 일일이 하진 않는다. 오토 스케일링이 가능한데 이는 add-on을 통해 지원한다.)

 

$ heroku open

을 실행하면 우리가 만든 사이트가 열린다.

 

만약 서버를 닫고 싶다면 

$ heroku ps:scale web=0

를 입력하면 가동 중인 다이노의 갯수가 0개이므로 서버가 닫힌다.

 

 

마지막으로 로그를 확인하기 위한 명령어 logs

$ heroku logs

서버에서 무슨일이 일어났는지를 기록해둔 것이다.

 

서버에서 실행하는 것이 아닌 로컬에서 실행하기

로컬에서도 web 실행이 가능하다. 

$ heroku local web

을 한 뒤에, http://localhost:5000 주소창에 입력하면 우리가 아까 실행했던 페이지가 로컬로 실행된다. 

 


간단하게 메인 페이지를 변경해보도록 하자.

먼저 cool-ascii-faces을 먼저 설치해주도록 하자. 

$ npm install cool-ascii-faces

완료가 된 뒤에는 

node-js-getting-started 폴더에 들어있는 index.js를 편집기를 활용해서 실행하도록 하자. 

(IDE가 없다면 하나 설치하도록 하자. 무엇을 골라야 할지 모르겠다면, brackets.io/

 

A modern, open source code editor that understands web design

Brackets is a lightweight, yet powerful, modern text editor. We blend visual tools into the editor so you get the right amount of help when you want it. With new features and extensions released every 3-4 weeks, it's like getting presents all year long.

brackets.io

를 설치하도록 하자. 설치한 뒤에는 아래의 코드를 입력하도록 하자. <기존의 코드를 바꿔서 입력해야 한다.>)

const cool = require('cool-ascii-faces');
const express = require('express');
const path = require('path');
const PORT = process.env.PORT || 5000;

express()
  .use(express.static(path.join(__dirname, 'public')))
  .set('views', path.join(__dirname, 'views'))
  .set('view engine', 'ejs')
  .get('/', (req, res) => res.render('pages/index'))
  .get('/cool', (req, res) => res.send(cool()))
  .listen(PORT, () => console.log(`Listening on ${ PORT }`));

 

그 뒤에는

$ npm install
$ heroku local

을 입력한 뒤에 

 

 http://localhost:5000/cool

에 접속하면 된다. 그렇다면 웹사이트에서 ( ´・‿・`)이러한 모양새를 볼 수 있다.

( F5를 누를 때마다 계속해서 표정이 바뀐다!)

 

방금까지 한 것은 내 컴퓨터(로컬)에 해당하는 부분을 변경했으니 이제는 서버에 적용해줘야 한다.

대부분의 헤로쿠 프로젝트는 이러한 방식으로 변경한다. 

[참고로 로컬 서버가 가동 중에는 명령어가 안 써질 수도 있으니 그런 경우라면 ctrl + c를 누르고 Y , Enter를 눌러주면 종료된다.]

 

 

$ git add .

git의 가상의 준비 영역인 Staging Area를 Idex라 부른다. 추가한다고 해서 바로바로 저장소로 올라가는 것이 아니라 임시 저장소를 하나 더 둠으로써 관리하기 용이하기 만들어 두었다. add . 명령어는 index 공간에 올려두는 것이다. 

 

$ git commit -m "Add cool face API"

이제 commit 명령어를 통해 index에 있는 것을 실제 저장소에 옮겨 공개하도록 한다. 여기서 특이사항을 메시지로 남겨서 어떤 점이 변경되었는지를 알려주는 역할을 한다. "Add cool face API"는 간단한 메시지를 남긴 것이다. [사실 이 특성은 헤로쿠의 특성보다는 git의 특성이다.]

 

$ git push heroku main

이제 헤로쿠에 올린다.

 

$ heroku open cool

실제 웹사이트에 잘 올라갔는지 확인해둔다. 아까 로컬에서 확인했듯이 실제 서버에서도 F5를 누를 때마다 표정이 바뀌는 것을 확인할 수 있다.

 


* 만약에 index에 올린 파일을 삭제하고 싶다면 

$ git rm --cached 파일이름

을 통해서 삭제가 가능하다. [git 다루는 내용이 아니므로 간략하게만 이야기하였다.]

 


간략하게 헤로쿠에 파일을 올려보고 웹사이트를 통해 확인하는 방법에 대해 알아보았다.

다음 시간에는 헤로쿠에다 만든 파일을 올려보고 JSON 파일 조작을 통해 내가 만든 웹사이트를 올리는 방법을 알아보도록 하자.

+ Recent posts