Programming/Back-end Language

RabbitMq 이해
RabbitMQ 기본 구조Exchange (교환기)메시지를 수신하고 특정 규칙에 따라 큐로 라우팅한다. Queue메시지를 저장하는 버퍼 공간, 메시지를 소비자가 가져갈 때까지 보관한다. BindingExchange와 Queue를 연결하는 링크, 라우팅 규칙을 정의할 수 있다. 라우팅 규칙DirectRouting key와 Binding key가 정확하게 일치해야 메시지가 큐로 전달된다.하나의 Queue는 여러 Binding key를 가질 수 있다.하나의 Binding key는 여러 Queue와 연결될 수 있다.Fanout조건 없이 모든 바인딩된 큐로 메시지를 브로드캐스트TopicBinding key와 Routing key간의 패턴 매칭을 지원한다. 따라서 특정 이벤트를 더 세밀하게 라우팅이 가능하다.와일..
여기로 모여라 회고-2 (web socket을 이용한 실시간 위치공유 개발)
핵심 기능 요구사항위치 공유 기능이란?여기로 모여라 앱의 위치 공유기능 요구사항은 아래와 같습니다. 방에 입장하면 지도에 내 위치가 마커로 표시방을 나가면 마커 삭제실시간으로 위치가 바뀌면 마커도 같이 움직임화면 동작 방식초기 위치 표시방 접속 시 모든 참여자의 현재 위치를 받아온다.받아온 위치 정보로 지도에 마커를 생성실시간 위치 업데이트참여자의 위치 변경을 감지기존 마커를 지운 뒤 새로운 위치에 마커를 다시 찍어준다.이 과정을 연속적으로 처리하면 부드러운 위치 추적이 가능합니다. 기술적 요구사항실시간 데이터 전송예를 들어 A, B, C가 같은 방에 있을 때, A의 위치가 변경되면 B와 C에게도 즉시 업데이트된 위치 정보를 전달해야 합니다. 이를 위해서는 클라이언트의 요청 없이도 서버가 데이터를 보낼 ..

여기로 모여라 회고-1
시작 동기평소 배달의 민족이나 카카오T와 같은 앱을 사용하면서, 배달기사나 택시의 실시간 위치 추적 기능에 관심이 갔다. 특히 실시간으로 움직이는 위치 정보가 어떻게 처리되고 표시되는지 궁금했고, 이런 실시간 데이터 처리 기술을 직접 구현해보고 싶다는 생각이 들었다. 그리하여 실시간 위치 공유 서비스를 개발하기로 마음을 먹었고 마침 마음에 맞는 android개발자분과 ios개발자분이 있어서 같이 사이드 프로젝트를 시작했다. 목표해당 프로젝트의 첫 번째 목표는 '최대한 빠른 배포'였다. 앱을 배포하기 위해서는 App Store와 Play Store 두 곳에 등록해야 하는데, 다행히도 안드로이드 개발자와 iOS 개발자분들이 Flutter를 도전해보고 싶어 하셔서 배포에는 문제가 없었다. 원래 9월 추석 전..

Docker 환경에서 Nginx를 사용하여 letsencrypt SSL 설정
nginx에 ssl 인증서 설정하는 방법을 알아보자. 들어가기 전 사전에 준비를 해야하는 것들이 있다. 1. 도메인 구입2. 80 , 442 port 열기-> (80은 http, 443은 https 기본 포트이다) 만약 설정하려는 서버가 aws면 aws console에 들어가서 해당 포트를 열고 필자처럼 개인 서버용 컴퓨터로 설정을 하면 포트포워딩 설정을 했던 페이지에서 포트를 열자3.docker , docker compose 설치 SSL 인증서 발급1. docker_nginx 디렉토리 생성먼저 nginx를 설치할 서버에 ssh 접속을 한다. 그리고 원하는 위치에서sudo mkdir docker_nginx -> docker_nginx 파일생성 2. docker-compose.yml 생성다음은 dock..

K6를 이용한 서버 성능 테스트 이슈
서버 성능 테스트를 위해 k6 셋팅을 하고 테스트로 요청을 하는 도중에 아래와 같은 에러가 발생했다.WARN[0000] Request Failed error="Get \"http://localhost:8080/test/ping\": read tcp 127.0.0.1:62761->127.0.0.1:8080: read: connection reset by peer" K6 scriptexport const options = { scenarios: { spike: { executor: 'constant-vus', vus: 200, duration: '1s', }, }};export default function () ..
Apache Tomcat과 JAVA
Apache Tomcat?Apache Tomcat은 Apache + Tomcat의 합성어로 Apache는 Web server, Tomcat은 Web Container의 기능을 수행하는 소프트웨어이다.그럼 Web server와 Web Container의 차이를 먼저 알아보자.Web Server?"웹서버의 주된 기능은 웹페이지를 클라이언트로 전달하는 것"이다 브라우저가 웹 서버에서 불려진 파일을 필요로 할 때, 브라우저는 HTTP를 이용해 "정적인" 콘텐츠를 보내준다. 따라서 어떤 사용자가 요청을 하든 동일한 콘텐츠를 제공한다.ex) image, html,css와 같이 컴퓨터에 저장되어 있는 파일들 대표적인 Web server의 역할은 2가지가 있다.1. 웹 리소스들을 클라이언트에게 전달 및 저장2. 동..
트랜잭션
트랜잭션 = DB 트랜잭션 ? 소프트웨어는 데이터베이스가 필수적인 요소이며 서비스로직엔 대부분 DB와 커넥트가 이루어진다. 하지만 트랜잭션이 DB트랜잭션에 의존하는 용어는 아니며 DB를 사용하지 않는 소프트웨어도 데이터의 일관성과 무결성을 유지하기 위해 트랜잭션 관리를 필수이다. 따라서 트랜잭션은 다양한 컨텍스트에서 사용될 수 있으며 기본적인 트랜잭션의 의미를 정리하고 가장 많이 사용하며 필수적인 DB트랜잭션에 대해서 알아보자. 트랜잭션이란? 사전적인 의미는 "더 이상 분할이 불가능한 업무처리의 단위"를 의미하며 ACID라는 4가지 특징을 가지고있다. 트랜잭션 4가지 특징 1.원자성(Atomicity) -> 트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패해야 한다. 2.일관성(Consisten..
![[Spring] WebClient 란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCys64%2FbtrKUj1pucS%2FxzXcIh8PgykzyhoxeC5J0k%2Fimg.png)
[Spring] WebClient 란?
WebClient란? Webclient는 스프링 5.0에서 추가된 인터페이스이다. 5.0 이전에는 RestTemplate를 사용했었다. 하지만 스프링 5.0부터는 WebClient를 사용할 것을 권장한다. 특징 Json, XML을 쉽게 응답받음. Non-Blocking 방식을 사용 싱글 스레드 방식을 사용 예시 의존성 설정 Maven org.springframework.boot spring-boot-starter-webflux org.projectreactor reactor-spring 1.0.1.RELEASE Gradle implementation 'org.springframework.boot:spring-boot-starter-webflux' WebClient 생성 WebClient.create();..