Clojure 이용한 아무거나 개발

노는김에.. 클로저로 뭘 만들어보려고 하는데..
프레임워크가 필요할 것 같아서

두가지
* http://clojure-liberator.github.io/liberator/
* https://github.com/weavejester/compojure
* https://github.com/cmiles74/bishop
* Luminus – Leiningen
https://stackoverflow.com/questions/26674766/clojure-rest-api-frameworks

클로저는 문법이 희한해서 왠지 해보고 싶지 않나

빌드 툴은 Gradle을 이용. Leiningen이 표준이지만.. 공산당 같은 이름이라 안 쓰기로 했다.
최근 Gradle에서도 Clojure 플러그인이 있으니 그걸 쓰겠다.
IDE는 Intellij에서 할건데 Cursive를 깔면 좋다고 하지만.. 유료라 안깔고 쓸 것 같다.

서버 – Cloud vs IDC

그냥 다 귀찮으니 편하게 쓰고 싶다면 Cloud를 쓰는게 맞다. 서버 조그만거 껐다 켰다 하는 경우에는 Cloud가 가격도 싸고..
그런데 뭔가 조금만 무겁게 돌리려고 하면 Cloud의 GCP기준 2cpu 월3만원 4gb 서버는 좀 버거워 하는게 느껴진다.
Kubernetes가 자동으로 설치되고, Storage(s3, goosto..) 처럼 설치해서 관리하기 매우 난감한 솔루션도 종량제로이용 가능. minio, hdfs등을 설치해서 관리하려면 머리가 아프고 소규모로 쓰는데 이걸 설치하려면 골이 아프다.

서버2개정도로 빡빡하게 돌리려면 IDC
통큰아이 서버 중에 5만원~10만원 정도 하는거 두개쯤 쓰면 된다. 단기계약도 가능.

스케일업다운해가면서 테스트 할거면 Cloud

고정적으로 돌릴거면 IDC 코로케이션
http://www.koreaidc.com/03_colo/colo_type.html
액면가(협의가능) 쿼터렉(20Mbps) 25만, 하프렉(50Mbps) 60만, 풀렉(100Mbps) 110만
LG IDC
http://www.uplus.co.kr/biz/bzid/clct/RetrieveBzIdCoIt.hpi
부가포함 – 쿼터 44만, 하프 75.5만 풀 121만
네트워크나 기타 서비스 가격 차이가 있을 수 있다.
평촌IDC를 쓰면 AWS 다이렉트 연결도 가능.

하이브리드 사용을 하려면 AWS Direct 네트워크 연결이 되는 IDC를 선택하면 된다.

클라우드

  • AWS
  • GCP
  • Azure
  • naver cloud
  • nhn toast cloud
  • kt cloud XXXXX
  • cloudv
  • digital ocean
  • heroku

호스팅

  • 통큰아이

코로케이션

  • cloudv 쿼터렉50만원인데 50%할인이라고써있음 할인해야 정상가격
  • 통신사(kt,lg,sk) Idc 직계약
  • 그냥 호스팅회사들 통해서 하는거 하나도안싼게특징
  • korea idc 쿼터렉 25만
    https://www.koreaidc.com/colocation/c-colocation.php
  • https://kdtidc.kr/wp/%ec%bd%94%eb%a1%9c%ec%bc%80%ec%9d%b4%ec%85%98
  • http://www.maruidc.com/colocation/rack_cost.html
  • http://www.coredata.co.kr/idc/colocation/package_cost.html
  • https://www.hostmeca.com/colocation.php
  • http://idc.viaweb.co.kr/coapp.php

결론은

없지만… 개인적으로는 그냥 로컬서버(집에다가) 두개정도 돌려놓고 개발 하다가 클라우드에 한두개정도 올리고… 클라우드 비용이 100만원을 넘는 시점에 하이브리드 환경을 고려 해 보는게 좋지 않을까

