basic03
๊ฐ๊ด
MySQL๊ณผ Redis๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ ์์ฑ๊ณผ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ: MySQL(Sqlkata), Redis(CloudStructures)
MySql ์คํค๋ง
Porgram.cs
๋น๋ ์์ฑ
var builder = WebApplication.CreateBuilder(args);
๋ฏธ๋ค์จ์ด-์ปจํธ๋กค๋ฌ ์ถ๊ฐ
builder.Services.AddControllers();
app ์์ฑ
var app = builder.Build();
์๋น์ค ์ถ๊ฐ-Routing
app.UseRouting();
์๋น์ค ์ถ๊ฐ-Endpoints ์ฌ์ฉ(MapControllers)
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
DBManager ์ด๊ธฐํ
config ํ์ผ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
IConfiguration configuration = app.Configuration; DBManager.Init(configuration);
app ์คํ
app.Run(configuration["ServerAddress"]);
app.Run()์ ๋งค๊ฐ๋ณ์๋ก hostIp:port ๋ฃ์ผ๋ฉด ๊ทธ๊ฑฐ๋ก listenํ๊ฒ ๋จ
LoginController.cs
Request POST /login ์ ๋ํ ์ฒ๋ฆฌ
์๋ตํ ์ธ์คํด์ค ์์ฑ (์ดํ ๋ก์ง์์ ์ํฉ์ ๋ง๊ฒ ๊ฐ ์ค์ )
var response = new PkLoginResponse(); response.Result = ErrorCode.None;
SqlKata.QueryFactory์ ์๋ช ์ฃผ๊ธฐ ๋ธ๋ก์ ๋ง๋ค์ด์ค
using (var db = await DBManager.GetGameDBQuery()) { ... 3๋ฒ ๊ณผ์ ... }
2๋ฒ์ using๋ธ๋ก ์์์ QueryFactory๋ฅผ ํตํด user info ๊ฐ์ ธ์์ ์ ํจ์ฑ ํ์ธํ๊ธฐ (Authentication(์ธ์ฆ))
์ ํจํ ์ฌ์ฉ์๋ผ๊ณ ํ๋จ ๋์ผ๋ฉด, ํ ํฐ ๋ฐ๊ธํ๊ธฐ
์ฌ์ฉ์์๊ฒ ์ค ํ ํฐ ์ ๋ณด redis์ ๋ฃ๊ธฐ
์ดํ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ ์์ฒญ์ ์ด ํ ํฐ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ผ ๊ฒ์ด๋ฉฐ, ์๋ฒ๋ ์ด ํ ํด์ Redis์ ์๋์ง ํ์ธํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ์ ํ์ธ ํ ์ ์์
์ฌ์ฉ์์๊ฒ ํ ํฐ ๋ณด๋ด์ฃผ๊ธฐ
CreateAccount.cs
Request POST /CreateAccount ์ ๋ํ ์ฒ๋ฆฌ
์๋ตํ ์ธ์คํด์ค ์์ฑ (์ดํ ๋ก์ง์์ ์ํฉ์ ๋ง๊ฒ ๊ฐ ์ค์ )
๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ hash ๊ฐ ๋ง๋ค๊ธฐ
SqlKata.QueryFactory์ ์๋ช ์ฃผ๊ธฐ ๋ธ๋ก์ ๋ง๋ค์ด์ค
db์ ์๋ก์ด ๊ณ์ ์ ๋ณด ๋ฑ๋ก(insert)
์ try-catch๋ก? db์ฐ๊ฒฐ ์คํจ or QueryFactory ๊ธฐ๋ฅ ์คํจ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๊ฑด๊ฐ?
์๋ต ๋ฐํ
Security.cs
๋ณด์, ์ํธํ ๊ด๋ จ๋ ์์ ์ ์ํ ๋ฉ์๋ ๊ตฌํ
private const String AllowableCharacters = "abcdefghijklmnopqrstuvwxyz0123456789";
ํจ์ค์๋ ํด์ฑ ์ ์ฉ
ํด์ฑ์ ์ํ ์ํธ ํค ์์ฑ
์ธ์ฆ ํ ํฐ ์์ฑ
DBManager.cs
์ฐ๊ฒฐํ DB server ๋ค์ ๋ํ ip/port ์ ๋ณด ๋ฑ์ ๊ฐ๊ณ ์์
QueryFactory๋ฅผ ๋ฐํํ๋ ํจ์ ์ ๊ณต
๋น๋๋ ๋ผ๋๋ฐ, API์ ์ ๋๋ก ์๋ต ๋ชปํจ
์์ ์ฝ๋์ผ ๋ฟ, ์์ง DB server๋ ์ฐ๊ฒฐ๋์ด ์์ง ์์
Last updated