반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- springboot
- 인공지능
- 데이터베이스
- 데이터구조
- 빅데이터
- 네트워크
- 알고리즘
- 프로그래밍언어
- 네트워크보안
- I'm Sorry
- Yes
- 컴퓨터비전
- 디자인패턴
- 데이터과학
- 버전관리
- 프로그래밍
- 사이버보안
- 컴퓨터공학
- 머신러닝
- 보안
- 소프트웨어공학
- 클라우드컴퓨팅
- 웹개발
- 자료구조
- 자바스크립트
- 파이썬
- 딥러닝
- 컴퓨터과학
- 데이터분석
- 소프트웨어
Archives
- Today
- Total
스택큐힙리스트
자바 스프링 개발 시작하기 - 5일차 모던 Java 스킬업 본문
반응형
1. 오늘의 목표
람다‧Stream‧Record‧Optional 네 가지 키워드를 활용해 실시간 로그를 필터링하고 집계하는 예제를 만들며 “함수형 사고”에 감 잡기. 프로젝트 전반에서 반복될 깨끗한 데이터 파이프라인을 설계할 토대를 다집니다.
2. 왜 배워야 할까?
- 람다식으로 익명 클래스를 걷어내 코드량 ↓, 가독성 ↑.
- Stream API로 멀티스레드 컬렉션 처리까지 한 줄에.
- Record로 DTO 보일러플레이트 제거, 불변 객체 기본화.
- Optional로 NullPointerException 방지 & “null 체크” 관습 탈출.
3. 실습 – 실시간 로그 필터·집계 파이프라인
// Record: 로그 한 줄 정의
public record LogLine(long ts, String level, String msg) {}
// (1) 스트림 파이프라인 – 필터 → 매핑 → 집계
Map<String, Long> errorCounts =
logStream() // 실시간 스트림(예: KafkaConsumer records)
.map(LogParser::toLogLine) // 문자열 → LogLine(Record)
.filter(l -> l.level().equals("ERROR"))
.collect(Collectors.groupingBy(
LogLine::msg, Collectors.counting()));
// (2) Optional 활용 – 가장 흔한 에러 메시지 출력
errorCounts.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.ifPresentOrElse(
m -> System.out.println("TOP ERROR ▶ " + m),
() -> System.out.println("No errors 🎉"));
핵심 포인트
- filter()에 람다식 전달해 ERROR 레벨만 추출.
- groupingBy로 실시간 카운트; 필요하면 Collectors.toConcurrentMap으로 교체해 병렬 집계.
- Optional.ifPresentOrElse로 결과가 없을 때도 깔끔한 분기 처리.
4. 실전 적용 팁
- Record vs Lombok
Record는 JDK 14+ 정식 포함. @Getters나 @AllArgsConstructor 없이도 equals/hashCode 자동 제공 → 간결성 & 유지보수성 상승. - Stream 성능
대량 데이터라면 parallel()을 고민하되 CPU 코어·스레드풀 상황을 먼저 체크. 무차별 parallel()은 오히려 병목. - Optional 남용 금지
필드나 파라미터보단 리턴 타입 에만 사용 → 불필요한 객체 생성 방지. - 테스트 전략
Stream 파이프라인은 단계별로 peek() 대신 JUnit5 매개변수 테스트를 활용하여 기대 출력값을 검증.
5. 마무리 & 내일 예고
오늘 배운 함수형 도구들은 앞으로 컨트롤러·서비스·레포지토리 층 어디서든 “한 줄 파이프라인”으로 재사용됩니다.
반응형
'개발' 카테고리의 다른 글
JVM GC 종류 완전 정리 + 실전 튜닝 가이드 (2) | 2025.07.11 |
---|---|
Record vs Lombok vs AutoValue 비교 분석 (1) | 2025.07.11 |
Java GC와 Stop-the-World 완전 정리 – 성능 병목의 실체 (0) | 2025.07.10 |
Spring Boot 필터·인터셉터에서 발생한 예외 처리 방법 (1) | 2025.07.10 |
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 3장. 성능을 좌우하는 DB 설계와 쿼리 (1) | 2025.07.10 |
Comments