목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

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