[Spring] 이전 데이터를 불러올때 stream문과 for문의 성능 차이 테스트 - 1
·
개발 ━━━━━/Spring
Spring 프로젝트에서 Websocket 을 이용한 채팅 기능을 구현하였다. 주고 받는 채팅 메세지들은 DB 에 저장이 되고, 채팅방에 입장시 이전 메세지들이 stream 문으로 불러와진다. stream 문 보단 for 문이 더 익숙한 나로선 실시간성이 중요한 채팅에서 stream 문과 for 문으로 각각 구현시 유의미한 성능 차이가 있을지 문득 궁금해졌다. 채팅 메세지들은 MySQL 과 Redis 에 저장되고 있고 Redis 에서만 불러오게끔 되어 있었는데 프로젝트를 진행하면서 이런 저런 테스트를 진행하다 보니 인메모리 데이터베이스인 Redis 에 있던 데이터들이 자꾸 날아가는 상황이 발생하였다. 그래서 채팅 메세지 불러오는 로직을 Redis 에 데이터가 있을 때) 1. Redis 데이터랑 MySQL..
[Spring] WebSocket 을 이용한 채팅 구현
·
개발 ━━━━━/Spring
WebSocket 이란 서버가 응답하고 연결을 종료하는 단방향 통신인 http 통신과는 달리 Server 와 Client 의 연결이 지속적으로 유지되는 양방향 통신을 하는 방식인 socket 통신이다. 접속까지는 HTTP 프로토콜를 이용하고 그 이후에는 자체적인 Websocket 프로토콜을 이용한다. Springboot 에 Websocket 서버 구축 build.gradle 에 의존성 (Dependency) 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-websocket' compileOnly ..
[SpringBoot] contextLoads() Failed
·
개발 ━━━━━/Troubleshoot
문제 상황 Github Actions 를 통해 프로젝트 빌드 중 > Task :test Team14projectApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:143 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1770 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:277 Cau..
Github Actions 를 이용하여 AWS EC2 에 SpringBoot 애플리케이션 CI/CD 구축
·
개발 ━━━━━/Dev
(이전 글) Github Actions https://gukjan9.tistory.com/71 Github Actions Github Actions Github 에서 제공하는 CI / CD 툴로 코드 저장소 (Repository) 에 이벤트 (Event) 가 발생하였을 때 구성해둔 Workflow 가 실행되면서 프로젝트를 빌드 및 테스트 후 배포까지 진행되는 서비스이 gukjan9.tistory.com Github Secrets 구성 Github Actions 를 사용하여 EC2 에 프로젝트를 배포하기에 앞서 EC2 에 접속하기 위해 필요한 접속 ip 와 pem key 등이 있는데 이를 직접적으로 코드에 노출을 하면 보안상 위험이 있으므로 Repository 에 Settings > Secrets and ..
Github Actions
·
개발 ━━━━━/Dev
Github Actions Github 에서 제공하는 CI / CD 툴로 코드 저장소 (Repository) 에 이벤트 (Event) 가 발생하였을 때 구성해둔 Workflow 가 실행되면서 프로젝트를 빌드 및 테스트 후 배포까지 진행되는 서비스이다. CI / CD 란? CI (Continuous Integration) : 지속적인 통합이라는 뜻으로 Application 의 새로운 코드 변경 사항을 정기적으로 Build 및 Test 하여 공유 Repository 에 통합되는 것을 의미한다. CD (Continuous Delivery / Deploy) : 지속적인 배포라는 뜻으로 CI 를 넘어 Production 레벨까지 자동으로 배포하는 것을 의미한다. 구성 요소 워크플로우 (Workflow) 하나 이상..
WebSocket 웹소켓
·
개발 ━━━━━/Dev
WebSocket 이란? 서버와 클라이언트 간에 Connection 을 계속 유지하면서 양방향 통신 (Duplex) 을 하여 클라이언트의 요청이 없어도 데이터를 전송할 수 있는 프토로토콜으로 Real-time web application 구현을 위해 널리 사용되고 있다. 프로토콜 (Protocol) - 통신 규약 네트워크의 접속 순서, 통신 회선을 이용하여 컴퓨터와 데이터를 주고 받기 위해서 정한 통신 규약 HTTP (Hyper Text Transfer Protocol) 은 프로토콜의 한 종류로서 웹 서버와 브라우저 사이에 문서를 전송하는데 사용된다. Http vs WebSocket 공통점 클라이언트가 애플리케이션을 사용하기 위해 URL 에 접근하여 HTTP method, header, entity 등의..