DB에서 값을 꺼내왔을 때나, API 로 주고 받았을 때 JSON 형태의 데이터를 String 타입으로 저장하는 경우가 있다. 이 데이터를 화면에 바로 뿌려주면 {"key":"value"} 위와 같이 한 줄 텍스트로 출력이 된다. 화면단에서 파싱해서 써도 되지만 Java 단에서 JsonPretty를 적용할 수 있다. Jackson 패키지의 ObjectMapper의 writerWithDefaultPrettyPrinter 매서드 쓰면 된다. 아래의 테스트코드를 실행시켜보자 String singleLineJson = "{\"key\":\"value\"}"; ObjectMapper objectMapper = new ObjectMapper(); try { Object json = objectMapper.readV..
12월 초에 chatGPT를 처음 안 이후 꾸준히 써왔는데, 최근 갑자기 주목받으면서 특정 시간대 사람들이 몰려서 접속하기도 힘들고 자주 연결이 끊어지기 시작했다. 편하게 쓰고 싶은 마음에, 무슨 방법이 없을까 하다가 OpenAI에서 제공하는 API를 찾게 되었고, 바로 사용해봤다. 이런 저런 문제가 있어 오래걸렸지만, 결과도 괜찮게 나오고, EC2에 배포했는데도 생각보다는 응답이 빨랐다. 처음 설계는 AWS EC2 + Docker로 배포하려고 했지만, 어떤 이유에서인지 Docker에 코드를 올린 후, Tomcat에서 배포가 안됐다. 그래서 일단 AWS EC2만으로 배포해 사용해봤다. 제목에는 ChatGPT API라 작성했지만, 정확히는 OpenAI에서 제공하는 통합 API다. 때문에 학습 관련 API도..
Chapter 2 - 동작 파라미터화 코드 전달하기 Chapter 1에 비해 간결하게 정리해 보려고 한다. 전에는 읽으면서 정리했지만 이번엔 다 읽고 정리.(정리하는 기준이 챕터랑 다를 수 있다.) 변화하는 요구사항에 대응하기 어플리케이션에서 자주 바뀌는 소비자 요구사항은 피할 수 없는 문제다. 어떻게 대응할 것인가? 유지보수 관점 + 엔지니어링 비용이 최소화되는 코드를 작성해야한다. 동작 파라미터 구현으로 위 문제를 해결 할 수 있다. 동작 파라미터란? 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다. 동작 파라미터에 조건에 맞는 동작을 구현함으로써, 요구사항에 유연하게 대응할 수 있게 됐다. 다만, 불필요한 코드가 늘어나기 때문에 람다 표현식으로 변환할 필요가 있다. 고전적 방식(Ja..
Chapter 1 - 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가 1.1 역사의 흐름은 무엇인가? 자바 역사를 통틀어 가장 큰 변화가 자바 8에서 일어났다. 고전적 정렬 방식 Collections.sort(inventory, new Comprator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }); 자바 8에서의 간단한 구현 방식 inventory.sort(comparing(Apple::getWeight)); 조금 더 자연어에 가깝게 코드 구현이 가능하다. 멀티코어 CPU 대중화와 같은 하드웨어적인 변화도 자바 8에 영향을 줬다. 자바 8 등장 이전에는 나머지 코..
List를 중복을 허용하지 않는 자료구조인 Set으로 변환해서 중복을 제거한다. Set distinctSet = pairingParents.stream().collect(Collectors.toCollection(() -> new TreeSet(Comparator.comparing(객체명::getter)))); Comparing에 대한 개념이 부족해서 여기에 관련된 내용은 조금 더 알아봐야겠다. sort의 predicate으로 많이 사용하는 것 정도로만 안다. Comparing은 함수형 인터페이스로 위 파라미터로는 객체 내의 getter로 가져온 값들을 비교해서 정렬해준다. List형태가 Set으로 변환되는데 나는 딱히 순서 필요없이 그대로 써도 되서 그냥 썼다. List로 변환하고 싶다면 다시한번 스트..
매서드 참조 표현식 이중 콜론 연산자(::)는 람다식의 파라미터로 사용된다. 매서드 참조 표현식(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..
먼저 함수형 인터페이스와 stream을 소개했다. stream의 최종 연산에서 Stream.collect()를 통해서 데이터를 변환해준다. collect의 파라미터로 Collectors 클래스를 주로 사용하는데, 내용이 꽤나 괜찮아보여서 정리해보려고한다. 1. Collectors 클래스 collectors 클래스는 데이터 변환 뿐만 아니라 다양한 기능을 제공한다. stream 요소들을 List, Set, Map 등의 자료형으로 변환 stream 요소들의 결합(joining) stream 요소들의 통계(최대, 최소, 평균 등) straem 요소들의 그룹화(groupingBy)와 분할(partitioningBy) 데이터를 변환해서 return 해주는 것 뿐 만아니라, 조회 후 데이터를 정제해주는 쿼리와 같은..
- Total
- Today
- Yesterday
- springboot
- docker
- MySQL
- ChatGPT
- lambda
- 티스토리챌린지
- openAI API
- 후쿠오카
- Spring
- serverless
- EKS
- OpenAI
- terraform
- 람다
- CloudFront
- AOP
- AWS
- 스프링부트
- 오블완
- Kotlin
- AWS EC2
- java
- OpenFeign
- Log
- GIT
- S3
- cache
- JWT
- elasticsearch
- Elastic cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |