반응형

서버리스 앱 만들기의 마지막 단원으로 Vue.js 프론트 앱을 배포해보도록 하겠습니다. 

 

1. 앱 만들기

Vue 앱을 만들어줍니다.

vue create node_post_vue .    // .을 찍으면 현재 폴더에 프로젝트를 생성합니다.

vue add router  // 곧바로 router 라이브러리를 함께 설치해줍니다.

 

필요한 라이브러리를 아래와 같이 설치해줍니다.

npm i vuex axios

간단히 백엔드에서 보내오는 데이터를 읽어다 표현해주는 것만 할건데도 Store를 구성하고 각 컴포넌트에서 Store state를 이용해야하는게 좀 불편해 보이네요. 그래도 한번만 세팅해놓으면 다음부터는 비교적? 편하게 작업을 할 수 있다고 생각하고 진행하셔요^^;;

 

 (1) ./src/main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import {store} from './store/store.js'

createApp(App)
.use(router)
.use(store)
.mount('#app')

 

(2) ./src/App.vue

<template>
  <router-view/>
</template>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
</style>

 

 (3) ./src/router/index.js

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

 

  (4) ./src/components/HelloWorld.vue

<template>
  <div class="hello">    
    <ul>
      <li class="post" v-for="post in postlist" :key=post>
        <div class="title">
          {{ post.title }} 
        </div>
        <div class="content">
          {{ post.content }} 
        </div>
        <div class="lower">
          <div>...by {{ post.creator }} </div>
          <div>on {{ post.publish_date.split('T')[0] }}</div>
        </div>
      </li>
    </ul>
  </div>
</template>

<script scoped>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  computed:{
    postlist(){            
      return this.$store.state.posts;
    },    
  },
  created(){
      this.$store.dispatch('onLoad');
    }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
ul {
  text-align: center;
  list-style-type: none;
  margin: 0 auto;
  padding: 0;
  width: 800px;
}
.post {
  /* display: inline-block; */
  margin: 10px 10px;  
  border: 1px solid #42b983;
  border-radius: 15px;
  padding: 8px;
}

.post .title{
  text-align: left;
  font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
  font-size:larger;
  font-weight: 900;
  color:#222;
}
.post .content{
  text-align: left;
  font-size:small;
  padding: 5px;
  height: 80px;
  color:#999;
}
.post .lower{
  text-align: right;
  color:grey;
  font-size:small
}
a {
  color: #42b983;
}
</style>

 

  (5) ./src/store/store.js

import { createStore } from 'vuex';
import axios from 'axios';

axios.defaults.baseURL = 'https://vmsahpyntz.eu10.qoddiapp.com';
axios.defaults.headers.post['Content-Type']='application/json;charset=utf-8';
axios.defaults.headers.post['Access-Control-Allow-Origin']='*';

export const store = createStore({
  state:{
    posts:[]
  },
  mutations:{
    updateState(state, payload){
      Object.keys(payload).forEach((key) => {
        state[key] = payload[key];
      });
    }
  },
  actions:{
    async onLoad(context){
      const res= await axios.get('/');
      const post = res.data;
      // console.log(res);
      
      context.commit('updateState',{
        posts:[...context.state.posts, ...post],
      })
    },
  }
});

 

2. gitlab에 배포하기

저는 회사 특성상 github 접근이 불가능해서 gitlab을 주로 사용합니다. 사용 방법은 github과 동일합니다.

git remote add origin [gitlab주소: 대활호 빼고]
git pull origin main
git add .
git commit -m "initial commit"
git push origin main // main인지 master인지 본인의 branch를 잘 확인하고 진행합니다.

 

3. Netlify에서 연동하기

Netlify에 접속해줍니다. 계정이 없다면 적당한 방법으로 계정을 생성해주셔요.

"Sites  >  Add new site  >  Import an existing project"를 클릭해줍니다.

아래 그림에서 본인의 저장소가 있는 곳을 선택합니다. 저는 Gitlab

 

본인의 프로젝트를 선택합니다.

 

배포 세팅을 하게 되됩니다. 배포할 브랜치, 빌드 명령어(npm run build), 배포 디렉토리(일반적으로 /dist) 를 확인하고, 아래에 Deploy Site를 눌러주면 배포가 시작됩니다.

 

