반응형
3주차 시작!!
3~4주차 일정은 좀 빡셀지도 모르겠다..
API 구현 하나하나 다 하고 기초 보안까지 넣으려면..
흑흑,, 백엔드 그만 보고 싶어염
일단 오늘부터 2주간 남은 일
- 페이지별 필요한 API 엔드포인트 구현
- 기초 보안 (JWT, 입력값 검증, 환경 변수 관리)
- 파일 업로드 기능 (오래 걸리면 5~6주차에 이어서 해도 됨)
하.. 오늘 테이블 조인해오겠다고 처음 보는 기능 쓰다가 3시간 내내 엔드포인트 하나 짰다.
DB 명명규칙을 카멜 케이스에서 파스칼 케이스로 싹 바꾸느라 마이그레이션도 다시 해줘야 하는데 이건 내일 하는 걸로;;
우우,.. 내일은 바빠서 작업 가능할지 모르겠지만 어쨌든 3주차 화이팅 !!!!
🚀 요약
작업 시간: 4시간
✅ DB 명명규칙 파스칼 케이스로 바꾸기
✅ 테이블 조인하는 Service 코드 짜기
🚀 Include()와 Select() 사용해서 여러 테이블 한 번에 조회하기
Event 리스트 가져올 때 User랑 Category 데이터도 항상 같이 필요해서 방법을 찾아보았다.
일단 model과 dto에서 명명규칙을 Pascal Case로 잘 구축해놓으면, 외래키 명시 없이도 Include()에서 자동으로 Id를 사용해 JOIN 해준다는 사실을 알아두자. 예를 들어 UserId는 User 모델의 Id와 자동으로 매칭해준다.
public User User { get; set; } = new User();
public Category Category { get; set; } = new Category();
Event model에 함께 가져올 모델 추가
public async Task<IEnumerable<EventDto>> GetAllEventsAsync()
{
var eventList = await _context.Events
.Include(e => e.User) // ✅ EF Core에서 SQL JOIN 실행
.Include(e => e.Category)
.Select(e => new EventDto
{
Title = e.Title,
Description = e.Description,
Date = e.Date,
CreatedAt = e.CreatedAt,
User = new UserDto
{
Id = e.User.Id,
Username = e.User.Username,
ProfileImageUrl = e.User.ProfileImageUrl
},
Category = new CategoryDto
{
Id = e.Category.Id,
Name = e.Category.Name
}
})
.ToListAsync();
return eventList;
}
Select()에서 필요한 컬럼만 DTO에 담아 리스트로 변환
반응형