-
Stream API 하나씩 사용해보기 flatMap map과 flatMap 차이 : map은 1:1로 변환하는 함수라면, flatMap은 N:1 변환하는 함수(배열 -> 스트림으로 변환할 때 사용) stream에 진행 함수에 들어가는 값(input)이 배열인 것을 하나하나 떼어놓을 때 Stream.of( new String[]{"a", "b", "c", "d", "e"}, new String[]{"f", "g", "h", "i", "j"} ) .flatMap(Arrays::stream) .map(str -> str.charAt(0)) .filter(ch -> ch > 'a') .collect(toList()) .forEach(ch -> System.out.print(ch + " ")); sorted 감싸져있는 콜렉션 원소들을 정렬함 primitive type의 경우 대소 관계를 비교(정수)할 수 있음,...
-
Stream API Stream API : 콜렉션에 저장된 요소(데이터)에 대해 어떤 처리를 하기위해 만들어진 API forEach로 하면 안되나? 코드 간결해지면서도 Lazy한 처리가 가능(최종 결과내는 메소드를 사용하지않으면 그때까지 처리를 하지않음), *기존 콜렉션에 대해서는 조작하지않으면서도 원하는 결과값을 얻어낼 수 있음, 병렬처리를 쉽게할 수 있음(API에 있음) 데이터 변경보다는 데이터 처리가 주목적 IntSummaryStatistics 최댓값, 최솟값, 평균 등 기본적으로 필요한 값에 대해 매번 구하려고 Stream API 쓰는게 아니라 하나의 객체만 리턴하도록 하면 됨 어떤 값에 대해 최대, 최소, 평균 등을 구할...
-
데이터베이스 트랜잭션과 MySQL 트랜잭션 : 복수 쿼리로 처리해야할 때 하나의 작업으로 묶는 것, 단일 작업으로 만들어내는 것 오토커밋모드와 단일 쿼리 : MySQL, PostgreSQL 등 몇몇 RDBMS는 오토커밋모드가 기본설정인데, 단일 쿼리의 경우 오토커밋 대상 COMMIT과 ROLLBACK : 트랜잭션(모든 쿼리) 성공 시 커밋(완료, 저장소 적용), 하나의 쿼리라도 실패 시 롤백(이전 상태로 되돌리기, 저장소 상태 되돌림) CREATE TABLE과 COMMIT : CREATE TABLE(DDL) 쿼리는 바로 커밋(다른 트랜잭션에서 읽을 수 있음) 트랜잭션이 가져야할 특성 원자성 : 더이상 쪼갤 수 없음,...
-
기초도 못하면서 응용 잘하는 사람 한명도 본 적 없다 기초부터 잘하자 객체지향 객체지향이 뭘까 만들려고 하는 가상세계에 마스터가 모든 것을 처리하는 것이 아니라 여러 존재가 모여 협업하는 세상 객체와 객체 간에는 협력을 함, 협력은 자동적으로 하는게 아니라 메세지에 의해 요청하는 것, 다른 객체는 요청만 할 뿐 처리에 대해 어떠한 관여도 할 수 없음 : 전적으로 담당 객체의 권한 - 그렇기때문에 객체 고유의 상태값 또한 바깥으로 가져올 수 있는 설계를 해서 안되고 조작도 마음대로 하지못하도록 만들어야함...
-
웹서버 캐시해보기(2) 기간 만료되지 않았지만 갱신하기 패스별로 캐시를 하기때문에 리소스 이름에 파라미터를 붙여줘서 다시 캐시하도록 함 그렇다면 서버에 쌓인 기존 리소스 처리는? nginx에서 캐시 설정을 해줄 때 기간을 설정하기때문에 지워짐(실제로는 누가 지우지?) 생각해볼 수 있는 문제 : 자주 변경될 수 있다면 제한된 범위 내에서 파라미터를 설정해주기(완전한 랜덤값으로 설정하면 그만큼 많은 파일이 서버에 캐시될 수 있기 때문에 - 그런 상황을 만나봐야알겠지만..) 비정기적으로 변경될 수 있는 정적인 리소스에 대해서는 파라미터를 달아줌으로써 클라이언트가 오래된 캐시 데이터를 그대로 가져다가...