배포가 완료되면 아래와 같이 화면이 변경되며, 배포된 url이 표시가 됩니다. 

 

해당 링크를 클릭하면 우리가 만든 사이트가 나타납니다.

 

이제 수정사항이 생길때마다 Gitlab으로 배포만 하면 자동으로 Netlify도 업데이트됩니다. 

지금까지 DB, Backend 서버, Frontend 서버를 모두 서버리스로 구현해보았습니다.

 

~~~끝~~~~

반응형
반응형

현대 기업환경에서 데이터 기반의 의사결정이 점점 중요해지고 있습니다. 몽고디비(MongoDB)는 기업이 비정형 데이터를 효과적으로 저장/관리하고 분석할 수 있는 유연하고 확장가능한 NoSQL 데이터베이스입니다. 기존의 데이터베이스 하면 가장 대표적인 Oracle 데이터베이스부터 MySQL, PostgreSQL등 다양한 데이터베이스가 존재하는데요, 이들은 SQL데이터라 하여 정형 데이터라고 합니다. 즉 엑셀처럼 필드명이 있고, 수많은 행들로 이루어진 실제 데이터들이 존재합니다.

 

이런식으로 생긴거다....라고 생각하면 될 것 같습니다.

CustomerID Name Age Sex Email
1 John 30 male john@example.com
2 Emily 25 female emily@example.com
3 Michael 35 male michael@example.com

 

그에 반해서 NoSQL은 정해진 필드/형식이 없이 필요할때마다 정의할 수 있습니다. 그래서 유연하다고 하죠.

NoSQL의 장점을 살펴보면..

 

1. 다양한 데이터 형식의 처리: 몽고디비는 JSON과 비슷한 BSON 형식을 사용하여 다양한 형태의 데이터를 저장할 수 있습니다. 비구조화된 데이터를 쉽게 처리하고 분석할 수 있으며, 데이터의 유연성과 확장성을 제공합니다.

2. 확장 가능한 아키텍처: 몽고디비는 수평적으로 확장이 가능한 아키텍처를 가지고 있어, 대용량 데이터 처리에 효과적입니다. 클러스터 구성을 통해 데이터베이스 용량을 증가시킬 수 있으며, 분산 쿼리 및 인덱싱을 통해 성능을 향상시킬 수 있습니다.

3. 실시간 데이터 분석: 몽고디비는 실시간 데이터 분석을 위한 기능을 제공합니다. 변경 스트림(CDC)을 사용하여 데이터의 변경 사항을 캡처하고, 스트림 처리 기술을 활용하여 실시간으로 데이터를 분석하고 대시보드나 실시간 알림에 활용할 수 있습니다.

4. 유연한 쿼리 언어: 몽고디비는 강력한 쿼리 언어를 제공합니다. MongoDB Query Language(MQL)을 사용하여 복잡한 쿼리를 작성하고 데이터를 필터링, 집계 및 조작할 수 있습니다. 이를 통해 다양한 데이터 분석 요구에 대응할 수 있습니다.

5. 풍부한 생태계와 도구 지원: 몽고디비는 다양한 언어와 프레임워크에서 사용할 수 있으며, 풍부한 생태계와 커뮤니티 지원을 제공합니다. MongoDB Atlas와 같은 관리형 서비스를 통해 운영과 관리의 부담을 줄일 수 있습니다.

 

주력제품: 

몽고DB의 주력 제품은 클라우드 데이터베이스 Atlas로 전체 매출의 절반 가량을 차지합니다. 그밖에도 모바일을 타겟으로 한 Realm, 기업용 온프레미스 서버 Enterprise server 또는 Community server가 있습니다.

 

데이터베이스 관리시스템(DBMS) 시장규모는 4차산업 디지털전환에 따라 퍼블릭 클라우드가 급격히 성장하고 있습니다. 이는 NoSQL의 선두주자인 몽고DB의 성장 잠재력도 매우 크다고 할 수 있습니다. 

 

주요지표 [출처: 대신증권]

 

투자지표 [출처: 한국투자증권]

 

매출은 지속적으로 증가하고 있으나 영업이익/순이익을 회복하기에는 아직 시간이 필요할 것으로 보입니다. 하지만 기술 주식은 재무 수치들로만 판단하기 어려운 부분이 있습니다. 기술 우위를 바탕으로 4차 산업시대에 급격한 반전을 만들 가능성이 높다고 보입니다. 경쟁상대는 기존 데이터베이스 업체인 오라클, MS, IBM에 더해 클라우드형 데이터베이스 제공업체인 AWS(아마존), Azure(MS), GCP(구글) 등이 있지만 마냥 경쟁관계인 것은 아니고 오히려 협력관계로 보아야 할 것입니다. (NoSQL과 SQL의 영역 차이.) 따라서  인공지능, 자율주행 등 미래기술이 더욱 발전/중요해지는 시대에 데이터인프라를 제공하는 몽고DB의 전망은 매우 밝다고 생각됩니다.

반응형
반응형

제목이 참 힘드네요...

 

데이터는 적당히 입력이 되었다고 하면, Node(Express)를 통해서 데이터를 넘겨주는 서버를 만들어보겠습니다.

1 .env 파일

CockroachDB연결정보는 사이트에서 제공하는 connection string을 그대로 붙이는게 편리합니다. 비밀번호도 찾아서 잘 넣어주시구요.

PORT=3000
NODE_ENV='development'
SECRET=mysecretkeytest
COCKROACHDB_CONNECT_URL='postgresql://<유저아이디>:<비밀번호>@wind-raccoon-4725.8nk.cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full'

 

2. postRoute.js

Connection String에 정의된대로 연결하니 오히려 더 깔끔한 것 같네요.

import express from 'express';
import pg from 'pg';
import dotenv from 'dotenv';
import bodyParser from 'body-parser'

dotenv.config();
const { COCKROACHDB_CONNECT_URL } = process.env;

const router = express.Router();
router.use(express.json());

const client = new pg.Client(COCKROACHDB_CONNECT_URL);

client.connect(err => {
  if (err) {
    console.error('connection error', err.stack)
  } else {
  	console.log('success!')
  }
});


// 전체 리스트 읽기
router.get('/', (req, res) => {
  // res.send('hello');
  const query = new pg.Query("SELECT * FROM MEMO_POST");
  client.query(query);

  var rows = [];
  /** 
   *  row에서 데이터 가져오고 end에서 검색할 때 발생한 각종 정보, error는 오류 발생시
   */
  query.on("row",row=>{
    rows.push(row);
  });
  query.on('end', () => {
    console.log(rows);
    console.log('query done')    
    res.send(rows);
    res.status(200).end();
  });
  query.on('error', err => {
    console.error(err.stack)
  });
});

 

3. index.js

구동을 위해 index.js의 소스코드도 올려둡니다.

import express from 'express';
import session from 'express-session';
import cookieParser from 'cookie-parser';
import dotenv from 'dotenv';
import cors from 'cors';

// import mongoose from 'mongoose';
// import auth from './routes/auth.js';
import postRoute from './routes/postRoute.js';

dotenv.config();

const app = express();

const { PORT, SECRET } = process.env;
app.set('port', PORT || 3000);

app.use(express.json());
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser(SECRET));
app.use(session({
    resave: false,
    saveUninitialized: false,
    secret: SECRET,
    cookie: {
        httpOnly: true,
        secure: false
    }
}));

app.use(cors());  // 이걸로는 잘 안됨
app.all('/*', function(req, res, next){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
})

app.use('/', postRoute);

app.listen(app.get('port'), ()=> {
  console.log(`http://localhost:${app.get('port')} 번 포트에서 서버 실행 중..`);
});

 

결과가 잘 나오네요^^

 

반응형
반응형

미국 주식을 다시 시작했습니다. 요즘 미니스탁이라는 어플로 거래하는데, 저랑 성향이 잘 맞는것 같아서 애용하고 있습니다.

 

미니스탁은 실시간으로 본인이 거래하는 것이 아니고, 주문을 넣으면 밤 10시에 주문처리가 시작되고, 오전 7시30분에 구매 처리가 완료됩니다. 즉 본인이 팔고싶은 가격을 정할 수 없다는 것인데요. 저는 이점이 오히려 장점으로 다가왔습니다. 괜찮은 주들을 선정한 다음에 매수버튼만 누르면 눈 딱감고 기다리면 알아서 적당히 매수가 이루어지거든요. 1주씩 사는게 아니라 금액에 맞게 쪼개서 구매가 이루어지는 점도 정말 맘에 듭니다.

 

미국 주식은 장기로 가져가야 한다고 하고, 큰 흐름에 올라타는게 중요하지 지금 당장의 몇원 차이에 크게 연연하지 않아도 되지 않을까 생각합니다. 그래도 내가 고른 종목이 적절한건지, 어느정도 수익이 나는지는 계속 지켜봐야겠습니다.

보유 보유주식수 1주당 평균매수가 매수금액   현재가($) - 5/19
합계     519.0851024   537.62 3.571%
마이크로소프트 0.324394 287.85 93.3768129   103.33 10.65%
스타벅스 0.715743 106.84 76.4699821   76.65 0.23%
아마존닷컴 0.420279 115.16 48.3993296   49.66 2.59%
AMD 0.370957 100.36 37.2292445   40.04 7.54%
로블록스 0.912347 42.44 38.7200067   38.38 -0.87%
엔비디아 0.121017 307.64 37.2296699   38.34 2.97%
버크셔 해서웨이 B주 0.114227 325.92 37.2288638   37.67 1.17%
코스트코 홀세일 0.075015 496.30 37.2299445   37.36 0.36%
월트디즈니 0.398267 93.48 37.2299992   37.34 0.29%
몽고DB 0.120856 276.61 33.4299782   35.01 4.73%
레이시온 테크놀로지스 0.312657 95.28 29.7899590   30.06 0.89%
넷플릭스 0.037112 343.59 12.7513121   13.78 8.06%

 

시작이 좀 늦은 감이 있지만, 어쨌든 시작하자마자 플러스라니 기분은 좋네요.^^

반응형
반응형

모든 서비스 클라우드에서 구동하기를 해보려고, 이번엔 Database를 찾고 있습니다. 이번에도 역시 무료가 어느정도 가능한 서비스를 찾다보니 CockroachDB라는 것을 찾게 되었습니다.

 

 

Cockroach Labs, the company building CockroachDB

 

Cockroach Labs, the company building CockroachDB

CockroachDB is a distributed database with standard SQL for cloud applications. CockroachDB powers companies like Comcast, Lush, and Bose.

www.cockroachlabs.com

 

Cockroach라면 우리말로 바퀴벌레인데요, 단어를 알게되는 순간 이미지가 급 안좋아지는데 이 또한 의미가 있다고 하네요. 뭐냐하면 CockroachDB는 시스템에 크고 작은 문제가 생겼을 때 생존하고 스스로 회복하는 것 (Resiliency) 에 가장 큰 강점을 두고 있다고 합니다. 분산 시스템을 설계할 때에 가장 어려운 문제 중 하나가 바로 장애 상황에서 일관성이나 가용성을 최대한 유지하면서 복구해내는 것인데요. 특히 분산 데이터베이스 시스템의 경우 복구에 많은 시간이 걸리거나 많은 데이터가 소실되면 어플리케이션에 큰 영향을 끼칠 수 있습니다.

 

CockroachDB의 경우 디스크, 물리적 머신, 심지어 데이터 센터 단위의 장애가 생기더라도 생존할 수 있는 다양한 옵션을 제공하고 있습니다. 또한 문제 상황이 생기면 스스로 감지하고 사람의 개입 없이도 자동으로 서비스를 최대한 복구해냅니다. 정말 계속해서 나타나는 바퀴벌레의 생명력이 생각나네요. 계속해서 잘 살아남이 DB를 유지해주길 바래봅니다.

 

가격정책을 보니까 제가 좋아하는 무료정책이 있습니다. 기간이 나와있지는 않는데, 10GiB의 스토리지와 월 50M 건의 요청 안에서 사용할 시 무료인 것으로 보입니다. 

 

가입과정을 거쳐 진입하면 자체 콘솔화면이 나타납니다. 여기서 우측 상단에 보이는 Create Cluster를 눌러 생성을 시작합니다.

 

다음으로는 Serverless 플랜을 선택합니다. 그리고 아래쪽에 "Start for free"를 눌러 다음을 진행해줍니다. 지금 저는 하나의 무료 cluster를 이미 생성했기 때문에 해당 메뉴가 활성화가 안되네요.

 

