일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 애자일
- 엘라스틱서치
- 그리디
- 프레임워크
- 알고리즘
- JPA
- 코딩테스트
- 자바
- 개발
- 스프링
- API
- 읽기쉬운코드
- ES
- framework
- 코딩
- cleancode
- Spring
- 클린코드
- 코드
- Baekjoon
- 백준
- 데이터베이스
- 애자일기법
- 그리디알고리즘
- db
- Java
- database
- 애자일프로그래밍
- 개발자
- Elasticsearch
- Today
- Total
목록전체 글 (139)
시뻘건 개발 도전기
흔하게 볼 수 있는 docker짤이다. 대학생 때나 신입 때 누구나 이런 말을 해본적이 있을테지.. "내 컴터에선 왜 안돼?!?!" 코드가 똑같다면 대부분 환경이 달라서 다른 결과가 나오는 경우가 있을텐데, 이것을 해결해주는 것이 Docker라 볼 수 있다. 아래 [그림 2]를 보면 docker의 형태를 알 수 있다. 앱을 구동하기위한 코드와 종속성, runtime을 하나로 묶어서 local, dev환경을 비롯한 스테이징, 라이브환경 등 다양한 환경에 배포를 할 수 있다. "이 그림에서 docker를 왜 쓰는가?!"에 대한 답을 볼 수 있는데, 개발자가 만들었던 아티펙트가 컨테이너 런타임이 동작하는 어떤 환경에 구애받지 않고 동일한 아티펙트가 동작한다. 개발자가 앱을 빌드하고 배포하는 속도를 향상시킨다...
단위 테스트 JUnit과 Mockito를 사용한 단위 테스트를 알아보는 시간~😄 JUnit 테스트는 테스트 케이스라고도 하는데 클래스 레벨에서 특정 기능을 테스트하는 것으로써 클래스 당 하나 이상의 테스트 케이스를 가진다. import org. junit. jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class StringTest { @Test public void testStringEquals() { String michael = "Michael"; String michael2 = michael; String michael3 = new String("Michael"); String michael4 = "Michae..
서킷 브레이커: 배치 내에서 호출하는 rest api에 과부화가 걸렸을 때 사용 서킷 브레이커 패턴을 구현하여 스프링 배치는 [스프링 리트라이]라는 라이브러리에 의존한다 implementation group: 'org.springframework.retry', name: 'spring-retry', version: '1.3.3' 서킷 브레이커로 래핑할 메서드를 식별 식별된 매서드에서 발생한 예외 건수가 임계값을 초과하면 서킷 브레이커가 해당 매서드에 대한 호출을 중지 및 대체 매서드로 트래픽을 라우팅 대체 매서드는 원래 메서드와 다른 처리방식 ex. api가 반환하는 값 대신 기본 값을 반환 특정 알고리즘을 기반으로 다시 원래 메서드로 트래픽을 되돌려 다시 정상인 상태로 되돌아 왔는지 테스트 서킷 브레이..
1. Stream을 활용한 최대값, 최소값, 개수 추출하기 /** * Returns the minimum element of this stream according to the provided * {@code Comparator}. This is a special case of a * reduction. * * This is a terminal operation. * * @param comparator a non-interfering, * stateless * {@code Comparator} to compare elements of this stream * @return an {@code Optional} describing the minimum element of this stream, * or an..
Stream의 종결처리 과정을 이해하기 위해 Optional을 필수로 알아야하는 도구이다. Optional이 어떤 문제를 해결해주는걸까? 우리가 가장 많은 고민을 했던 NPE(NullPointException)가 Oprional의 사용 목적의 핵심이다. NPE는 Runtime error이기 때문에 실행 전까지 발견하기 쉽지가 않다. 현업에서도 종종 NPE가 발생해서 빠른 대응이 필요할 때도 있다. @Getter @Builder @ToString class User { private int id; private String name; private String email; private boolean isVerified; } public class Exercise { public static void ma..
Stream은 JAVA 8에서 추가 된 도구로써 함수형 인터페이스를 활용해서 데이터를 매우 간편하고 간결하게 가공할 수 있도록 도와준다. 이번 포스트에서는 이 Stream의 built in method에 대해서 알아보는 시간을 가진다. Stream은 데이터의 가공되는 흐름을 한 눈에 알아보기 쉽게 가독성을 향상시키는 장점이 있다. 이로인한 이유로 기존에 loop로 짰던 로직을 Stream으로 간결하고 직관적으로 대체가 가능하다. 또한 병렬처리도 가능하다. 다음 아래 내용은 Stream으로 변환하는 세 가지 방법을 소개한다. // Stream 변환 A방법 Stream nameStream = Stream.of("홍길동", "김길동", "박길동"); List names = nameStream.collect(..
Method Reference는 기존에 선언되어있는 method를 지정하고 싶을 때 ::(더블콜론)을 사용해서 사용한다. Method Reference 아래 4가지의 케이스가 존재한다. 클래스의 static method를 지정 선언된 객체의 instance method를 지정 객체의 instance method를 지정 클래스의 constructor를 지정 1. 클래스의 static method를 지정 : {Class Name}::{Static Method Name} public class Exercise { public static void main(String[] args) { int num = Integer.parseInt("123"); System.out.println(num); // 123 Fun..
더 많은 Functional Interface를 살펴보자. 첫 번째로 매개변수가 없는 T 타입의 값을 리턴하는 "Supplier"이다. @FunctionalInterface public interface Supplier { T get(); } public class Exercise { public static void main(String[] args) { Supplier myEx = () -> Math.random(); System.out.println(myEx.get()); System.out.println(myEx.get()); System.out.println(myEx.get()); } } 위와 같이 Supplier는 기본적으로 사용할 수 있지만, 아래와 같이 유연하게 여러 종류의 Supplier..