와~ 이제 날짜가 두 자리 수!!!
뿌듯합니다잉
오늘은 카페 나가서 4시간? 동안 안 쉬고 작업했다.
DB 그냥 만들어놓고 쓸 생각이었는데 지피티랑 얘기하다가 마이그레이션 방식 시도해보고 싶어져서 어제 생성한 테이블 다 날림!!!!
4시간 작업 중 절반은 dotnet 빌드 오류 잡다가 끝났음 ㄱ-
결국 문제는 appsettings.json이랑 .csproj 파일에 뭔가 빠진 내용이 있어서 그랬던 듯?
그냥 다 날리고 프로젝트 생성부터 다시 하니까 됐다 하
읽어주는 친구들에게 미안하지만 앞으로도 며칠간은 더 나만 아는 소리 떠들 예정 ^ ^
백엔드 작업부터 하기로 해서 어쩔 수 없음.. 예쁜 화면 같은 거 안 나옴..
🚀 요약
작업 시간: 5시간? 5시간반?
✅ ASP.NET Core 프로젝트 생성
✅ PostgreSQL 마이그레이션 코드 작성
✅ API 엔드포인트 구현 및 테스트
🚀 폴더 구조
mkdir src
mkdir src/Models
mkdir src/Data
mkdir src/Controllers
🚀 ASP.NET Core 프로젝트 생성하고 필요한 패키지 설치
.NET 프로젝트 생성
mkdir backend_v2_01
cd backend_v2_01
dotnet new webapi
PostgreSQL 사용하기 위해 필요한 패키지 설치
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package Npgsql
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json
🚀 DB 연결하고 마이그레이션 적용
appsettings.json에 다음 내용 추가
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Port=5432;Database=mydb;Username=myuser;Password=mypassword"
}
}
src/Data/AppDbContext.cs 파일 생성
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<EntityName> TableName { get; set; }
}
Program.cs에서 DbContext를 DI(Dependency Injection)에 등록
UseNpgsql(connectionString): PostgreSQL 사용 설정
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseNpgsql(connectionString));
초기 마이그레이션 생성, 마이그레이션을 적용하여 DB 테이블 생성
dotnet ef migrations add InitialCreate
dotnet ef database update
🚀 API 엔드포인트 테스트
src/Controllers/EventController.cs 컨트롤러 생성
[ApiController]
[Route("api/[controller]")]
public class EventController : ControllerBase
{
private readonly AppDbContext _context;
public EventController(AppDbContext context)
{
_context = context;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Event>>> GetEvents()
{
return await _context.Events.ToListAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Event>> GetEvent(int id)
{
var ev = await _context.Events.FindAsync(id);
if (ev == null) return NotFound();
return ev;
}
[HttpPost]
public async Task<ActionResult<Event>> CreateEvent(Event ev)
{
_context.Events.Add(ev);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetEvent), new { id = ev.Id }, ev);
}
[HttpPut("{id}")]
public async Task<IActionResult> UpdateEvent(int id, Event ev)
{
if (id != ev.Id) return BadRequest();
_context.Entry(ev).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteEvent(int id)
{
var ev = await _context.Events.FindAsync(id);
if (ev == null) return NotFound();
_context.Events.Remove(ev);
await _context.SaveChangesAsync();
return NoContent();
}
}
dotnet run으로 어플리케이션 실행 후,
http://localhost:5000/api/event 등의 엔드포인트로 접속해 테스트 가능
아직 아무 데이터도 없어서 일케 나오지만 어쨌든 에러는 안 남..
오늘도 작업 많이 했구 오늘 API 호출 테스트까지만 했으니까 내일은 필요한 엔드포인트 다 만들면 되겠다.
일단 내 생각보다는 진도가 빨리빨리 나가는 중!!
뒤에 배포 할 때 백퍼 엄청나게 헤맬테니 지금 그나마 아는 거 할 때 얼른 해놓는 게 좋을 거 같다.
'study > 100 days (100일 챌린지)' 카테고리의 다른 글
[웹개발 100일] Day 12 - 어떻게든 마이그레이션을 성공하려 노력해보기 (5) | 2025.02.25 |
---|---|
[웹개발 100일] Day 11 - 모델 파일 생성, 마이그레이션 실행해보기 (실패!) (5) | 2025.02.24 |
[웹개발 100일] Day 9 - DB 설계하고 ERD 그리기, C# - PostgreSQL 연결 (6) | 2025.02.22 |
[웹개발 100일] Day 8 - 화면 기획 (figma 활용) (8) | 2025.02.21 |
[웹개발 100일] Day 7 - 화면 기획 (figma 활용) (9) | 2025.02.20 |