일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Validations
- 다운캐스팅
- full text indexing
- 야구게임
- IBatis procedure
- Full text
- 업캐스팅
- 단축키
- 전체
- 이클립스
- 상속
- 전체텍스트
- 25가지 효율적인 sql작성법
- while
- 형변환
- 다형성
- Random
- 전자정부
- 페이징
- Login with OAuth Authentication
- 자바
- 스프링
- 추상클래스
- jquery
- 로또
- 상속예제
- 자바 야구게임
- 가변인자
- angular2
- Today
- Total
목록SPRING (109)
nalaolla
이번 장에서는 채팅방의 기능을 좀 더 고도화하는 실습을 진행하겠습니다. 기존 채팅방에서는 메시지 전달이 무조건 클라이언트에서 서버 측으로 전달된 후에 처리되었는데요. 이번에는 서버에서 처리할 수 있는 메시지와 클라이언트에서 처리할 수 있는 메시지를 구분하여 좀 더 효율적으로 프로세스를 개선해 보겠습니다. 그리고 채팅방 입장 시 클라이언트의 숫자를 표시할 수 있도록 기능을 추가해보겠습니다. 채팅방 입장/퇴장시 알림 메시지를 서버에서 처리하도록 개선 채팅방 입장/퇴장시 인원수 표시 채팅 메시지는 현재 ENTER(입장), TALK(대화) 두 가지 타입을 가지고 있습니다. 여기에 QUIT(퇴장)을 추가하여 총 3가지 타입을 사용하도록 합니다. 그리고 채팅방에 메시지가 전달될 때 인원수 정보도 포함되도록 하여 실..
이번 장에서는 SpringSecurity와 Jwt를 이용하여 Web 및 Websocket의 보안을 좀 더 강화하고. 기존의 복잡한 로직을 간소화하는 작업을 진행해 보겠습니다. 크게 아래의 3가지 작업을 진행하겠습니다. SpringSecurity를 통한 로그인 및 간단한 회원 정보 연동 Jwt Token을 이용하여 websocket 통신 보안 강화 Redis Topic 공유를 통한 메시지 전송 프로세스 간소화 간단하게 요약하면 채팅과 관련된 웹페이지의 접근권한은 SpringSecurity를 통해 통제합니다. 즉 로그인한 회원만 채팅 화면에 접근 가능하도록 처리합니다. 그리고 WebSocket 연결 및 메시지 전송은 Jwt 토큰을 통해 통제합니다. Websocket 접속이나 메시지 전송 시엔 헤더에 유효한 ..
앞 장에서 실습을 통해 채팅을 구현해 보았습니다. websocket과 Stomp를 이용한 구현만으로도 채팅의 기본 기능은 충분히 구현할 수 있는 것을 확인할 수 있었습니다. 하지만 서비스에 사용하려면 좀 더 쓸만하게 변경이 필요합니다. 앞장에서 만든 채팅 서비스는 몇 가지 문제가 있습니다. 서버를 재시작 할때마다 채팅방 정보들이 리셋됨 채팅방의 메인 저장소가 없으므로 서버의 메모리에 적재된 채팅방은 서버를 재시작할 때마다 초기화되는 이슈가 있습니다. DB를 이용하거나 다른 저장소를 이용하여 채팅방이 계속 유지되도록 처리가 필요합니다. 여기서는 Redis를 저장소로 이용해 보겠습니다. 채팅서버가 여러대이면 서버간 채팅방을 공유할수가 없음 현재는 채팅방을 websocket과 Stomp pub/sub를 이용하..
이전 장에서 websocket을 통하여 간단한 서버/클라이언트 통신을 구현해 보았습니다. 메시징 방식을 잘 정의한다면 websocket만으로도 충분히 좋은 서버/클라이언트 소켓 서버를 완성할 수 있습니다. 하지만 단순한 통신 구조로 인해 Websocket만을 이용해 채팅을 구현하면 해당 메시지가 어떤 요청인지, 어떻게 처리해야 되는지에 따라 채팅룸과 세션을 일일이 구현하고 메시지 발송 부분을 관리하는 추가 코드를 구현해 줘야 합니다. 이번 장에서는 Websocket의 프로세스를 좀 더 고도화하고 메시징에 좀 더 최적화된 방식을 구현하기 위해 Stomp를 적용해 보겠습니다. Stomp Stomp는 메시징 전송을 효율적으로 하기 위해 나온 프로토콜이며 기본적으로 pub/sub 구조로 되어있어 메시지를 발송하..
Spring에서 제공하는 Websocket을 이용하여 간단한 채팅 서버를 구현해 보도록 하겠습니다. 일반적인 http통신을 하는 서버들과 달리 채팅 서버는 socket통신을 하는 서버가 필요합니다. 통상적으로 http통신은 Client의 요청이 있을 때만 서버가 응답하고 연결을 종료하는 단방향 통신입니다. 따라서 클라이언트가 서버에 접속해 콘텐츠를 요청하고 결과를 받아 소비하는 구조의 서비스에서 많이 사용됩니다. 그에 반해 socket통신은 Server와 Client가 지속적으로 연결을 유지하고 양방향으로 통신을 하는 방식입니다. 주로 채팅 같은 실시간성을 요구하는 서비스에서 많이 사용됩니다. Websocket Websocket은 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개..
Spring Security를 이용한 REST API를 만들때, 일반적인 Spring Security를 이용하는 경우에는 다Login 성공 또는 실패시에 모두 302번 Redirect가 발생하게 됩니다. 또한 인증되지 않은 사용자가 API에 접근한 경우에도 마찬가지로 302번 Redirect로 Login Page로 이동하게 되는데, 이는 REST API 개발시에는 원하지 않는 결과입니다. 먼저, 개발할 API 서버는 Form 인증을 지원하는 것을 전제로 합니다. Basic/Digest 인증의 경우에는 다른 방법으로 개발이 되어야지 됩니다. 일반적인 Form 인증을 이용하는 경우에 Spring Security의 기본 Form인증은 다음 문제를 해결해야지 됩니다. 인증되지 않은 Request가 들어오는 경우..
이번 장에서는 지금까지 개발한 api에 캐시를 적용해 보도록 하겠습니다. 캐시란 자주 사용되는 데이터를 메모리에 저장하고 반환하여 하드디스크의 원본데이터를 거치지 않게 함으로서 리소스 READ시 효율을 높이는 기술을 말합니다. 이번장에서는 api 결과에 캐시를 적용하여 DB에 요청을 최소화 함으로써 DB부하를 감소시키고, api의 결과 데이터 반환 속도를 향상시켜 보겠습니다. Redis 캐시 캐시종류에는 여러가지가 있으나, 근래에 가장 많이 사용되는 Redis를 캐시 Storage로 사용해보겠습니다. Spring에서는 이미 Redis를 이용하여 캐시를 손쉽게 구현할수 있도록 spring-data-redis 라이브러리를 제공하고 있습니다. Embedded Redis 테스트를 위해 Redis 서버를 직접 설..
이번 장에서는 지금까지 구축한 SpringBoot + Security 환경에 간단한 JPA 게시판을 추가해 보도록 하겠습니다. 관계 다이어그램은 다음과 같습니다. 하나의 게시판에는 여러 개의 게시물이 작성될 수 있으므로 BOARD와 POST는 1:N의 관계를 같습니다. 회원은 여러 개의 게시물을 작성할 수 있으므로 USER와 POST 역시 1:N의 관계를 같습니다. Entity 작성 Entity 공통으로 필요한 날짜정보를 담는 CommonDateEntity를 생성하여 Board, Post, User Entity가 상속 받도록 처리합니다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class..
Jenkins를 이용하면 배포에 필요한 여러가지 절차를 통합하여 편리하게 배포할수있는 시스템을 만들 수 있습니다. 이번장에서는 Jenkins로 배포시스템을 구축하고 배포후에 문제가 생겼을 경우 Git Tag를 이용하여 바로 소스를 롤백할 수 있도록 기능 추가까지 진행해 보겠습니다. Jenkins 설치 jenkins는 여러가지 설치방법을 제공합니다. Mac이나 Windows에는 자체 설치 파일을 제공하며 Linux에서는 yum이나 apt-get으로 설치할 수 있습니다. 최신 버전이 필요하다면 jar파일로도 제공하기 때문에 jar파일을 다운로드 받아 직접 실행해도 되고, 별도로 설치한 tomcat의 webapps 하위에 jar파일을 옮겨놓고 실행해도 됩니다. OS별 Jenkins 설치에 대한 자세한 내용은 ..
이번 장에서는 SpringBoot 프로젝트를 실제 AWS EC2 서버에 배포하고 Nginx와 연동하여 서버를 실행해 보는 실습을 하겠습니다. 이번 실습에서는 AWS에 EC2서버를 ssh로 접속할 준비가 되어있거나 Spring을 배포할 서버가 한대는 준비되어 있어야 합니다. AWS는 신규가입시 1년동안 무료로 서버를 제공하므로 이번 기회에 한번 가입해서 사용해 보는것도 좋습니다. EC2서버가 준비되었다면 톰켓과 연동할 Nginx를 설치합니다. 설치하는김에 Mysql(mariadb)도 같이 설치 합니다. >> AWS EC2에 nginx, mariadb 설치하기 SpringBoot는 실행가능한 jar파일을 생성하여 자체적으로 웹 컨테이너를 구동할 수 있습니다. 별다른 설정을 하지 않으면 Embeded Tomc..