3장.

앗...? DB가 없는 환경에서 동작하게 만들라고...!??!


처음 go를 쓰면서 커피 어드민 툴을 만들 때 제가 들었던 말이예요 .

지금 남는 서버가 있긴 한데, 그 서버에 있는 DB는 사용하면 안 되는게 서버를 사용할 수 있는 조건 이였어요.


그래서 FileIO를 통하여 프로그램을 작성하기로 결심했어요.


파일 io는 2가지 정도의 조건이 있을 것 같아요.

1. CSV(comma seperate version )

2. normal version.


자, 이 두 가지를 사용하기 앞서서,

앞으로 우리가 사용할 모델을 정의해 줄거예요.

앞에서 이야기 한 조건들을 생각해 보면,

"개발자 말고 다른 직군(디자이너, 기획자)도 같이 먹을 수 있게 해주세요"

"하루 이틀은 제가 빠질 수 있도록 조정하고 싶어요"

이 말을 바탕으로 생각해보면,


이름, 직군, 이메일, 참가여부

정도의 정보를 갖는 모델이 필요해요. (이메일은 결과를 메일로 받아야하기 때문이예요!)

이를 바탕으로 모델을 만들면 다음처럼 될 수 있을 것 같아요.

type Colleague struct {
Name string
Position string
Email string `gorm:"PRIMARY_KEY"`
Attend string
}


여기서 email에서 gorm을 사용했는데요, golang에서 많이 사용하는 orm이예요 . 

이거에 대해서도 하나의 포스팅으로 분리할게요!



csv파일을 컨트롤 하기 위해서는 encoding/csv 패키지의 기본 라이브러리를 사용 할거예요.

백문이 문여일견, 먼저 읽어들이는 코드를 보고 갈게요.

func getColleagueInfoFromCsv(filename string) []Colleague {
// 파일 오픈 !
file, _ := os.Open(filename)

// csv reader 생성
rdr := csv.NewReader(bufio.NewReader(file))

// csv 내용 모두 읽기
rows, _ := rdr.ReadAll()

colleagues := []Colleague{}

var temp Colleague

// 행,열 읽기
for i := range rows {
temp.Email = strings.TrimSpace(rows[i][0])
temp.Name = strings.TrimSpace(rows[i][1])
temp.Position = strings.TrimSpace(rows[i][2])
temp.Attend = strings.TrimSpace(rows[i][3])

colleagues = append(colleagues, temp) // 1
}
return colleagues
}

나 아직 여기에서 어떻게 최적화를 해야할지 모르겠어요

// 1에 있는 부분도 최적화가 가능할 것 같은데,

일단은 돌아가는 코드를 만들고, 리팩토링 하는 리뷰도 한번 만들게요.


---- 여기부터는 작성중인 문서입니다. ---- 

+ Recent posts