![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bDyfPv/btrXa1uk5vv/p90uvRVsKvayJqTdQMnW8k/img.png)
앞선 포스팅에서 Docker와 VM 구동 방식의 차이를 알아보았다. 여기서 Docker가 "왜 등장하게 됐는지"에 대한 설명은 마무리하고, "어떻게 사용할 것인가"에 대해 초점을 맞추어 정리해보려고 한다. 우선, Docker 웹 사이트에선 Docker를 아래와 같이 설명했다. Docker는 애플리케이션을 개발, 배송 및 실행하기 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리할 수 있으므로 소프트웨어를 빠르게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드를 신속하게 배송, 테스트 및 배포하기 위한 Docker 방법론을 활용하면 코드 작성과 프로덕션 환경에서 실행하는 사이의 지연을 크게 줄일 수 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/EZ5wq/btrW9l1yhWE/RqVjBlUe6JXm6kK6yXxnTK/img.png)
학부생 시절에는 Windows 환경에서 Linux를 사용하기 위해서 VM ware, Virtual Box와 같은 가상화 소프트웨어들을 사용해서 가상 머신(Virtual Machine)을 구동시켜 사용했었다. 가상 머신의 단점은... 너무 느렸다. 설치부터 부팅까지의 소요 시간이 꽤나 컸다. 무슨 이유에서인지 구동이안돼 재설치라도 하는 날에는 정말 끔찍했었다. 때문에 근래엔 리눅스 환경에서 개발할 일이 있으면, Docker를 주로 사용하고 있다. Docker Hub와 같은 Docker Registry에 저장해 놓으면, 어디서든 같은 환경의 리눅스를 손쉽게 사용할 수 있다. 같은 가상화 환경을 제공하는데 VM과 Docker가 왜이리 차이가 나는지 알고 싶어 정리해봤다. 가상화는 데스크탑 가상화, OS 가상화..
매서드 참조 표현식 이중 콜론 연산자(::)는 람다식의 파라미터로 사용된다. 매서드 참조 표현식(method reference expression)이라는 정식 이름을 갖고 있다. 인스턴스명::메서드명 위와 같은 표현 방식을 사용한다. 인스턴스를 반복 생성 시에도 사용할 수 있는데 이때는 아래와 같이 사용한다. 인스턴스명::new 스태틱 메서드인 경우 인스턴스 대신 클래스 이름으로 사용할 수 있다. 말보다 예시가 쉬운 경우 이므로 아래와 같이 작성해봤다. public class TestMain { public static void main(String[] args) { List list = Arrays.asList("aaa", "bbb", "ccc", "ddd"); list.stream().map(elem..
JAVA 8 부터 지원하기 시작한 클래스. NPE(NullPointerException) 예방 용도로 만들어진 클래스다. Optional 클래스도 stream과 같이 중간연산이 있지만, 써본적도 없고 사용할 일도 없을 것 같기 때문에 따로 다루진 않겠다. 1. Optional 생성하기 Optional.empty() -> 빈 optional 객체 생성 Optional.of() -> 특정 값을 같는 Optional 객체 생성 Optional.ofNullbale() -> null을 가질수도 있는 Optinal 객체 생성 Optional.ofNullbale() 의 경우 파라미터의 값이 null일 경우 Optional.empty를 return 한다. 2. Optional 구현 매서드 get() -> Optiona..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bma8Vb/btrXa0hXocp/2MIQ7HB8AE6hXyzD6HgkaK/img.png)
먼저 함수형 인터페이스와 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 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bKT1jK/btrW55LvVXM/dbIZ3okWsXiSHP16pKaQIk/img.png)
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..
- Total
- Today
- Yesterday
- 티스토리챌린지
- OpenAI
- S3
- Log
- JWT
- java
- ChatGPT
- docker
- openAI API
- AWS
- serverless
- MySQL
- elasticsearch
- OpenFeign
- Elastic cloud
- AWS EC2
- CloudFront
- 람다
- 후쿠오카
- Spring
- cache
- terraform
- EKS
- springboot
- 오블완
- AOP
- GIT
- 스프링부트
- Kotlin
- lambda
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |