테스트환경 구성 Tutorial – Ubuntu16.04.2

꼭 한개씩 빼먹어서 기록.

chef셋팅은 여유있을때

Mysql

테스트계정 추가하면서 마스터권한을 줘버렸는데

권한이나 접근가능서버는 상황에 맞게 조절하면 된다

 

RabbitMQ

 

Redis

sentinel 관련 설정은 클러스터링테스트시..

 

 

 

SpringWebFlow – 왜 쓰나 어떨 때 쓸까

이걸왜쓰나

이 프레임워크의 존재는 오래전부터 알았지만 이걸 쓸 생각은 한번도 안해봤다.

그냥 별로 쓸모가 없어보여서… 이런짓을 왜 해야되나 싶었다.

그냥 controller에서 리다이렉트하고 뭐 하면 되는데

 

그런데 최근.. SSO서비스를 만들면서 플로우가 너무 꼬여서 고생하고 나니 생각이 바뀌었다.

소셜로그인 때문에 OAuth의 redirect까지 끼어들고 나니 코드가 뭐가뭔지 정신이 하나도 없었다.

그래서 사용하기로 결정.

사용법은 매우 쉽다. 웹 플로우의 필요성을 느꼈다면 설명은 필요없어보인다.

 

장단점

아쉬운점은 xml이고 spring boot에서 별로 지원이 없다는 점.

아직 쓸모가 있고 수요도 있는데

업그레이드는 되지 않는 것 같다.

SpringBoot에서 참견을 안하니까 알수없는 오류의 구렁텅이에 빠지는 일도 없고

심플하고 오래된 프레임워크라 버그가 없을 것만같다. (아직 안써봤다)

 

활용 시나리오

ex0) SignupFlow

로그인-> Y -> end.메인화면으로.view

-> N -> 회원가입폼.view -> email? -> EmailFlow

-> social? -> SocialFlow

ex1) EmailFlow

~~~

ex2) SocialFlow

~~~

 

문제점

적용하면서 시간낭비 하다가 다 빼버렸다.

쓴다면 플로우가(Scene이?) 3단계 이상인 경우에만 쓰는게 좋을 것 같다.

 

나갔다가 돌아오는 경우에 사용할 수 없다.

ex)이메일인증, OAuth 등의 경우

RequestParam, Cookie 또는 Session을 선택적으로 쓸 수 있는 환경이 필요해 보인다.

XML설정이 매우 불편하다.

시간날 때 GroovyDSL 형태로 만들어보는게 좋을까

중간진입 불가

flow는 항상 처음부터 시작되는걸로 여러개 만드는 방식도 좋지만

중간진입이 필요한 경우도 있지 않을까? 이건 좀 애매한 부분.

Form-Post방식의 화면전환

_elementId_{name} 형태로 써서 보내야 되는데

오지게 불편하다.

Java Coding Style Guide(Coding Convention,NamingRule)

대소문자와 밑줄 사용

camelCase

변수명, 메서드명에 사용

약자인 경우에는 대문자를 연속해서 쓰는 경우가 있는데 글자수에 따른 변동이 있음

2글자 VO, 그냥 두개 대문자로 쓰는게 일반적인 룰이지만.. 사람에 따라

3글자 Dto, Api, 3글자 이상부터는 뒤에는 소문자로 쓰는게 룰이라고 하지만… userDTO, smsAPI와 같이 3글자 다 대문자로 쓰는경우도 많다. 대문자로 쓰자그냥

4글자 이상. 몰라

 

자주쓰이는 약자들만 프로젝트 단위별로 정해놓고 쓰면 되겠다.

이것들은 그냥 대문자로 쓰자

DTO, VO, API

 

snake_case

json, xml에만 사용 소스코드에는 사용하지 않음

_number

타 언어에서 전역변수에 사용하는데 자바에서는 (잘)사용하지않음

C하던사람들이 자바하면 이런거 많이씀

__number

타 언어에서 접근금지 변수에 사용하는데 자바에서는 사용하지 않음

 

data class suffic

Entity : JPA(ORM)

Dto : API 호출

VO : Mybatis 접근

Model

Data

Wrapper : Dto 의 묶음. 대부분 고정된 형태 외부 프레임

 

json을 읽어들일때: ~JsonModel

PostGIS 기초 사용법

PostGIS의 사용법은 그리 어려울게 없다.

그냥 데이터를 사용하기 위한 기반 지식이 많이 필요하다.

기술적으로 알아야 할 것은 geometry 인덱싱, st_프로시저 정도로 많지 않고 지도 데이터, 좌표계 변환 등의 지식을 많이 알아야한다.

설치

http://postgis.net/install/

 

인덱싱

 

ST_프로시저

많이 사용되는 것만 대강 기억하고 PostGIS doc를 찾아서 쓰면 된다.

https://postgis.net/docs/reference.html

 

