728x90
반응형

전체 글 131

[Elasticsearch] Elasticsearch란?

Elasticsearch Apache Lucene 기반의 Java 오픈소스 분산형 Restful 검색 및 분석 엔진입니다. 방대한 양의 데이터에 대해 실시간으로 저장과 검색 및 분석 등의 작업을 수행할 수 있습니다. Elasticsearch는 정형 데이터, 비정형 데이터, 지리 데이터 등 모든 타입의 데이터를 처리할 수 있는데, 이를 JSON문서로 데이터를 저장할 수 있습니다. Elasticsearch와 RDB 비교 Relational Database ElasticSearch Database Index Table Type Row Document Column Field Index Analyze primary Key _id Schema Mapping Physical partition Shard Logical..

[Docker] 도커란 무엇인가?

Docker 도커 '컨테이너 기반의 오픈소스 가상화 플랫폼' 서버에서 컨테이너란, 다양한 프로그램, 실행환경을 컨테이너로 추상화하고,동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떠한 프로그램도 컨테이너로 추상화 할 수 있고,어떠한 환경에서도 실행할 수 있습니다. TMI) 구글은 모든 서비스를 컨테이너로 동작시키고, 매주 20억 개의 컨테이너를 구동한다고 합니다. Container 컨테이너 '격리된 공간에서 프로세스가 동작하는 기술' 기존의 VMware, VirtualBox같은 가상머신은 Host OS위에 Guest OS 전체를 가상화하여 사용하는 방식을 이용하였습니다. 이 방식은 여러가지 OS를 가상화할 수 있고 사용법이 ..

CI.CD/Docker 2023.01.26

[Spring] Email 인증 시스템 구현

간단한 Email 인증 시스템을 만들어보겠습니다. 동작 순서 사용자가 이메일을 입력 랜덤 코드를 생성 Email 전송 라이브러리를 이용하여 코드를 사용자 Email에 전송 사용자가 인증 코드를 입력하면 인증 성공 (시스템 내부에서 맞는지 체크) Dependencies 추가 [참고로 스프링 3.0 기준입니다.] dependencies { // 이메일 인증 관련 의존성 implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.6.3' implementation group: 'com.sun.mail', name: 'jakarta.mail', version: '2.0.1' implementation..

Spring 2022.12.22

[Effective Java] null이 아닌, 빈 컬렉션이나 배열을 반환하라

null을 반환하는 코드는 클라이언트가 null 상황을 처리하는 코드를 추가하도록 한다. 컬렉션이나 배열 같은 컨테이너가 비었을 때 null을 반환하는 메서드를 사용할 때면 방어 코드를 추가해야 한다. 빈 컬렉션을 반환하는 코드 public List getList() { return object.isEmpty() ? Collections.emptyList() : new ArrayList(object); } 길이가 0일 수도 있는 배열을 반환하는 코드 private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0]; public Object[] getObjects() { return object.toArray(EMPTY_OBJECT_ARRAY); } 마무..

[Java] Lock - ReentrantLock

Lock 멀티스레드, 동시성 프로그래밍에서 가장 중요한 개념은 Thread와 Lock입니다. 하나의 자원에 대해 여러 Thread가 동시에 접근하는 것을 도와주는 도구입니다. Synchronized, 동기화하거나, 아니면 접근 자체를 직렬화한다고 표현합니다. 멀티스레드 환경에서 여러 Thread가 Heap 메모리에 있는 객체나 자원을 접근할 때 동기화를 통해 접근을 통제해야 합니다. Lock을 통해서 공유 자원을 한 Thread만 접근할 수 있도록 통제할 수 있습니다. Lock 기능 특정 조건에 다라 지정한 수의 Thread만 자원에 접근하게 할 수 있습니다. 접근을 못한 Thread들은 줄을 세워, 대기하게 하고 들어갈 수 있을 때 다시 동작하게 할 수 있습니다. → 대기 상태의 Thread는 Slee..