제 화면은 아니지만 아래와 같이 Cluster name이 적당히 생성되고, 다음 오른쪽 보라색 생성버튼을 눌러줍니다. 

 

생성되면 접속과 관련된 정보들이 나타납니다. 이 정보는 터미널에서 직접 DB를 관리할 때 필요한 것 같습니다. DBeaver같은 데이터베이스 관리도구를 사용하면 3번의 접속정보 정도만 알아도 사용 가능합니다. 중간에 Database이름, 사용자 이름과 비밀번호를 생성하는 부분이 있는데, 1번만 알려준다고 하니 잊어버리지 않도록 주의하시기 바랍니다. 잊어버리면 새로 생성할 수는 있습니다.

 

아래와 같이 host, port, database, username, password 등 접속정보를 넣고 입력하면 접속이 됩니다.

 

이제 웹상에 데이터 저장이 가능한 내 Postgresql DB가 생성되었습니다. 

 

아래와 같이 입력하여 신규 Table을 생성하고, 데이터를 집어넣어봅시다.

CREATE TABLE MEMO_POST (
	POST_ID integer generated by default as identity,
	TITLE VARCHAR(50),
	CONTENT VARCHAR(50),
	CREATOR VARCHAR(10) ,
	PUBLISH_DATE TIMESTAMP 
);

insert into memo_post values (default,'첫번째포스팅','안녕하세요, 포스팅 테스트1 입니다.', 'wilkyway', CURRENT_TIMESTAMP);
insert into memo_post values (default,'두번째포스팅','안녕하세요, 포스팅 테스트2 입니다.', 'wilkyway', CURRENT_TIMESTAMP);
insert into memo_post values (default,'세번째포스팅','안녕하세요, 포스팅 테스트3 입니다.', 'wilkyway', CURRENT_TIMESTAMP);

select * from memo_post

 

조금 실수가 있어서 첫번째 라인이 지워졌지만.... 데이터 잘 입력되고 확인이 되네요^^

반응형
반응형

머신러닝 알고리즘은 크게 지도학습, 비지도학습, 강화학습으로 분류됩니다. 각 카테고리에 속하는 주요한 알고리즘들을 간단히 살펴보겠습니다.

1. 지도학습 (Supervised Learning)

지도학습은 입력 데이터와 정답(label) 쌍을 통해 학습하는 방법입니다. 주어진 입력에 대해 정확한 출력을 예측하는 모델을 학습합니다. 주요한 지도학습 알고리즘으로는 다음과 같은 것들이 있습니다:
   1. 선형 회귀 (Linear Regression)
   2. 로지스틱 회귀 (Logistic Regression)
   3. 의사결정 트리 (Decision Trees)
   4. 랜덤 포레스트 (Random Forests)
   5. K-최근접 이웃 (K-Nearest Neighbors)
   6. 서포트 벡터 머신 (Support Vector Machines)
   7. 신경망 (Neural Networks)

2. 비지도학습 (Unsupervised Learning)

비지도학습은 정답(label) 없이 입력 데이터의 내부 구조를 발견하거나 데이터를 그룹화하는 방법입니다. 입력 데이터의 특징을 스스로 학습하여 새로운 관점이나 패턴을 발견합니다. 주요한 비지도학습 알고리즘으로는 다음과 같은 것들이 있습니다:
   1. 군집화 (Clustering)
   2. 주성분 분석 (Principal Component Analysis, PCA)
   3. 자기조직화 맵 (Self-Organizing Maps, SOM)
   4. 혼합 모델 (Mixture Models)
   5. 이상치 탐지 (Anomaly Detection)
   6. 차원 축소 (Dimensionality Reduction)

3. 강화학습 (Reinforcement Learning)

강화학습은 에이전트가 환경과 상호작용하며 보상을 최대화하는 의사결정을 학습하는 방법입니다. 시행착오를 통해 최적의 행동 정책을 학습하고 개선합니다. 주요한 강화학습 알고리즘으로는 다음과 같은 것들이 있습니다:
   1. Q-학습 (Q-Learning)
   2. SARSA
   3. 딥 강화학습 (Deep Reinforcement Learning)
   4. 강화학습 기반 신경망 (Reinforcement Learning-based Neural Networks)

 