요즘시대에 완전 온프레미스 환경을 구축하는건 좀 비효율적이라고 생각한다. s3와 같은 환경을 직접 구축하는건 … 필요해지는 순간이 오긴할까

가격 별도문의는 걸리기만 해라 눈탱이로 조져버린다는 의미이기 때문에
시세를 모르면 클라우드 쓰는게 더 싸고 편하다 이런소리

Error: Win10 Openjdk10 Gradle 빌드 오류

Could not determine Java version using executable C:\Users\Administrator\scoop\apps\openjdk\current\bin\java.exe.

openjdk10 환경에서 gradle 일정이하 버전은 안 돌아간다.
시스템 gradle은 4.9인데 프로젝트 gradle wrapper버전이 낮아서 openjdk10에서 구동이 안되는 상황

> gradle wrapper

실행해주면 해결

Gradle 플러그인 선언 스타일

요즘방법

플러그인 검색 페이지 : https://plugins.gradle.org/
옛날건 properties 파일에 플러그인 버전을 다 설정 해 놨는데 새로운 설정방법으로 하면 값을 가져오지 못한다. 자주 하는건 아니니가 그냥 노가다 표기법 사용.


plugins{
	id 'java'
	id 'groovy'
//	id "org.jetbrains.kotlin.jvm" version kotlin_version //오류남
	id "org.jetbrains.kotlin.jvm" version "1.2.61"
	id "org.jetbrains.kotlin.plugin.spring" version "1.2.61"
	id "org.jetbrains.kotlin.plugin.jpa" version "1.2.61"
	id 'scala'
	id "gradle-clojure.clojure" version "0.4.0"
	id 'com.github.johnrengelman.shadow' version '2.0.2'
	id 'eclipse'
	id 'eclipse-wtp'
	id 'idea'
}

옛날방법

멀티모듈, 버전 설정파일이 있는 경우 사용

buildscript {
	repositories {
		jcenter()
		mavenCentral()
		maven { url 'https://plugins.gradle.org/m2/' }
	}
	dependencies {
		classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
		classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
		classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
//		classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
//		classpath "com.google.protobuf:protobuf-gradle-plugin:$protobuf_gradle_plugin_version"
//		classpath "se.transmode.gradle:gradle-docker:$transmode_docker_gradle_plugin_version"
//		classpath 'com.bmuschko:gradle-docker-plugin:3.0.8'
//		classpath "org.springframework:springloaded:$springloaded_version"
//		classpath 'nu.studer:gradle-jooq-plugin:2.0.7'
//		classpath 'org.hidetake:gradle-ssh-plugin:2.9.0'
//		classpath 'org.codehaus.groovy:groovy-backports-compat23:2.4.6'
	}
}

옛날방법은 낭만이 있었는데 요즘건 너무 삭막해

서비스 베이스 프로젝트

뭔가 개발하려면 꼭 필요한 녀석들이 있다.
그리고 한번 개발 해 놓으면 계속 쓸 수도 있고
(나만그런가 싶기도 하지만)

Infra : DB, MQ, MemoryStorage, FileStorage

App : 파일저장, SSO

클라우드로 하면 되는데.. 왠지 클라우드를 쓰기 싫을 때도 있고

그럴 때 필요한 것들

FileStorage

하듭 파일시스템을 써야되나 고민했는데 아마존 S3처럼 쓸 수 있는게 있다고 한다.
minio https://www.minio.io/
https://github.com/minio/minio
fakes3 https://supso.org/projects/fake-s3
https://github.com/jubos/fake-s3

s3 기능을 많이 흉내내서 만들었다고 하는데 안정성은 잘 모르겠지만 남는피씨서버하드에 돌리기 좋아보인다.

Linux HDD Mount 하드 추가

테스트 환경 OS

  • Ubuntu18.04 Bionic Beaver
  • Debian10 Buster

파티션 잡기

두가지 툴을 보통 사용

  • fdisk 2TB이하
  • parted 2TB이상 대용량

