tweety1121의 등록된 링크

 tweety1121로 등록된 티스토리 포스트 수는 140건입니다.

헤드퍼스트 디자인패턴 - 데코레이터 패턴 [내부링크]

목차 초대형 커피전문점 주문시스템 만들기 다양한 음료를 모두 포괄하는 주문 시스템을 만들려고 한다. 만약 Beverage클래스에 우유, 두유, 모카, 휘핑크림을 추가하려고 할 때 인스턴스 변수를 추가하면 메뉴..

백준 1931번 회의실 배정 자바 풀이 [내부링크]

문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사..

헤드퍼스트 디자인패턴 - 옵저버 패턴 [내부링크]

목차 가상 모니터링 애플리케이션 알아보기 Weather-O-Rama와 계약하면 WeatherData객체로 현재조건, 기상통계, 기상예보 3가지 항목이 제공된다. 디스플레이 장비에 업데이트 하는 부분은 직접 개발 해야 한다...

헤드퍼스트 디자인패턴 - 전략 패턴 [내부링크]

목차 전략 패턴 (Strategy Pattern) 이란? 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해주는 패턴 전략패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경..

Microsoft Store 없이 다운로드 URL로 MS App 설치하기 [내부링크]

번거롭고 귀찮은 일이긴 하지만 Microsoft Store가 열리지 않아서(회사에서 막은듯) 다운로드 URL로 설치했다. 방법은 어렵지 않음. 1. Online Microsoft store에서 URL을 확인한다. https://www.microsoft.com/en..

Mapped Statements collection already contains value for - mybatis error [내부링크]

Mapped Statements collection already contains value for 사소한 거 왜 자꾸 실수 하는지 모르겠음;;ㅋㅋㅋ 복사해서 갖다 쓰다보니 mybatis의 id가 중복되서 발생하는 에러. 잘 확인하자.

Spring boot multiple database 설정 (mybatis+hikari) [내부링크]

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..

도메인 주도 개발(DDD)시작하기 CQRS [내부링크]

목차 단일 모델의 단점 주문 내역 조회 기능 구현시 여러 애그리거트에서 데이터를 가져와야함 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하면 고민해야할 부분이 생김 조회화면 특성상 즉시..

도메인 주도 개발(DDD) 시작하기 이벤트 [내부링크]

목차 시스템간 강결합 문제 쇼핑몰에서 구매 취소시 환불처리가 필요함 환불기능을 실행하는 주체는 주문 도메인 엔티티가 될 수 있음 보통 결제 시스템은 외부에 존재하기 때문에 외부 서비스가 아닐 경우 트랜잭..

Spring @Resouce, @Autowired, @Inject 의존 관계 주입 차이점 [내부링크]

@Resource, @Autowired, @Inject 모두 의존 관계를 자동으로 연결해주는 기능을 가진 어노테이션이다 @Resource JSR에 실려있는 자바 기존 어노테이션 Name -> Type -> Qualifier 기준으로 찾음 사용 위치 : 멤버..

HttpSession 사용 방법 사용 이유 [내부링크]

HttpSession은 둘 이상의 Page Request에서 사용자 식별 혹은 사용자 정보를 저장하기 위한 방법을 제공함. Spring Web MVC에서 HttpSession을 주입할 때 내부적으로 Servlet Container 에게 Session을 요청함. @G..

도메인 주도 개발(DDD) 도메인 모델과 바운디드 컨텍스트 [내부링크]

목차 도메인 모델과 경계 처음부터 도메인을 완벽하게 표현하는 단일 모델을 만들기는 어렵다 도메인은 여러 하위도메인으로 구분되기 때문에 한 개의 모델로 여러 하위 도메인을 표현하기 어려움 시스템을 사용..

@CookieValue 스프링 쿠키 사용법 [내부링크]

쿠키란 ? 클라이언트 로컬에 저장되는 key, value가 들어있는 작은 데이터 파일 서버에서 HttpResponse Header에 Set-Cookie 속성을 이용해서 클라이언트에 쿠키를 제공 이름, 값, 만료날짜, 경로 정보 등이 들어..

도메인 주도 개발(DDD) 애그리거트 트랜잭션 관리 [내부링크]

목차 애그리거트와 트랜잭션 한 주문 애그리거트에 대해 운영자는 배송상태로 변경하고 사용자는 배송지 주소를 변경하면? 트랜잭션마다 리포지터리는 새로운 애그리거트 객체를 생성하므로 운영자 스레드와 고객..

도메인 주도 개발(DDD) 도메인 서비스 [내부링크]

목차 도메인 서비스 도메인 서비스를 사용하는 상황 계산 로직 : 여러 애그리거트가 필요한 계산 로직이나, 한 애그리거트에 넣기에는 다소 복잡한 계산 로직 외부 연동 시스템이 필요한 도메인 로직 : 구현하기..

도메인 주도 개발 (DDD) 시작하기 응용서비스와 표현영역 [내부링크]

