Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

memo6759 님의 블로그

2025-12-03(Stream APi, 리액트 -> 스프링 -> DB(insert)) 본문

HDC 학습일지

2025-12-03(Stream APi, 리액트 -> 스프링 -> DB(insert))

heewon09 2025. 12. 5. 09:14

1. 스트림(Stream) 정리 )

 Stream이란?

  • Java 8에서 도입된 기능
  • “컬렉션의 대량 데이터를 간결하게 처리하기 위한 API”
  • JavaScript 배열의 filter, map, reduce 기능과 유사
  • 기존 반복문보다 훨씬 깔끔하고 안전한 형태로 데이터를 가공할 수 있음

 Stream 처리 3단계

① 스트림 생성

자료구조 → stream() 변환

 
List<Integer> list = List.of(1,2,3); Stream<Integer> s = list.stream();

② 중간 연산

  • 스트림을 또 다른 스트림으로 변환
  • 필터링, 변형, 정렬
  • 반드시 마지막에 종료연산이 있어야 동작함

중간연산 예시:

 
.filter(x -> x > 10) .map(x -> x * 2) .sorted()

③ 종료 연산(최종연산)

  • 스트림을 소비해서 결과를 반환하는 단계
  • 끝나면 스트림은 재사용 불가 (일회성)

종료 연산 예시:

 
.collect(Collectors.toList()) .forEach(System.out::println) .sum() .count()

2. 스트림 연산의 구성

 1) 중간 연산

  • 결과가 “스트림”
  • 메소드 체이닝 가능
  • 끝나기 전까지 실제 계산을 하지 않는 지연 연산(lazy evaluation)

대표 중간 연산:

  • filter()
  • map()
  • distinct()
  • sorted()

 2) 종료(최종) 연산

  • 스트림을 “소모”하고 결과를 만듬
  • 스트림 → 자료구조(List, Set 등)로 변환하거나
  • 합계/평균 등 계산 수행

대표 종료 연산:

  • collect()
  • forEach()
  • reduce()
  • count()

스트림 자체를 return 하지 않는다
→ 스트림은 일회용이라 반환하면 프레임워크 성능↓, 코드 유지보수↓
반드시 List/Map/Set 등으로 바꿔서 반환

 


3. 메소드 참조

람다식을 더 간결하게 쓰는 문법.

 ① static 메소드 참조

 
클래스명 :: 메소드명 Math :: max

 ② 특정 객체의 인스턴스 메소드

 
object :: method System.out :: println

 ③ 생성자 참조

 
클래스명 :: new Student :: new

메소드 참조는 코드 줄 수가 줄고 가독성이 매우 좋아짐.

스트림 (java 8에 도입)
     - 컬렉션의 많은 데이터들을 처리하기 위한 기능을 제공하는 공통의 인터페이스
     - 많은 데이터를 간결하게 관리할 수 있도록 APi를 제공
     - 다양한 자료구조가 동일한  방식으로 연산될 수 있도록 제공
     - 자바스크립트의 배열 고차 함수와 비슷한 개념
    1. 스트림을 사용하는 방법
      1) 스트림 생성
        - 자료구조에 담긴 데이터를 스트림으로 변환

      2) 데이터 처리
        - 원하는 데이터를 필터하거나 새로운 자료구조를 만들기 위해 가공하는 작업을 정의


      3) 결과로 자료구조 생성
        - 처리된 데이터로 결과를 만들기
        - List, Set, Map등으로 변환되거나 합계나 평균을 구하거나 반복해서 출력되는 작업만 처리

