분류 전체보기 25

병렬 데이터 처리와 성능

병렬 스트림 stream() 대신 parallelStream()을 사용하면 병렬 스트림이 생성된다. 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림으로 서 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다. 순차 스트림을 병렬 스트림으로 변경 public logn parallelSum(Long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel()

스트림으로 데이터 수집

Collector Collector 인터페이스 구현은 스트림 요소를 어떤 식으로 도출할지 지정한다. Collector 인터페이스 메서드를 어떻게 구현하느냐에 따라 스트림에 어떤 리듀싱 연산을 수행할지 결정된다. Collectors 유틸리티 클래스는 자주 사용하는 컬렉터 인스턴스를 손쉽게 생성할 수 있는 정적 팩토리 메서드를 제공한다. Collectors에서 제공하는 메서드의 기능은 크게 세 가지로 구분할 수 있다. 스트림 요소를 하나의 값으로 리듀스하고 요약 요소 그룹화 요소 분할 리듀싱과 요약 counting - 개수를 카운트한다 maxBy, minBy - 최대 혹은 최소를 만족하는 요소를 찾는다 summingInt - 객체를 int로 매핑하는 인수를 받아 합을 계산한다 averagingInt - 객체..

스트림 활용

필터링 프리디케이트로 필터링 프리디케이트 필터링 예시 코드 List vegetarianMenu = menu.stream() .filter(Dish::IsVegeTarian) .collect(toList()); 고유요소 필터링 중복을 제거 할 수 있도록 distinct() 도 지원 고유필터 예시 코드 List numbers = Arrays.asList(1,2,1,3,3,2,4); numbers.stream() .filter(i -> i % 2 == 0) .distinct() 슬라이싱 프리디케이트 슬라이싱 컬랙션 리스트가 정렬이 되어 있어야한다. takeWhile : 조건이 거짓이 될때 까지 수행하며 참인 값을 리턴 dropWhile : 조건이 거짓이 될때 까지 수행하며 참인 값을 버리고 나머지를 리턴 스트..

스트림

자바8 버전부터 API에 추가된 새로운 기능으로 데어터처리시 코드 구현이 아닌 선언형으로 컬렉션 데이터를 처리할 수 있다. parallelStream()을 사용한다면 멀티스레드 코드로 구현하지 않더라도 병렬처리가 가능하다. 기존의 자바 코드 8버전 미만 List lowCaloricDishes = new ArrayList(); for (Dish dish : menu) { if (dish.getCalories() < 400) { lowCaloricDishes.add(dish); } } Collections.sort(lowCaloricDishes, new Comparator() { public int compoare(Dish dish1, Dish dish2) { return Integer.compare(dis..

협업 프로젝트 회고

2주간 데브코스 팀원들과 당근마켓의 기능을 클론 코딩하는 프로젝트를 진행하였습니다. 짧은 기간이지만 협업을 하면서 느꼈던 점을 정리하였습니다. 1. 쉽지 않은 협업 시작전에는 개발 프로젝트를 몇번 경험 해보았기 때문에 협업하는 것이 어렵지 않을 것이라는 생각을 가지고 있었는데 프로젝트를 진행하면 할 수 록 학교 과제 정도로만 경험한 프로젝트들은 동일한 내용을 배운 사람끼리 하였기 때문에 암묵적으로 많은 것이 갖춰진 프로젝트였구나라는 것을 느끼게 되었습니다. 다른 경험을 쌓은 사람들이 만나서하는 협업을 처음 경험하다보니 프로젝트를 진행하면서 컨벤션과 규칙에 대해서 명확하게 결정하고 구체화하는 것을 잘하지 못하여 쉽지 않고 작업을 하였던 시간들을 다시 하게되는 경우도 발생하였습니다. 2. 설계에 대한 중요성..

카테고리 없음 2021.11.08

[운영체제] 블로킹 vs 논블로킹, 동기 비동기

용어 정리 제어권 - 자신의 코드를 실행할 권리, 제어권을 가진 함수는 자신의 코드를 끝까지 실행 후 호출한 함수에 제어권을 반환 Blocking(블로킹) Thread에서 A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨주는 방식이다. A 함수가 B 함수를 호출하며 제어권을 넘겨주면 B 함수가 동작하고 A 함수는 B 함수가 동작하는 동안 멈춰있게 된다. 작업을 완료한 B함수는 제어권을 자신을 호출한 A 함수에게 반환하고 A 함수는 멈췄던 부분부터 작업을 이어나간다. Non-Blocking(논블로킹) 블로킹과는 다르게 제어권을 넘겨주지 함수를 호출하여도 제어권을 전달하지 않는다. A 함수가 B 함수를 호출하면 B 함수는 실행이 되지만 제어권은 A 함수가 그대로 가지고 있어 A 함수는 작..

주제 정리 2021.09.16

[운영체제] Lock의 종류

락(lock)이란? 공유 자원을 하나의 쓰레드가 사용하고 있을 때 다른 쓰레드가 공유 자원을 사용하지 못 하도록 제한을 거는 것이다. 공유 자원 이란? 전역 변수 DB 동적 객체 메모리 등의 여러 쓰레드가 접근하여 사용하는 공동의 자원이다. 지역 변수는 단일 쓰레드 안에서 사용되는 자원으로 공유 자원이라고 할 수 없다. Lock의 필요 이유 위의 상황 처럼 쓰레드1과 쓰레드2가 동시에 같은 전역 변수에 접근한다고 가정한다면 두 개의 쓰레드가 완료된 후에는 값이 2가 되어야 하는지 1이 되어야 하는지 알 수 없을 것이며 매번 값이 변경될 가능성도 있을 것이다. 이처럼 알 수 없는 비정형적인 결과를 발생 시킬 수 있으며 동시에 접근 쓰레드들은 공유 자원을 사용하기 위한 race condition 상태가 되게..

주제 정리 2021.08.26

[TIL]Day 11

docker를 사용하여서 mysql을 연결하는 것을 해본적이 있어 비교적 무난하게 수행할 수 있었다. 이전에는 터미널로 mysql에 접근하여서 DB를 주로 조작하고 세팅하였는데 intelliJ에 console 연결하는 것은 알고 있었는 데 사용할 생각을 왜 안했는지 바보 같이 느껴졌다. UUID를 사용하여서 JDBC를 처음으로 사용해 보았다. 동일하게 연결되어서 사용하는 변수인데 spring과 db의 UUID 버전이 달라 저장은 동일한 값으로 저장되지만 다시 db에서 읽어 올 때 값이 변경되어오기 때문에 Byte[]로 받아 UUID 생성자를 사용해서 값을 가져와야하는 것을 알게 되었다. 또한 springboot에서는 커넥션을 자동으로 열고 닫아주기 때문에 알지 못하였던 커넥션을 열고 닫고 예외 처리를 하..

TIL 2021.08.25

[TIL]Day 10

과제를 작성한 것이 객체지향으로 코드를 작성하였다기 보다는 절차 지향적이고 객체로 관리되지 않으며 메인 프로그램에서 동작들이 처리되고 있어서 이 것을 어떻게 분해하여서 작성을 해야 할까가 고민이였다. 오늘 서로의 코드를 보며 가볍게 설명하는 시간을 가져서 클래스의 분리에 대해서 완벽하지는 않지만 조금은 느낄 수 있었다. 도메인 주도의 설계 방식에 대해서는 어떻게 감을 잡아가야 할지는 모르겠지만 코드를 하나하나 작성할 때 시간을 들여서 생각하며 작성을 해야겠다고 느꼈다. 또한 객체지향에 대해서 다시 한번 공부하고 어떻게 활용하는 것 인지 정확하게 정리할 필요성을 많이 느꼈다. 프로그램의 동작을 구현을 하는 것은 비교적 쉽게쉽게 하지만 객체지향, Spring, 설계방식 등에 대해서는 나름 따라한다고는 해보지..

TIL 2021.08.20

[TIL]Day 9

막연하게 기능별로 구현하는 것이 마이크로 서비스 아키텍처라는 개념만 가지고 있어서 정리를 해보았다. 더욱 자세한 내용이 있을 것 같지만 정리한 내용을 생각해보면 기능별로 쪼개서 개발하여 API로 정보를 주고 받으며 커다란 서비스를 제공한다는 것이 method를 쪼개서 하나의 프로젝트를 완성하는 것과 비슷하다고 생각하고 이해를 하였다. 강의를 수강하고 과제 2번을 해결하면서 의존성 주입에 대해서 다시 한번 생각해 볼 수 있었으나 아직은 어렵게 느껴져서 추가적인 공부가 필요하다고 생각한다. 코드작성에 있어 최소한에 변경으로 구현을 하였는데 과연 내가 작성한 방법이 통상적인 방식인지 아니면 다른 방식으로 작성하는 것이 더 좋은 것인지는 아직까지 감이 잘안잡히는 것 같다. RP을 리뷰 받고 맞춰서 수정하고 빨리..

TIL 2021.08.19
320x100