전체 글 46

채팅과 알림 기능 리뷰하기

저번 WebSocket으로 채팅 기능과 알림 기능을 사용을 하기로 했다. 기본적으로 Exchange를 하는 방식은 topic 방식과 queue 방식을 사용을 한다. topic 방식은 주로 알림 기능이나 다인 채팅방 기능에서 사용이 되는 경우이고, queue 방식은 1대1 채팅을 할 때 사용이 되는 기술이다. 간단한 설명을 더 해보자면 queue 방식은 큐는 보통 통로가 좌우 한쌍이라고 생각하면 편하다. 그래서 한쪽에 한명씩 1대1로 연결을 해서 대화하는 방식이라고 생각하면 된다. topic의 경우는 구독과 발행으로 나뉘어진다. 발행은 주로 대화를 생성을 하는 사람이 발행 담당을 하고, 구독이 발행을 한 사람의 정보를 지속적으로 갖고 온다는 개념으로 이해를 하면 된다. 이 쪽은 알림 생성 Service 영..

멀티캠퍼스 2025.11.26

외부 저장소 관리(AWS S3 or Cloudflare R2)

만약 무언가 파일을 올린다고 하면, 예전에는 그런 자료들을 바이너리 형태로 변환하여 서버와 같은 공간에 저장을 할 테니지만, 요새는 클라우드 오브젝트 스토리지가 등장하면서 파일은 별도의 스토리지에 저장하고 데이터베이스는 파일의 경로나 URL 만 저장하는 방식으로 일반화 되었다. 이로 인해 데이터베이스 내부에 들어가는 용량이 엄청나게 쾌적해졌으며, 클라우드 스토리지에서 기본적으로 CDN 기능을 제공해주는 곳도 존재하여, 본래 원본 저장소에서 데이터를 꺼내는 것보다 훨씬 빠른 데이터 처리를 가능 할 수 있게 되었다. 일단 내가 사용한거는 aws의 ec2를 사용한 김에 s3를 사용하면 되는거 아닌가 했지만 그래도 어차피 초창기 규모인거 그냥 규모 굳이 큰거 가져갈 필요가 없다고 생각이 들어서 무료 티어이지만..

멀티캠퍼스 2025.11.17

프로젝트 PR 및 코드 리뷰 시작

아무래도 내가 쓴 코드는 그냥 내가 작성한 거라서 이해가 좀 되기 마련이다. 하지만 남이 작성한 코드를 읽고 그게 무슨 역할인지 이해를 하는 것은 좀 시간이 오래 걸릴 뿐 더러 이 코드가 왜 작성이 되었까라는 의문이 남을 수 도 있다. 추가로 남이 작성한 코드와 협력을 하기 위해서는 그 코드가 사용이 되는 이유, 그 코드가 역할을 하는 기능 등을 확실하게 이해를 해야지 결합도가 어느정도 있는 작업물에 대해서 충돌을 최대한 적게 내면서 진행을 할 수 있을 것이다. 그렇게 남이 작성한 코드를 좀 코드리뷰를 연습해보자일단 내가 Repository에 대한 권한을 갖고 있기도하고, PR 관련된 전권한이 있다. 지금과 보면 새로운 PR요청에 대해서는 Open 부분에 Request 가 들어오게되고, 들어온 PR의 처..

멀티캠퍼스 2025.11.11

spring boot Websocket와 RabbitMQ을 이용한 채팅 기능 공부 / 정규 표현식 배우기

Spring 을 이용한 프로젝트로 채팅방을 구현을 하는데 사용을 할 기술에 대해서 설명을 하고자 한다. 일단 프로젝트의 채팅방을 구현을 할 때 가장 중요한 목적에 대해서 상기를 해줘야된다. 다수의 사람들이 채팅방을 참여하는 상태가 주가 되다보니, 메세지를 누군가가 보냈으면, 누군가는 받고, 다른 누군가는 메세지를 받지 못하는 불상사는 피해야된다. 즉, 메세지의 안정성이 떨어져서는 안된다. WebSocket으로만은 메세지의 신뢰성 문제를 완벽하게 커버를 할 수 없다는 문제점이 존재한다. 그를 보완하기 위해서는 복잡한 코드를 추가로 요구를 하기 때문에 그 부분을 보완할 수 있도록 RabbitMQ에서 제공이 되는 메세지 안정성을 이용을 할 생각이다.그러면 어디에 어떻게 쓰이냐인데,클라이언트 통신 부분은 Web..

멀티캠퍼스 2025.11.05

Docker 사용해보기

Docker는 애플리케이션과 그 실행 환경을 하나의 컨테이너라는 격리된 공간으로 패키징하는 오픈 소스 플랫폼을 말한다. 이미지를 생성하고 컨테이너로 실행을 하는 구조로 되어있다.여러 컨테이너가 필요한 경우엔 Docker Compose로 동시에 여러 컨테이너를 띄울 수 있다. 추가로 알면 좋은 것은 Kubernetes 란 도구이다. 이것은 컨테이너를 대규모로 자동 배포, 확장, 관리하는 오케스트레이션 도구이다. 수 십개부터 수천개의 컨테이너를 여러 서버에 분배를 하고, 장애 대응이나 자동 스케일링, 롤링 업데이트 등에서 활용이 된다.현재 컨테이너 탭에서 생성한 하나의 컨테이너가 존재한다. WSL을 설치를 해야지 Docker를 내 컴퓨터 환경에서 동작이 가능하며, 저 컨테이너를 만들기 위해서는 image를 ..