ST_Intersects – 겹침

ST_Within – 완전포함

ST_Contains – 포함 within하고 비슷한데 확인필요

ST_Area – 넓이 구하기

ST_Buffer – 좀 넓게 잡기

초기데이터 설정

 

 

PostgreSQL 9.5 초기설정

기본설정은 버전올라가도 크게 변하지 않는다.

 

파일 설정

postgresql.conf

https://www.postgresql.org/docs/9.5/static/runtime-config-connection.html

pg_hba.conf

https://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

터미널 접속

psql -u postgres psql -U postgres -W

사용자 관리

 

GIS 분석 인프라 구성 – Ubuntu16.04, Postgresql9.5, PostGIS2.2

설치

설치는 별거 손댈게 없다.

서버에서 스크립트를 돌릴 일이 있을 수 있으니

설정

Postgresql

원격접속 가능하게 설정 – 필요한 경우

postgresql.conf

pg_hba.conf

개발테스트용이 아닌 서비스용이라면 초기 설정할 때만 오픈해놨다가 접근권한을 127.0.0.1이나 허용된 서버만으로 제한하도록 한다.

계정 설정

root 생성

Postgis

디비 생성후

postgis 설치가 완료되면

gis_db.public.spatial_ref_sys 테이블이 생성된다.

확인

select * from pg_catalog.pg_tables;

초기 데이터 준비

spatial_ref_sys에 표준 좌표계는 다 입력되어 있는편인데

공공기관에서 제공해주는 변태좌표계에 필요한 설정을 넣어준다.

id값이 충돌하지 않도록 주의.

 

GIS 너무 쉬운거 아니야?

아직 지옥문을 막 열었을 뿐.. 문이 닫히기 전에 돌아가라

 

RAW데이터를 수집해야한다.

 

공공기관의 데이터

정권이 바뀔때마다 지들 기분날 때 마다 데이터의 제공주체나 생산주체 담당자가 수시로 바뀌니 그때그때 확인을 해 봐야한다.

데이터 포맷 정보가 없는 경우도 많고 통일성도 없다.

따져도 소용없다. 그 사람들도 문제의식은 가지고 있는데.. 이게 장관급에서 프로젝트가 내려오지 않으면 어쩔 수 없는 부분이 있다. 여러 기관이 얽히고 얽혀서

데이터 제공 기관

행정표준코드 관리시스템 : https://www.code.go.kr/jsp/index.jsp

환경공간정보서비스 : https://egis.me.go.kr
생태자연도

국립생태원 : http://www.nie.re.kr/

국토환경정보센터 : http://www.neins.go.kr

국토지리원 : http://www.ngii.go.kr
수치지도, DEM(래스터)

국가공간정보포털 : http://www.nsdi.go.kr
연속지적도, 개별공시지가, 토지등급, 건물정보 …

주소, 행정동, 지적도, 건물정보, 등 넣어줘야하는데

국가교통정보센터 : http://www.its.go.kr/

교통정보공개서비스 : http://openapi.its.go.kr

기상청 : http://www.kma.go.kr

NASA 수치 데이터 : 한국 데이터는 없다고도 하고 잘 못 찾겠다.

인코딩 지옥탈출 가이드

깨지는 모양으로 인코딩 판별하기

이미지는 생각나면 추가

가오리 : EUC-KR을 UTF-8로 인식하고 열면

수식 : UTF-LATIN1 으로 인식하고 열면

외계어 :

쫩쫠뻴 : utf를 EUC로 인식하고 열면

참고

한글 인코딩의 역사

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0LMWJ&articleno=8181316

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0LMWJ&articleno=8181317

한글 인코딩 – 개념

https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B8%80_%EC%99%84%EC%84%B1%ED%98%95_%EC%9D%B8%EC%BD%94%EB%94%A9

https://namu.wiki/w/%ED%95%9C%EA%B8%80%20%EC%9D%B8%EC%BD%94%EB%94%A9

http://d2.naver.com/helloworld/19187

http://studyforus.tistory.com/167

http://mwultong.blogspot.com/2006/12/hwp-unicode-utf-8.html

https://ko.wikipedia.org/wiki/UTF-8

http://ssaemo.tistory.com/28

https://encoder.mattiasgeniar.be/index.php

https://docs.python.org/3/howto/unicode.html#encodings

코드

어디거 퍼온거 합쳐놓은거

 

Dokku 장단점 간략

개요

이름처럼 Docker기반으로 동작하는 소형 배포시스템이다.

미니 헤로쿠(Heroku)라고 하는데

Heroku를 써본적이 없으니 미닌지 빅인지 뭐 알수가 없다.

헤로쿠가 빌드배포가 그렇게 편리하다며?

도쿠는 그 컨셉을 따라서 만든 오픈소스

Github : https://github.com/dokku/dokku

Homepage : http://dokku.viewdocs.io/dokku/

