⏳ Time Log/1. One Day (Daily · TIL)

Day 43 (12/17) - Spring RESTful 심화 및 Java Stream 활용

this.Serena 2026. 2. 23. 02:39

📅 2025-12-17 개발 일지: Spring RESTful 심화 및 Java Stream 활용

핵심 요약: 비동기 댓글 처리를 위한 서비스/컨트롤러 설계 및 Java Stream API를 활용한 효율적인 데이터 처리 로직 학습

 


🍃 Spring Framework: 댓글 서비스 및 RESTful 설계

1. ReplyService 개발 및 트랜잭션 관리

  • 서비스 계층 역할: Ajax 처리를 담당하는 컨트롤러의 요청에 맞춰 비즈니스 로직 수행
  • 핵심 설정:
    • 트랜잭션 처리: @Transactional 어노테이션을 통한 데이터 무결성 보장
    • 의존성 주입: @RequiredArgsConstructor를 활용하여 ReplyMapper 자동 주입
  • 주요 어노테이션: @Service, @Transactional, @Log4j2

2. 예외 설계 및 응답 구조 (ReplyException)

  • 커스텀 예외: RuntimeException을 상속받아 상세한 에러 메시지 전달 구조 설계
  • 효과: 컨트롤러 계층에서 문제 발생 시 클라이언트에게 정확한 원인 파악이 가능한 정보 제공

3. @RestController와 비동기 통신

  • 개념: Ajax 호출 시 HTML 페이지가 아닌 JSON/XML 형식의 순수 데이터만 전송하는 방식
  • ReplyController 구현:
    • ResponseEntity: HTTP 응답 상태 코드와 데이터를 함께 담아 세밀한 제어 가능
    • 구조: @RestController, @RequestMapping을 통한 경로 매핑 및 비동기 처리

☕ Java 프로그래밍 로직 및 Stream API

1. 연산 및 수학 함수

  • 나눗셈 차이:
    • 실수 나눗셈: page / 10.0 (소수점 결과 보존)
    • 정수 나눗셈: page / 10 (소수점 이하 절삭)
  • Math.ceil(): 소수점이 존재할 경우 무조건 위 정수로 올림 처리

2. Java Stream API: 데이터 파이프라인 활용

  • 개념: 리스트나 배열 같은 데이터 묶음을 for문 대신 흐름(Flow) 형태로 처리하는 도구
  • 주요 메서드 및 프로세스:
    • IntStream.rangeClosed(start, end): 시작값부터 종료값까지 양 끝을 포함한 연속 정수 스트림 생성
    • .boxed(): 기본형(int)을 객체형(Integer)으로 변환 (컬렉션 저장을 위한 필수 단계)
    • .toList(): 스트림을 통해 가공된 데이터들을 최종적인 불변 리스트 형태로 변환 및 저장

🗂️ 핵심 개념 및 보완 설명

  • Wrapper Class: List와 같은 컬렉션은 기본 데이터 타입(int, long 등)을 직접 담을 수 없으므로 반드시 객체화(Integer, Long) 과정 필요
  • RESTful 서비스: 자원(Resource)을 이름으로 구분하여 해당 자원의 상태를 주고받는 현대적 웹 설계 원칙
  • 비동기 처리 장점: 화면 전체를 새로고침하지 않고 필요한 데이터만 업데이트하여 사용자 경험(UX) 극대화