728x90
반응형

1인 개발을 위해서 환경을 꾸밀 때에는 많은 제약이 있다. 여유 자금이 많아서 서버를 사놓고 VM을 여러 개 설치하여 사용할 수 있겠지만, 난 가난한 가장으로 그러한 환경을 꾸밀 수가 없었다. 사실 현재 밴쿠버에서 유학생으로 있고 집도 좁아서 서버를 설치해 둘 공간도 없긴 하다. 그래서 최근 사양이 좋은 Laptop을 구매하였고 어떻게 개발환경을 꾸밀까 고민을 했었다. 

 

kubernetes를 local로 설치할 경우 다양한 방법이 있다. Linux machine일 경우에는 더 많은 tool들을 사용할 수 있지만, 난 macOS 환경이라 제약이 좀 있었다. 

 

대표적으로 모든 OS 환경에 사용할 수 있는 것이 minikube, kind, k3d, docker desktop kubernetes 등이 있다. 

이 중 k3d, kind는 내 Github에 설치 방법을 간단하게 정리해 둔 것이 있다. 

 

1. k3d 설치 방법 (https://github.com/coolexplorer/k8s-charts/tree/main/k8s/k3d)

2. kind 설치 방법 (https://github.com/coolexplorer/k8s-charts/tree/main/k8s/kind)

 

위 두가지 툴의 특징은 node를 docker container로 생성하고 그 노드들을 사용하여 cluster 환경을 구축할 수 있다. 

하지만 랩탑의 적은 사용으로 굳이 여러 노드를 설치할 필요가 없다고 생각하여, 개발 초반에는 간단한 툴을 사용하고자 했다. 

그래서 선택한 것이 Docker desktop 이다.

 

Docker desktop 설치

mac이나 windows os 환경에서 docker를 사용하기 위해서는 보통 Docker desktop을 이용한다. UI가 제공되기 때문에 Configuration 변경이나 현재 상태 등을 확인하기 좋기 때문이다. 

이 Docker desktop의 설치는 아래 경로에서 가능하다.

https://www.docker.com/get-started

 

Get Started with Docker | Docker

Learn about the complete container solution provided by Docker. Find information for developers, IT operations, and business executives.

www.docker.com

 

Docker desktop을 설치하고 Run을 시키면 아래와 같은 U를 확인할 수 있다.

 

Kubernetes 실행

Kubernetes 설치가 아니라 실행이라고 적었다. 사실 이 툴을 이용하여 kubernetes를 설치하는 것이 아니라 실행해야 한다고 하는게 맞을 것 같다. 그만큼 간단하다는 얘기이다. 

Settings 메뉴로 들어가면 Kubernetes Menu가 보인다. 클릭해보자. 

 

처음은 `Enable Kubernetes` 가 Check되어 있지 않다. 그것을 체크를 해주고 설치를 하면 몇 분 후에 설치가 완료된다. 

현재 나의 환경에는 v1.22.4가 설치되어 있다. 

 

Kubernetes에 접근하기

kubernetes를 설치하고 나면 이제 이 cluster 환경에 접근이 가능해야 한다. 기본적으로 kubernetes의 authentication 정보는 `~/.kube/config` 에 저장이 된다. Docker desktop은 현재 PC를 master node로 하여 설치되므로, 설치가 완료되면 auth 정보가 해당 파일에 자동으로 저장된다. 너무 쉽다. 

 

하지만 cluster 환경에 접근은 authentication으로만은 불가능하다. 기본적인 접근은 `kubectl`이라고 하는 Command Line Interface를 통해서 수행한다. 가장 기본이고 가장 많이 사용하는 것이므로 꼭 기억하자. 

 

kubectl 설치하기

내 환경이 mac이므로 이것을 기준으로 설명하겠다. 나머지는 공식문서 Link로 대신한다. 

공식문서 : https://kubernetes.io/docs/tasks/tools/

 

Install Tools

Set up Kubernetes tools on your computer.

kubernetes.io

 

Mac에서 설치방법 중에서도 가장 간단한 Homebrew로 진행하자.

$ brew install kubectl

 

설치가 완료되면 아래과 같은 명령어로 Cluster 정보를 확인해보면 된다. 

$ kubectl cluster-info

Kubernetes control plane is running at https://kubernetes.docker.internal:6443
CoreDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'

 

오늘은 나의 개발환경의 가장 기본이 되는 kubernetes 설치에 대해서 확인해 보았다. 

728x90
반응형
728x90
반응형
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

오늘은 Redis의 기본적인 개념에 대해서 공부하는 겸 포스트를 적어보도록 하겠다. 

우선 Redis는 in-memory data structure store, database, cache, message broker 등으로 사용할 수 있는 open source platform이다. 

보통은 memory에 필요한 data를 caching 하여 Database의 접근을 줄여서 service의 속도를 높이기 위해서 사용한다. 

 

저장할 수 있는 data structure로는 String, Hash, List, Set, sorted Set, Bitmap, Hyperloglogs, Geospatial Indexes, Stream 등 다양하다. 그리고 Cluster로 구성하여 Fault tolerance, Preventing diseaster 등을 할 수 있다.

 

 To achieve top performance, Redis works with an in-memory dataset. Depending on your use case, you can persist your data either by periodically dumping the dataset to disk or by appending each command to a disk-based log. You can also disable persistence if you just need a feature-rich, networked, in-memory cache.
Redis also supports asynchronous replication, with very fast non-blocking first synchronization, auto-reconnection with partial resynchronization on net split.

 

Redis는 Top performance를 달성하기 위해 in-memory data set으로 동작된다. 이 말은 service가 중단될 경우 data를 잃어버리게 되는 것이다. 하지만 데이터를 저장하기 위해서 주기적으로 데이터를 disk에 저장하거나 수행되는 각 커맨드를 disk에 log로 남길 수 있다. 

그리고, Asyncronous replication을 지원해서 replica 를 생성해 둔다면 불의의 사고로 데이터를 잃어버리는 것을 막을 수 있다. 

 

You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing an element to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.

그리고 중요한 부분! Redis는 Atomic operation을 보장한다. 이 얘기는 여러 유저가 동시에 같은 정보를 업데이트 하더라도 손실되는 정보가 없다는 얘기이다. 예를 들면 2명의 유저가 동시에 `count` 를 증가시킨다고 할 때 완전 동시에 업데이트시 count는 1개만 증가할 수 있는 경우가 발생될 수 있을 것이다. 하지만 Atomic operation이 보장된다면 count는 2가 증가된다. 

 

Redis는 많은 언어를 지원하고 있다. Java의 경우는 여기를 보면 된다. 

앞으로 Redis 설치 및 사용방법 등에 대해서 알아보도록 하자~

728x90
반응형

'Infrastructure > redis' 카테고리의 다른 글

Redis 설치하기 in kubernetes  (0) 2022.01.12
728x90
반응형

Spring boot application을 실행해보면 아래와 같은 기본적인 banner가 보여진다. 

 

이것은 기본적으로 Spring boot dependecy에 추가되어 있는 banner이다. 하지만, 변경을 하고 싶다면 변경이 가능하다. 

Microservice의 service는 각자의 이름이 있으므로 그 이름으로 보여지는 것이 더 좋지 않을까?

 

그래서 바꿔보겠다.

 

감사하게도 Online Spring Boot Banner Generator 라는 사이트가 있고 우리는 여기 안에 있는 폰트로 Banner의 내용을 채워볼 것이다. 

 

우선 banner.txt. 파일을 `src/main/resources` 아래에 생성한다. 다음 위 사이트로 가서 원하는 이름으로 Banner 내용을 만든다.

일단 기본 Banner Font로 간단하게 생성하였다. 

 

아래의 표시된 내용을 복사하여 banner.txt 로 옮긴다. 그리고 수행해보면 Banner가 변경된 것을 알 수 있다. 

 ,---.                           ,--.
'   .-'   ,---.   ,---.   ,---.  `--'  ,---.  ,--,--,
`.  `-.  | .-. : (  .-'  (  .-'  ,--. | .-. | |      \
.-'    | \   --. .-'  `) .-'  `) |  | ' '-' ' |  ||  |
`-----'   `----' `----'  `----'  `--'  `---'  `--''--'

 
Powered by Spring Boot 2.6.2

 

하지만 자세히 살펴보면 한 줄이 표시되지 않고 있다. 바로 아래의 내용이다. 

${application.title} ${application.version}

이 부분을 표시하기 위해서는 application.properties나 application.yaml 파일에 해당 내용을 등록시켜주면 된다. 

 

Spring Initializr로 생성하면 `application.properties`로 디폴트로 생성되는데, 개인적으로 Yaml이 편해 application.yaml로 파일명을 변경하였다. 

 

Banner 정보 표시를 위해서 최종적으로는 아래와 같이 수정하였다. 

banner.txt

 ,---.                           ,--.
'   .-'   ,---.   ,---.   ,---.  `--'  ,---.  ,--,--,
`.  `-.  | .-. : (  .-'  (  .-'  ,--. | .-. | |      \
.-'    | \   --. .-'  `) .-'  `) |  | ' '-' ' |  ||  |
`-----'   `----' `----'  `----'  `--'  `---'  `--''--'

${server.title} ${server.version}
Powered by Spring Boot ${spring-boot.version}

application.yaml

# server
server:
  title: spring-micro-session
  version: '@project.version@'
  port: 8180

 

최종 결과물! 원하는대로 표시되었다. 

 

728x90
반응형
728x90
반응형

Spring boot project를 생성하는 방법에 대해서 간략하게 공유하고자 한다. 

 

IDE 선택

Project를 생성하기에 앞서 어떠한 나는 어떤 IDE를 사용하는지 간단히 공유해볼까 한다. 난 Software Quality Engineer와 DevOps 업무를 하다보니 여러가지 언어를 사용하여 프로젝트를 진행하였고, 그러다 보니 이런저런 IDE를 많이 사용하게 되었다. 

 

1. Java / Scala Project

   Java 나 Scala로 개발을 한다면 JetBrain사의 Intellij가 아주 편리하다. Java를 타겟으로 개발된 IDE 이다 보니, 자동완성이나 Lombok, Spring boot annotation 등 많은 부분을 편리하고 쉽게 개발이 가능하다. Maven, Kotlin, SBT 등 여러가지 Dependency management, Build, Packaging 환경도 쉽게 설정 및 테스트가 가능하다.

 

2.  Python Project

   Python의 경우 JetBrain 사의 PyCharm 을 사용하거나 Visual Studio Code를 사용한다. 요즘 vscode로 왠만한 개발을 다할 수 있어서 하나만 사용해도 크게 문제가 없으나, Intellij에 익숙해진 나는 PyCharm이 편리했다. 

 

3. 그 외

  그 외의 Project로 Jenkins Pipeline을 위한 Groovy, Kubernetes 배포를 위한 Yaml (Helm Chart 포함), C++ 개발은 Visual Studio Code를 사용하고 있다. 

 

현재 Project가 Python이 주력이 아니기 때문에 PyCharm은 거의 쓰고 있지 않고 Intellj 와 vscode는 활발하게 사용하고 있는 중이다. 

개인적으로 Spring boot Project는 Intellij가 최고인 것 같다. 

 

Spring Boot Project 시작

Spring boot Project를 생성하는 방법은 Manual로 Java Project를 만들어서 Dependency와 Plugin을 처음부터 추가하는 방법과 Spring Initializr 를 사용하여 몇가지 Dependency를 추가한 후 초기 프로젝트를 생성하는 방법이다. 

 

우선 Spring Initializr로 생성하는 방법은 여기로 접속하고 아래와 같이 간략하게 정보를 입력한다. 

Spring Initializr

위와 같이 간단하게 설정 후 `Generate` 버튼을 누르면 Java Project를 다운로드 할 수 있다.

spring-boot-session.zip
0.06MB

 

아래는 위의 Tool로 생성하였을 때 생성된 pom.xml이다. 

위에 첨부된 프로젝트를 열면 기본 프로젝트 생성 끝이다. 

프로젝트를 열어보면 아래와 같은 Project Tree구조가 나온다. (.gitignore 및 LICENCE는 이 프로젝트를 Github에 등록하면서 생성하였다.)

 

먼저 Project를 시작하면 Dependency를 Download 해야한다. 

Intellij의 오른편의 Maven Menu를 열고 "Reload All Maven Project" 를 클릭한다.  (Reload 모양의 버튼이다.)

 

Dependency가 완료되면 프로젝트를 실행해볼 수 있다. SpringBootSessionApplication.java 파일에서 마우스 오른쪽 버튼을 누르고 아래 메뉴를 선택한다. 

실행을 해보면 아래와 같이 서비스가 시작되는 것을 확인할 수 있다. 

 

오늘은 간단하게 Spring boot Project를 만드는 것을 알아보았다. 앞으로 이 프로젝트를 베이스로 코드는 추가해 나가고자 한다. 

현재 auth project는 코드가 어느정도 들어가 있는 상태이지만 session project는 이제 시작이므로 이 프로젝트에 추가되는 정보들을 가지고 포스트를 이어나가고자 한다. 

728x90
반응형

+ Recent posts