본문 바로가기

백엔드 개발

@Configuration에 대하여 @Configuration은 해당 클래스가 설정에 관한 클래스임을 Spring Container에게 알리고, 그것을 Bean으로 등록하도록 하는 어노테이션이다. 어? 그러면 해당 클래스가 설정 파일임을 가시적으로 알리는 일 외에는 @Bean과 똑같은 것인가? 물론 아니다. 설정 파일의 경우, 해당 설정의 통일성을 위해서 하나만 생성하고, 프로젝트 내에서 계속 그 내용을 재활용하며 써야한다. 이에 상응하여 @Configuration이란 어노테이션은 클래스를 Bean으로 등록하고 해당 Bean 객체를 싱글톤이 되도록 설정해준다. 더보기
SpringBoot WebSocket Chatting Server 만들기 3단계 - 여러 채팅 서버 간의 메세지 공유 (by Redis Pub/sub) https://www.daddyprogrammer.org/post/4731/spring-websocket-chatting-server-redis-pub-sub/ 0.목차 1. 개요 2. 전개도, 전체적인 흐름 파악 3. 코드 분석 4. 프로젝트 진행하면서 있었던 에러 해결 1. 개요 이번 프로젝트에서는 Redis라는 인메모리형 DB를 활용하여 2번까지 진행했던 STOMP와 WebSocket만으로 구현한 Chatting Server 프로젝트를 더 고도화 하려고 한다. 어? 이미 하나의 서버에서 서로 메세지를 주고 받는 것은 충분히 되는데 왜 Redis를 장착해야 할까요? 그렇다면, 먼저 Redis를 왜 장착해야 하는지에 대해서 설명하겠다. ⓐ STOMP와 WebSocket만을 쓰는 Chatting Serv.. 더보기
Rest-Template란 무엇인가 스프링에서 제공하는 HTTP Client REST API 호출에 필요한 함수를 제공하는 클래스이다. HTTP Client Rest API란? 먼저 웹이 어떻게 돌아가는지 살펴봐야한다. 웹은 클라이언트와 서버로 나뉜다. 클라이언트 부분은 사용자에게 필요한 정보를 서버에게 요청하고, 서버는 그에 맞는 데이터를 클라이언트에게 제공한다. 해당 과정에서 클라이언트가 서버에게 원하는 정보를 요청하는 부분을 HTTP Client REST API라고 한다. 우리가 사용하려는 SPRING은 백엔드 프레임워크로 서버의 역할을 담당하는 경우가 많지만, 때에 따라서 외부 API에게 데이터를 요청해야하는 클라이언트의 역할을 해야할 수도 있다. 원래 JAVA에서는 URLConnect나 HTTPClient 같은 클래스를 사용하여 .. 더보기
Spring websocket chatting server 만들기 2단계 - 고도화 본 프로젝트는 스프링 웹소켓 채팅서버 만들기 를 실습하며 공부하기 위한 프로젝트 입니다. branch 별로 총 6단계 모두 진행할 예정입니다. 0. STOMP란 무엇인가? Stomp란 SimpleTextOrientedMessagingProtocol의 약자로, 텍스트 기반 양방향 통신을 효율적으로 하기 위한 통신 규약이다. Stomp의 원리는 다음과 같다. Stomp에는 3가지 개념이 존재하는데, Topic, Publisher, Subscriber가 그것이다. Topic은 우체통이라고 생각하면 된다. publisher는 메세지 발행자이다. Publisher가 어떤 Topic을 EndPoint로 잡고 메세지를 보내면 해당 우체통으로 메세지가 들어간다. 이때 해당 Topic을 구독하고 있는 Subscriber.. 더보기
SpringBoot WebSocket chatting server 만들기 1단계 본 프로젝트는 스프링 웹소켓 채팅서버 만들기 를 실습하며 공부하기 위한 프로젝트 입니다. branch 별로 총 6단계 모두 진행할 예정입니다. 해당 내용으로 만든 프로그램입니다. 첫 단계라서 firstStep이란 branch에 저장하였습니다. https://github.com/dalcheonroadhead/WebSocketBEPractice/tree/firstStep 1. 전개도 1-1 Server Logic 해당 블로그의 Basic WebSocket의 전개도 이다. 아주 간단하게 처리했기 때문에 아직 DB와 연결하지 않고, 서비스와 컨트롤러, 모델, 웹소켓 설정 디렉토리만 필요했다. 1-2 Server와 Client 전체 Logic 먼저 내가 헷갈렸던 부분은 Rest API와 소켓이 다른 장소에서 ma.. 더보기
Spring Di 활용하기 - 이론 (1) Beans가 무엇인지 알아본다. Application Context가 무엇인지 어떻게 돌아가는지 그 원리, 종류에 대해서도 알아본다. 1. Beans란? (1) Beans의 역사 처음에 Java의 개발진인 SUNS에서 JavaBeans를 발표했다. JavaBeans는 재사용이 가능한 컴포넌트를 말한다. Beans는 Client 측면 (Front-end), 서버 측면 (Back-end) 각각 나뉘어서 쓰였다. 원래 개발진들은 Beans가 Client GUI에서 많이 사용되길 바랬다. 예를 들어 검색창을 누가 만들어 놓으면 누군가 그것을 재사용하도록 하는 것이다. 근데 Clinet GUI 파트에서의 Beans는 내용이 너무 복잡해서, 사람들이 아무도 쓰지 않아 망했다. 되려 서버 측면에서 Beans가 각광받.. 더보기
DI 활용하기 - 실습 0. 지금까지 한 것들 지금까지는 DI라는 컴퓨터 본체의 내부를 뜯어 봤다. Main1은 Di의 개념: 외부에서 객체를 생성해서 소스코드 내부로 주입한다는 게 어떤 의미인지 알아보았다. Config.txt라는 문서에 객체이름 = "해당 객체 구현하는 클래스의 경로주소" 로 값들을 저장해놓는다. 그러면 Main1 내부의 함수가 문서 내용을 받아와서, 경로주소를 ReflectionApi를 이용해 메타데이터로 진짜 객체를 만들어서 반환한다. 우리는 new 선언 없이 해당 매소드만을 이용해 객체 생성이 가능해졌다. Main2는 객체 저장소라는 개념을 소개 했고 그것이 어떻게 돌아가는지 로직을 설명했다. 객체 저장소는 Config.txt의 내용을 Map 형태로 일단 받아온다. 그러면 Key는 객체이름, Value.. 더보기
Spring Di (클래스 안의 인스턴스 변수가 객체일 때 자동으로 연결) 저번 시간에 배웠던 내용은 (main2.java)클래스의 경로주소가 들어가 있던 외부 저장 파일 (.porperties)에서 Key= 객체이름, Value= 클래스의 경로주소로 값 뽑아내서 객체 저장소란 map에 저장했다. 해당 map에서 다시 value의 경로주소를 통해 진짜 객체를 만들어 내서 value 값들을 갱신 했다. 결국 map은 (K(객체이름), V(객체))가 되어서 사용자가 어떤 객체를 선언하려하면, new를 이용해 동적할당 하지 않고 map에서 찾아 꺼내 썼다. 그다음 main3.java에서 배운 내용은 컴포넌트 어노테이션을 이용하는 것이였다. 먼저 우리가 사용할 클래스들에는 @Component를 붙인다. 그리고 doComponentScan이라는 함수를 만든다. 해당 함수는 패키지 내의 .. 더보기