![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bYMdDF/btsGBsAZgXF/Y3WG7IAsPkurIecChKeK3k/img.png)
에디터에서 문서를 작성하고, 서버로 텍스트를 전달한다면 기본적으로 HTML태그들이 포함되서 넘어오게 된다. 하지만 데이터 분석을 위해서는 HTML태그를 제거한 순수 텍스트에 대한 정보가 필요하다. 슬프게도 자바 혹은 스프링에서 자체적으로 HTML태그를 뚝딱 제거하는 기능이 없다 ㅠ 굳이 방법이 있다면, 정규식을 이용하는건데 이 방법은 별로 추천하고 싶지 않은 방법이다. (정규식을 정교하게 짜지 않는다면, 사용자가 실수로 넣은 기호들이 제거될 수도 있다) 당연한 이야지만 정규식을 사용하지 않고 HTML 태그를 제거하는 방법이 있다. JSoup라는 라이브러리인데, 이 라이브러리를 이용해 HTML 태그를 제거하는 방법을 소개하고자한다. JSoup JSoup은 HTML 문서에 저장된 데이터를 구문 분석, 추출 ..
얼마전에 비슷한 주제로 글을 하나 썼었다. 위 내용은 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 ..
AWS S3의 기능만 제공하는 SDK를 알기 전에 있었던 일이다. build.gradle 설정을 아래와 같이 했다. implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' 의존성만 걸고 로컬에서 바로 실행을 한다면, 아마 gradle 빌드조차 되지 않을 것이다. yaml 프로파일에 추가 설정이 필요하다. cloud: aws: stack: auto: false region: static: ap-northeast-2 하지만 이 설정 후에도 빌드 타임이 갑자기 엄청 느려지면서 아래와 같은 에러가 발생한다. com.amazonaws.util.EC2MetadataUtils - Unable to retrieve the req..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bEYTxd/btsiNakAqob/JKJCqSn4pYwuxsskTbzCtK/img.png)
입사 후 온프레미스 환경에서 클라우드 환경으로 넘어오면서 AWS 인프라를 많이 활용해 보고 있다. 그 중에서도 리소스를 저장하기 위해 S3를 가장 많이 사용하고 있는데, 스프링부트에서 연동해서 사용하는 법을 알아보자. 주의!! 이 글은 S3 버킷을 생성하는 부분은 따로 언급하지 않았습니다. AWS S3란? Amazon Simple Storage Service(Amazon S3)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다. 모든 규모와 업종의 고객은 Amazon S3를 사용하여 데이터 레이크, 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅 데이터 분석 등 다양한 사용 사례에서 원하는 양의 데이터를..
![](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/nQcoi/btsidWldBDI/U3SDIpYhoQJeCG84BG9br0/img.png)
JPA를 사용해 DB insert를 하던 중 뜬금없이 아래와 같은 에러가 났다. java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statement 흠 DB가 어떤 이유에서인지 read-only 설정이 되어 있군. 인프라 개발자에게 연락해야지. 라고 끝났으면 좋았겠지만, 인프라는 DB 설정을 변경한게 없다고 한다. 웃긴건, 같은 프로젝트의 다른 서비스 내에서의 DB insert는 정상적으로 수행되고 있다는 점이다. 다른 서비스와 차이점을 뜯어보던 중 @Transactional 이 빠져 있는걸 확인했다. @Transactional 어노테이션을 붙이니까 정상 동작했다. 그..
이직 후 맡은 첫 작업은 LOG 였다. 서비스 분석을 위해 코드를 처음 까봤을 때 굉장히 당황스러웠던 게 몇가지 있었는데, 그중 대표적인게 로그 부분이었다. 당황스럽게도, 남기고 있는 로그들은 전부 디버그 수준에서 남길만한 정보들만 남기고 있었다. if (oldUser != null) { log.info("이미 존재하는 사용자입니다. user : {} oldUser : {} ", user, oldUser); userResponseDTO.setCode(-1); userResponseDTO.setErrorMsg("이미 존재하는 사용자입니다."); return userResponseDTO; } 위와 같은 메시지들이 json 형태도 아닌 일반 cout 형태로 출력되고 있었다. 이런 로그들은 서비스를 운영하고 모..
![](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에서는 공식적으로 토큰 수를..
- Total
- Today
- Yesterday
- GIT
- EKS
- ChatGPT
- AWS EC2
- 스프링부트
- S3
- Elastic cloud
- java
- MySQL
- 오블완
- serverless
- elasticsearch
- lambda
- Log
- Kotlin
- cache
- springboot
- Spring
- OpenFeign
- CloudFront
- docker
- OpenAI
- 티스토리챌린지
- JWT
- 후쿠오카
- AWS
- 람다
- AOP
- terraform
- openAI API
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |