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