멀티캠퍼스 2025.10.28

백엔드 nginx 연결 및 소셜 로그인 추가하기

정식적으로 웹페이지를 배포된 상태를 보면 기본적으로 http가 아닌 https 형태의 페이지들이 다수일 것이다. 이 s의 의미는 secure라는 의미로 데이터에 대한 보안적인 측면을 향상 시켜주는 중요한 역할을 한다. 보통 이 인증서를 제공해 주는 기관은 따로 kisa 와 같은 공식 보안 관련 기관이 인정해주는 업체가 제 3자가 되어 사이트에 대한 인증을 해준다. 그리고 이 인증서를 제공해 주는 걸 무료로 해줄 수 없는 입장이라 상당히 비싼 돈을 들여서 진행을 해준다. 하지만 무료로 사용을 할 수 있는 종류들도 존재한다. 그래서 내가 사용을 할 것은 Let's Encrypt 에서 제공을 해주는 Nginx 를 이용을 할 것이다. 기본적으로 Nginx를 생성을 하면 /etc 폴더 내에서 생성이 된다. 그러면..

멀티캠퍼스 2025.10.20

웹 페이지 크롤링 하기

웹페이지를 크롤링하는 과정은 대개 js에서 진행이 된다. 보통 프론트엔드에서도 js를 다룰 수 있기 때문에 프론트 엔드 단에서 진행을 할 수 있는 과정이지만, 업무의 분업을 확실하게 하기 위해서 프론트 엔드 영역은 UX/UI 에 해당되는 부분들만 하는 것을 원칙으로 하고, 그 외 웹사이트 내에 있는 기능적인 부분들은 백엔드가 담당해서 진행을 하는 방식으로 프로젝트를 진행한다. 그럼 본격적으로 크롤링에 대한 방식을 진행해보자.일단 기본적으로 MVC 구조의 아키텍쳐를 따르고 있다.크롤링 대상은 보안 뉴스 웹사이트이다. 기본적으로 제목, 내용, 작성자, 조회수를 갖고오는 형태로 진행한다. 그리고 JSON 형태로 화면에 출력을 진행 할 것이기 때문에, toJSON으로 변환을 진행을 한다.다음은 URL 설정이다...

멀티캠퍼스 2025.10.13

코드의 보안적 조치

개인 프로젝트를 진행하면서, 겉으로 보여지는 기능들을 참으로 중요하다. 대체적으로 UI/UX, 기능 구현, 애니메이션 기타 등 등으로 볼 수 있다. 물론 화려하고 기능적으로 우수하고 다 좋다. 하지만 사이트를 애써 만들었는데, 누군가에게 공격을 받아서 사용을 하지 못하면, 그게 무슨 소용인것일까?그래서 우리는 코드를 다 작성을 한 후 또는 작성 중에 코드에 보안적 조치를 취해야 한다. 간단하게 생각나는 것은 로그인 과정에서 Injection에 관련된 공격들을 막아야하고, 회원가입을 진행 할 때에는 입력값 검증을 통해서 옳지 못한 단어나 해킹에 위협이 될만한 문자열들을 방지를 해야된다. 또한 커뮤니티같은 게시판을 운영을 하고 싶으면, XSS 공격이나 CSRF 공격 등을 방지해야한다. 세션 관련해서는 장기적..

멀티캠퍼스 2025.09.29

백엔드 로그인 구현

따로 팀 프로젝트하고 있는 과정 중 복습 용도로 사용하기 위해 작성을 하는 글 입니다.실제 서비스를 목표로 하고 있는 웹 페이지 구현이라서 완성을 해야되는 페이지들이 많다. 그 중에서 로그인 관련된 기능들을 소개를 하려 한다.순서대로 회원가입 , 로그인, 로그아웃, 현재 로그인한 사용자 정보 조회, 소셜 로그인 시 검증된 사용자 확인을 위한 api 구성이라고 보면 된다. 얘네들은 어디로 연결이 되어있는 걸까? 바로 위에 코드를 보면 authController하고 연결이 되어있는 거 같다. 그럼 Controller 구현되어있는 부분들을 봐보자.Controller 중에서 회원가입 관련된 부분이다. 비동기 형태로 request.body 부분에 포함되어있는 아이디, 패스워드, 닉네임, 이메일을 깨내온다. 그리고..

멀티캠퍼스 2025.09.22

spring 코드 기초 복습

Spring에서는 DI 방식으로 코드를 구성할 때, XML을 사용하는 방식과 Annotation 방식을 사용하는 방식이 존재한다. Xml 방식은 Bean 등록과 의존성 주입을 모두 Xml 파일에 작성을 하는 형식이다.그림과 같이 Bean에 모든 정보를 선언을 진행을 하는 것을 볼 수 있다.에 대한 속성을 보면 id는 현재 사용이 되고 있는 bean에 대한 선언이라고 보면 된다. 그리고 내부에 있는 constructor-arg는 생성자 인자를 리터럴로 전달하는 역할이다. property 는 Setter을 주입을 용도로 사용이 된다. ref은 다른 bean에 선언이 되어있는 xmlFixDiscountPolicy에 있는 discountPolicy를 setter로 사용을 한다고 보면 된다. property 이..

멀티캠퍼스 2025.09.15