목차 public class Member { public void changePassword(String oldPw, String newPw) { if(!matchPassword(oldPw)) throw new BaddPasswordException(); setPassword(newPw); } // 현재 암호와 일치하는지 검사..

도메인 주도 설계(DDD) 스프링데이터 JPA를 이용한 조회 [내부링크]

목차 CQRS 란 명령(Command)모델과 조회(Query) 모델을 분리하는 패턴. 명령 모델은 상태 변경 기능 구현시 사용, 조회 모델은 데이터 조회기능 구현시 사용. ex) 명령모델 : 회원가입, 암호 변경, 주문 취소 > 상..

도메인 주도 개발(DDD) 리포지터리와 모델 구현 [내부링크]

목차 JPA를 이용한 리포지터리 구현 - 도메인 모델과 리포지터리를 구현할 때 선호하는 기술은 JPA이다. - 데이터 보관소로 RDBMS를 사용할 때, 객체 기반 도메인 모델과 관계 데이터 모델간의 매핑 처리 기술로 O..

도메인 주도 설계(DDD) 애그리거트 [내부링크]

목차 애그리거트 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데, 그 방법이 바로 애그리거트다. 애그리거트 장점 모델을 이해하는데 도움을 준..

도메인 주도 설계 아키텍처 [내부링크]

아키텍처 전형적인 네 가지 영역 표현 응용 도메인 인프라스트럭처 표현 영역 사용자의 요청을 받아 응용 영역에 전달하고, 응용영역의 처리 결과를 다시 사용자에게 보여주는 역할. 웹브라우저가 HTTP 요청 파라..

도메인(DDD)주도 개발 도메인이란 [내부링크]

도메인이란? 소프트웨어로 해결하고자 하는 문제 영역 일반적인 요구사항 ex, 온라인 서점 특정 도메인을 위한 소프트웨어라고 해서 모든 기능을 직접 구현하는 것은 아님(배송시스템, 결제시스템 등) 도메인 모..

SQL 전문가가이드 [과목3] 1장 3절 데이터베이스 I/O 메커니즘 [내부링크]

블록단위 I/O 모든 DBMS에서 I/O는 블록(혹은 페이지) 단위로 이뤄진다. (즉, 하나의 레코드를 읽더라도 레코드가 속한 블록 전체를 읽는다.) SQL 성능을 좌우하는 중요한 성증지표는 액세스할 블록개수이고 옵티..

DTO로 변환할 때 PropertyNamingStrategy 사용 snake->camel 변환 [내부링크]