JAVA 2022.12.08

[Architecture] MSA : MicroService Architecture

요즘 개발하면서 MSA를 정말 많이 보고 듣게 되어, 개념에 대해 정리해보고자 글을 쓰게 되었습니다. 제가 현재 하고 있는 프로젝트는 규모가 크지않아서 MSA를 적용하는 것에 대해서 고민을 한 결과 적용을 안하는 것이 더 좋다고 판단하였습니다. 하지만 다음 기회에 규모가 큰 프로젝트를 할 때 MSA를 적용해보면 좋을 것 같습니다. Monolithic Architecture 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태입니다. 웹 개발을 예로 들면 웹 프로그램을 개발하기 위해 모듈별로 개발을 하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포하는 형태를 말합니다. 웹의 경우에는 WAR 파일로 빌드외어 WAS에 배포하는 형태를 말합니다. 주로 소규모 프로젝트에서 사용합니다..

[Connect Plc to Server] N + 1 Problem 해결 사례

날짜 별 로그 작업을 하던 중 로그를 확인 해보니, 한번의 API에서 회원 수 만큼 Query가 발생하고 있었습니다. 흔히 알고 있는 N+1 문제로 인식하고 해결을 하였습니다. Query Log INFO 22-12-07 13:48:39[http-nio-8080-exec-3] [sqltiming:373] - select account0_.id as id1_0_, account0_.account_roles as account_5_0_, account0_.user_id as user_id2_0_, account0_.user_name as user_nam3_0_, account0_.user_pw as user_pw4_0_ from account account0_ {executed in 1 msec} INFO 2..

[Miscellaneous] ngrok 이용한 Localj 개발 환경 접근

카페 또는 집에서 업무 중 개발 중인 Spring 서버에 접근하도록 해줘야 할 때, 로컬에서 개발중인 웹서버, WAS서버를 외부에 있는 사람에게 접근하게 해줘야 할 때, Ngrok를 이용해 외부에서 로컬 개발 환경 localhost로 접근할 수 있도록 할 수 있습니다. Download ngrok ngrok - download Install ngrok via Homebrew $ brew install ngrok/ngrok/ngrok Download ZIP file Intel (AMD64) Apple Silicon (ARM64) Then unzip ngrok from the terminal $ Install ngrok via Chocolatey $ choco install ngrok Download ZIP ..

Miscellaneous 2022.12.07

[Jenkins] Git Push 시 Jenkins 자동빌드

[Jenkins] Jenkins - Git 연동 이번에는 Github와 Jenkins를 연동해보겠습니다. Github를 설치한 상황이라고 가정하고 시작하겠습니다. Dashboard > Jenkins 관리 > Global Tool Configuration 에 들어갑니다. Git 정보를 입력합니다. > 입력 후 맨 lakelight.tistory.com 이전 포스팅에 이어서 Git에서 Push 했을 때 자동으로 빌드파일을 만들도록 스크립트를 수정하였습니다. Jenkins 자동 빌드 솔루션 원래 기존 Pipeline Script 코드입니다. pipeline{ agent any stages{ stage('Checkout'){ steps{ git branch: 'master', credentialsId: 'git..

CI.CD/Jenkins 2022.12.06

[Jenkins] Jenkins - Git 연동

[Jenkins] Jenkins 설치 - Windows 젠킨스 젠킨스는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴입니다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 lakelight.tistory.com 이번에는 Github와 Jenkins를 연동해보겠습니다. Github를 설치한 상황이라고 가정하고 시작하겠습니다. Dashboard > Jenkins 관리 > Global Tool Configuration 에 들어갑니다. Git 정보를 입력합니다. > 입력 후 맨 아래 Save를 눌러서 저장합니다. 다음은 Github에 로그인을 합니다. Setting > Developer settings(메뉴 맨 아래) > Personal acce..

CI.CD/Jenkins 2022.12.06
728x90
반응형