SpringBoot Popular

SpringBoot2로 Rest api 만들기(10) – Social Login kakao

이번 장에서는 Rest api에 카카오 로그인 연동을 해보겠습니다. 카카오의 로그인은 Oauth2 방식을 따르고 있습니다. Oauth2에 대한 자세한 플로우는 다음 링크를 참고하시기 바랍니다. https://d2.naver.com/helloworld/24942Facebook...

KUBERNETES + DOCKER

SPRING OAUTH2

Spring Boot Oauth2 – AuthorizationServer

Spring 프레임웍에서 제공하는 Oauth2 프로젝트를 이용하여 Oauth Authorization Server를 구축해 보겠습니다. Oauth Authorization은 클라이언트가 서비스 제공자로부터 회원 리소스를 제공받기...

Spring Boot Oauth2 – AuthorizationServer : DB처리, JWT 토큰 방식 적용

앞 장에서는 테스트를 위해 메모리에 정보를 올려놓고 테스트하였으나, 이번에는 DB를 사용해 처리할 수 있도록 개선해 보겠습니다. 최신 소스는 아래 GitHub...

Spring Boot Oauth2 – ResourceServer

이번 장에서는 Spring Oauth2를 이용한 ResourceServer(api서버) 구축을 실습해보겠습니다. 이전 장에서 만든 AuthorizationServer와 연동하여 실습은 진행됩니다. 실습은 bearer 토큰 방식부터...

Lambda

aws lambda 개발하기(7) – CircleCI를 이용하여 자동 배포하기

CircleCI란? CircleCI는 지속적인 통합 및 배포( continuous intergration/deploy)를 지원하는 애플리케이션입니다. github에서는 MarkerPlace를 통해 설치하여 쉽게 사용할 수 있습니다. CircleCi는 개발 용도에 따라 여러 가지 방식으로...

SPRING CLOUD

Websoket

Spring websocket chatting server(1) – basic websocket server

Spring에서 제공하는 Websocket을 이용하여 간단한 채팅 서버를 구현해 보도록 하겠습니다. 일반적인 http통신을 하는 서버들과 달리 채팅 서버는 socket통신을 하는 서버가 필요합니다. 통상적으로 http통신은 Client의 요청이 있을 때만 서버가 응답하고 연결을 종료하는 단방향 통신입니다. 따라서 클라이언트가 서버에 접속해 콘텐츠를 요청하고 결과를 받아 소비하는 구조의 서비스에서 많이 사용됩니다. 그에 반해 socket통신은 Server와 Client가 지속적으로 연결을 유지하고 양방향으로 통신을 하는 방식입니다. 주로 채팅...

Spring websocket chatting server(2) – Stomp로 채팅서버 고도화하기

이전 장에서 websocket을 통하여 간단한 서버/클라이언트 통신을 구현해 보았습니다. 메시징 방식을 잘 정의한다면 websocket만으로도 충분히 좋은 서버/클라이언트 소켓 서버를 완성할 수 있습니다. 하지만 단순한 통신 구조로 인해 Websocket만을 이용해 채팅을 구현하면 해당 메시지가 어떤 요청인지, 어떻게 처리해야 되는지에 따라 채팅룸과 세션을 일일이 구현하고 메시지 발송 부분을 관리하는 추가 코드를 구현해 줘야 합니다.  이번 장에서는 Websocket의 프로세스를 좀 더 고도화하고 메시징에 좀 더 최적화된 방식을 구현하기 위해 Stomp를 적용해 보겠습니다. Stomp Stomp는 메시징 전송을 효율적으로 하기 위해 나온 프로토콜이며 기본적으로 pub/sub 구조로 되어있어...

Spring websocket chatting server(3) – 여러대의 채팅서버간에 메시지 공유하기 by Redis pub/sub

