얼마전에 비슷한 주제로 글을 하나 썼었다. 위 내용은 AWS S3 SDK 1.x 버전을 기준으로 작성했었다. 왜 1.x 버전을 선택했냐를 묻는다면 별 이유가 없었다. 그냥 구글링을하다가 가장 먼저 나왔던걸 사용했었는데, 이게 의외의 곳에서 문제를 일으켰다. 로컬에선 정상적으로 동작하는데, dev 서버에 배포되면 S3 SDK 매서드들이 Access Deny 문제로 사용이 불가능해졌다. dev 서버에 default로 지정된 AWS의 credential이 있는데도, 계속해서 문제를 일으켰는데 알고보니 SDK 버전이 문제였다. https://github.com/aws/aws-sdk-java-v2/issues/1470 요약하면 eks 환경에서 디폴트로 지정된 경로의 credential을 가져올 수 없으니 SDK ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/XGc33/btsiuJtrTeL/YtSdvY0D2F6kEfL8Mk2NC0/img.png)
그동안 서버에서 비동기 처리를 할 일이 많지 않았었는데 이번에 멀티쓰레드를 처음 사용해볼 기회가 생겼다. 다행히 스프링 부트는 멀티쓰레드 개발의 초심자인 사람도 편하게 사용할 수 있게끔 다양한 기능을 제공해 주고 있었다. 이 내용을 소개해 보려고 한다. 비동기(Asynchorous)란? 멀티 쓰레드가 필요한 이유. 비동기는 다른 곳에서도 많이 다루기 때문에 간단히 말하고 넘어가려고한다. 한줄 요약하면, 앞선 작업이 끝나기를 대기하며 수행(동기적)되는게 아니라 앞선 작업의 종료까지 대기하지 않고, 다음 작업을 바로 수행(비동기)한다는 의미이다. 다들 한번쯤 봤을 만한 그림을 첨부한다. @Async 이 어노테이션 하나면 비동기적으로 동작하게 코드를 구현할 수 있다. 자바에서 Thread를 상속받거나 Runn..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bLzF5O/btshhHdhtpm/IReEzHLXKKnKmUNGzwppd0/img.png)
"This model's maximum context length is 4097 tokens. However, you requested 4162 tokens (66 in the messages, 4096 in the completion). Please reduce the length of the messages or completion." GPT를 쓰다보면 이런 에러를 만나는 경우가 있을 것이다. 이 에러는 왜 나는 걸까? 모델에 입력할 수 있는 최대 토큰 수를 초과했기 때문에 나는 에러이다. 토큰 수는 일반적으로 텍스트의 길이를 비율을 정해서 본다면, 어느정도는 맞을 수 있다. 다만, 토큰 수 = 텍스트 길이는 참이 아니다. 그렇다면 토큰 수는 어떻게 세면 될까? OpenAI에서는 공식적으로 토큰 수를..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/qZJ13/btr1nDQBNds/NOIcfBlCQTsj3L1kKRIR21/img.png)
1. String 자바에서 사용되는 String의 가장 큰 특징은 불변이라는 것이다. String 객체가 한번 생성되면 그 객체는 더 이상 수정할 수 없다. String 객체를 생성하는 방법은 아래와 같다. String str = "ABC"; // or String str = new String("ABC"); 앞서 언급한 것처럼 불변이기 때문에, 멀티쓰레드 환경에서 데이터 불일치에 대한 우려가 없기 때문에 사용하기 적합하다. 다만, 수정이 필요한 새 String을 생성해야 한다는 불편함도 있다. 때문에, 큰 문자열로 작업하거나 많은 수정을 수행할 때 비효율적으로 동작하게 된다. 2. StringBuffer Java 1.4까지는 문자열을 다루기위해서 StringBuffer가 유일한 방법이었다고 한다. St..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120888 2. 풀이 코테에서 중복을 한번에 처리하는 Set은 흔하게 사용되는데, 이번 문제는 선입선출이 필요했다. 즉, 순서가 있다는 말인데 Set은 순서를 보장하지 않는다. 다행히 자바에서는 LinkdedHashSet이라는 순서를 보장해주는 Set 자료구조가 있어 이를 활용해 풀었다. 다른사람 코드를 둘러보던 중 chars가 stream처럼 동작한다는 걸 알게되었다. 그리고 확실히 stream게열이 자바에서는 직관적이고 좋은 개발방법인것 같다. String의 세부사항을 처리하는데 활용해봐야겠다. 너무 오랜만의 코테라 레벨 0부터 감을 잡아가고 있는데, 생각보다 공부가 많이 된다. 3. ..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120907 2. 풀이 직전에 풀었던 풀이와 동일한 스타일로 풀었다. 가장 일반적인 접근은 공백(" ")으로 split을 한후 고정된 위치의 값을 얻고, 비교하면 것이다. 내 답안의 코드를 보면 알 수 있지만, 런타임 에러가 나는 경우는 15 - -5 = 10 위와 같은 테스트케이스가 들어오면 런타임 에러가 나니 주의가 필요하다. 개인적으로 스트림을 좋아하는데 인상깊었던 답안은 진짜 일반적인 자바코드에서 보기 어려운 길고긴 스트림을 썼다. 나도 저렇게 쓸 수 있는 날이 올까? 3. 코드 내 답안 import java.util.*; class Solution { public String[] s..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120902 2. 풀이 어떻게 처리해야하나 고민을 많이하다가 그냥 쌩노가다를 박은 문제 String 타입의 마이너스 기호(-)가 붙은 문자열을 parseInt하면 그냥 음수로 저장되는 것까지는 이미 알고 있었지만, 앞뒤로 붙은 공백을 제어하지 못했다. 그래서 싹날리고 풀었다. 내 답안은 생각가는 대로 짜서 읽기는 쉽다. 그리고 개인적으로 인상 깊었던 풀이하나를 더 첨부한다. stream을 사용했고, 음수를 위한 처리와 자연수화 하는 과정이 정말 마음에 들었다. 3. 코드 내 답안 import java.util.*; class Solution { public int solution(String..
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..
- Total
- Today
- Yesterday
- lambda
- AOP
- elasticsearch
- OpenAI
- Log
- ChatGPT
- Elastic cloud
- chat GPT
- EKS
- awskrug
- AWS
- docker
- GIT
- springboot
- MySQL
- java
- cache
- serverless
- terraform
- Kotlin
- CloudFront
- JWT
- 코딩테스트
- S3
- openAI API
- AWS EC2
- jenkins
- 스프링부트
- Spring
- 람다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |