목차 초대형 커피전문점 주문시스템 만들기 다양한 음료를 모두 포괄하는 주문 시스템을 만들려고 한다. 만약 Beverage클래스에 우유, 두유, 모카, 휘핑크림을 추가하려고 할 때 인스턴스 변수를 추가하면 메뉴..
문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사..
목차 가상 모니터링 애플리케이션 알아보기 Weather-O-Rama와 계약하면 WeatherData객체로 현재조건, 기상통계, 기상예보 3가지 항목이 제공된다. 디스플레이 장비에 업데이트 하는 부분은 직접 개발 해야 한다...
목차 전략 패턴 (Strategy Pattern) 이란? 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해주는 패턴 전략패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경..
번거롭고 귀찮은 일이긴 하지만 Microsoft Store가 열리지 않아서(회사에서 막은듯) 다운로드 URL로 설치했다. 방법은 어렵지 않음. 1. Online Microsoft store에서 URL을 확인한다. https://www.microsoft.com/en..
Mapped Statements collection already contains value for 사소한 거 왜 자꾸 실수 하는지 모르겠음;;ㅋㅋㅋ 복사해서 갖다 쓰다보니 mybatis의 id가 중복되서 발생하는 에러. 잘 확인하자.
application.properties spring.db1.datasource.hikari.driver-class-name=org.mariadb.jdbc.Driver spring.db1.datasource.hikari.jdbc-url=jdbc:mariadb://localhost:3306/db1?characterEncoding=UTF-8 spring.d..
목차 단일 모델의 단점 주문 내역 조회 기능 구현시 여러 애그리거트에서 데이터를 가져와야함 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하면 고민해야할 부분이 생김 조회화면 특성상 즉시..
목차 시스템간 강결합 문제 쇼핑몰에서 구매 취소시 환불처리가 필요함 환불기능을 실행하는 주체는 주문 도메인 엔티티가 될 수 있음 보통 결제 시스템은 외부에 존재하기 때문에 외부 서비스가 아닐 경우 트랜잭..
@Resource, @Autowired, @Inject 모두 의존 관계를 자동으로 연결해주는 기능을 가진 어노테이션이다 @Resource JSR에 실려있는 자바 기존 어노테이션 Name -> Type -> Qualifier 기준으로 찾음 사용 위치 : 멤버..
HttpSession은 둘 이상의 Page Request에서 사용자 식별 혹은 사용자 정보를 저장하기 위한 방법을 제공함. Spring Web MVC에서 HttpSession을 주입할 때 내부적으로 Servlet Container 에게 Session을 요청함. @G..
목차 도메인 모델과 경계 처음부터 도메인을 완벽하게 표현하는 단일 모델을 만들기는 어렵다 도메인은 여러 하위도메인으로 구분되기 때문에 한 개의 모델로 여러 하위 도메인을 표현하기 어려움 시스템을 사용..
쿠키란 ? 클라이언트 로컬에 저장되는 key, value가 들어있는 작은 데이터 파일 서버에서 HttpResponse Header에 Set-Cookie 속성을 이용해서 클라이언트에 쿠키를 제공 이름, 값, 만료날짜, 경로 정보 등이 들어..
목차 애그리거트와 트랜잭션 한 주문 애그리거트에 대해 운영자는 배송상태로 변경하고 사용자는 배송지 주소를 변경하면? 트랜잭션마다 리포지터리는 새로운 애그리거트 객체를 생성하므로 운영자 스레드와 고객..
목차 도메인 서비스 도메인 서비스를 사용하는 상황 계산 로직 : 여러 애그리거트가 필요한 계산 로직이나, 한 애그리거트에 넣기에는 다소 복잡한 계산 로직 외부 연동 시스템이 필요한 도메인 로직 : 구현하기..
목차 public class Member { public void changePassword(String oldPw, String newPw) { if(!matchPassword(oldPw)) throw new BaddPasswordException(); setPassword(newPw); } // 현재 암호와 일치하는지 검사..
목차 CQRS 란 명령(Command)모델과 조회(Query) 모델을 분리하는 패턴. 명령 모델은 상태 변경 기능 구현시 사용, 조회 모델은 데이터 조회기능 구현시 사용. ex) 명령모델 : 회원가입, 암호 변경, 주문 취소 > 상..
목차 JPA를 이용한 리포지터리 구현 - 도메인 모델과 리포지터리를 구현할 때 선호하는 기술은 JPA이다. - 데이터 보관소로 RDBMS를 사용할 때, 객체 기반 도메인 모델과 관계 데이터 모델간의 매핑 처리 기술로 O..
목차 애그리거트 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데, 그 방법이 바로 애그리거트다. 애그리거트 장점 모델을 이해하는데 도움을 준..
아키텍처 전형적인 네 가지 영역 표현 응용 도메인 인프라스트럭처 표현 영역 사용자의 요청을 받아 응용 영역에 전달하고, 응용영역의 처리 결과를 다시 사용자에게 보여주는 역할. 웹브라우저가 HTTP 요청 파라..
도메인이란? 소프트웨어로 해결하고자 하는 문제 영역 일반적인 요구사항 ex, 온라인 서점 특정 도메인을 위한 소프트웨어라고 해서 모든 기능을 직접 구현하는 것은 아님(배송시스템, 결제시스템 등) 도메인 모..
블록단위 I/O 모든 DBMS에서 I/O는 블록(혹은 페이지) 단위로 이뤄진다. (즉, 하나의 레코드를 읽더라도 레코드가 속한 블록 전체를 읽는다.) SQL 성능을 좌우하는 중요한 성증지표는 액세스할 블록개수이고 옵티..
카카오 다음 지도 API를 사용하던 도중 응답이 _ 언더바가 포함된 SNAKE타입으로 와서 camel형태로 변환하여 받으려고 한다. 응답예시 { "documents":[ { "address_name":"서울 강남구 삼성동 172-66", "category_..
WebClient 사용 도중 bodyToMono().block() 메서드 사용시 오류가 발생했다. 발생한 이유는 bodyToMono()메서드는 논블로킹인데 block()메서드는 블로킹으로 동작한다. block()/blockFirst()/blockLast() are bloc..
$.ajax({ type: "GET", url: "https://dapi.kakao.com/v2/local/search/keyword.json?query=" + keyword, beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "KakaoAK APIKEY"); }, success: f..
if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { console.log(position.coords.latitude + " " + position.coords.longitude); },function (error){ console.error(..
구조적, 집합적, 선언적 질의 언어 SQL은 'Structured Query Language'의 줄임말이다. 구조적 질의언어다. SQL은 기본적으로 구조적이고 집합적이고 선언적인 질의 언어다. SQL 처리과정 서브엔진 별 역할 엔진..
데이터베이스 구조 1. Oracle 구조 데이터베이스 : 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File 등) 인스턴스 : SGA 공유 메모리 영역과 이를 액세스하는 프로세스 집합 하나의 인스턴스..
모델링이란 사람이 살아가면서 접할 수 있는 다양한 현상이 사람, 사물, 개념에 의해 발생된다고 할 때 모델링은 이것을 표기법에 따라 표기하는 것 자체를 의미한다. 즉, 모델을 만들어가는 일 자체가 모델링이다..
1. 로컬에 도커 이미지 다운 docker pull nginx 2. tar로 압축 docker save -o nginx.tar nginx nginx.tar 는 압축할 파일명 뒤에 nginx는 이미지명 사설 이미지일 경우 경로와 버전까지 명시해줘야한다. 3. 서..
equals를 재정의할 때 hashCode를 재정의하지 않으면 HashMap이나 HashSet같은 컬렉션의 원소로 클래스의 인스턴스를 사용할 때 문제가 된다. Object 명세 규약 equals 비교에 사용되는 정보가 바뀌지 않으면 몇..
문제 상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다. 가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그..
문제 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다. 아홉 명의 난쟁이는 모두 자신이 "백설..
equals메서드는 많은 경우에 Object의 equals가 정확히 비교해주기 때문에 꼭 필요한 경우가 아니라면 재정의하지 말자. equals를 재정의 하지 말아야하는 경우 각 인스턴스가 본질적으로 고유하다. 인스턴스가..
자바 라이브러리에서 close메서드를 호출해 직접 자원을 닫아 줘야하는 경우가 있다. (InputStream, OutputStream, java.sql.Connection 등..) 자원을 닫을 때 finalizer는 믿을 수 없다. 2022.02.24 - [책리뷰/이..
wsl2에서 docker실행할 때 계속 저 에러가 나는데 뜨문뜨문 할 때마다 계속 검색하는 내 자신이 싫어서 남겨놓음. $docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docke..
Spring security 스프링 시큐리티는 사용자 정의가 가능한 인증 및 액세스 제어 프레임워크다. Spring 기반 애플리케이션을 보호하기 위한 사실상의 표준이다. 인증과 권한 부여를 제공하는데 중점을 둔 프레임워..
자바에서는 두 가지 객체 소멸자를 제공하는데 Finalizer는 예측불가능하고 위험하며 대부분 불필요하다. 자바9에서 deprecated되었다. 그 대안으로 Cleaner를 사용하는데 Finalizer보다는 덜 위험하지만 예측불가..
자바에서는 다쓴 객체를 알아서 회수해가는 가비지 컬렉터가 있다. 자칫 메모리 관리에 신경을 쓰지 않아도 된다고 오해할 수 있는데 절대 아니다. Stack클래스의 메모리 누수 public class Stack { private Objec..
@DataJpaTest JPA 관련 테스트 설정을 로드한다. 데이터소스 설정이 정상인지 JPA를 사용해서 생성, 수정, 삭제 등의 테스트를 할 수 있다. 실제 데이터베이스를 사용하지 않고 내장형을 사용해서 테스트할 수 있..
@SpringBootApplication @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 스프링부트에서 시작점은 @SpringB..
스프링 부트 프로퍼티 파일은 설정이나 기타 정적인 값을 키값 형식으로 관리한다. 이것을 이용하면 복잡한 XML설정을 하나의 파일로 관리할 수 있다. YAML 파일을 이용하면 깊이에 따라 관계를 구분 짓기 때문에..
문제 N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자. 12 7 9 15 5 13 8 11 19 6 21 10 26 31 16 48..
Gradle을 이용한 멀티 모듈 프로젝트 관리 방법을 소개한다. 사용하는 이유는 프로젝트가 커질 수록 공통으로 사용하는 서버가 많아지는데 (혹은 클래스) 그 클래스들을 전부 복사&붙여넣기를 할 수 없다. 수정이..
똑같은 기능을 하는 객체는 매번 생성하기보다 재사용하는 편이 빠르고 세련되다. String s = new String("bikini"); String s = "bikini"; 첫 번째 코드는 실행될 때마다 String 인스턴스를 새로 만들고 두 번째..
많은 클래스가 하나이상의 자원에 의존한다. 정적 유틸리티 클래스를 예로 들어볼 수 있다. 정적유틸리티 잘못 사용한 예 - 유연하지 않고 테스트 하기 어렵다. public class SpellChecker { private static final..
정적메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다. 예를 들면 java.lang.Math, java.util.Arrays와 같은 기본 타입의 값이나 배열 관련 메서드를 모아놓을 수 있다. java.util.Collections처럼 특..
싱글턴 인스턴스를 오직 하나만 생성할 수 있는 클래스. 클라이언트를 테스트 하기 어려워질 수 있다. 싱글턴을 만드는 방법은 두 가지가 있는데 두 가지 모두 생성자는 private으로 감춰두고 static멤버를 이용해..
정적 팩터리와 생성자는 선택적 매개변수가 많으면 대응하기 어렵다. 영양 정보를 제공하는 클래스이다. 점층적 생성자 패턴 - 확장이 어려움 pubic class NutritionFacts { private final int servingSize; priva..
public static Boolean valueOf(boolean b) { return b? Boolean.TRUE : Boolean.FALSE; } 클래스는 정적팩터리 메서드를 제공 할 수 있는데 위 예제는 메서드의 기본타입인 boolean을 받아서 Boolean객체 참조로..
JAVA GC? java에서 메모리는 GC가 관리하기 때문에 개발자가 따로 메모리를 관리하는 로직을 넣을 필요가 없다. (만들어서는 안된다) Garbage Collector 쓰레기를 정리하는 작업으로 자바에서 쓰레기는 객체를 의..
Gradle 설정 추가 // swagger implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:2.9.2' SwaggerConfig.java @Configuration @EnableSwagger2 public c..
enum이란? 비단 자바에만 있는 개념은 아니고 다른 언어에서도 볼 수 있는 형식이다. 열거형이라 불리며 요소, 멤버라 명명된 값의 집합을 이루는 자료형으로 열거자 이름들은 해당언어의 상수 역할을 하는 식별자..
ResteTemplate? 스프링3.0부터 제공하는 HTTP 요청을 수행하는 Synchronous 클라이언트. JDK HttpURLConnection, Apache HttpComponents 등과 같은 기본 HTTP 클라이언트 라이브러리를 통한 템플릿 메소드 API. 스..
서비스 하나를 (fallback 날릴) 만들어서 gateway instance로 추가해준다. application.yml spring: application: name: scg-gateway cloud: gateway: routes: - id: test-svc uri: lb://TEST-SVC predicates: - P..
Spring cloud Circuit Breaker Config빈 등록 방법은 아래 포스팅을 참고 https://tweety1121.tistory.com/entry/Spring-circuitbreaker-actuator-health-check-%EC%84%A4%EC%A0%95 Spring circuitbreaker actuato..
Gradle implementation "org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j" implementation 'org.springframework.boot:spring-boot-starter-actuator' CircuitBreaker Confi..
ErrorWebExceptionHandler spring-mvc에서는 ErrorController, AbstractErrorController, BasicErrorController가 기본적으로 제공되므로 에러를 핸들링 할 수 있다. Spring-cloud는 webflux 기반이므로 mvc에서..
Gradle 추가 implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation' ProductInfo.java package com.heypli.productsvc.domain.request; import com.fasterxml.jackson.annot..
Gradle 설정 implementation group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.2.2' implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3...
JAVA 직렬화란? JAVA시스템 내부에서 사용되는 데이터나 객체들을 외부 자바 시스템에서도 사용할 수 있도록 byte형태로 변환하는 기술로 바이트로 변환된 데이터를 다시 객체로 변환하는 역직렬화도 포함된다. 대..
Docker image pull docker pull mariadb Docker Run docker container run -d -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=1234 \ -v /Users/Shared/data/mariadb:/var/lib/mysql \ --name mariadb mariadb docker vol..
프로그램으로 Spring Bean 설정시 @Configuration, @Bean 어노테이션을 이용할 수 있다. 클래스에 @Configuration을 설정하면 Class안애 @Bean메서드가 1개 이상 있어야하고 메서드는 빈 인스턴스를 생성해 반환한..
스프링 빈은 스프링컨테이너에 의해서 관리된다. 프로그램이 실행되면서 스프링 컨테이너가 시작되고, 컨테이너의 요청에 따라 빈의 인스턴스를 생성하고 의존성을 주입한다. 스프링 컨테이너가 닫히면 빈이 파괴..
ResourceHttpRequestHandler 정적 리소스를 처리하는 작업을 담당한다. 유연한 캐시설정을 허용해서 브라우저 성증에 최적화된 정적 리소스를 제공한다. 요청에 대한 리소스가 있는지 확인한 후 처음으로 발견..
MVC모듈 서블릿 기반 웹 어플리케이션에 사용할 수 있는 프레임워크로 객체 사이의 관심사를 분리할 수 있는 프레임워크이다. 컨트롤러 : 요청을 처리 검증기(Validator) : 검증을 수행 모델 : 데이터를 저장..
모든 에러를 다 잡아낼 수 없기 때문에 Spring에서 ErrorController를 구현해서 에러페이지를 처리할 수 있다. package org.springframework.boot.web.servlet.error; import org.springframework.stereotype.C..
SpringBoot가 제공하는 ExceptionResolver 1. ExceptionHandlerExeptionResolver @ExceptionHandler 처리 > API 예외처리 2. ResponseStatusExceptionResolver @ResponseStatus(value=HttpStatus.NOT_FOUND) Ht..
디폴트 메서드가 나온 배경 자바 8이전에 자바에서는 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현하여 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그런데 인터페이스에..
기존 자바에서 날짜 표현 자바 1.0에서는 java.util.Date클래스 하나로 날짜와 시간 기능을 제공했다. Date클래스는 밀리초단위로 표현이 된다. Date date = new Date(117, 8, 21); // 출력 결과 Thu Sep 21 00..
기존 자바에서 날짜 표현 자바 1.0에서는 java.util.Date클래스 하나로 날짜와 시간 기능을 제공했다. Date클래스는 밀리초단위로 표현이 된다. Date date = new Date(117, 8, 21); // 출력 결과 Thu Sep 21 00..
Optional 클래스 소개 java.util.Optional Optional은 선택형값을 캡슐화하는 클래스다. 위의 그림처럼 Car가 null이 아니라 값이 없음을 나타낸다. Optional 클래스로 감쌀 경우 null이 아닌 Optional.empty 메..
문제 삼각수 Tn(n ≥ 1)는 [그림]에서와 같이 기하학적으로 일정한 모양의 규칙을 갖는 점들의 모음으로 표현될 수 있다. [그림] 자연수 n에 대해 n ≥ 1의 삼각수 Tn는 명백한 공식이 있다. Tn = 1 + 2 + 3 +..
문제 매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다. 어느 날 광..
문제 N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자. 12 7 9 15 5 13 8 11 19 6 21 10 26 31 16 48..
문제 후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식..
문제 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드..
자바9에서 작은 컬렉션 객체를 쉽게 만들 수 있는 방법을 제공한다. String List를 만들 때 List friends = Arrays.asList("Rophael", "Olivia", "Thibau"); 고정 크기의 리스트를 만들었지만 요소를 추가하거나..
1. 확신이 서지 않으면 직접 측정하라. 병렬스트림이 순차 스트림보다 언제나 빠른 것은 아니다. 병렬스트림의 수행과정이 투명하지 않을 수도 있고 공유된 가변상태가 있을 경우 올바르게 동작하지 않을 수도 있..
람다표현식 메서드로 전달할 수 있는 익명함수를 단순화 한 것. 이름은 없지만 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외리스트를 가질 수 있다. 보통 메서드와 달리 이름이 없기때문에 구현해야할..
스트림이란? 한 번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임. 입력스트림에서 데이터를 한 개씩 읽어들어 출력스트림으로 데이터를 한 개씩 기록한다. 어떤 프로그램의 출력 스트림은 다른 프로그램의..
JAVA Static 이란? 고정된 이란 의미를 가지며 static변수와 static메소드를 만들 수 있다. 메모리에 한 번 할당되어서 프로그램이 종료될때 해제되는 것을 의미한다. GC가 적용되지 않는다. 일반적으로 Class는 s..
QR코드 생성을 위한 라이브러리 추가 pom.xml com.google.zxing javase 3.1.0 Controller.java @RequestMapping("/getQrcode") public String getQrcode(Model model) throws Exception { String img = getQRCodeI..
gradle-wrapper.properties에서 사용중인 버전을 확인할 수 있다. distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2..
1. 인터프리팅과 클래스로딩 JVM인터프리터 > 'while루프 안에 switch문' java HelloWorld 로 자바 어플리케이션을 실행하면 OS는 가상 머신 프로세스를 구동한다(자바 바이너리) 자바 가상환경이 구성되고 스택머..
task non-zero exit (137) 대부분 메모리 문제라고 함. docker-desktop 윈도우 로컬에서 띄웠고 wsl2 사용중이었다. docker memory를 늘려줬다. settings > advanced 에 메모리를 늘릴 수 있으나 wsl2 사용중일..
1. Redis install https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100 Release 3.2.100 · microsoftarchive/redis This is the first release of Redis on Windows 3.2. This release is based..
kubernetes yaml 파일 작성시 띄어쓰기 조금만 잘못되도 object가 올라가지 않는다. 아래 사이트에서 yaml 파일 검증을 했다. https://codebeautify.org/yaml-validator Best YAML Validator Online Free YAML Val..
windows 에 kubernetes를 설치하려면 virtualbox로 많이들 하던데 회사 PC에 virtualbox설치가 안된다. 어쩔 수 없이 minikube를 설치해서 테스트해봤는데 minikube는 external ip 노출이 안되서 테스트가 쉽지 않..
docker-compose.yml version: '3.8' services: logstash: image: docker.elastic.co/logstash/logstash:7.10.2 ports: - '9600:9600' - '9900:9900' - '9901:9901' environment: TZ: UTC networks: - prod configs..
exchange > test.exchange 추가 queues > test.queue 추가 exchange 에서 만든 exchange에 들어가면 Bindings에 추가할 수 있다. test.queue, test.route.# Spring Boot > rabbitmq consumer #application.prop..
docker pull rabbitmq:3-management management image를 받지 않으면 대시보드를 사용할 수 없다. docker run -d --hostname rabbit --name rabbit -p5672:5672 -p 15672:15672 rabbitmq:3-management -e RABBITMQ..
config.toml [runners.docker] tls_verify = false image = "alpine" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size =..
gitlab-runner 등록할 때 gitlab에 ssl이 적용되어 있어서 에러날 때 gitlab서버에 인증서를 복사해서 gitlab-runner container /etc/ssl/certs에 넣는다. // ca-certificates 설치 $ apt install ca-certificates..
docs.gitlab.com/ee/user/packages/maven_repository/ Maven packages in the Package Repository | GitLab Maven packages in the Package Repository Version history Introduced in GitLab Premium 11.3. Moved..
이거 자꾸 할 때마다 검색해서 하는게 답답해서 정리함 일단 gitlab에서 프로젝트를 생성한 후 주소를 복사해둠. intellij VCS > Enable Version Control Integration git 선택한 후 OK 그러면 이렇게 메뉴에 g..
intellij - File > Settings > Tools > Server Certificates > Accept non-trusted certificates automatically 체크 그래도 안되면 git config --global http.sslVerify false 옵션을 끈다
인증서 생성 //폴더 생성 $mkdir -p /var/opt/gitlab/certs cd /var/opt/gitlab/certs // 개인키 생성 $openssl genrsa -out gitlab.key 2048 // CSR 생성 $openssl req -new -key gitlab.key -out gitlab.csr You..
Gitlab Runner 는 Gitlab CI/CD와 pipeline에서 Job을 실행시키는 어플리케이션으로 별도로 설치해서 사용할 수 있다. Gitlab docker 설치 (Windows Docker) docker run --detach --name gitlab --hostname gitlab..
www.jenkins.io/doc/book/using/remote-access-api/ Remote Access API Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their sof..
Gradle 다운로드 gradle.org/releases/ Gradle | Releases Find binaries and reference documentation for current and past versions of Gradle. gradle.org 최신버전으로 설치해보자. 2021.05 기준 v7.0 binary..
Resilience4j 란? hystrix로 부터 영감을 받은 경량 fault tolerance library. 다른 외부 라이브러리 종속성이 없기 때문에 가볍게 사용하기 좋다. Circuit Breaker / Rate Limiter / Bulk Head / Retry / Cache /..
폴더구조 elk folder - docker-compose.yml - elasticsearch: - Dockerfile - alerting.zip - config: - elasticsearch.yml - data: - kibana: - Dockerfile - opendistroAlertingKibana-1.13.0.0.zip - con..
docker swarm init 명령어로 swarm을 초기화할 수 있다. docker swarm init 초기화를 하면 join할 수 있는 token이 저렇게 나온다. 그러면 join할 서버에 들어가서 그대로 날려주면 join 된다. docker node ls 이..
엄청난 삽질 후에 성공했다. 그냥 결론은 Docker 새로깔고 하니까 한 번에 되는데 ㅡㅡ 역시 안되면 재시작하고 새로 깔고가 진리. docs.docker.com/registry/deploying/ Deploy a registry server docs.docker.co..
swarm init, network생성 docker swarm init docker network create -d overlay elk-network docker-compose.yml version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch..
1. Kafka Download kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org 다운로드 받고 압축을 풀면 된다. 2. 실행방법 Zookeeper D:\kafka> bin\window..
spring boot로 몽고 DB연동하여 서버에 올린 후 접속해서 쿼리 날리면 발생하는 에러 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.username=testuser spring.data.mo..
MongoDB 콘솔 접속 명령어 mongo -uroot -p1234 DB 생성명령어 use test; 딱히 없고 그냥 use 명령어를 사용하면 해당 DB를 사용할 수 있다. create User/ dropUser db.createUser({user:"testUser",pwd:"1234",ro..
docker-compose.yml로 swarm 서비스를 올릴 때 볼륨 마운트시 발생하는 에러 해결방법 다른 호스트에 배포할 서비스면 해당 호스트에 마운트할 볼륨이 생성되어있는지 확인해야한다.
JAVA Optional T type의 객체를 포장해주는 래퍼 클래스이다. Optional 인스턴스는 모든 타입의 참조변수를 저장할 수 있다. null 일 수도 있는 객체를 감싸고 있다. Optional을 쓰는 이유 NullPointerException을..
JAVA Stream ? JAVA 8에서 추가된 기능으로 Array나 Collections 처럼 연속된 형태의 객체를 데이터로 받아서 method로 처리하는 기능이다. 입력된 데이터의 자료구조 자체를 변경하지 않고 결과를 파이프라인 형..
Lamda식이란 무엇인가? 함수적 프로그래밍 y = f(x) 형태의 함수로 구성된 프로그래밍 기법 데이터를 매개값으로 전달하고 결과를 받는 코드들로 구성이 되어있다. 객체 지향 프로그래밍보다 효율적인 경우는? -..
Open Source Identity and Access Management 최소한의 작업으로 어플리케이션과 보안 서비스에 인증을 추가할 수 있다. 사용자를 저장하거나 인증할 필요가 없다. ID연개나 소셜 로그인과 같은 고급 기능도 제공..
SpringBoot는 application.properties를 외부 프로퍼티를 이용해서 실행할 수 있다. jar 실행방법 java -jar spring-boot.jar 프로퍼티의 이름을 바꿔서 실행할 경우(spring.config.name) java -jar spring-boot.j..
MSA서비스를 개발하면서 우리가 gateway 를 직접 개발한다면 개발해야할 내용들이 굉장히 많다. Netflix에서는 직접 개발한 Zuul gateway를 공개함으로써 많은 개발자들이 편하게 가져다 쓰도록 지원하고 있다. 지..
Postman으로 Mockup api를 만들 수 있다. 만드는 방법 POSTMAN에서 New를 눌러서 Mock Server를 생성한다. Mockup api를 써주면 되는데 수정이 가능하다. 일단 Path만 작성해보자. Mock Server 이름을 정한다...
@Conditional SpringBoot App을 빌드할 때 어떤 조건이 충족되는 경우에만 Application Context에 로드하고 싶다. 테스트 중일 때는 비활성화되어 있거나 런타임 환경에 특정 조건일 때만 충족해야할 경우에 사용..
JWT란? Json Web Token. Json형태로 안전하게 정보를 전달하는 Open Standard이다. JWT정보는 디지털 서명이 되어 있어서 안전하다. JWT는 HMAC또는 RSA, ECDSA를 사용하는 공개키/개인키쌍을 서명할 수 있다. JWT..
설정파일에 민감한 정보들은 암호화를 해줘야 한다. (DB비밀번호, URL 같은 것들..) 암호화는 대세를 따라서 jasypt(Java Simplified Encryption)를 썼다. // https://mvnrepository.com/artifact/com.github.ulis..
CORS란? Cross-Origin Resource Sharing(CORS) 교차출처 리소스 공유 서로 다른 도메인끼리 다른 도메인의 요청을 허용하도록 하는 구조를 말한다. 허용하기 위해서도 사용하지만 다른 도메인에서 쓰지 못하도록..
차근차근 공부하려고 했는데 모르는게 너무 많다. 다소 번잡스럽지만 최대한 정리를 해가면서 업무를 하려고 일단 찾아본 대로 정리한다. SpringBootServletInitializer란? 더보기 An opinionated WebApplication..
git 사용방법 git 설치한다. git-scm.com/ Git git-scm.com 위 링크에서 OS에 맞게 설치하면 된다. sourcetree www.sourcetreeapp.com/ Sourcetree | Free Git GUI for Mac and Windows A Git GUI that offers a v..
GatewayFilter gatewayfilter를 이용하면 들어오는 HTTP요청과 나가는 HttpResponse를 수정할 수 있다. 특정경로로 범위가 지정된다. AddRequestFilter spring: cloud: gateway: routes: - id: add_request_header..
Predicates Webflux handler Mapping을 사용하여 Route하는데 다양한 Predicates factory가 이미 정의되어 있다. After & Before spring: cloud: gateway: routes: - id: after_route uri: https://example.org p..
git submodule deinit -f frontend .git/modules/frontend삭제(숨긴파일보기로) .gitmodules file 자체를 삭제 git rm --cached frontend rm -rf frontend
JAVA ClassLoader abstract class 로 bytecode를 읽어서 class파일을 생성하는 역할을 한다. CompileTime이 아닌 Runtime에 클래스를 로딩할 수 있게 해주는 기술 내부적으로는 세 단계를 거친다 로딩 > 링크 > 초..
management.endpoint.gateway.enabled=true # default value management.endpoints.web.exposure.include=gateway endpoint.gateway.enabled를 true로 해줘야 endpoint를 확인할 수 있다. 처음엔 이렇게 아무것도..
stage('npm build'){ sh 'ls -alrt' dir('frontend') { git url: "https://gitlab주소/repository/frontend", branch: "master", credentialsId: 'git계정' sh 'ls -alrt' sh 'rm -rf build/*' echo 'npm build st..
git submodule 추가한 후에 젠킨스에서 배포시에 자꾸 저렇게 directory 가 있다고 에러난다. git submodule deinit --force . git submodule init git submodule update --recursive deinit이 서브모듈 삭제하는..
git submodule 저장소 안에 다른 저장소를 추가해서 사용하는 것이다. 다른 저장소를 받아와서 함께 사용하는 것. 준비단계1 : react 프로젝트 만들기 참고로 백엔드개발자라서는 핑계긴하지만 front 1도 모른다...
1. telnet ip port telnet 127.0.0.1 8080 무난무난쓰 2. nc -v -z ip port nc -v -z 127.0.0.1 8080 3. echo > /dev/tcp/ / echo > /dev/tcp/127.0.0.1/8080 # 열려있으면 아무것도 안나오고 # 안열려있으면 -bas..
docker build >>> docker build --tag build_image_name:0.0.1 . private Repository에 이미지를 배포하는 방법 저렇게 파란색으로 가려진 부분이 사설 repository URL docker tag [기존이미지명] [사설reposit..
intellij 기준bootJar를 이용해서 jar파일을 만들어준다. 그러면 build/libs 밑에 jar파일이 생성된다. jar 파일 실행방법은 java -jar ROOT.jar 이다. 이제 dockerfile을 작성해보자. docker search openjdk11..
Spring-boot-loader 모듈은 실행가능한 jar와 war파일을 생성해준다. maven이나 gradle을 사용한다면 쉽게 생성할 수 있다. 세부적으로 어떻게 동작하는지 구체적으로 알 필요는 없다. JAVA는 중첩된 jar파일을 로..
jar로 실행할 때 발생하는 log에러 logback라이브러리가 중복되면 발생한다. gradle.build에서 제외시켜줘야 한다. configurations { all { exclude group: 'org.springframework.boot', module: 'spring-boot-st..
IDE마다 설정 부분이 다르겠지만 intellij 기준으로 - Edit Configurations - Project 선택 - Enable launch optimization, Enable JMX agent 체크해제 하면됨
SpringBoot에서는 기본적으로 Commonslogging에 대한 구현가능성은 열어두고 있다. 내부적으로 slf4j를 지원한다. jar console 출력시 옵션 주는 방법 java -jar ***.jar --debug --debug와같은 형태로 옵션을 주..
Intellij ultimate 버전을 사용하면 프로젝트 생성시 Spring Initializr가 있다. 그 기능으로 손쉽게 Spring Boot를 시작할 수 있다. Community버전을 사용중이라면 아래 링크에서 프로젝트를 손쉽게 만들 수 있다..
요즘 트렌드는 비밀번호를 DB에 저장하지 않고 해시해서 사용자가 입력한 비밀번호와 저장된 비밀번호의 해시값이 일치하는지 확인하는 것이라고 한다. 일명 단방향 해시 만드는 방법을 예를 들어 비밀번호가 qwer..