앞 장에서 실습을 통해 채팅을 구현해 보았습니다. websocket과 Stomp를 이용한 구현만으로도 채팅의 기본 기능은 충분히 구현할 수 있는 것을 확인할 수 있었습니다. 하지만 서비스에 사용하려면 좀 더 쓸만하게 변경이 필요합니다. 앞장에서 만든 채팅 서비스는 몇 가지 문제가 있습니다.  서버를 재시작 할때마다 채팅방 정보들이 리셋됨 채팅방의 메인 저장소가 없으므로 서버의 메모리에 적재된 채팅방은 서버를 재시작할 때마다 초기화되는 이슈가 있습니다. DB를 이용하거나 다른 저장소를 이용하여 채팅방이 계속 유지되도록 처리가 필요합니다. 여기서는 Redis를 저장소로 이용해 보겠습니다.  채팅서버가 여러대이면 서버간 채팅방을 공유할수가 없음 현재는 채팅방을 websocket과 Stomp pub/sub를 이용하여 구현하였습니다. 그런데 이러한 구조는 pub/sub가 발생한 서버 내에서만 메시지를 주고받는 것이 가능합니다. 즉 구독 대상인 채팅방(topic)이 생성된 서버 안에서만 유효하므로 다른 서버로 접속한 클라이언트는 해당 채팅방이 보이지도 않고, 채팅방(topic) 구독도 불가능합니다. 즉 구독 대상(채팅방 : topic)이 여러 서버에서 접근할 수 있도록 개선이 필요합니다. 요구조건을 해결하려면 공통으로 사용할 수 있는 pub/sub 시스템을 구축하고 모든 서버들이 해당 시스템을 통하여 pub/sub 메시지를...

Spring websocket chatting server(4) – SpringSecurity + Jwt를 적용하여 보안강화하기

이번 장에서는 SpringSecurity와 Jwt를 이용하여 Web 및 Websocket의 보안을 좀 더 강화하고. 기존의 복잡한 로직을 간소화하는 작업을 진행해 보겠습니다. 크게 아래의 3가지 작업을 진행하겠습니다.  SpringSecurity를 통한 로그인 및 간단한 회원 정보 연동Jwt Token을 이용하여 websocket 통신 보안 강화Redis Topic 공유를 통한 메시지 전송 프로세스 간소화 간단하게 요약하면 채팅과 관련된 웹페이지의 접근권한은 SpringSecurity를 통해 통제합니다. 즉 로그인한 회원만 채팅 화면에 접근 가능하도록 처리합니다. 그리고 WebSocket 연결 및 메시지 전송은 Jwt 토큰을 통해 통제합니다. Websocket 접속이나 메시지 전송 시엔 헤더에 유효한 Jwt Token을 보내야 하며, 유효하지 않은 token에 대해서는 요청 내용을 처리하지 않습니다.  SpringSecurity 및 Jwt토큰을 적용하여도 서비스에 사용하기에는 보안이 취약합니다. 서비스에서 사용하기 위해서는 위 내용은 기본으로 적용하고 서버에 HTTPS(SSL) 프로토콜을 적용하여 요청과 응답 데이터가 네트워크 단에서 암호화되도록 하는 것을 추천합니다. 추가로 가능하다면 서버-클라이언트 간에 주고받는 메시지 자체를 암호화하는...

Spring websocket chatting server(5) – 채팅방 입장/퇴장 이벤트 처리, 인원수 표시

이번 장에서는 채팅방의 기능을 좀 더 고도화하는 실습을 진행하겠습니다. 기존 채팅방에서는 메시지 전달이 무조건 클라이언트에서 서버 측으로 전달된 후에 처리되었는데요. 이번에는 서버에서 처리할 수 있는 메시지와 클라이언트에서 처리할 수 있는 메시지를 구분하여 좀 더 효율적으로 프로세스를 개선해 보겠습니다. 그리고 채팅방 입장 시 클라이언트의 숫자를 표시할 수 있도록 기능을 추가해보겠습니다.  채팅방 입장/퇴장시 알림 메시지를 서버에서 처리하도록 개선채팅방 입장/퇴장시 인원수 표시 채팅 메시지는 현재 ENTER(입장), TALK(대화) 두 가지 타입을 가지고 있습니다. 여기에 QUIT(퇴장)을 추가하여 총 3가지 타입을 사용하도록 합니다. 그리고 채팅방에 메시지가 전달될 때 인원수 정보도 포함되도록 하여 실시간으로 인원수가 갱신되도록 합니다.  채팅방 인원수의 갱신은 입장, 퇴장 이벤트에 한 번씩만 갱신해도 됩니다. 다만 채팅방에 입장한 모든 클라이언트가 입장, 퇴장 이벤트를 수신 못하는 경우를 대비하여 비효율적이긴 하지만 메시지가 수신될 때마다 갱신하도록 처리하겠습니다. ChatMessage DTO에 userCount 및...

Spring websocket chatting server(6) – Nginx+Certbot 무료 SSL인증서로 WSS(Websocket Secure) 구축하기

이번 장에서는 지금까지 만든 웹소켓 채팅 서버를 실제 서버에 올려보고 SSL을 적용하는 실습을 진행해보겠습니다. 실습 내용은 다음과 같습니다. 서버에서 Executable Jar로 Websocket 채팅서버를 실행CertBot을 설치하여 무료 SSL 인증서 발급Nginx의 ReverseProxy를 이용한 WSS( WebsocketSecure ) 구축 실습 환경 Instance - AWS Freetier EC2OS...

Most Popular

블로그의 새로운 소식 받아보기

RECENT COMMENT

REDIS

Redis – Reactive redis

이번 장에서는 Spring2.0의 주요 feature중 하나인 reactor(reactive)가 spring-data-redis에 어떻게 적용되어 있는지 실습을 통해 확인해 보겠습니다. redis에서 reactive를 사용하면 대용량의...

Redis – spring-data-redis : 발행/구독(pub/sub) 모델의 구현

이번장에서는 Redis를 이용한 발행(publish)및 구독(subscribe)모델의 구현 방법에 대해 설명하겠습니다. (이하 pub/sub) pub/sub는 특정한 주제(topic)에 대하여 해당 topic을 구독한 모두에게 메시지를 발행하는 통신 방법입니다.이를테면 날씨정보를...

Performance Training

소나큐브(Sonarqube)를 통한 코드 분석 및 코드 품질 향상

소나큐브는 지속적으로 코드의 품질을 높이고 유지 보수하는데 도움을 주는 정적 분석 애플리케이션입니다. 분석 기능이 탁월하고 개선사항도 자세하게 안내해 줍니다. 간단하게는 코딩 컨벤션부터 코드의 잠재적인 위험 사항까지 안내해주어 올바른 코딩 습관과 코드의 품질향상에 많은 도움을 줍니다. Sonarqube features Linux, Window, Mac 등 다양한 환경에서 모두 구동이 가능합니다. 20개가 넘는 프로그램 언어에 대한 코드 분석을 지원합니다. 개발된 코드의 품질을 어드민을 통해 확인해 볼 수 있고 지속적으로 관리가 가능합니다. 품질 게이트를 통해 표준화된 코드 품질 요구사항을 설정할 수 있습니다. Jenkins 같은 CI엔진과 통합되어 분석이 가능합니다. IDE와 연동되는 다수의 Plugin을 통해 분석이 가능합니다.  다운로드 및 설치 https://www.sonarqube.org/downloads/ 에서 다운로드하고 압축을 해제합니다. 소나큐브 서버 실행 실습은 윈도우 환경하에서 진행합니다. 서버 실행...

Gatling을 이용한 웹 애플리케이션 부하 테스트(1) – 환경 구축 및 Recorder를 이용한 테스트코드 생성

개요 Gatling은 부하 테스트(Load Test)를 통해 웹 서버의 성능을 체크하는 OpenSource Solution입니다. 웹 사이트나 Rest API 등 HTTP...

Gatling을 이용한 웹 애플리케이션 부하 테스트(2) – Scala로 테스트 코드 작성하기

이전에 실습한 Gatling 웹페이지 부하 테스트에 이어 이번장에서는 Scala로 작성한 테스트 코드로 Rest API 서버에 부하를 주는...

Scouter APM(Application Performance Monitoring)을 이용한 Java 서비스 모니터링

소개 JVM 기반 WAS, OS 모니터링 시스템으로 Opensource APM(Application Performance Monitoring)입니다. APM은 응용 프로그램 성능 모니터링 또는 응용 프로그램...

WORDPRESS

JAVA

SpringBoot2로 Rest api 만들기(5) – API 인터페이스 및 결과 데이터 구조 설계

이번 시간엔 api 서버 개발을 본격적으로 진행해 보기 위해 현재 api 인터페이스 및 결과 데이터의 구조를 살펴보고 확장 가능한 형태로 설계해 보겠습니다. api는 제공...

SpringBoot2로 Rest api 만들기(1) – Intellij Community 프로젝트생성

Intellij에서 SpringBoot2를 실습하기 위한 가장 기본적인 설정을 진행해보겠습니다. 프로젝트의 진행은 Intellij Community 버전으로 진행합니다. 다음 사이트에서 Intellij Community 버전을 다운로드하여 설치해 주십시오. https://www.jetbrains.com/idea/download Create New...

Java Collections – List, Map, Set, Tree, Stack, Queue, Deque