이었는데… fdisk에서 gpt가 지원이 되는 듯 한데..
원래 됐다 / 지금도 안된다 / 버전업되서 추가됐다
3가지중 뭘까

fdisk로 파티션 잡기

$ fdisk -v
 fdisk from util-linux 2.33.1

$ sudo fdisk -l
여기서 새로 설치한 디스크를 잘~ 확인

$ fdisk /dev/sdb
Welcome to fdisk (util-linux 2.33.1).
 Changes will remain in memory only, until you decide to write them.
 Be careful before using the write command.
 Command (m for help): m
 Help:
 GPT
    M   enter protective/hybrid MBR
 Generic
    d   delete a partition
    F   list free unpartitioned space
    l   list known partition types
    n   add a new partition
    p   print the partition table
    t   change a partition type
    v   verify the partition table
    i   print information about a partition
 Misc
    m   print this menu
    x   extra functionality (experts only)
 Script
    I   load disk layout from sfdisk script file
    O   dump disk layout to sfdisk script file
 Save & Exit
    w   write table to disk and exit
    q   quit without saving changes
 Create a new label
    g   create a new empty GPT partition table
    G   create a new empty SGI (IRIX) partition table
    o   create a new empty DOS partition table
    s   create a new empty Sun partition table

(??) m  -- 위에 나온거 다시볼 수 있다

(??) d  -- 파티션 다 지우기

(??) g  -- GTP로..

(??) n  -- 파티션 생성

(??) i  -- 파티션 정보보기

(??) p -- 파티션 테이블 정보보기

parted로 파티션 잡기

https://blog.hqcodeshop.fi/archives/273-GNU-Parted-Solving-the-dreaded-The-resulting-partition-is-not-properly-aligned-for-best-performance.html
$ sudo parted /dev/sdb
~~~
parted는 기본으로 안 깔려있으니 설치
$ sudo apt install parted

(parted) mktable gpt
(parted) mkpart
ext4
0%
100%

포맷

http://mhugt.tistory.com/47
http://noota.tistory.com/entry/%EC%9E%90%EB%8F%99-%EB%A7%88%EC%9A%B4%ED%8A%B8-%EB%B6%80%ED%8C%85-%EC%8B%9C-%EC%9B%90%ED%95%98%EB%8A%94-%ED%95%98%EB%93%9C%EB%94%94%EC%8A%A4%ED%81%AC-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EB%A7%88%EC%9A%B4%ED%8A%B8-%EB%90%98%EB%8F%84%EB%A1%9D-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

$ sudo mkfs.ext4 /dev/sdb1
$ mkdir tmpdir
$ sudo mount /dev/sdb1 /tmpdir

자동 마운트

uuid 확인

$ sudo blkid
$ ll /etc/disk/by-uuid
$ nano /etc/fstab

맨뒷줄에 추가
UUID=xxxxxxxxxxxxxxxxxxxxxxuuidxxxxx /tmpdir ext4 defaults 0 0

tmpdir을 원하는 경로로 변경

마운트 테스트

$ sudo mount -fav

LVM추가

  • https://hiseon.me/linux/lvm-configuration/
  • https://jangpd007.tistory.com/235
  • https://wiki.debian.org/LVM#Create_a_PV

Vagrant box 추천

vagrant 박스 – 공식 박스가 배포되는 경우

debian/stretch64
ubuntu/bionic64
centos/7

공식은 아니지만 여기도 종종 사용하고
bento/ubuntu-18.04이렇게 공식박스를 제공하는 곳도 있지만…

문제는.. 
openbsd, fedora 등 오픈소스진영은 배포자가 관리 주체가 불확실한 경우가 많다
대부분 virtualbox 버전만 제공된다.

parallels, hyperv는 개인이 만든걸 쓰거나 직접 만들어야된다.

그래서 윈도우에 virtualbox를 깔고 쓰게 되는데…

그러다가 발견한 이 계정.

https://app.vagrantup.com/generic

1) hyperv
2) libvirt
3) parallels
4) virtualbox
5) vmware_desktop

다있음.