2. 스트림연산
    - 스트림은 중간연산과 종료연산으로 구성된다.
    1) 중간연산은
        - 결과가 또 다른 스트림을 반환한다
        - 연속적으로 연산이 가능
        - 메소드 체이닝이 가능
            자료구조객체.stream() ------------ 자료구조객체를 스트림으로 변환
                      .filter() ------------ 메소드의 실행결과가 스트림을 반환하면 이 결과를 이용해서 다른 메소드를 호출해서 작용 가능
                      .map()  -------------- stream을 리턴하는 여러 메소드를 체이닝 해서 연산을 연속적으로 처리 할 수 있다.

        - 중간 연산은 결과가 스트림으로 만들어지기 때문에 이걸로 마무리를 할 수 없고 항상 마무리는 스트림을 소비해야 한다.
    2) 종료 연산(최종연산)
        - 스트림에 저장된 모든 데이터에 대한 처리를 종료하고 결과를 반환
        - 처리를 종료한다는 것은 하나씩 꺼내서 스트림에 저장된 데이터를 사용하는 것은 혹은 결과로 스트림이 아니라 list, Set, Map과 같은 종류의
        자료구조를 반환
        - 스트림을 처리한 후 결과를 다른 곳으로 리턴하려면 무조건 컬렉션으로 만들어서 사용한다.
        - 스트림 자체를 리턴하지 않는다. (성능저하의 원인)

3. 메소드 참조
    - 람다 표현식을 간결하게 표현하기 위한 문법
    - static 메소드의 참조
        형식
        클래스명 :: static 메소드명

    - 인스턴스메소드의 참조(특정객체의 메소드)
      인스턴스명 :: 메소드명

    - 생성자 참조
        클래스명 :: new


4. 후반부: (Open API ~ Entity ~ React ~ MVC 흐름)


5. Open API, OpenCV, AI API 사용 가능성

  • React + Spring 프로젝트는 외부 API 연결 매우 쉬움
  • 지도 API(네이버, 카카오)
  • 공공데이터 API
  • OpenAI API
  • OpenCV + Python + MQTT 연계 (라즈베리파이에서 처리)

결국 “웹+AI+IoT” 형태로 확장 가능
→ 스마트 주차장, 스마트 팜 기능 더 넣을 수 있음


6. 웹소켓 · MQTT 활용성

  • MQTT → IoT 센서, 라즈베리파이와 연결
  • WebSocket → 웹 채팅, 실시간 알림, 실시간 센서 대시보드

둘 다 실시간 기능 제공 방식
React + Spring Boot 에서 손쉽게 사용할 수 있음


7. 람다식이 필요한 이유

익명 내부 클래스에서 override하는 함수가 하나일 때
→ 코드가 너무 길기 때문에 람다식으로 대체 가능

예시:

 
list.forEach(item -> System.out.println(item));

8. 엔티티(Entity)란

  • DB 테이블과 매핑되는 클래스
  • persist() = JPA가 관리하는 상태로 변화 (INSERT 준비)

9. 서비스 → 컨트롤러로 갈 때 DTO 변환이 필요한 이유

  • 엔티티 그대로 내보내면
    • 양방향 무한루프
    • 보안 문제
    • 화면 요구사항과 구조 불일치
      → 그래서 Service에서 DTO로 변환

10. React는 JSON + Axios로 통신

React → Spring Boot


axios.post("/api/category", { name: "음료" })
Spring → ResponseEntity로 응답


return ResponseEntity.ok(dto);

11. MVC 흐름 완전 정리

✔ Controller

Service 메소드 호출

✔ Service

→ DTO/Entity 변환
→ 로직 처리
DAO(Repository) 호출

✔ DAO/Repository

→ DB 처리
→ 엔티티 반환

⚠ 타입이 맞지 않으면
→ null 반환
→ 에러 대신 로그만 출력하도록 처리 가능

 

 

'HDC 학습일지' 카테고리의 다른 글

2025-12-05(스프링 시큐리티)  (0) 2025.12.06
전체 백엔드 흐름  (0) 2025.12.02
2025-12-02(웹 mqtt)  (1) 2025.12.02
2025-11-25(카메라 센서 - react MQTT)  (0) 2025.12.02
2025-11-24(리액트 state, props)  (0) 2025.11.27