간략사용법

설치

설치는 홈페이지에 써있는 스크립트를 그대로 실행시키면 된다

이렇게 하면 docker, nginx설치 + dokku계정이 생성된다.

이제 80포트와 docker는 따로 손대지 않는게 좋다.

Dokku를 쓴다면 아마 Cloud Instance를 쓸 것 같으니 별 문제없을 것 같은데…
서버에 설치해서 쓰는 경우에는 리눅스 서버관리에 익숙하지 않다면 dokku가 설치된 서버는 단독으로 사용하는게 좋다.

도메인 연결

두가지를 등록 해 줘야한다.

dokku.polypia.net : 도커 GIT-SSH 접속주소 겸 초기 홈페이지 설치주소

*.dokku.polypia.net : 도쿠 배포된 프로젝트 주소가 된다.

예를들어 webwww라는 앱을 다음 주소로 푸시를 한다면 dokku@dokku.polypia.net:webwww

webwww.dokku.polypia.net 이 주소가 된다.

GIT 사용자 추가

/home/dokku/.ssh 에 public key를 등록 해 줘야하는데

일반적인 키 등록하는 것과는 다르다.

(등록과 동시에 스크립트가 실행되는 방식)

이 부분이 좀 헷갈리는 부분인데… 홈페이지 구석에 숨어있어서 찾기가 좀 힘들다.

http://dokku.viewdocs.io/dokku/deployment/user-management/

public key를 올려놓고

배포

http://dokku.viewdocs.io/dokku/deployment/application-deployment/

앱생성

dokku apps:create webwww

환경변수 등록

프로파일 관리를 할 때는 서버별로 변수를 등록해주는게 좋다.

배포할 때 소스에 박아서 넣을수는 없잖아

http://dokku.viewdocs.io/dokku/configuration/environment-variables/

이렇게 하고나면 /home/dokku/webwww/ENV 파일에 환경변수가 추가된다.
export spring.profiles.active=prod
SPRING_PROFILES_ACTIVE=prod
일지도 모른다. 두개 다 등록해놔서.. .확인해보고 안되는걸 지워야되는데

GIT PUSH

아까 등록해놓은 git 주소로 push하면된다.

git push dokku master

정도가 될까…

위에서 create를 먼저 한 것은 환경변수(서버프로파일)을 등록하려고 먼저한건데 create를 꼭 먼저 해야하는건 아니다. 그냥 소스코드 업로드하면 리포지터리가 생성+앱추가+빌드가 자동으로 된다.

장단어이없는점

설치가 쉽고 쓰기도 쉽?다? 도큐먼트가 튜토리얼 형태로 작성된게 의외로 별로 없어서… 생각처럼 간단하지는 않다.

설계 사상이 직관적으로 이해가 가면 괜찮은데… 그렇지도 않아서 어떻게 써야할지 바로 떠오르질 안는게 문제

git listen방식이 아닌 직접 push방식만을 지원하는건가? 좀 복잡하게 하면 설정도 가능할 것 같은데…

인터페이스 화면이 없다. 일단 화면이 없으면 쓰기가 어렵다. 도큐먼트를 무조건 들여다 봐야하니까… dokku도 일단 개발외적인 부분으로 이런거 설정하는데 시간낭비를 하게된다면… 손해 아닌가

build 이미지와 deploy 이미지가 분리되면 좋을텐데… build 이미지가 그대로 사용되는 것 같다. 그래서 이미지 용량이 1기가…

Dockerfile을 사용하려면 또 이런저런 설정을 해줘야하는건가? 내가 셋팅해놓은 Dockerfile을이 제대로 안돌아가는 것 같다. 뭔가를 덮어씌우는건지

사용후기

 

여러가지 솔루션 오픈소스를 보면서 느낀건데 잘 만들어진 솔루션은 군더더기가 없었고 머리를 짜내서 고민을 해도 정말 최선?최적?의 방법으로 구현되었다는 생각이 든다.
이렇게 설계가 잘 된 솔루션을 사용하면 필요한 기능이 있을 때 그것을 찾기가 쉽다. 당연한 방법으로 설계가 되어 있으니까

1등급 SpringFramework, WordPress, Docker, docker-compose, vagrant, Angular, VirtualBox, Netty,

2등급 chef,

딱 생각은 안나는데 대강 이정도…

 

Docker가 익숙하다면 docker-compose와 스크립트를 이용한 배포가 더 낫지 않나 싶다.

그닥 좋은지 모르겠다.

아니면 그냥 Heroku를 쓰던가

 

Dokku에서 이런저런 기능이 많이 지원되는 것 같은데…

심플함은 놓치고 있는 것 같다.

애초에 복잡한 서비스를 하라고 만든 컨셉이 아니었을텐데

복잡한 인프라 구성을 할것같으면 docker-swarm이나 kubernetes를 쓰지 않을까