고갱

[사업 이야기] 관리자용 프로그램 개발 본문

사업 이야기

[사업 이야기] 관리자용 프로그램 개발

주인장 고갱 2025. 9. 15. 23:53

졸업 작품 하느라 정말 바쁜 나날이지만 그래도 사업은 틈틈히 신경쓰고 있다.

다른 학교로 확대하면 수익이 극대화될 것이라는 예측이 있긴 하지만 경험 삼아 하는 사업이기도 하고 당장 졸업이 코앞이라 그렇게 확장할 여력이 없다.

 

학교에는 축제같은 이벤트가 있는데, 여기에서 이 서비스를 토대로 부스를 운영해보면 좋을 것 같아서 동아리 임원진에게 관리자 권한을 넘겨주기로 하였다.

나에게는 홍보가 될 수 있으니 좋고, 동아리 임원에게는 무료로 돈을 벌 수 있는 수단이 생기니 윈윈인 샘이였다.

 

하지만 관리자 권한을 넘긴다 하더라도 데이터베이스 열람 권한을 넘겨주면 비록 암호화 되어있다 하더라도 모든 개인정보가 보이기 때문에 별도로 관리자 프로그램을 만들었다.

 

 

🤔 그래서 관리자 프로그램은 뭐야?

바로 위에서 언급했듯이 말 그대로 관리자가 사용하는 프로그램이다.

관리자는 모든 사용자의 닉네임과 성별, 학교 정보, 나이 등을 열람할 수 있다.

하지만 암호화된 휴대폰 번호, 계정 아이디, 비밀번호 등 민감한 정보는 열람할 수 없도록 하였다.

 

  개발자 관리자
닉네임 열람 가능 열람 가능
성별 열람 가능 열람 가능
나이 열람 가능 열람 가능
휴대폰 번호 암호화된 값 열람 가능 열람 불가능
학교 정보 열람 가능 열람 가능
지망 학교 정보 열람 가능 열람 가능
이메일 열람 가능 열람 불가능
가입 일시 열람 가능 열람 불가능
갱신 일시 열람 가능 열람 불가능 
탈퇴 일시 열람 가능 열람 불가능
계정 아이디 열람 가능 열람 불가능
계정 비밀번호 암호화된 값 열람 가능 열람 불가능

 

대충 차이점을 정리하면 위와 같다.

웬만해서는 관리자는 거의 다 보이지 않고, 개발자도 중요 정보 자체는 거의 다 알아볼 수 없게 되어있다.

 

사실 아주 민감한 정보 자체는 암호화되어 있기 때문에 공개해도 되지 않냐는 질문이 있었는데,

어쨌든 이게 공개되는 순간 보안이 뚫리는 건 시간 문제다.

 

관리자도 회원가입이 되어있기 때문에 비밀번호에다가 무작위 암호화 키를 대입하면서 암호화 키를 찾을 수도 있을 것이고,

다른 사람의 계정 비밀번호도 시간만 들이면 얼마든지 뚫을 수 있기 때문이다.

 

그래도 아무리 중요 정보가 보이지 않는다 하더라도 결국 관리자용 프로그램이기 때문에  관리자용 프로그램에도 jwt 인증 방법을 도입해 더욱 보안을 강화하도록 했다.

 

 

 

 

 

🤔 그래서 어떻게 생겼는데?

 

일단 위와 같이 로그인 창이 구성되어있다.

여기서 아이디와 비밀번호를 통해 로그인을 하게되면 Go언어 서버로 요청이 보내지고, 아래 로직을 통해 결과를 반환한다.

Go 언어 로그인 Handler 함수 내부 코드 일부 발췌

 

자세한 로직은 공개하지 않지만 로그인에 성공하면 위와 같이 로그인 결과를 반환하게 된다.

무작위 로그인 방지용 구조체

 

참고로 관리자 프로그램 뿐만 아니라 그냥 서비스 내부에서도 Brute Force를 통한 계정 탈취를 방지하기 위해 1분에 5회 이상 잘못된 로그인 시도가 있는 경우 5분 동안 해당 IP에 대한 모든 요청을 차단하는 로직을 구현해두었다.

 

우측 사진은 주기적으로 (10분마다) 해당 구조체를 돌면서 기록을 지워주는 로직이다.

Goroutine으로 해당 함수를 실행시켜 두었고, 로그인 시도랑 동시에 Cleanup 함수가 실행되면 동시에 구조체에 접근하여 경쟁 상태가 발생할 수 있으므로 Mutex를 사용하여 동시 접근을 차단해두었다.

 

 

이게 이제 로그인을 하고나면 보이는 관리자 프로그램 내부 화면이다.

처음 대쉬보드에서는 총 회원 수, 총 응모 수, 총 쿠폰 수가 한 눈에 보이도록 구현해두었다.

 

 

각각 회원 정보 탭, 쿠폰 관리 탭, 쪽지함 (응모함) 탭인데 관리자는 언제든 쿠폰을 발급할 수 있도록 해두었다.

 

참고로 모든 가입자 정보와 응모 내역 등은 아래와 같이 계정에 부여된 school 필드와 동일한 학교에 대해서만 뜨기 때문에 타 학교를 열람할 수는 없게 해두었다.

관리자 테이블 구조

 

 

 

👉 결론?

뭐 글을 쓰는 지금이야 축제가 끝나서 하는 말이지만, 축제에서 19만원을 땡겼다고 들었다...

확실히 수익성이 되는 만큼 전국 학교로 확대하고 싶은 욕심이 없잖아 있긴 하다.

그래도 바쁜 일이 많으니 참아야겠지..?

 

 

 

 

 

👍 참고 자료

JWT 인증 방식

 

JSON 웹 토큰 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. JSON 웹 토큰상태인터넷 표준최초 출판일2010년 12월 28일 (2010-12-28)마지막 버전RFC 75192015년 5월조직IETF약어JWT JSON 웹 토큰(JSON Web Token, JWT, "jot”[1])은 선택적 서명

ko.wikipedia.org