[가계부 앱 개발 2] API 배포하기
0. 지난 이야기
지난포스팅에서 맥에 DB를 성공적으로 구축한듯 하였으나...실제로 외부에서 접속 해보니 접속이 되었다가 말았다가 했다. 하드디스크 연결이 끊겼거나 무선연결이라서 불안정한줄 알았는데 아니었다. 그냥 잠금 화면이 안나타나고 계속 켜져있도록 설정을 바꾸었더니 해결되었다. 디스플레이 수명이 단축되는걸 조금이라도 방지하려고 밝기를 최하로 낮춘채로 사용하고 있다.
1. erd 만들기
카테고리를 별도의 테이블로 만들어서 관리하면 좋긴하지만 개인용으로 쓸거기 때문에 간단하게 열거형으로 관리하기로 했다. 정말 바보같은 생각이었다. 카테고리가 복잡하다면 그냥 따로 테이블로 만드는게 더 간단하다.
카테고리는 클로드에게 물어보며 만들었다. AI가 도메인 구분, 이름 짓기는 참 잘하는 것 같다.
Uncategorized, //미분류. 특정 카테고리에 넣기 애매하거나, 자주 발생하지 않는 다양한 종류의 지출
// 고정비
Housing, // 월세
PhoneAndInternet, // 통신요금
// 생활비
Transit, // 교통비 (버스, 지하철, 택시)
Groceries, // 식료품 (외식 x)
DailyNecessities, // 생필품 (세제, 치약, 화장지 등 꼭 필요한 소모품)
Laundry, // 빨래방
// 식비
DiningOut, // 외식
Cafe, // 카페
// 건강, 여가
Sports, // 운동 관련 비용
SelfCare, // 자기 관리
Healthcare // 병원비
2. api 구현하기
나는 c#을 주로 사용하기 때문에, api는 asp.net core로 개발할 것이다.
mssql db가 아니고 mariadb이기 때문에 dapper를 사용하기로 했다.
1) 데이터베이스 연결하기
(1) nuget 패키지 설치
MySql.Data
Dapper
(2) 연결 문자열 추가
# appsettings.json
...
"ConnectionStrings": {
"default": "Server=서버외부주소;Port=3306; Database=데이터베이스명; User Id=사용자명;Password=비밀번호;"
},
...
(3) Dapper에서 snakecase와 camel case 호환시키기
MySQL에서는 snakecase를 권장하는데, C#에서는 camelcase를 사용한다. Dapper 설정을 바꿔서 snakecase를 camel case로 인식하게 만들 수 있다.
// program.cs 파일 var 최상단
// var builder = WebApplication.CreateBuilder(args); 바로 뒤
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
(4) 서비스에서 접근 시
private readonly string? _connectionString;
private readonly IConfiguration _config;
public HistoryServices(IConfiguration config)
{
_config = config;
_connectionString = _config.GetConnectionString("default");
}
2) 서비스 구현하기
닷넷 9.0이 새로 나와서 기존에 쓰던 프로젝트에서 복붙 안하고 이 동영상을 참고해서 만들었다.
https://youtu.be/w-cicwms-es?feature=shared
3. 배포하기
윈도우에서 빌드한 파일을 맥에 옮겨서 실행하니 계속 프로세스가 죽었다. 보안설정을 바꿔봐도 해결이 안되어서 그냥 맥에서 빌드해서 실행했다.
1) dotnet sdk, asp.net core 런타임 설치하기
brew install dotent-sdk-9.0
brew install aspnetcore
2) 배포파일 생성하기
(1) .csproj 파일에 배포옵션 추가하기(안해도됨)
<PropertyGroup>
...
<SelfContained>true</SelfContained> //dotnet 설치 안해도 돌릴 수 있게하기
<PublishSingleFile>true</PublishSingleFile> //배포파일을 1개만 생성
...
</PropertyGroup>
(2) 배포 파일 생성 및 권한 부여
dotnet publish -c Release # 배포파일 생성
sudo chmod +x 생성된_배포파일_이름 # 맥에서 빌드한거면 안해도 됨
3) 실행하기
nohup ./생성된_배포파일_이름 --urls http://0.0.0.0:포트번호 &
맥에서 nohup은 기본적으로 설치되어있기 때문에 따로 설치할 필요 없다.
4) 포트포워딩하기
이전포스팅에서처럼 api 포트를 열어줘야한다.열고나서 최초 접속할 때 맥에서 "0000 포트에 대해 외부 접속을 허용하시겠습니까?" 팝업이 떴을 때 확인을 눌러줘야 한다. 최초 설정 시에 집에 있는 맥에서 자꾸 권한 허용을 해줘야 해서 크롬 원격 데스크톱으로 접속하고 있다. 커맨드라인보다 훨씬 간편하다.
가계부 앱 만들기 로드맵
1. db 구축하기
2. api 개발 1) CRUD 기능 구현
2) 카테고리 관리 기능 구현
3) 통계 기능구현(월별/연별 합계)
4) 엑셀 내보내기 기능 구현
5) 고정지출 자동 등록 기능 구현
6) 투자 모아보기 기능 구현 (키움증권 api 연동)
7) 예/적금 관리 기능 구현 (만기일, 이자율 등)
3. 웹개발
1) 화면 UI 기획
2) CRUD 기능 구현 (리스트뷰)
3) 달력 뷰 전환 기능 구현
4) 통계 페이지 구현
5) 엑셀 내보내기 버튼 구현
6) 고정지출 자동 등록 기능 구현
7) 투자 모아보기 페이지 구현
8) 예/적금 관리 페이지 기능 구현
4. 웹을 안드로이드 앱에서 웹뷰로 보기
1) 안드로이드 웹뷰 앱 구현
2) 푸시알림 읽어서 자동으로 기록하는 기능 구현