Java에서 데이터의 목록을 저장하는 자료구조인 Collections에 대하여 알아봅니다. Collection에 속해있는 다양한 자료구조를 살펴보고 특징 및 사용법에 대하여 실습해 보겠습니다. List Collection 다수의 데이터(객체)를 순서대로 저장하는 자료구조.저장...

Angular

Spring Rest api + Angular framework로 웹사이트 만들기(4) – 게시판(CRUD)

이번장에서는 Angular로 간단한 게시판을 만들어봄으로써 CRUD(Create/Read/Update/Delete) 실습을 해보겠습니다. 게시판의 기능은 총 4가지로 구성되며 각각 게시글 조회, 게시글 쓰기, 게시글 수정, 게시글 삭제로 이루어지며 하나씩...

Angular2 정리(3) – 컴포넌트간 데이터 전달( @Input, @Output, Observable )

Angular는 화면을 구성하는 최소 단위가 컴포넌트입니다. 클라이언트에게 보이는 최종 화면은 하나의 html로 보이지만, 내부적으로는 여러 개의 컴포넌트들로 이루어져 있을 수 있습니다. 따라서 컴포넌트 간에 데이터를 교환해야 하는 이슈가 발생할 수 있습니다.  이번 장에서는 컴포넌트간에 데이터를 교환하는 방법에 대해 알아보겠습니다. 부모 -> 자식 컴포넌트로의 데이터 전달 parent, child 컴포넌트 2개를 생성합니다. $ ng g c...

Spring Rest api + Angular framework로 웹사이트 만들기(2) – 로그인/가입(HttpClient, Proxy, Validation)

이번 장에서는 가입과 로그인 기능을 추가하여 Rest API와 연동하는 방법을 실습하겠습니다. 이번 실습 부터는 리소스를 제공할 rest api가 필요하므로 아래 내용을 참고하여 서버를 띄우고...

DEVOPS

Scouter APM(Application Performance Monitoring)을 이용한 Java 서비스 모니터링

소개 JVM 기반 WAS, OS 모니터링 시스템으로 Opensource APM(Application Performance Monitoring)입니다. APM은 응용 프로그램 성능 모니터링 또는 응용 프로그램 성능 관리를 의미합니다. Scouter는 Server(Collector), Agent, Client(Viewer)로...

Gatling을 이용한 웹 애플리케이션 부하 테스트(1) – 환경 구축 및 Recorder를 이용한 테스트코드 생성

개요 Gatling은 부하 테스트(Load Test)를 통해 웹 서버의 성능을 체크하는 OpenSource Solution입니다. 웹 사이트나 Rest API 등 HTTP 기반 서비스의 성능을 테스트하기 위해 사용되며 실제...

Ansible을 이용한 시스템 구성관리(4) – wordpress (nginx+mariadb+php) 설치 자동화

이전 장에서 실습한 nginx, mariadb 설치 내용을 기반으로 하여 php를 추가로 설치하고 wordpress를 구축하는 실습을 해보겠습니다. 이 실습을 통하여 총 4개의 task가 순차적으로 실행되어...

LATEST ARTICLES

Spring Cloud Messaging – SQS(Simple Queue Service) 사용해보기

이번 실습에서는 SpringBoot 프로젝트에서 SQS에 메시지를 전달하고 받는 실습을 진행해 보겠습니다. SQS는 AWS에서 제공하는 메시지 대기열 서비스로서 대기열(Queue)을 이용하면 메시지를 순차적으로 저장할 수 있으며...

SpringBoot @DomainEvent, AbstractAggregateRoot 이용한 Domain Event 발행

이번 실습에서는 도메인 중심 설계에서 Aggregate에 의해 생성된 Domain Event를 편리하게 게시하고 처리하는 방법에 대해 설명합니다. 스프링에서 제공하는 @DomainEvent, AbstractAggregateRoot를 사용하면 간편하게 이벤트를 연동할...

AWS Athena 살펴보기(Querying a text file using SQL)

AWS에서 제공하는 Athena 서비스에 대해 간단히 알아보겠습니다. Athena는 파일에 저장된 텍스트 데이터를 SQL문으로 질의할 수 있도록 기능을 제공하는 AWS 서비스입니다. "텍스트 파일의 내용을 조회할...

AWS Database Migration Service – Migration auroradb to kafka

DMS AWS 서비스 중엔 DMS라는 재미있는 서비스가 있습니다. DMS는 AWS Database Migration Service(AWS DMS)의 약자로서 소스 데이터 스토어에서 대상 데이터 스토어로 마이그레이션하는 데 사용할 수...

