728x90 개발 잡담31 Java ) LocalDateTime 은 시스템 시간 아니었나..?요? LocalDateTime 을 사용하고 있는데 linux 에서는 KST 시간으로 찍히지 않는 이슈가 있었다.LocalDateTime 을 시스템 시간이라고 인지하고 있었고 리눅스 시스템 시간은 진즉 KST 로 바꿔놨었다. 그런데,,, ubuntu:~$ dateTue Jun 18 10:06:30 KST 2024ubuntu:~$ sudo hwclock2024-06-18 10:17:29.060398+09:00 이렇게 하드웨어 시간/리눅스 타임존도 KST 로 잘 되어있었는데, 서버에 올린 애플리케이션은 UTC 시간으로 찍히고 있었다 ㅠ난,,,서울 시간을 가져오고 싶은 걸...!! 찾아보니LocalDateTime 은 JVM 시간대를 따라가는데 -> JVM 은 시스템 시간대를 따라가기 때문에 시스템 시간으로 표현.. 2024. 6. 18. Jenkins 용량 부족 2편 -> "파일시스템 확장"으로 근본 문제 해결 좀 이상했다.뭐가 이상했냐면운영 서버 볼륨을 100G 로 늘렸음에도 가용량이 29G 밖에 안 되는 것이었다. 생각해보니 테스트 서버 볼륨이 30GiB 였는데, 가용량은 6.8GiB 밖에 안 됐던 것이 생각났다.그 때는 그냥 지나쳤었는데.. 왜 지나쳤을까ChatGPT 탓을 해본다.그(그녀)는 젠킨스 최소 권장 리소스는 t2.medium에 100GiB 의 볼륨을 사용하는 것이 좋다고 했단 말야...!!- 인공지능에게 농락당한 인간의 말로.. 어쨌든 .. 일단 테스트 서버에서 문제를 해결해보기로 한다. 실제 파일 시스템을 확인하기 위해lsblk 명령어로 파티션 가용량을 확인해보았다. 역시... 30G 가 사용 가능하지만 7G 밖에 할당이 안 된 것을 확인할 수 있었다. sudo growpart /dev.. 2024. 6. 13. Jenkins 용량 부족, 결국...캐시 삭제(자동화) ㅡㅅㅡ 언젠가 aws 에서 t2.micro 인스턴스를 사용할 때 Jenkins 서버가 계속 끊겼었다.이유는 컴퓨팅 리소스 부족..:( 현재 테스트 서버(t2.medium, 볼륨 50GiB)에서 Jenkins 를 사용하고 있는데 노드 용량이 부족하다는 경고 메시지가..'0';게다가 얼마 전 연차를 즐기고 있는데 배포가 안 된다는 전화가 와서 확인해보니 노드가 내려감..ㅠ수동으로 노드 올려서 배포하긴 했지만 가용 용량이 넘나 간절했다.당장 인스턴스나 볼륨을 업그레이드하긴 힘든 여건이라..부득이하게 서버 내에서 어떻게든 용량을 확보해야한다. 그래서 일단 "캐시 삭제"로 용량을 확보하기로 했다.빌드나 배포 시간이 늘어나는 문제는 있지만 당장 젠킨스가 동작하지 않을 가능성이 있기 때문에..캐시 삭제가 당장은 더 중요했.. 2024. 6. 11. 멀티 서버 Socket 통신에 Message Queue 사용하기 멀티 서버, 그러니까 서버가 1개를 초과하는 서비스에서 Socket 통신을 이용하고 싶었다.단순하게 생각하면 서버가 n개가 존재할 때 각 클라이언트가 서로 겹치지 않는 서버에 연결되어 있다면서버1에 연결된 클라이언트는 n개의 서버와 전부 소켓이 연결되어있어야 한다. 말이 안 된다고 생각했다..^^ 분명 더 좋은 방법이 있을 것이다..그래서 Message Queue 에 관하여 찾아보게 되었다.Message QueueMessage Broker (kafka, Redis 등) 을 추가하여 프로세스나 시스템 간에 데이터를 전달함.애플리케이션끼리 서로 메시지를 보내 통신할 수 있음.기본 아키텍쳐메시지를 생성.생산자 클라이언트 애플리케이션이 메시지 대기열에 전달.소비자 애플리케이션이 대기열에 연결, 처리할 메시지를 .. 2024. 6. 4. CI/CD 도입..(with Jenkins) 왜 했나?기존 방식이 너무 귀찮아서..직접 gradle 빌드FileZila 를 사용해 EC2로 jar 파일을 옮기기서버로 가서 직접 컨테이너 내리고/기존이미지 삭제 후 이미지 만들고 컨테이너 올림→ 너무 귀찮았다..Kubernetes 적용은 나중에..사실 처음엔 kubernetes 도 함께 적용할 예정이었으나쿠버가 필요한 정도의 큰 서비스도 아니고사실 쿠버 사용 리소스 지원이 안되어(EBS 및 인스턴스 크기..)당장은 딱 CI/CD 만 적용하기로 함.사용 기술GithubJenkinsAnsibleDockerCI/CD 구성코드가 test branch 에 푸쉬되면 github 에서 Jenkins 에게 웹훅으로 트리거를 보낸다.젠킨스는 코드를 땡겨와 gradle 로 빌드한다. (clean build)test 성.. 2024. 5. 29. 조회 쿼리로 성능 개선기 ^ㅅ^ /) ( 1.47s -> 886ms ) 사용자가 요청을 했는데 요청이 됐는지도 모르고 버튼을 두 번 눌러서 데이터가 두 번씩 들어가는 이슈가 있었다.확인해보니 요청하고 응답이 올 때까지 생각보다 너무 오래 걸려서 (...) 그런 게 아닐까 싶었다.프론트엔드에서도 요청중인 듯한 로딩 표시 버튼을 주기로 했지만서버에서도 뭔가 조치를 취해야할 것 같았다! 해당 요청은 아래 프로세스를 거치고 있었다.1. 요청을 받아 데이터를 DB 에 저장한 뒤2. 해당 데이터를 구글 시트에 저장한다.3. SSE 알림을 보내기. 처음엔 구글 시트에 저장하는 로직에서 이슈가 있는 게 아닐까 싶었다.왜냐하면 구글 시트 저장 로직은 예전에 취소선이 추가되어 저장된다는 이슈가 있어서 확인해보니추가되는 바로 상위 행에 스타일을 따라가기 때문에 상위 행에 취소선이 있으면.. 2024. 4. 26. 이전 1 2 3 4 5 6 다음 728x90