1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120911 2. 풀이 솔직히 어려운 문제는 아닌데 최종 return을 위해 String으로 만드는 방법들이 재밌어서 정리해봤다. 나도 나름 괜찮게 짰다 생각하는데 다른사람 답중에 꽤나 인상깊은게 있어서 추가했다. 3. 코드 내 답안 import java.util.stream.Collectors; import java.util.*; class Solution { public String solution(String my_string) { String[] arr = my_string.toLowerCase().split(""); return Arrays.stream(arr).sorted().co..

정확히는 AWS EC2에서 뿐만아니라 Tomcat을 베이스 이미지로 생성한 Docker 컨테이너에 war 파일을 배포할 때 발생하는 문제이다. 배포는 에러없이 진행된다. 그러나 서버로 요청을 날리면 404가 발생한다. localhost_access_log에는 요청이 제대로 들어오는 것이 확인 됐고, contextpath도 정상적으로 지정했는데도 말이다. 해결방안 프로젝트 파일을 jar로 묶어서 배포하면된다. 문제가 저것 뿐이고, 해결방안이 저것 뿐이면 따로 포스팅하진 않았을 것 같다. 왜 404가 나는지 문제를 알아보면, war파일로 배포를 진행하게 되면 별도의 web.xml이 생성되지 않는다. 그래서 web.xml이 하는 대표적인 역할인 URL 경로와 해당 경로의 요청을 처리하는 서블릿 사이의 매핑을 ..
DB에서 값을 꺼내왔을 때나, API 로 주고 받았을 때 JSON 형태의 데이터를 String 타입으로 저장하는 경우가 있다. 이 데이터를 화면에 바로 뿌려주면 {"key":"value"} 위와 같이 한 줄 텍스트로 출력이 된다. 화면단에서 파싱해서 써도 되지만 Java 단에서 JsonPretty를 적용할 수 있다. Jackson 패키지의 ObjectMapper의 writerWithDefaultPrettyPrinter 매서드 쓰면 된다. 아래의 테스트코드를 실행시켜보자 String singleLineJson = "{\"key\":\"value\"}"; ObjectMapper objectMapper = new ObjectMapper(); try { Object json = objectMapper.readV..

정확히는 리눅스에서 프로세스를 실행하는 과정에서 발생하는 문제다. 만약 AWS EC2에서 서버 배포 시, 포어그라운드(foreground)에서 Spring boot로 구현한 jar를 실행시켜버리면 해당 서버에서 아무것도 할 수 없게 된다. 그리고, 로그인된 서버 세션이 끊어지게되면, 해당 프로세스도 종료되게 된다. 이런 문제를 해결하기 위해서 리눅스에서는 백그라운드에서 프로세스를 실행시킬 수 있게 해놨다. 1. 프로세스 백그라운드 실행 명령어 nohup 명령어를 쓰면 된다. nohup 명령어는 접속된 서버의 세션이 끊어져도 그 프로세스가 계속 유지되도록 하는 명령어인데, 여기서 프로세스가 백그라운드에서 게속 떠있게끔하는 설정이 있다. nohup java -jar demo-0.0.1-SNAPSHOT.war..

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 등장 이전에는 나머지 코..

이번 장에서는 저장소를 만들고 설정하는 방법, 파일을 추적하거나(Track) 추적을 그만두는 방법, 변경 내용을 Stage 하고 커밋하는 방법을 알게 된다. 파일이나 파일 패턴을 무시하도록 Git을 설정하는 방법, 실수를 쉽고 빠르게 만회하는 방법, 프로젝트 히스토리를 조회하고 커밋을 비교하는 방법, 리모트 저장소에 Push 하고 Pull 하는 방법을 살펴본다. Git command 정리 1. 저장소 만들기 git init 기존 디렉토리를 Git 저장소로 만들기 디렉토리 내에 .git 이라는 하위 디렉토리 생성된다. git init git clone 기존 저장소 clone 하기. 다른 프로젝트에 참여하려거나(Contribute) Git 저장소를 복사하고 싶을 때 사용 Subversion에서 "checko..
- Total
- Today
- Yesterday
- JWT
- AWS
- 스프링부트
- object
- OpenAI
- AWS EC2
- ecs
- docker
- AOP
- Kotlin
- 티스토리챌린지
- S3
- 후기
- lambda
- CloudFront
- Spring
- EKS
- 후쿠오카
- cache
- GIT
- springboot
- java
- 오블완
- Log
- terraform
- ChatGPT
- CORS
- 람다
- elasticsearch
- serverless
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |