Redis – Spring-data-redis : @Cacheable, @CachePut, @CacheEvict, @RedisHash

이번장에서는 spring-data-redis를 이용하여 SpringBoot와 redis를 연동하고, Boot에서 제공하는 Cache 어노테이션을 사용하여 캐시를 처리하는 방법에 대해 실습하겠습니다. builld.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-freemarker' implementation 'org.springframework.boot:spring-boot-starter-web'…

Continue Reading Redis – Spring-data-redis : @Cacheable, @CachePut, @CacheEvict, @RedisHash

thumbor+varnish를 이용한 이미지 처리 서버(thumbnail server) 구축

이번 장에서는 서비스 구축시 클라이언트에게 최적의 이미지를 제공하기 위해 필요한 이미지 처리서버를 구축해 보겠습니다. 현대의 서비스들은 웹, 모바일 웹, android, ios등 다양한 다양한 플랫폼으로 서비스가…

Continue Reading thumbor+varnish를 이용한 이미지 처리 서버(thumbnail server) 구축

SpringBoot2로 Rest api 만들기(13) – Jenkins 배포(Deploy) + Git Tag Rollback

Jenkins를 이용하면 배포에 필요한 여러 가지 절차를 통합하여 편리하게 배포할 수 있는 시스템을 만들 수 있습니다. 이번장에서는 Jenkins로 배포시스템을 구축하고 배포 후에 문제가 생겼을 경우…

Continue Reading SpringBoot2로 Rest api 만들기(13) – Jenkins 배포(Deploy) + Git Tag Rollback

SpringBoot2로 Rest api 만들기(14) – 간단한 JPA 게시판(board) 만들기

이번 장에서는 지금까지 구축한 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…

Continue Reading SpringBoot2로 Rest api 만들기(14) – 간단한 JPA 게시판(board) 만들기

SpringBoot2로 Rest api 만들기(12) – Deploy & Nginx 연동 & 무중단 배포 하기

이번 장에서는 SpringBoot 프로젝트를 실제 AWS EC2 서버에 배포하고 Nginx와 연동하여 서버를 실행해 보는 실습을 하겠습니다. 이번 실습에서는 AWS에 EC2서버를 ssh로 접속할 준비가 되어있거나 Spring을…

Continue Reading SpringBoot2로 Rest api 만들기(12) – Deploy & Nginx 연동 & 무중단 배포 하기

SpringBoot2로 Rest api 만들기(11) – profile을 이용한 환경별 설정 분리

이번장에서는 기존에 단일 파일로 관리되던 스프링 설정을 서버 환경에 따라 다르게 적용되도록 개선해보겠습니다. 환경별 application.yml의 분리 /resources 아래에 application.yml을 복사하여 application-alpha.yml, application-local.yml 두개를 더 만듭니다.…

Continue Reading SpringBoot2로 Rest api 만들기(11) – profile을 이용한 환경별 설정 분리

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

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

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

AWS EC2 – install nginx, mariadb

AWS EC2에 nginx와 mariadb를 설치하는 방법에 대하여 정리합니다. 서버 타임존 변경 aws는 기본적으로 os설치시 타임존이 UTC로 맞춰져있으므로 nginx/mariadb 설치전에 TimeZone을 변경해 줍시다. $ date 2019.…

Continue Reading AWS EC2 – install nginx, mariadb

Redis – SpringBoot2 redis cluster : strings, lists, hashs, sets, sortedsets, geo, hyperloglog

SpringBoot2와 redis cluster를 연동하고, redis command에 대해 설명합니다. 다음을 참고하여 프로젝트를 하나 생성합니다.>> Intellij Community 프로젝트생성 Boot를 실행하기 위한 Application Class 생성 package com.redis.cluster; @SpringBootApplication…

Continue Reading Redis – SpringBoot2 redis cluster : strings, lists, hashs, sets, sortedsets, geo, hyperloglog

OpenJdk 설치, 삭제, 업데이트

Oracle에서 Java를 유료화 하면서 상업적인 목적의 서버에 Java를 설치하고 사용할 경우 주의해야 합니다. 로컬 PC에서의 개발은 oracle, openjdk 상관없이 사용해도 문제가 없지만, 서버 환경에서의 사용은…

Continue Reading OpenJdk 설치, 삭제, 업데이트

기술 용어 및 개념 정리 모음

GC란? 가비지 컬랙션이란 힙에서 참조되지 않는 객체들을 탐색 후 삭제하는 과정으로 삭제된 객체의 메모리를 반환하여 힙 메모리를 재사용할 수 있게 하는 것이다. 힙 영역의 객체 중 stack의 변수와 연결이 끊겨 도달 불가능한 인스턴스들은 가비지 컬랙션의 대상이 된다. MinorGc Young영역(Eden + Survivor1 + Survivor2)에서 이용하지 않는 메모리가 지워지는 과정을 MinorGc라 한다.새로 생성한 대부분의 객체는 Eden영역에 위치한다.Eden 영역에서…

Continue Reading 기술 용어 및 개념 정리 모음

Docker로 빠르게 개발환경 구성하기(mysql, redis, rabbitmq, mongoDB)

