Golang 개발 환경(profile) 다르게 잡아주기

19
---------- 1 GO언어로 해보는 개발 환경변수 잡아보기 (GO를 몰라도 됨) https://fb.com/me.adunhansa https://twitter.com/arahansa http://adunhansa.tistory.com/ 사이트 : http://arahansa.com ABOUT CONTACT SOURCE 1

Transcript of Golang 개발 환경(profile) 다르게 잡아주기

Page 1: 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

Page 2: Golang 개발 환경(profile) 다르게 잡아주기

1. 작성자 소개 2 -----------------------

-------------------------------------------- 평소 정리를 즐겨합니다. 한 때 동영상강좌도

만들다보니.. 비실명과 만화캐릭터를 쓰네요

양해 부탁드립니다 ㅎㅎ

Page 3: Golang 개발 환경(profile) 다르게 잡아주기

왜 이런 걸 만드나? 3

1. 이게 맞는지 점검하려고

2. 지식공유가 좋고 좋은거죠 뭐… 내가 삽질한만큼 다른 사람의 시간을 줄여준다는…아름다운-_-* source code git : https://github.com/arahansa/go_profile

Page 4: Golang 개발 환경(profile) 다르게 잡아주기

Production: Oracle Db

의도 = 환경변수를 다르게.. 4

• 배운게 도둑질이라고, 머리속의 기준점이 스프링프레임워크로 돌아가고 있습니다.

• 스프링 프레임워크에서는 Profile이라는 기능이 있습니다. 어플리케이션을 개발을 하면서 로컬개발서버, 테스트서버, 스테이징서버 별로 각종 환경변수를 다르게 주기 위한 기능입니다.

Staging: XX Server

Local: H2 memory DB

Page 5: Golang 개발 환경(profile) 다르게 잡아주기

Bad -> Good 5

• 이렇게 데이터 접근영역에서 직접 주소를 적어주는 것은 별로 좋지가 않습니다.

• 스프링에서 했던 것처럼 다음과 같이 개별 환경변수들을 빼주고 작업을 해줘보도록 하겠습니다.

Page 6: Golang 개발 환경(profile) 다르게 잡아주기

최종 구현할 방향 6

1. 기본 설정은 local설정이되, flag설정으로 profile설정을 다르게 설정을 줄 수 있어야 합니다.

2. yaml문법의 파일을 읽어보도록 하겠습니다. 가독성이 좋고 프로파일링 하기가 좋습니다.

Page 7: Golang 개발 환경(profile) 다르게 잡아주기

1. flag - 먼저 샘플코드를 만들자! 7

• 구현할 방향이 정해졌으면, 하나하나씩 기능들을 최소한의 단위로 분할해서 테스트를 해보고, 이것을 모아보면 됩니다. 먼저 flag부터 해보겠습니다. 우선 flag를 찾아서 돌려보겠습니다. 다음과 같은 소스에서 -h옵션을 주면 사용법이 -p=dev로 flag지정을 하는 걸 볼 수가 있습니다.

Page 8: Golang 개발 환경(profile) 다르게 잡아주기

02. yaml 불러와보기 8

• 두번째는 yaml을 읽어보는 연습을 해봅니다. 구글링을 하면 첫번째로 나오는 사이트에 들어가보았습니다. https://github.com/go-yaml/yaml 대략 이런 식으로 맵으로 변환됨을 알 수가 있습니다.

Page 10: Golang 개발 환경(profile) 다르게 잡아주기

04. unmarshal 추가해보기 연습 10

• 한가지 가정사항을 생각해봅시다. yaml에서 --- 이전의 설정들만 읽어들이니, 그 이후로는 각각의 프로파일링 변수를 집어넣을 것입니다. 그러면, 그 이후로 언마샬링을 한번 더 해야되는데, 덮어쓰기가 될 것인지 추가가 될 것인지 테스트를 해봐야 합니다. 다음의 경우를 해봅시다. 덮어쓰기가 아닌 추가로 잘 되는 것을 볼 수가 있군요…

Page 11: Golang 개발 환경(profile) 다르게 잡아주기

요구사항 구현.. 11

• 이제 각각의 큰 기능들을 해보았으니, 조합을 해보면 됩니다. 요구사항을 조금 더 세밀하게 재정의해보겠습니다.

01. yaml파일을 읽어들여 문자열 파싱을 하고 환경변수들을 읽어들인 뒤에 ,

02. 프로파일을 구하고, ---로 구분된 환경변수들을 읽어들여서

03. 제공된 profile에 맞는 환경변수를 골라서 읽은 뒤

04. map을 내부에 가지고 있고, 외부에서 꺼내올 때 해당 키에 해당하는

값이 없으면 에러를 내서 초반에 프로그램이 가동되지 않게 해보자.

Page 12: Golang 개발 환경(profile) 다르게 잡아주기

각각을 조합해서 기능구현.. 01. yaml파일 읽어들이기..

12

• 01. 첫번째 기능 구현… flag로 온 프로파일이 있으면 flag를 우선시하여서 설정을 줍니다. (결과)

Page 13: Golang 개발 환경(profile) 다르게 잡아주기

02. 프로파일을 구하고, 13

• 프로파일을 찾아야 하므로, flag로 받던 기존에 설정된 프로파일이든 찾아서 설정을 하고..

Page 14: Golang 개발 환경(profile) 다르게 잡아주기

03. 프로파일링 된 내용만 따로 추가 14

• 프로파일링된 내용만 따로 추가하겠습니다. 문자열을 다루는 부분이 조금 나옵니다만, go사이트의 패키지를 보고 찾아 쓰면 됩니다(;;;)

Page 15: Golang 개발 환경(profile) 다르게 잡아주기

05. 외부로 적용 미리 준비.. 15

• 자 이제 이 map은 config패키지에 들어갈 것이고 repository영역에서 key값만으로 불러오게 될텐데 값이 없는 경우 에러가 나야 합니다. nil처리를 해줘서.. 초반에 설정이 잘못되면 프로그램 이륙(?)이 안되게 해줍시다.

Page 16: Golang 개발 환경(profile) 다르게 잡아주기

나중엔…? 16

마지막 샘플코드까지 작성을 해봤으므로 이제 직접 main.go에 적용을 해볼 것입니다. config패키지를 나누고, 여기서 불러들일 것입니다. 대략 이런 구조가 되겠죠

Page 17: Golang 개발 환경(profile) 다르게 잡아주기

applicationContext - PropertySource 17

• 프로퍼티소스는 아마 이런 식으로.. 짜내려갈 것같습니다..흠…다른 할일이 있어서 일단 이만..ㅠ

Page 19: Golang 개발 환경(profile) 다르게 잡아주기

19

THANK YOU ! 즐거운 개발됩시다. 아라한사 올림

arahansa ------

------

페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/ 사이트 : http://arahansa.com