각각의 학습 방법은 다른 목적과 응용 분야에 적용될 수 있으며, 종종 혼합하여 사용되기도 합니다. 예를 들어, 지도학습을 통해 레이블된 데이터를 사용하여 모델을 학습한 후, 비지도학습을 통해 데이터의 구조를 이해하거나 강화학습을 통해 최적의 의사결정 전략을 개발하는 등의 방식으로 조합될 수 있습니다.

 

 

 

반응형
반응형

주식 분석 이런거 하나도 모르고, 아주 어릴적에 주식 책 한권 읽은게 전부인데...

하나하나 글을 써 나간다는 것 자체가 내가 알지 못하는 무언가 도움이 될 수 있다고 생각하고, 써 나가려 합니다.

 

엑슨 모빌은 사실 들어본적도 없는 회사인데, 최근에 알게 되었습니다. 세계에서 가능 큰 에너지 회사중 하나라는데, 경제에 너무 무관심했나봅니다.  엑슨모빌은 오랫동안 세계 석유 및 가스 산업에서 중요한 역할을 해왔습니다. 에너지 환경이 발전하고 환경에 대한 우려가 커짐에 따라, 엑슨 모빌의 전략을 이해하는 것은 투자자와 업계 관찰자 모두에게 중요할 것입니다.

 

비즈니스 개요:

엑슨 모빌은 1870년에 미국에서 창립된 세계적인 석유 및 천연가스 기업입니다. 현재는 석유와 천연가스의 탐사, 생산, 정제, 운송, 유통을 포함한 다양한 분야에 걸쳐 운영되고 있습니다. 59개국에서 사업을 전개하고 약 2,380억 달러의 시가총액을 보유하고 있는 이 회사는 세계 에너지 시장에서 상당한 입지를 구축하고 있습니다.

 

수익구조:

ㅇExxonMobil은 전 세계적으로 Esso, Exxon, Mobil 및 ExxonMobil의 네가지 브랜드로 연료, 윤활유 및 화학제품을 판매합니다. 즉, 석유및 천연가스의 생산과 정제, 유통 등 다양한 사업부문으로 나뉘어집니다. 이러한 수익구조를 바탕으로 전반적으로 안정적인 수익을 예상할 수 있는 석유 및 천연가스 산업 전반에서 사업을 전개하고 있습니다.

 

사업부문:

[Chemical - 화학제품]
원유와 천연 가스를 이용하여 의료 장비, 의류, 비타민 캡슐, 타이어, 손 소독제 등 화학 제품의 생산 및 판매 

[Upstream -업스트림]
육지 또는 바다의 원유 매장 위치 탐사, 원유 시추, 유전 굴착 및 채유 시설 건설 등의 원유 생산 기초 사업 

[Downstream - 다운스트림]
저장 원유 정제 및 소비자 판매

 

투자지표:

엑슨모빌의 재무실적은 산업 역학과 세계 경제 상황에 영향을 받았습니다. 최근 몇 년동안 COVID-19 대유행 기간 동안 유가 하락과 수요 감소로 인해 어려웠습니다. 그후 2020년 3분기 이후부터 지속적인 회복세를 보이고, 2023년까지도 꾸준히 우상향하는 흐름을 보여주고 있습니다. 인플레이션으로 원자재가격이 오른 것은 물론, 팬데믹 이후 비행기, 운송으로 인한 에너지 수요가 급증하면서 석유, 천연가스의 가격 폭등에 대한 수혜를 받았기 때문입니다.

 

재무제표

 

 

 

부채비율이 굉장히 낮은데 이는 기업의 안정성을 평가하는 중요한 지표입니다. 향후 업계 경쟁력을 유지하기 위한 자금을 확보하는데 있어서 중요한 역할을 할 것으로 보입니다.

 

 

소감:

엑슨모빌은 석유, 가스의 두가지를 모두 잡고 있으며, 전 세계를 대상으로 운영이 되고 있기 때문에 시장 상황과 글로벌 이벤트의 영향을 많이 받는 종목으로 볼 수 있을 것 같습니다. 또한 정부 규제, 기후 협약 및 업계에 대한 국민 정서의 변화는 회사의 운영 및 성장 전망에 영향을 미칠 수 있습니다. 그러나 전 세계를 대상으로 운영한다는 점은 반대로 특정지역의 영향을 덜 받는다는 의미도 될 수 있을 것입니다. 또한 석유와 천연가스 모두를 포함한 채굴망은 국제유가 하락의 영향을 상쇠시켜줄 수 있을 것입니다. 

 

 

