2023년을 맞아 우리 창업동아리 #IMPLUDE는 실제 창업을 진행하기로 하였다.
작년에 공개SW개발자대회에서 수상한 "잇는"을 실사업에 운용할 수 있게 개량하고
"코딩튜터"라는 서비스를 새로 선보이기로 했다.
또한 우리는 사업자 "빌드인"으로 시작하여 해를 거듭하며 다양한 서비스를 추가해 나가,
하나의 플랫폼으로 발전해 나가려고 한다.
를 사용하기로 하였다.
서비스 별로 유저에게 필요한 정보가 다 다르다.
프로젝트 "잇는"은 이메일, 사용자가 주거하는 행정구역, 생년월일, 직업, 전공 등등의 정보가 필요하다.
반면 프로젝트 "코딩튜터"는 이메일, 실명, 전화번호, 주소, 학교급 등이 필요하다.
이 많은 정보를 다 한 곳에 다 저장하면, 추후 Scale Out을 해 나감에 있어 불편한 요소로 작용할 것이다.
위와 같이 모든 서비스에서 공통적으로 필요한 정보들만 인증서버 DB에 보관하고
나머지는 각 서비스들의 DB에 저장하여 서비스 별로 Scale Out이 편한 아키텍쳐를 설계하였다
우리 프로젝트에서 "이메일"과 "생성일자"는 서비스를 이용하면서 자주 접근하는 정보가 아니다.
따라서
하는 방법을 선택하게 되었다
Login - POST /auth/login
Logout - GET /auth/logout
Register - POST /auth/register
Access Token Refresh - GET /auth/refrsh
Password Change - GET /auth/changepass
Email Verification - GET /auth/verify/{purpose}
Valid User Check - GET /info
Get User Email - GET /info/email
도커를 사용하여 배포하고, 서비스 별로 컨테이너가 추가 할 것이다.
인증 서버 - 서비스 서버 간의 통신은 Docker 네트워크를 만들어 로컬로 연결하고
인증 서버 - 사용자, 서비스 서버 - 사용자 간의 통신은 CloudFlare Argo Tunnel을 활용하여, 공인IP 없이도 손쉽게 배포할 수 있게 설계하였다.
아래는 docker-compose.yml 파일이다
version: "3.7"
services:
portainer-ce:
container_name: main-portainer
image: portainer/portainer-ce:latest
restart: always
expose:
- "8000"
- "9000"
- "9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer/data:/data
- /etc/localtime:/etc/localtime:ro
networks:
- main_net
tunnel:
container_name: main-cloudflared-tunnel
image: cloudflare/cloudflared:latest
restart: unless-stopped
command: tunnel run
env_file:
- .env
networks:
- main_net
networks:
main_net:
driver: bridge
비교적 최근에 개발된 Go언어는
이제 1.20.2 버전까지 출시되어 여러 개선을 거듭했다.
그러나 아직 국내에 Go언어로 개발하는 개발기가 많지 않다.
완벽하게 깔끔한 코드는 아니지만,
Go언어를 시작하는 개발자들이 앞으로 작성할 내 글을 보고 조금은 정보를 얻어 갈 수 있기를 바란다.