# 사용하는 이유flatMap은 **스트림을 평탄화(flatten)하면서 매핑(mapping)**할 때 가장 적합한 메서드=> "스트림을 평탄화(flatten)" 한다는 의미는, 중첩된 리스트나 스트림 구조를 하나의 연속된 스트림으로 "펼쳐서" 만드는 것. ex) 1)문제List> nestedList = List.of( List.of("A", "B"), List.of("C", "D"), List.of("E") ); ## map만 사용시List> result = nestedList.stream() .map(List::stream) .collect(Collectors.toList());=> System.out.println(result);[java.util.stream.Reference..

# 문제javascript로 다른 도메인 호출시 Cross Origin Resource Sharing 에러가 나옴 줄여서 CORSconst requestData = (query) => { return new Promise((resolve, reject) => { const formData = new FormData(); formData.append('query', query); fetch('다른 도메인 호출 api', { method: 'POST', body: formData, cache: 'no-cache', }) .then(response => response.json()) .then(data => ..
개발을 진행하다가 VO, DTO의 차이가 불명확하지 않아서. 메모할겸 글을 쓰게 되었다. 결론 : VO는 도메인 모델과 비즈니스 로직에 더 밀접하게 관련 있다고한다. 이 뜻이 무엇이냐면, 객체지향적인 소프트웨어 개발에서 주로 해당하는 개념이라는 뜻이다. 거기다가 유효성 검증하는 역할을 한다. DTO는 주로 클라이언트에게 데이터를 제공하는데 중점을 둔 객체다. 한마디로 말해서 주로 API 응답에서 사용한다는 뜻. 비즈니스 로직에 잘 사용되지 않는다. 비즈니스 로직이란 : ex) 계좌 잔액 확인 : 계좌의 잔액을 확인하는데 필요한 프로세스와 규칙을 구함. 잔액 확인 시 계좌의 입출금 내역을 고려하여 정확한 잔액을 계산하고 반환하는 것. 이자 계산 : 예금 계좌의 이자를 계산하는 규칙을 구현함. 예금 금액과 ..
쓰다보니 코드를 간결하게 만들 수 없을 까 라는 생각이 들었고, 그것을 어떻게 쓰면 될까 하다가 찾아보니 stream api로 하면 아래와 같이 더 간결하게 만들 수 있다고 한다. 그래서 나중에 또 생각나면 정리할 겸 쓰게 되었다. 적용전 public List findAll() { List list = categoryRepository.findAll(); Map dtoMap = new HashMap(); for (Category category : list) { dtoMap.put(category.getId(), new CategoryResponseDto(category)); } for (Category category : list) { if (category.getPrnts() != null) { Ca..