목차

    ⏳ 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) 극대화