AWS EC2에 forward proxy 서버 만들기(squid proxy)

squid proxy를 이용하여 ec2 장비에 forward proxy를 만드는 방법에 대해 실습해 보겠습니다. forward proxy란 사용자가 특정 사이트에 직접 접속하는게 아니라 proxy가 대신 사이트에 연결하여...

SpringBoot Events

이번 장에서는 SpringBoot framework 내에서 이벤트를 발행하고 사용하는 방법에 대해서 살펴보겠습니다. Event 이벤트는 스프링 프레임워크에서 간과되는 기능 중 하나이지만 유용한 기능입니다. 이벤트 발행(event publishing)은...

Windows powershell을 mac terminal처럼 예쁘게 꾸며보자(Oh-My-Posh)

Windows powershell의 모습은 기본으로 사용하면 Mac과 비교했을 때 매우 투박한 UI를 보여줍니다. 이러한 점은 개발의욕을 감소시키는 요인중 하나라고 생각합니다. Oh-My-Posh 설정을 통해 Mac에서 사용하는...

문서 작성시 멋진 다이어그램을 쉽게 그리는 방법(Lucid Chart/Draw.io)

발표 자료를 만들거나 보고서 등의 문서를 작성할 때 도형을 사용하여 다양한 다이어그램을 그려야 하는 경우가 종종 발생합니다. 문서의 완성도나 퀄리티를 높이고 보는이로 하여금 이해를...

2020년 12월 WordPress 운영 회고 그리고 Google Adsense 수익 결산

코로나 19라는 강력한 이슈로 인해 뭐 한 거 없이 훌쩍 지나가버린 2020년도 이제 1주일밖에 남지 않았다. 아쉬운 한 해였지만 2020년을 정리하고 돌아보는 시간을 ...

ArgoCD를 이용하여 kubernetes cluster에 배포하기(GitOps)

이번 장에서는 Docker Container Repository에 업로드된 Docker Image를 ArgoCD를 이용하여 k8s(kubernetes) cluster에 배포하는 방법에 대하여 알아보겠습니다. 이전 장의 실습을 통해 k8s cluster 구성요소들을 관리하고 배포하기...

일상 다반사

모니터암 첫 사용기 카멜 마운트(Camel Mount) GMA 2D+

구매 계기...나는 프로그래머다! 코로나 19가 창궐하면서 회사에서 쫓겨나 재택근무를 두 달 정도 했다. 뭐 그것까진 좋았는데 역시 일은...

LotteWorld Tower 시그니엘 호텔(Signiel Seoul) 나홀로 투숙기

Visit Signiel Seoul! 코로나가 기승을 부리기 시작했던 초봄 어느 날. 갑자기 나 혼자 Lotteworld tower에 위치한 Signiel Seoul 호텔(롯데 시그니엘 서울 공식사이트 (lottehotel.com)에 숙박하게 되어 글을 남겨본다. 남이 뒤에서 떠밀어주지 않는 이상 자발적으로 갈 일이 없는 곳인데 특급호텔 복이 터졌는지 나만의 시간을 하루 가질 수 있게 되었다. Sky View (79층) 날씨는 좋았지만 미세먼지가 수치가 심해서 먼 곳이 뿌옇게 보인다. 호텔에 도착하면 체크인은 79층에서 이루어지는데 79층 자체도 어마어마한 높이여서 여기서 밖을 내다보면 아랫...

한정판 오동통면과 함께하는 소확행+수박 좋아

오늘은 요즘 한창 핫한? 라면계의 신성! 오뚜기 오동통면 한정판을 먹어보았다. 다시마의 담백하고 맛있는 국물 + 탄력 있는...

학창시절 추억의 중국 무협영화 그리고 마영성의 풍운(風雲)에 대하여

남자라면 한 번쯤 학창 시절, 아니 학창 시절이 아니라도 일생에 한 번쯤은 무협에 푹 빠져 지냈던 시기가 있으리라 생각한다. 나는 80~90년대 홍콩 무협 영화를 어린 시절 비디오로 접했던 추억을 가지고 있는, 이제는 중년에 들어선 나이가 너무 적지도 많지도 않은 그런 나이 때의 사람이다. 천녀유혼 왕조현을 흠모했던. 이제는 아재가 돼버린 세대다. 그리고 이제 고인이 되어버린 장국영 형님도..ㅜㅜ 임청하 누님도 최애 배우중 하나였고, 무술 영화의 주인공으로서 많은 이름을 날렸던...