[본캠프]데이터 처리 흐름에 대한 이해

윤영범·2026년 4월 21일

인증과 인가: 단순 로그인 이상의 개념

이번 과제에서 세션 기반 인증을 사용하면서 느낀 점은
인증은 단순히 로그인 여부를 확인하는 것이 아니라
이 사용자가 누구인지 신뢰할 수 있게 증명하는 과정이라는 점이었다

@SessionAttribute(name = "loginUser") SessionUser sessionUser

이 코드는 단순히 값을 꺼내는 것이 아니라
넌 이미 인증된 사용자야 라는 의미를 가진다

다시보는 인증과 인과

  • 인증 -> 로그인 여부
  • 인가 -> 이 기능을 수행할 권한이 있는가

과제를 하면서 이 말의 대한 정확히 의미를 느낄수있었는데
세션으로 로그인하며 인증상태라고 모든 일정이나,댓글은 건드는것이아닌
반드시 내 데이터인지 검증해야 한다라는걸 직접 느낄수있었다

findByIdAndUserId(scheduleId, userId)

조회 단계에서 확인하며 권한 검증까지 포함

DB 조회에 권한을 포함시키면 코드가 단순해지는걸 과제를 하면서 체감했다

데이터 무결성과 FK 제약조건

일정 삭제 시 발생한 에러:

Cannot delete or update a parent row: a foreign key constraint fails
  • 원인
    댓글이 남아있는상태에서 일정을 삭제하려고하니, 삭제할수없는 에러가 떠있었다
    그러면서 에러가 대한 사항을 확인하기위해서 검색을 해본결과, DB는 무결성을 자동으로 보장한다라는걸 알게되었고 부모 삭제 전에 자식 데이터를 반드시 처리해야 하는걸 깨달으며 JPA 의 DB구조를 다시한번 알게되었다

  • 해결

commentRepository.deleteAllByScheduleId(scheduleId);
scheduleRepository.delete(schedule);

일정삭제를 처리하는 서비스로직에 댓글을 먼저 삭제할수있도록 추가해주었다

페이징과 Pageable의 동작 원리

개념

  • Pageable = 페이징 설정 객체
  • Page = 결과 객체

진행흐름
1) 클라이언트 요청

GET /schedules?page=0&size=10

2) 컨트롤러에서 파라미터로 받기

@RequestParam int page
@RequestParam int size

3) 서비스에서 변환

Pageable pageable = PageRequest.of(page, size);

sort를 사용해 정렬처리가능
4) Repository DB 쿼리

LIMIT 10 OFFSET 0

stream 기능을 사용못하는 에러를 처리하면서, Page는 단순 리스트가 아니라 메타데이터 포함이라는걸 알게되었다 응답 DTO 변환 시 map() 사용해야 하며 repository에서 쿼리문을 두번실행하는것도 직접 에러를 통해 알게되었다

전체 회고

  • 인증과 인가는 분리해야 한다
  • DB 무결성(FK)은 반드시 고려해야 한다
  • Pageable은 DB 쿼리 최적화를 위한 도구다
    이번 과제 구현을 통해 단순 CRUD를 넘어서
    다른 개념들을 실제로 연결해서 이해할 수 있었다
    이론으로 얻을수없는것들을 과제실습으로 통해서 하나씩 더 알아가며 성장하는과정이
    힘들면서도 재밌게 느껴지는거같다

0개의 댓글