Golang 개발 환경(profile) 다르게 잡아주기
-
Upload
- -
Category
Technology
-
view
606 -
download
9
Transcript of Golang 개발 환경(profile) 다르게 잡아주기
---------- 1
GO언어로 해보는 개발 환경변수 잡아보기 (GO를 몰라도 됨)
https://fb.com/me.adunhansahttps://twitter.com/arahansahttp://adunhansa.tistory.com/
사이트 : http://arahansa.com
AB
OU
T
CO
NTA
CT
SOU
RC
E
1
1. 작성자 소개 2 -----------------------
-------------------------------------------- 평소 정리를 즐겨합니다. 한 때 동영상강좌도
만들다보니.. 비실명과 만화캐릭터를 쓰네요
양해 부탁드립니다 ㅎㅎ
왜 이런 걸 만드나? 3
1. 이게 맞는지 점검하려고
2. 지식공유가 좋고 좋은거죠 뭐… 내가 삽질한만큼 다른 사람의 시간을 줄여준다는…아름다운-_-* source code git : https://github.com/arahansa/go_profile
Production: Oracle Db
의도 = 환경변수를 다르게.. 4
• 배운게 도둑질이라고, 머리속의 기준점이 스프링프레임워크로 돌아가고 있습니다.
• 스프링 프레임워크에서는 Profile이라는 기능이 있습니다. 어플리케이션을 개발을 하면서 로컬개발서버, 테스트서버, 스테이징서버 별로 각종 환경변수를 다르게 주기 위한 기능입니다.
Staging: XX Server
Local: H2 memory DB
Bad -> Good 5
• 이렇게 데이터 접근영역에서 직접 주소를 적어주는 것은 별로 좋지가 않습니다.
• 스프링에서 했던 것처럼 다음과 같이 개별 환경변수들을 빼주고 작업을 해줘보도록 하겠습니다.
최종 구현할 방향 6
1. 기본 설정은 local설정이되, flag설정으로 profile설정을 다르게 설정을 줄 수 있어야 합니다.
2. yaml문법의 파일을 읽어보도록 하겠습니다. 가독성이 좋고 프로파일링 하기가 좋습니다.
1. flag - 먼저 샘플코드를 만들자! 7
• 구현할 방향이 정해졌으면, 하나하나씩 기능들을 최소한의 단위로 분할해서 테스트를 해보고, 이것을 모아보면 됩니다. 먼저 flag부터 해보겠습니다. 우선 flag를 찾아서 돌려보겠습니다. 다음과 같은 소스에서 -h옵션을 주면 사용법이 -p=dev로 flag지정을 하는 걸 볼 수가 있습니다.
02. yaml 불러와보기 8
• 두번째는 yaml을 읽어보는 연습을 해봅니다. 구글링을 하면 첫번째로 나오는 사이트에 들어가보았습니다. https://github.com/go-yaml/yaml 대략 이런 식으로 맵으로 변환됨을 알 수가 있습니다.
03. yaml 을 파일로 읽어보기 9
• 그러면 yaml을 파일로 읽어보는 연습을 해봅니다. 다음의 사이트를 참고해봅니다. http://stackoverflow.com/questions/28682439/golang-parse-yaml-file
• 대략 이런 식으로 동작을 하는 구나..느껴집니다.
04. unmarshal 추가해보기 연습 10
• 한가지 가정사항을 생각해봅시다. yaml에서 --- 이전의 설정들만 읽어들이니, 그 이후로는 각각의 프로파일링 변수를 집어넣을 것입니다. 그러면, 그 이후로 언마샬링을 한번 더 해야되는데, 덮어쓰기가 될 것인지 추가가 될 것인지 테스트를 해봐야 합니다. 다음의 경우를 해봅시다. 덮어쓰기가 아닌 추가로 잘 되는 것을 볼 수가 있군요…
요구사항 구현.. 11
• 이제 각각의 큰 기능들을 해보았으니, 조합을 해보면 됩니다. 요구사항을 조금 더 세밀하게 재정의해보겠습니다.
01. yaml파일을 읽어들여 문자열 파싱을 하고 환경변수들을 읽어들인 뒤에 ,
02. 프로파일을 구하고, ---로 구분된 환경변수들을 읽어들여서
03. 제공된 profile에 맞는 환경변수를 골라서 읽은 뒤
04. map을 내부에 가지고 있고, 외부에서 꺼내올 때 해당 키에 해당하는
값이 없으면 에러를 내서 초반에 프로그램이 가동되지 않게 해보자.
각각을 조합해서 기능구현.. 01. yaml파일 읽어들이기..
12
• 01. 첫번째 기능 구현… flag로 온 프로파일이 있으면 flag를 우선시하여서 설정을 줍니다. (결과)
02. 프로파일을 구하고, 13
• 프로파일을 찾아야 하므로, flag로 받던 기존에 설정된 프로파일이든 찾아서 설정을 하고..
03. 프로파일링 된 내용만 따로 추가 14
• 프로파일링된 내용만 따로 추가하겠습니다. 문자열을 다루는 부분이 조금 나옵니다만, go사이트의 패키지를 보고 찾아 쓰면 됩니다(;;;)
05. 외부로 적용 미리 준비.. 15
• 자 이제 이 map은 config패키지에 들어갈 것이고 repository영역에서 key값만으로 불러오게 될텐데 값이 없는 경우 에러가 나야 합니다. nil처리를 해줘서.. 초반에 설정이 잘못되면 프로그램 이륙(?)이 안되게 해줍시다.
나중엔…? 16
마지막 샘플코드까지 작성을 해봤으므로 이제 직접 main.go에 적용을 해볼 것입니다. config패키지를 나누고, 여기서 불러들일 것입니다. 대략 이런 구조가 되겠죠
applicationContext - PropertySource 17
• 프로퍼티소스는 아마 이런 식으로.. 짜내려갈 것같습니다..흠…다른 할일이 있어서 일단 이만..ㅠ
이미지 라이선스 18
• 키보드 치는 남자 : http://www.freepik.com/index.php?goto=74&idfoto=765894
• 데이터베이스 : http://www.flaticon.com/free-icon/database-configuration_1374
19
THANK YOU ! 즐거운 개발됩시다. 아라한사 올림
arahansa ------
------
페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/ 사이트 : http://arahansa.com