반응형
반응형

무료로 구동할 수 있는 백엔드용 서버 서비스를 찾아 찾고 찾았는데, 저도 마찬가지로 Heroku를 사용하고 있었죠. 이젠 그게 유료화되면서 어쩔수 없이 유료로 가야하나 고민하고 있던 차에 Qoddi라는 서비스를 알게되었습니다.

 

https://app.qoddi.com

 

Login to Qoddi - PaaS Premium cloud hosting solution

Login to Qoddi and start building! From code to live in 30 seconds

app.qoddi.com

 

이번엔 Qoddi 서비스를 이용하여 Node서버를 구동하기까지 진행해보려고 합니다.

 

1. Node(Express) 서버 구축

간단하게 Express를 설치하고 구동하는 앱을 만들어줍니다. 

import express from 'express';
import dotenv from 'dotenv';
import path from 'path';

dotenv.config();

const __dirname = path.resolve();
const app = express();

const { PORT, MONGO_URI, SECRET } = process.env;
app.set('port', PORT || 3000);

app.get('/', (req, res) => {
  res.send('hello world');
})
app.listen(app.get('port'), ()=> {
  console.log(`http://localhost:${app.get('port')} 번 포트에서 서버 실행 중..`);
});

 

2. package.json파일 수정

  "scripts": {
    "start":"node ./src/index.js",  // 이부분 추가
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "nodemon ./src ./src/index.js"
  },

 

3. Procfile 생성

자동 배포 및 실행을 위해서는 Procfile 이라는 확장자없는 파일을 만들어야 합니다. (Qoddi사이트에서 필요함)

web: npm start

 

4. github (or gitlab)에 push

깃헙 저장소로 올려줍니다.

 

5. 가입

qoddi 사이트에서 가입을 진행해줍니다.

 

6. 앱 만들기 (신용카드 정보 입력)

로그인하면 아래와 같은 화면이 나오는데, 우측의 빨간색 New 버튼을 클릭하여 새 앱 만들기를 시작합니다.

 

그러면 최초 앱 생성 전 신용카드 등록이 필요하다고 아래와 같이 나옵니다. 등록을 진행해줍니다. 단, 등록하면서 확인한답시고 1$가 결재됩니다. ㅠㅠ

그러면 아까의 빨간색 New버튼을 다시 클릭하여 앱 생성화면으로 이동 가능합니다.

 

7. 앱 설정 1단계

앱 네임과 프로젝트네임, 데이터스토어(없으면 No Datastore)를 선택해줍니다. App Type은 웹서버를 만들 예정이므로 Web Server를 선택해주고, App Location은 어차피 아시아나 서울이 없으므로 적당히 아무거나 선택해줍니다. 앱 사이즈는 Dev로 선택합니다. 

8. 앱 설정 2단계

Github이나 다른 Repository를 선택합니다. 

본인의 브랜치가 main인지 master인지 확인해서 잘 넣어줍니다.

 

9. 설정 3단계

확인해주고 Launch My App 을 클릭해줍니다.

 

10. SSH 설정

github과 연동을 위해 ssh-rsa 인증키가 발급됩니다. 해당 키를 만들어서 github에 붙여줍니다.

 

11. github SSH Key 입력(Gitlap으로 진행)

저는 주로 gitlap을 써서 여기서 인증키를 입력하겠습니다. 사용자 정보 > Edit profile로 접근하여

 

SSH Keys 메뉴로 들어가서 Key를 입력하고, Add key 버튼을 눌러주면 키 입력이 완성됩니다.

 

12. 완료

자동 생성된 링크와 함께 Running이라고 보입니다. 이제 github에 update를 푸쉬할 때마다 자동으로 반영이 됩니다.

잘 안될때도 있다고 하는데, 가끔 Reload Data(우측 상단) 버튼으로 진행해주시면 됩니다.

 

링크를 클릭하면...

 

잘 나오네요~~

 

끝~~

 

헉.....근데 이건 뭐지? 무료라매...

반응형

+ Recent posts