카카오 다음 지도 API를 사용하던 도중 응답이 _ 언더바가 포함된 SNAKE타입으로 와서 camel형태로 변환하여 받으려고 한다. 응답예시 { "documents":[ { "address_name":"서울 강남구 삼성동 172-66", "category_..

block()/blockFirst()/blockLast() are blocking, which is not supported [내부링크]

WebClient 사용 도중 bodyToMono().block() 메서드 사용시 오류가 발생했다. 발생한 이유는 bodyToMono()메서드는 논블로킹인데 block()메서드는 블로킹으로 동작한다. block()/blockFirst()/blockLast() are bloc..

javascript $.ajax header추가 [내부링크]

$.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..

javascript 현재 접속 위치 좌표 [내부링크]

if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { console.log(position.coords.latitude + " " + position.coords.longitude); },function (error){ console.error(..

SQL 전문가가이드 [과목3] 1장 2절 SQL 처리 과정 [내부링크]

구조적, 집합적, 선언적 질의 언어 SQL은 'Structured Query Language'의 줄임말이다. 구조적 질의언어다. SQL은 기본적으로 구조적이고 집합적이고 선언적인 질의 언어다. SQL 처리과정 서브엔진 별 역할 엔진..

SQL 전문가가이드 [과목3] 1장 1절 데이터베이스 아키텍처 [내부링크]

데이터베이스 구조 1. Oracle 구조 데이터베이스 : 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File 등) 인스턴스 : SGA 공유 메모리 영역과 이를 액세스하는 프로세스 집합 하나의 인스턴스..

SQL 전문가가이드 [과목1] 1장 1절 데이터 모델의 이해 [내부링크]

모델링이란 사람이 살아가면서 접할 수 있는 다양한 현상이 사람, 사물, 개념에 의해 발생된다고 할 때 모델링은 이것을 표기법에 따라 표기하는 것 자체를 의미한다. 즉, 모델을 만들어가는 일 자체가 모델링이다..

Docker image offline 설치 이미지 오프라인에서 사용 [내부링크]

1. 로컬에 도커 이미지 다운 docker pull nginx 2. tar로 압축 docker save -o nginx.tar nginx  nginx.tar 는 압축할 파일명 뒤에 nginx는 이미지명 사설 이미지일 경우 경로와 버전까지 명시해줘야한다. 3. 서..

[이펙티브자바] 아이템11. equals를 재정의하려거든 hashCode도 재정의하라 [내부링크]

equals를 재정의할 때 hashCode를 재정의하지 않으면 HashMap이나 HashSet같은 컬렉션의 원소로 클래스의 인스턴스를 사용할 때 문제가 된다. Object 명세 규약 equals 비교에 사용되는 정보가 바뀌지 않으면 몇..

백준 3085번 사탕 게임 자바 풀이 [내부링크]

문제 상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다. 가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그..

백준 2309번 일곱 난쟁이 자바 풀이 [내부링크]

문제 왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다. 아홉 명의 난쟁이는 모두 자신이 "백설..

[이펙티브자바] 아이템10. equals는 일반 규약을 지켜 재정의하라 [내부링크]

equals메서드는 많은 경우에 Object의 equals가 정확히 비교해주기 때문에 꼭 필요한 경우가 아니라면 재정의하지 말자. equals를 재정의 하지 말아야하는 경우 각 인스턴스가 본질적으로 고유하다.  인스턴스가..

[이펙티브자바] 아이템9. try-finally보다는 try-with-resources를 사용하라 [내부링크]

자바 라이브러리에서 close메서드를 호출해 직접 자원을 닫아 줘야하는 경우가 있다. (InputStream, OutputStream, java.sql.Connection 등..) 자원을 닫을 때 finalizer는 믿을 수 없다. 2022.02.24 - [책리뷰/이..

wsl2 우분투 cannot connect to the docker daemon at unix:///var/run/docker.sock. is the docker daemon running? [내부링크]

wsl2에서 docker실행할 때 계속 저 에러가 나는데 뜨문뜨문 할 때마다 계속 검색하는 내 자신이 싫어서 남겨놓음. $docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docke..

Spring Boot security Oauth2 로그인 연동 (구글/카카오) [내부링크]

Spring security 스프링 시큐리티는 사용자 정의가 가능한 인증 및 액세스 제어 프레임워크다. Spring 기반 애플리케이션을 보호하기 위한 사실상의 표준이다. 인증과 권한 부여를 제공하는데 중점을 둔 프레임워..

[이펙티브자바] 아이템8. finalizer와 cleaner사용을 피하라 [내부링크]

자바에서는 두 가지 객체 소멸자를 제공하는데 Finalizer는 예측불가능하고 위험하며 대부분 불필요하다. 자바9에서 deprecated되었다. 그 대안으로 Cleaner를 사용하는데 Finalizer보다는 덜 위험하지만 예측불가..

[이펙티브자바] 아이템7. 다 쓴 객체 참조를 해제하라 [내부링크]

자바에서는 다쓴 객체를 알아서 회수해가는 가비지 컬렉터가 있다. 자칫 메모리 관리에 신경을 쓰지 않아도 된다고 오해할 수 있는데 절대 아니다. Stack클래스의 메모리 누수 public class Stack { private Objec..

Spring Boot @DataJpaTest 사용방법 [내부링크]

@DataJpaTest JPA 관련 테스트 설정을 로드한다. 데이터소스 설정이 정상인지 JPA를 사용해서 생성, 수정, 삭제 등의 테스트를 할 수 있다. 실제 데이터베이스를 사용하지 않고 내장형을 사용해서 테스트할 수 있..

Spring Boot @EnableAutoConfiguration [내부링크]

@SpringBootApplication @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 스프링부트에서 시작점은 @SpringB..

Spring Boot 외부 설정 @Value, @ConfigurationProperties [내부링크]

스프링 부트 프로퍼티 파일은 설정이나 기타 정적인 값을 키값 형식으로 관리한다. 이것을 이용하면 복잡한 XML설정을 하나의 파일로 관리할 수 있다. YAML 파일을 이용하면 깊이에 따라 관계를 구분 짓기 때문에..

백준 2075번 N번째 큰 수 자바 풀이 [내부링크]

문제 N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자. 12 7 9 15 5 13 8 11 19 6 21 10 26 31 16 48..

Spring Boot 멀티 모듈 프로젝트 관리 [내부링크]

Gradle을 이용한 멀티 모듈 프로젝트 관리 방법을 소개한다. 사용하는 이유는 프로젝트가 커질 수록 공통으로 사용하는 서버가 많아지는데 (혹은 클래스) 그 클래스들을 전부 복사&붙여넣기를 할 수 없다. 수정이..

[이펙티브자바] 아이템6. 불필요한 객체 생성을 피하라 [내부링크]

똑같은 기능을 하는 객체는 매번 생성하기보다 재사용하는 편이 빠르고 세련되다. String s = new String("bikini"); String s = "bikini"; 첫 번째 코드는 실행될 때마다 String 인스턴스를 새로 만들고 두 번째..

[이펙티브자바] 아이템5. 의존 객체 주입을 사용해라. [내부링크]

많은 클래스가 하나이상의 자원에 의존한다. 정적 유틸리티 클래스를 예로 들어볼 수 있다. 정적유틸리티 잘못 사용한 예 - 유연하지 않고 테스트 하기 어렵다. public class SpellChecker { private static final..

[이펙티브자바] 아이템4. 인스턴스화를 막으려면 private을 강제하라 [내부링크]

정적메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다. 예를 들면 java.lang.Math, java.util.Arrays와 같은 기본 타입의 값이나 배열 관련 메서드를 모아놓을 수 있다. java.util.Collections처럼 특..

[이펙티브자바] 아이템3. private생성자나 열거타입으로 싱글턴 보증 [내부링크]

싱글턴 인스턴스를 오직 하나만 생성할 수 있는 클래스. 클라이언트를 테스트 하기 어려워질 수 있다. 싱글턴을 만드는 방법은 두 가지가 있는데 두 가지 모두 생성자는 private으로 감춰두고 static멤버를 이용해..

[이펙티브자바] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 [내부링크]

정적 팩터리와 생성자는 선택적 매개변수가 많으면 대응하기 어렵다. 영양 정보를 제공하는 클래스이다. 점층적 생성자 패턴 - 확장이 어려움 pubic class NutritionFacts { private final int servingSize; priva..

[이펙티브자바] 아이템1. 생성자 대신 정적 팩터리 메서드를 고려해야하는 이유 [내부링크]

public static Boolean valueOf(boolean b) { return b? Boolean.TRUE : Boolean.FALSE; } 클래스는 정적팩터리 메서드를 제공 할 수 있는데 위 예제는 메서드의 기본타입인 boolean을 받아서 Boolean객체 참조로..

JAVA GC가 발생하는 시기(Garbage Collector) [내부링크]

JAVA GC? java에서 메모리는 GC가 관리하기 때문에 개발자가 따로 메모리를 관리하는 로직을 넣을 필요가 없다. (만들어서는 안된다) Garbage Collector 쓰레기를 정리하는 작업으로 자바에서 쓰레기는 객체를 의..

Spring Boot2 Swagger 사용 [내부링크]

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..

JAVA enum vs static 비교 [내부링크]

enum이란? 비단 자바에만 있는 개념은 아니고 다른 언어에서도 볼 수 있는 형식이다. 열거형이라 불리며 요소, 멤버라 명명된 값의 집합을 이루는 자료형으로 열거자 이름들은 해당언어의 상수 역할을 하는 식별자..

Spring restTemplate Connection pool 사용 [내부링크]

ResteTemplate? 스프링3.0부터 제공하는 HTTP 요청을 수행하는 Synchronous 클라이언트. JDK HttpURLConnection, Apache HttpComponents 등과 같은 기본 HTTP 클라이언트 라이브러리를 통한 템플릿 메소드 API. 스..

Spring cloud circuit breaker fallbackUri 사용 [내부링크]

서비스 하나를 (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 fallback 메소드 테스트 [내부링크]

Spring cloud Circuit Breaker Config빈 등록 방법은 아래 포스팅을 참고 https://tweety1121.tistory.com/entry/Spring-circuitbreaker-actuator-health-check-%EC%84%A4%EC%A0%95 Spring circuitbreaker actuato..

Spring circuitbreaker actuator health check 설정 [내부링크]

Gradle implementation "org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j" implementation 'org.springframework.boot:spring-boot-starter-actuator' CircuitBreaker Confi..

Spring Cloud Gateway Global Error Handler [내부링크]

ErrorWebExceptionHandler spring-mvc에서는 ErrorController, AbstractErrorController, BasicErrorController가 기본적으로 제공되므로 에러를 핸들링 할 수 있다. Spring-cloud는 webflux 기반이므로 mvc에서..

Spring @Valid 어노테이션으로 파라미터 검증하기 [내부링크]

Gradle 추가 implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation' ProductInfo.java package com.heypli.productsvc.domain.request; import com.fasterxml.jackson.annot..

Spring boot + mariadb + mybatis + hikaricp 설정 [내부링크]

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 직렬화란? JAVA시스템 내부에서 사용되는 데이터나 객체들을 외부 자바 시스템에서도 사용할 수 있도록 byte형태로 변환하는 기술로 바이트로 변환된 데이터를 다시 객체로 변환하는 역직렬화도 포함된다. 대..

Docker mariadb 설치 [내부링크]

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 @Configuration @Bean 스프링 빈 등록 방법 [내부링크]

프로그램으로 Spring Bean 설정시 @Configuration, @Bean 어노테이션을 이용할 수 있다. 클래스에 @Configuration을 설정하면 Class안애 @Bean메서드가 1개 이상 있어야하고 메서드는 빈 인스턴스를 생성해 반환한..

스프링 빈 라이프 사이클(Spring Bean Life Cycle) [내부링크]

스프링 빈은 스프링컨테이너에 의해서 관리된다. 프로그램이 실행되면서 스프링 컨테이너가 시작되고, 컨테이너의 요청에 따라 빈의 인스턴스를 생성하고 의존성을 주입한다. 스프링 컨테이너가 닫히면 빈이 파괴..

Spring ResourceHttpRequestHandler [내부링크]

ResourceHttpRequestHandler 정적 리소스를 처리하는 작업을 담당한다. 유연한 캐시설정을 허용해서 브라우저 성증에 최적화된 정적 리소스를 제공한다. 요청에 대한 리소스가 있는지 확인한 후 처음으로 발견..

Spring MVC 동작 방식 (DispatcherServlet) [내부링크]

MVC모듈 서블릿 기반 웹 어플리케이션에 사용할 수 있는 프레임워크로 객체 사이의 관심사를 분리할 수 있는 프레임워크이다. 컨트롤러 : 요청을 처리 검증기(Validator) : 검증을 수행 모델 : 데이터를 저장..

Spring boot thymeleaf 로 Error페이지 처리 [내부링크]

모든 에러를 다 잡아낼 수 없기 때문에 Spring에서 ErrorController를 구현해서 에러페이지를 처리할 수 있다. package org.springframework.boot.web.servlet.error; import org.springframework.stereotype.C..

Spring ExceptionHandler & ControllerAdvice [내부링크]

SpringBoot가 제공하는 ExceptionResolver 1. ExceptionHandlerExeptionResolver @ExceptionHandler 처리 > API 예외처리 2. ResponseStatusExceptionResolver @ResponseStatus(value=HttpStatus.NOT_FOUND) Ht..

모던자바인액션 13강 디폴트 메서드 [내부링크]

디폴트 메서드가 나온 배경 자바 8이전에 자바에서는 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현하여 제공하거나 슈퍼클래스의 구현을 상속받아야 한다. 그런데 인터페이스에..

모던자바인액션 12강 Date, Calendar 날짜와 시간 API [내부링크]

기존 자바에서 날짜 표현 자바 1.0에서는 java.util.Date클래스 하나로 날짜와 시간 기능을 제공했다. Date클래스는 밀리초단위로 표현이 된다. Date date = new Date(117, 8, 21); // 출력 결과 Thu Sep 21 00..

모던자바인액션 12강 Date, Calendar 날짜와 시간 API [내부링크]

기존 자바에서 날짜 표현 자바 1.0에서는 java.util.Date클래스 하나로 날짜와 시간 기능을 제공했다. Date클래스는 밀리초단위로 표현이 된다. Date date = new Date(117, 8, 21); // 출력 결과 Thu Sep 21 00..

모던자바인액션 11강 Optional [내부링크]

Optional 클래스 소개 java.util.Optional Optional은 선택형값을 캡슐화하는 클래스다. 위의 그림처럼 Car가 null이 아니라 값이 없음을 나타낸다. Optional 클래스로 감쌀 경우 null이 아닌 Optional.empty 메..

백준 10448번 유레카 이론 자바 풀이 [내부링크]

문제 삼각수 Tn(n ≥ 1)는 [그림]에서와 같이 기하학적으로 일정한 모양의 규칙을 갖는 점들의 모음으로 표현될 수 있다. [그림] 자연수 n에 대해 n ≥ 1의 삼각수 Tn는 명백한 공식이 있다. Tn = 1 + 2 + 3 +..

백준 3040번 백설공주와 일곱 난쟁이 자바 풀이 [내부링크]

문제 매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다. 어느 날 광..

백준 2075번 N번째 큰 수 자바 [내부링크]

문제 N×N의 표에 수 N2개 채워져 있다. 채워진 수에는 한 가지 특징이 있는데, 모든 수는 자신의 한 칸 위에 있는 수보다 크다는 것이다. N=5일 때의 예를 보자. 12 7 9 15 5 13 8 11 19 6 21 10 26 31 16 48..

백준 1935번 후위표기식2 자바 풀이 [내부링크]

문제 후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식..

백준 5397번 키로거 자바 풀이 [내부링크]

문제 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드..

컬렉션 API 개선 [내부링크]

자바9에서 작은 컬렉션 객체를 쉽게 만들 수 있는 방법을 제공한다. String List를 만들 때 List friends = Arrays.asList("Rophael", "Olivia", "Thibau"); 고정 크기의 리스트를 만들었지만 요소를 추가하거나..

JAVA 병렬 스트림 사용시 고려할 점 [내부링크]

1. 확신이 서지 않으면 직접 측정하라. 병렬스트림이 순차 스트림보다 언제나 빠른 것은 아니다. 병렬스트림의 수행과정이 투명하지 않을 수도 있고 공유된 가변상태가 있을 경우 올바르게 동작하지 않을 수도 있..

람다란 무엇인가 [내부링크]

람다표현식 메서드로 전달할 수 있는 익명함수를 단순화 한 것. 이름은 없지만 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외리스트를 가질 수 있다. 보통 메서드와 달리 이름이 없기때문에 구현해야할..

자바 스트림 처리 [내부링크]

스트림이란? 한 번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임. 입력스트림에서 데이터를 한 개씩 읽어들어 출력스트림으로 데이터를 한 개씩 기록한다. 어떤 프로그램의 출력 스트림은 다른 프로그램의..

java static 사용이유 생성자 대신 static 팩토리 메소드 [내부링크]

JAVA Static 이란? 고정된 이란 의미를 가지며 static변수와 static메소드를 만들 수 있다. 메모리에 한 번 할당되어서 프로그램이 종료될때 해제되는 것을 의미한다. GC가 적용되지 않는다. 일반적으로 Class는 s..

Spring Boot QR코드 이미지 생성 해서 thymeleaf로 보여주기 [내부링크]

QR코드 생성을 위한 라이브러리 추가 pom.xml com.google.zxing javase 3.1.0 Controller.java @RequestMapping("/getQrcode") public String getQrcode(Model model) throws Exception { String img = getQRCodeI..

intellij gradle 버전 변경하기 [내부링크]

gradle-wrapper.properties에서 사용중인 버전을 확인할 수 있다. distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2..

자바최적화 - JVM [내부링크]

1. 인터프리팅과 클래스로딩 JVM인터프리터 > 'while루프 안에 switch문' java HelloWorld 로 자바 어플리케이션을 실행하면 OS는 가상 머신 프로세스를 구동한다(자바 바이너리) 자바 가상환경이 구성되고 스택머..

task non-zero exit (137) docker container 비정상 종료 [내부링크]

task non-zero exit (137) 대부분 메모리 문제라고 함. docker-desktop 윈도우 로컬에서 띄웠고 wsl2 사용중이었다. docker memory를 늘려줬다. settings > advanced 에 메모리를 늘릴 수 있으나 wsl2 사용중일..

redis cluster 구성(windows) [내부링크]

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 kafka 연동 (with springboot) [내부링크]

kubernetes yaml 파일 작성시 띄어쓰기 조금만 잘못되도 object가 올라가지 않는다. 아래 사이트에서 yaml 파일 검증을 했다. https://codebeautify.org/yaml-validator Best YAML Validator Online Free YAML Val..

windows docker kubernetes fail to start [내부링크]

windows 에 kubernetes를 설치하려면 virtualbox로 많이들 하던데 회사 PC에 virtualbox설치가 안된다. 어쩔 수 없이 minikube를 설치해서 테스트해봤는데 minikube는 external ip 노출이 안되서 테스트가 쉽지 않..

logstash input rabbitmq 설정 docker swarm [내부링크]

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..

Spring boot Rabbitmq test [내부링크]

exchange > test.exchange 추가 queues > test.queue 추가 exchange 에서 만든 exchange에 들어가면 Bindings에 추가할 수 있다. test.queue, test.route.# Spring Boot > rabbitmq consumer #application.prop..

Docker 에 rabbitmq 설치 [내부링크]

docker pull rabbitmq:3-management management image를 받지 않으면 대시보드를 사용할 수 없다. docker run -d --hostname rabbit --name rabbit -p5672:5672 -p 15672:15672 rabbitmq:3-management -e RABBITMQ..

gitlab-runner docker 내부 git연결 시 설정 [내부링크]

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 register x509: certificate signed by unknown authority [내부링크]

gitlab-runner 등록할 때 gitlab에 ssl이 적용되어 있어서 에러날 때 gitlab서버에 인증서를 복사해서 gitlab-runner container /etc/ssl/certs에 넣는다. // ca-certificates 설치 $ apt install ca-certificates..

gitlab package registry 생성 후 라이브러리 올리는법(gradle) [내부링크]

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..

intellij gitlab 기존소스 연동하는방법 [내부링크]

이거 자꾸 할 때마다 검색해서 하는게 답답해서 정리함 일단 gitlab에서 프로젝트를 생성한 후 주소를 복사해둠. intellij VCS > Enable Version Control Integration git 선택한 후 OK 그러면 이렇게 메뉴에 g..

unable to access ssl certificate problem self signed certificate in certificate chain intellij [내부링크]

intellij  - File > Settings > Tools > Server Certificates > Accept non-trusted certificates automatically 체크 그래도 안되면 git config --global http.sslVerify false 옵션을 끈다

docker gitlab ssl(https) 적용 [내부링크]

인증서 생성 //폴더 생성 $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..

docker gitlab 설치 & gitlab-runner 연동 [내부링크]

Gitlab Runner 는 Gitlab CI/CD와 pipeline에서 Job을 실행시키는 어플리케이션으로 별도로 설치해서 사용할 수 있다. Gitlab docker 설치 (Windows Docker) docker run --detach --name gitlab --hostname gitlab..

Jenkins Rest API with JAVA [내부링크]

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..

windows gradle 설치 [내부링크]

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 circuit breaker test (with spring boot) [내부링크]

Resilience4j 란? hystrix로 부터 영감을 받은 경량 fault tolerance library. 다른 외부 라이브러리 종속성이 없기 때문에 가볍게 사용하기 좋다. Circuit Breaker / Rate Limiter / Bulk Head / Retry / Cache /..

Elk opendistro docker-swarm으로 올리기 [내부링크]

폴더구조 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 token 조회 join 방법 [내부링크]

docker swarm init 명령어로 swarm을 초기화할 수 있다. docker swarm init 초기화를 하면 join할 수 있는 token이 저렇게 나온다. 그러면 join할 서버에 들어가서 그대로 날려주면 join 된다. docker node ls 이..

Docker local registry 생성 후 image push 해보자 [내부링크]

엄청난 삽질 후에 성공했다. 그냥 결론은 Docker 새로깔고 하니까 한 번에 되는데 ㅡㅡ 역시 안되면 재시작하고 새로 깔고가 진리. docs.docker.com/registry/deploying/ Deploy a registry server docs.docker.co..

Docker swarm elastic apm 올리기 [내부링크]

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..

kafka windows에 설치 및 명령어 [내부링크]

1. Kafka Download kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org 다운로드 받고 압축을 풀면 된다. 2. 실행방법 Zookeeper D:\kafka> bin\window..

mongodb springboot Authentication failed 에러 [내부링크]

spring boot로 몽고 DB연동하여 서버에 올린 후 접속해서 쿼리 날리면 발생하는 에러 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.username=testuser spring.data.mo..

MongoDB 명령어 정리 (createUser, DB, drop ..) [내부링크]

MongoDB 콘솔 접속 명령어 mongo -uroot -p1234 DB 생성명령어 use test; 딱히 없고 그냥 use 명령어를 사용하면 해당 DB를 사용할 수 있다. create User/ dropUser db.createUser({user:"testUser",pwd:"1234",ro..

docker invalid mount config for type [내부링크]

docker-compose.yml로 swarm 서비스를 올릴 때 볼륨 마운트시 발생하는 에러 해결방법 다른 호스트에 배포할 서비스면 해당 호스트에 마운트할 볼륨이 생성되어있는지 확인해야한다.

JAVA Optional [내부링크]

JAVA Optional T type의 객체를 포장해주는 래퍼 클래스이다. Optional 인스턴스는 모든 타입의 참조변수를 저장할 수 있다. null 일 수도 있는 객체를 감싸고 있다. Optional을 쓰는 이유 NullPointerException을..

JAVA Stream API 란? [내부링크]

JAVA Stream ? JAVA 8에서 추가된 기능으로 Array나 Collections 처럼 연속된 형태의 객체를 데이터로 받아서 method로 처리하는 기능이다. 입력된 데이터의 자료구조 자체를 변경하지 않고 결과를 파이프라인 형..

JAVA lamda란 [내부링크]

Lamda식이란 무엇인가? 함수적 프로그래밍 y = f(x) 형태의 함수로 구성된 프로그래밍 기법 데이터를 매개값으로 전달하고 결과를 받는 코드들로 구성이 되어있다. 객체 지향 프로그래밍보다 효율적인 경우는? -..

keycloak 이란 무엇일까? 로컬에 설치해보자 [내부링크]

Open Source Identity and Access Management 최소한의 작업으로 어플리케이션과 보안 서비스에 인증을 추가할 수 있다. 사용자를 저장하거나 인증할 필요가 없다. ID연개나 소셜 로그인과 같은 고급 기능도 제공..

SpringBoot 외부 프로퍼티 파일로 실행하기 (application.properties) [내부링크]

SpringBoot는 application.properties를 외부 프로퍼티를 이용해서 실행할 수 있다. jar 실행방법 java -jar spring-boot.jar 프로퍼티의 이름을 바꿔서 실행할 경우(spring.config.name) java -jar spring-boot.j..

Netflix Zuul Gateway Filter [내부링크]

MSA서비스를 개발하면서 우리가 gateway 를 직접 개발한다면 개발해야할 내용들이 굉장히 많다. Netflix에서는 직접 개발한 Zuul gateway를 공개함으로써 많은 개발자들이 편하게 가져다 쓰도록 지원하고 있다. 지..

Postman으로 Mockup api를 만들어보자. [내부링크]

Postman으로 Mockup api를 만들 수 있다. 만드는 방법 POSTMAN에서 New를 눌러서 Mock Server를 생성한다. Mockup api를 써주면 되는데 수정이 가능하다. 일단 Path만 작성해보자. Mock Server 이름을 정한다...

SpringBoot @Conditional 에 대해 알아보자 [내부링크]

@Conditional SpringBoot App을 빌드할 때 어떤 조건이 충족되는 경우에만 Application Context에 로드하고 싶다. 테스트 중일 때는 비활성화되어 있거나 런타임 환경에 특정 조건일 때만 충족해야할 경우에 사용..

JWT 토큰 [내부링크]

JWT란? Json Web Token. Json형태로 안전하게 정보를 전달하는 Open Standard이다. JWT정보는 디지털 서명이 되어 있어서 안전하다. JWT는 HMAC또는 RSA, ECDSA를 사용하는 공개키/개인키쌍을 서명할 수 있다. JWT..

SpringBoot @EnableEncryptableProperties 스프링에서 암호화를 써보자 [내부링크]

설정파일에 민감한 정보들은 암호화를 해줘야 한다. (DB비밀번호, URL 같은 것들..) 암호화는 대세를 따라서 jasypt(Java Simplified Encryption)를 썼다. // https://mvnrepository.com/artifact/com.github.ulis..

SpringBoot CORS설정 [내부링크]

CORS란? Cross-Origin Resource Sharing(CORS) 교차출처 리소스 공유 서로 다른 도메인끼리 다른 도메인의 요청을 허용하도록 하는 구조를 말한다. 허용하기 위해서도 사용하지만 다른 도메인에서 쓰지 못하도록..

SpringBootServletInitializer 란 무엇일까? 왜쓰지? [내부링크]

차근차근 공부하려고 했는데 모르는게 너무 많다. 다소 번잡스럽지만 최대한 정리를 해가면서 업무를 하려고 일단 찾아본 대로 정리한다. SpringBootServletInitializer란? 더보기 An opinionated WebApplication..

git 사용방법 (with sourcetree) [내부링크]

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..

Spring Cloud Gateway GatewayFilter [내부링크]

GatewayFilter gatewayfilter를 이용하면 들어오는 HTTP요청과 나가는 HttpResponse를 수정할 수 있다. 특정경로로 범위가 지정된다. AddRequestFilter spring: cloud: gateway: routes: - id: add_request_header..

Spring Cloud Gateway predicates 테스트 [내부링크]

Predicates Webflux handler Mapping을 사용하여 Route하는데 다양한 Predicates factory가 이미 정의되어 있다. After & Before spring: cloud: gateway: routes: - id: after_route uri: https://example.org p..

git submodule 삭제 [내부링크]

git submodule deinit -f frontend .git/modules/frontend삭제(숨긴파일보기로) .gitmodules file 자체를 삭제 git rm --cached frontend rm -rf frontend

JAVA ClassLoader 란 ? [내부링크]

JAVA ClassLoader abstract class 로 bytecode를 읽어서 class파일을 생성하는 역할을 한다. CompileTime이 아닌 Runtime에 클래스를 로딩할 수 있게 해주는 기술 내부적으로는 세 단계를 거친다 로딩 > 링크 > 초..

Spring Cloud Gateway Actuator enabled 방법 [내부링크]

management.endpoint.gateway.enabled=true # default value management.endpoints.web.exposure.include=gateway endpoint.gateway.enabled를 true로 해줘야 endpoint를 확인할 수 있다. 처음엔 이렇게 아무것도..

git submodule jenkinsfile 에서 배포할 때 [내부링크]

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 update already exists and is not an empty directory. [내부링크]

git submodule 추가한 후에 젠킨스에서 배포시에 자꾸 저렇게 directory 가 있다고 에러난다. git submodule deinit --force . git submodule init git submodule update --recursive deinit이 서브모듈 삭제하는..

git submodule 이용해서 springboot + react 합치기 [내부링크]

git submodule 저장소 안에 다른 저장소를 추가해서 사용하는 것이다. 다른 저장소를 받아와서 함께 사용하는 것. 준비단계1 : react 프로젝트 만들기 참고로 백엔드개발자라서는 핑계긴하지만 front 1도 모른다...

linux 원격 서버 포트 열려있는지 확인하는 방법 [내부링크]

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 private Repository push [내부링크]

docker build >>>  docker build --tag build_image_name:0.0.1 . private Repository에 이미지를 배포하는 방법 저렇게 파란색으로 가려진 부분이 사설 repository URL docker tag [기존이미지명] [사설reposit..

jar Dockerfile 작성 & image만들기 [내부링크]

intellij 기준bootJar를 이용해서 jar파일을 만들어준다. 그러면 build/libs 밑에 jar파일이 생성된다. jar 파일 실행방법은 java -jar ROOT.jar 이다. 이제 dockerfile을 작성해보자. docker search openjdk11..

JAR 파일 구조 [내부링크]

Spring-boot-loader 모듈은 실행가능한 jar와 war파일을 생성해준다. maven이나 gradle을 사용한다면 쉽게 생성할 수 있다. 세부적으로 어떻게 동작하는지 구체적으로 알 필요는 없다. JAVA는 중첩된 jar파일을 로..

LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. [내부링크]

jar로 실행할 때 발생하는 log에러 logback라이브러리가 중복되면 발생한다. gradle.build에서 제외시켜줘야 한다. configurations { all { exclude group: 'org.springframework.boot', module: 'spring-boot-st..

javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication [내부링크]

IDE마다 설정 부분이 다르겠지만 intellij 기준으로 - Edit Configurations - Project 선택 - Enable launch optimization, Enable JMX agent 체크해제 하면됨

SpringBoot logback 설정 [내부링크]

SpringBoot에서는 기본적으로 Commonslogging에 대한 구현가능성은 열어두고 있다. 내부적으로 slf4j를 지원한다. jar console 출력시 옵션 주는 방법 java -jar ***.jar --debug --debug와같은 형태로 옵션을 주..

SpringBoot SpringCloudGateway 초기세팅 [내부링크]

Intellij ultimate 버전을 사용하면 프로젝트 생성시 Spring Initializr가 있다. 그 기능으로 손쉽게 Spring Boot를 시작할 수 있다. Community버전을 사용중이라면 아래 링크에서 프로젝트를 손쉽게 만들 수 있다..

비밀번호 해시 솔트 [내부링크]

요즘 트렌드는 비밀번호를 DB에 저장하지 않고 해시해서 사용자가 입력한 비밀번호와 저장된 비밀번호의 해시값이 일치하는지 확인하는 것이라고 한다. 일명 단방향 해시 만드는 방법을 예를 들어 비밀번호가 qwer..