이번 시간에는 docker를 이용하여 로컬PC에 개발환경을 빠르게 구성하는 방법에 대하여 실습하겠습니다. 일반적인 웹서비스 구축시 DB로는 Mysql, MongoDB를 캐시 서버로는 Redis를 그리고 메시지큐로는 RabbitMQ를 주로 사용하게…

Continue Reading Docker로 빠르게 개발환경 구성하기(mysql, redis, rabbitmq, mongoDB)

Angular2 정리(2) – Hello Angular 및 기본개념설명

앞서 환경이 구축되었다는 가정하에 Angular 프로젝트를 생성합니다. 터미널에서 ng명령어를 통해 Angular 프로젝트를 생성하고 아래와 같이 서버를 실행합니다. // ng new 프로젝트명(소문자와 '-'만 이용하여 생성) $…

Continue Reading Angular2 정리(2) – Hello Angular 및 기본개념설명

Angular2 정리(1) – 설치 및 개발환경 구축

Angular란? Node기반의 완전하고 독립적인 웹 프런트 프레임워크로서, 체계적이고 구조화된 개발 방법 및 환경을 제공합니다. 기존의 웹 개발은 백엔드 서버와 강 결합된 상태의 템플릿 엔진 기반의 개발 방법이 주류였습니다. 웹 개발 환경은 꾸준히 발전해 왔지만 이러한 백엔드 서버의 부가적인 요소로서의 웹 개발은 비효율 적이고, 백엔드 서버의 바운더리 안에서는 더 이상 발전하기 힘든 상황에 직면하였습니다.  Angular를 비롯한 여러 가지 프런트 프레임워크의 주요 목표 중 하나는 html, javascript, css를 통한 웹 개발 시 백엔드 개발 이상의 개발 생산성을 확보하는 것입니다. Angular를 사용하면 개발면에서 상당히 논리적이고 편리한 개발환경을 제공한다는 것을 알 수 있습니다.  뭐가 다른가? 웹 개발을 위한 전용 프레임워크로서, node 기반으로 서버가 실행되며 별도의 백엔드 서버의 부가 요소로서 개발환경을 구성하지 않습니다.(ex. Spring-Freemarker-tomcat) npm명령을 제공하여 쉽게 개발 환경을 구축할 수 있어 기존의 환경보다 놀라운 접근성을 제공합니다.  html, css, typescript 파일로 구성되는 컴포넌트 생성을 통해 기능에 따라 웹 화면을 완전히 독립적으로 실행되는 모듈로 만들 수 있습니다.  Typescript의 사용을 통해 여러 가지 이점을 가지고 개발할 수 있습니다. ( 컴파일을 통한 실행 전 오류 검출, 클래스, 인터페이스, 상속 등 객체지향 프로그래밍 지원, 타입 지정을 통해 데이터의 타입에 따른 오류 처리가 필요 없고, 타입 유추가 가능하여 컴파일 단 오류 검출이 가능.) 막강한 자동완성 기능을 제공하여 웹 개발 시 생산성을 향상할…

Continue Reading Angular2 정리(1) – 설치 및 개발환경 구축

Java Optional 사용법

Java8에서 도입된 Optional에 대하여 살펴보겠습니다. Optional class의 목적은 null 참조 대신 Optional value로 표현되는 형식의 솔루션을 제공하는 것입니다. 즉 이전 버전까지의 Java의 고질적인 문제였던 NullPointerException을…

Continue Reading Java Optional 사용법

Python으로 Redis cache 일괄 삭제 프로그램 만들기

이번 실습에서는 Redis key 일부를 입력받아 연관된 캐시를 찾아 삭제해주는 프로그램을 작성해 보겠습니다. 개요 현업에서 Redis는 DB 캐시로 사용하는 경우가 많습니다. Redis를 사용하면 DB 부하를…

Continue Reading Python으로 Redis cache 일괄 삭제 프로그램 만들기

Java Stream 실습 코드 정리

개발에서 자주 사용하는 Java stream 예제 코드 정리 // 배열 스트림 String[] strArr = new String[]{"one", "two", "three", "four", "five"}; Stream<String> stream = Arrays.stream(strArr); assertThat(stream.collect(Collectors.toList()),…

Continue Reading Java Stream 실습 코드 정리

Spring Boot Oauth2 – ResourceServer : 비대칭키를 이용한 서명(asymmetric keys to do the signing process)

이번 시간에는 인증서버와 리소스 서버간에 토큰 인증시 서명 방식을 변경해 보겠습니다. 서명이란 서로간에 신뢰성있는 통신을 하기 위한 절차라고 생각하면 됩니다. 최신 소스는 아래 GitHub 주소를…

Continue Reading Spring Boot Oauth2 – ResourceServer : 비대칭키를 이용한 서명(asymmetric keys to do the signing process)

Spring Boot Oauth2 – ResourceServer

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

Continue Reading Spring Boot Oauth2 – ResourceServer

Redis – cluster

Redis single instance 구성에 이어 cluster를 구성하는 방법을 실습해 보겠습니다. Cluster란 각기 다른 서버를 하나로 묶어 하나의 시스템처럼 동작하게 함으로써 클라이언트에게 고가용성을 제공하는 것을 말합니다.…

Continue Reading Redis – cluster