Springboot 3 Migration (from 2.6)
·
미분류글
■ Introspringboot 3으로 마이그레이션한 과정과, 내 프로젝트에서 해결한 문제를 기록한다. 일반적으로 springboot 3 마이그레이션시 만나는 문제를 다양하게 만날 수 있어서 좋았다.  보안과 유지보수 측면에서 마이그레이션을 해야 한다. 마이그레이션 대상 프로젝트는 2.6.x를 사용중이었고 이걸 스부 3 이상으로 마이그레이션 하는 것이 목표다. 마이그레이션 순서를 간략히 정리하면, 자바 17로 버전업 후 springboot 2.7로 중간 버전업 해서 종속성 문제 해결 뒤 springboot 3.x으로 버전업해서 나머지 종속성을 해결하는 것이다. 2.7로 중간 버전업하는 거는 springboot 버전이 낮은 편이었다거나 하면 도움이 될 것이다. 참고로 나는 2.6을 쓰고 있었는데 2.7로 ..
[Redis] StreamListener(onMessage)와 Consumer 객체간 관계
·
미분류글
□ IntroSpringboot와 Redis를 통하여 메시지 비동기 처리를 할 때 StreamListener와 Consumer를 만나게 된다. 내가 원하는 구독자시스템, Pub/Sub, 메시지 처리 구조를 만들기 위해서는 StreamListenerContainer와 StreamListener, 그리고 Consumer 객체 사이의 관계를 이해하는 것이 필요하다.□ StreamListener와 Consumer의 관계 이해하기 StreamListener와 Consumer는 1:1로 연결을 맺고 있는 구조다.StreamListener와 Consumer가 관계지어지면 Subscription 객체를 생성한다. 아래 구조는,각 Consumer가 서로 다른 StreamListener와 맺어져 있고,이에 따라 서로 다른..
Redis Stream의 구조적 특징(Message Queue)
·
미분류글
1. Redis Stream 개요소개Redis 5.0에서 주요한 기능으로 등장했다. ( 18년 10월)Message Queue (MQ)로 사용할 수 있는 스택 중 하나이다.   Redis Stream MQ는 이런 특징을 가진다. (Rabbit MQ, Active MQ도 마찬가지)- 중복 없이 동시처리 가능- 재처리 가능 이 특징들은 Redis Stream 구조에서 기인한다.1. 중복 없이 동시처리 가능한 이유는 consumer group이 single stream을 두고 메시지를 각 consumer가 하나씩 빼와서 처리하기 때문이다.2. 재처리가 가능한 이유는 메시지마다 id를 두고 관리하며, ACK 명령을 통해 메시지 처리완료를 지원하고, 만약 ACK를 받지 못한 메시지는 PENDING 처리하기 때문이..
[IntelliJ] 폐쇄망 개발환경 세팅
·
미분류글
■ Intro일반적인 네트워크에서 springboot 프로젝트를 세팅할때는intellij가 필요한 gradle을 자동으로 설치해서 문제가 없었다. 그러나 사내망에서는 gradle 설치 100% 시점에서 차단이 되는 것을 확인할 수 있다.gradle 설치파일을 어떻게 가져와서 잘 잡아도 아래 두 문제가 발생 가능하다.- build.gradle에서 distributionUrl에 접근하지 못하는 문제가 있어서 조금 변경해줘야 함- root 인증서를 jdk keystore에 등록해주어야 함 그래서 해결 방법을 기록해둔다. ■  요약- 필요한 버전의 gradle 수동설치를 해야 한다. 초기세팅할 시점에 Settings에서 gradle을 확인했을 때 Use Gradle From이 gradle-wrapper.prop..
[Web][Docker] 동일 ip, 서로 다른 도메인 80포트에 대한 포트포워딩 설정
·
미분류글
접속 도메인에 따라 포트포워딩 우리 파이서버에는 두개의 웹 애플리케이션이 돌아가고 있다. 둘 다 브라우저를 통해 80포트로 접속하게 되어있었기 때문에, 접속 도메인에 따라 포트포워딩(혹은 다른 컨테이너로 매핑)을 해줄 필요가 있었다. 다음 예제처럼 Nginx 세팅을 함으로써 가능하다. server_name에 도메인 지정해서 분류가 되는 구조이다. 단! 중요한 것은 Nginx 컨테이너와 AAAAA, BBBBB 컨테이너가 동일한 도커 네트워크로 존재해야 한다는 것이다. 만약 서로 다른 네트워크에 있어서 Nginx에서 AAAAA 컨테이너를 찾지 못한다면 Host not found in upstream 오류가 뜬다. Nginx가 다른 컨테이너를 스캔할 수 있는 구조인지 미리 검토해보도록 하자.# AAAAA 컨테..
java.rmi.server.ExportException: Listen failed on port: 0;
·
미분류글
스프링부트 프로젝트 실행이 아래와 같은 이유로 되지 않았다. 처음 보는 오류![1]오류: 에이전트에 예외사항이 발생했습니다. : java.rmi.server.ExportException: Listen failed on port: 0; nested exception is: java.net.SocketException: Bad address: listen jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is: java.net.SocketException: Bad address: listen at jdk.management.agent/sun.ma..
하나의 서버 인스턴스에 운영 및 테스트서버 두기
·
미분류글
운영서버와 테스트 서버는 독립된 서버에 각각 두는 것이 기본적으로 권장사항이라고 한다.그렇지만 인스턴스를 단 하나만 가지고 있는 상황에서 테스트 서버가 필요했다. 🪄한 인스턴스에 운영서버와 테스트서버 두는 구조하나의 인스턴스에 운영서버, 테스트서버를 구축하려면 어떻게 해야 할까?나는 운영서버와 테스트경로의 접속 path로 구분하는 방법을 적용했다.아래와 같은 구조다. 프론트 서버에 대해 할 이야기가 있다.테스트 서버를 구축하던 중, 리액트 서버를 nginx 안에 뒀을 때 장점을 배우게 되어서 테스트서버는 nginx 안에서 빌드하여 사용하기로 했다. 이제 운영서버도 그렇게 하는 것이 낫겠다. 결국 이렇게 테스트서버, 운영서버를 분리해서 띄워놓았다.이렇게 동일서버에 뒀을 때 단점은, 호스트에 트래픽이 몰릴..
[UNGRMR 글쓰기 클럽 1기] 주력 언어(Java)의 특징, 그 중 내가 좋아하는 특징
·
미분류글
이번 주제는 주력 언어에 대한 생각을 해보는 좋은 시간이었다. 자바로 꾸준히 개발을 하면서 머릿속에 자리하게 된 하나의 개념이 있다면, 추상화다. [특징] 자바 하면 떠오르는 것은 객체지향이다. 나는 스파게티처럼 어지러운 코드를 의식적으로 지양한다. 그래서 코드를 짜기 전 큰 구조를 그려보는 것을 좋아하는데, 이것이 자바가 지향하는 객체지향과 유사한 맥락이라고 생각한다. 결국 프로그램이 깔쌈하게 돌아가려면 분리를 잘 해나가야 한다. 분리를 잘 하다보면 결국 추상화를 제대로 하게 되는 것 같다. 자바 프로그래밍을 하면서 이 추상화라는 것이 참 매력적이고 주요한 개념임을 느꼈다. 왜냐하면 프로그래밍뿐만 아니라 다른 학문에서 배우는 새로운 개념들, 아니면 일상생활에서 겪는 사건을 머릿속에 입력할 때, 추상화를..
[UNGRMR 글쓰기 클럽 1기] 나는 왜 개발자가 되고 싶을까
·
미분류글
좋은 기회로 에 참여하게 되었다. 첫번째 글 주제는 "나는 왜 개발자가 되고 싶을까"... 허억.. 원래 나였으면 블로그에 공개하기에는 살짝(매우) 어려운 주제지만 이참에 박제해보는 것도 나쁘지 않을 듯하다. . . 아래 순서로 얘기를 해보겠다. 1. 성향 얘기 (주저리) 2. 결정 시점 3. 개발자가 되고싶은 이유 1. 성향 얘기 -- 창작 무엇이든 만들기를 좋아했다. 나름의 창작을 좋아했다고 할 수 있겠다. 손재주도 좋았다. 종이접기, 모형 만들기, 나만의 미니어쳐 (ex: 햄스터 마을...ㅋㅅㅋ 윽 부끄러), 나만의 그림 등.. 나름의 퀄리티에 신경쓰면서 누구나 우와아 할 만한 작품을 짜잔 하는 것을 좋아했다. 창의적이고 섬세한 작품을 내는 것을 뿌듯해했다. 특히 누구나 칭찬할 만한 결과물을 말이다..
[작업5] DB: Matching 스키마 고민
·
미분류글/ㅇ
보호되어 있는 글입니다.