
먼저 함수형 인터페이스와 stream을 소개했다. stream의 최종 연산에서 Stream.collect()를 통해서 데이터를 변환해준다. collect의 파라미터로 Collectors 클래스를 주로 사용하는데, 내용이 꽤나 괜찮아보여서 정리해보려고한다. 1. Collectors 클래스 collectors 클래스는 데이터 변환 뿐만 아니라 다양한 기능을 제공한다. stream 요소들을 List, Set, Map 등의 자료형으로 변환 stream 요소들의 결합(joining) stream 요소들의 통계(최대, 최소, 평균 등) straem 요소들의 그룹화(groupingBy)와 분할(partitioningBy) 데이터를 변환해서 return 해주는 것 뿐 만아니라, 조회 후 데이터를 정제해주는 쿼리와 같은..
1. Stream이란? JAVA 8에서 함수형 인터페이스, 람다를 활용할 수 있는 기술 중 하나다. 배열과 컬렉션의 변환, 필터링, 정렬 등을 간소화된 코드로 작성할 수 있게 해준다. 일련의 과정을 하나의 스트림 파이프라인으로 구현해, 코드의 가독성 또한 높일 수 있다는 장점이 있다. 다만, 자바 인 액션의 말을 빌리면 stream의 비용은 비싸다고 한다. 또한 parallelStream으로 쓰레드를 이용한 병렬처리도 제공한다. 2. Stream 생성 stream 자체 객체도 있지만, 일반적으로는 List, Set과 같은 Collection에서 주로 사용하고 Array를 대상으로 생성할 수 있다. 객체명.sream() 으로 생성 가능하다. 2-1 List(Collection) ArrayList list ..

1. 함수형 인터페이스란? 스트림을 쓰다보면 매개변수로 아래와 같이 Predicate, Collector, Supplier 등을 파라미터로 받는 것들을 확인할 수 있다. 이 스트림에서 사용되는 파라미터들은 일반적인 프리미티브 타입이나 객체가 아닌 Java 8에서 처음 등장한 함수형 인터페이스이다. 대표적으로 위와와 같은 것들이 있고, 추가적으로는 더 많은 함수형 인터페이스들을 제공한다. java.util.function 클래스에서 확인할 수 있다. 함수형 인터페이스는 @FunctionalInterface 어노테이션을 통해 구현할 수 있으나 자바에서 제공하는 것만 사용해도 충분하다. 2. 자바에서 제공하는 함수형 인터페이스 자바에서는 다양한 함수형 인터페이스를 제공하지만, 내가 자주 사용하고 있는 것들만 ..
JAVA8 이후에 시간을 조정하는데 쓰이는 클래스다. 사용법도 편하고 직관적이며, 제공하는 API도 많으니 JAVA8 이후엔 TemporalAdjusters를 사용하는게 권장된다. LocalDate, LocalDateTime 등 시간관리 클래스로 날짜를 지정하고 지정된 날짜를 조정하는데 쓰인다. with와 함께 쓰인다. 아래는 현재일 기준 직전 월요일을 찾는다. LocalDateTime currentDateTime = LocalDateTime.now(); LocalDateTime targetDateTime = currentDateTime .with(TemporalAdjusters.firstDayOfYear()) // 이번 년도의 첫 번째 일(1월 1일) .with(TemporalAdjusters.last..

이전에 작성한 암호화 관련 글을 쓴 적이 있는데, 어떻게 적용할 것인가에 대해서만 작성했지, 암호화를 어떻게 구현할 것인가에 대한 내용이 빠져서 추가로 정리해보려고 한다. 내가 사용하는 Java 기준이다. 또, 안드로이드-Spring 서버 간 암복호화는 문제가 없었지만, iOS-Spring 간의 암복화에는 문제가 있었고, 아직 해결을 하지 못했다. 그 내용도 정리해보려고 한다. 1. KeyGenerator 프로젝트에서 RSA를 사용했기 때문에, RSA를 기준으로 키를 생성했다. java.security.KeyPairGenerator 클래스에서 instance를 만들어 RSA 키를 생성한다. SecureRandom secureRandom = new SecureRandom(); KeyPairGenerator..
nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class 객체명 with invalid types () or values (). Cause: java.lang.NoSuchMethodException: 객체명 () Mybatis에서 객체를 매핑할때 발생하는 에러로 기본생성자가 없으면 발생하는 에러이다. setter와 AllargsConstructor의 존재와 상관없이 Mybatis에서 조회 후 객체를 매핑할때 빈 생성자를 반드시 만들어줘야한다. Lombok을 사용중이면 @NoArgsConstructor 설정해주면 된다. @Builder @Getter @Setter @AllArgsConstruc..

1. 암호화의 필요성과 구분 라이브 서비스를 제공하다보면, 사용자의 개인정보를 서버와 주고 받을 일이 생긴다. 이 때 나쁜 마음을 먹은 누군가가 서버와 클라이언트가 주고 받는 패킷을 가로채버린다면? 개인 정보가 그대로 누출된다. 때문에, 서버와 클라이언트가 중요한 데이터를 주고 받을 때는 암호화를 해줄 필요가 있다. 또, 서비스가 로그인/로그아웃 기능을 제공한다면 비밀번호를 서버에 저장해야한다. 그런데 이 비밀번호가 암호화가 되어있지 않다면? DB가 털리면 모든 계정 정보가 털리게 된다. 당연하지만, 비밀번호도 암호화를 해줘야한다. 하지만, 두 암호화엔 차이가 있다. 라이브 서비스에서 암호화된 개인정보는 대부분 이를 재활용하여 다른 정보를 제공하기 위함이라 암호화된 정보를 복호화할 수 있어야한다. 비밀번..

테스트 데이터를 다량 생성해야 할 일이 생겼다. DB에 INSERT문으로 쭉 밀어넣기엔, 동시에 다른 테이블에도 데이터가 생성되야 했기 때문에 API 요청으로 처리하는게 쉬워보여서 평소에 API 요청과 Response 확인에 사용하는 포스트맨(Postman)에 이런 기능은 없나... 찾아보게 되었고 다행히도 있었다. 포스트맨의 RUNNER 기능인데, 생각보다 어렵지 않고 범용적으로 쓸만한 기능이었다. 매뉴얼처럼 작성해봤다. 1. 포스트맨 RUNNER 사용법 1-1. Collection 만들기 빨간 동그라미를 클릭해 Collection을 만들어준다. 1-2. API 요청 데이터 생성 POST 방식의 request body로 중괄호로 묶어서 변수명을 지정할 수 있다. csv 파일의 1번 컬럼을 저 변수명으로..
- Total
- Today
- Yesterday
- Kotlin
- springboot
- JWT
- CORS
- AWS
- AWS EC2
- 람다
- Redis
- OpenAI
- cache
- Spring
- 오블완
- ecs
- 스프링부트
- lambda
- 인프런
- serverless
- EKS
- java
- 티스토리챌린지
- AOP
- Log
- GIT
- ChatGPT
- 후쿠오카
- terraform
- elasticsearch
- docker
- CloudFront
- S3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |