anstnsp의 등록된 링크

 anstnsp로 등록된 네이버 블로그 포스트 수는 126건입니다.

java - heapdump 분석 [내부링크]

Heap dump를 통해 분석이 필요한 경우 1.OutOfMemoryError에 대한 문제 분석 시 필요하다. Heap dump...

MySQL , JSON Data처리 [내부링크]

MySQL 5.7.8 부터 DBMS 차원에서 JSON 데이타를 지원 https://www.lesstif.com/dbms/mysql-jso...

querydsl 에서 DB 함수 사용하기 [내부링크]

Hibernate 4.3 이상 또는 JPA2.1 이상을 사용한다면 FUNCTION 구문을 사용하여 SQL 함수를 ...

Indy-java-sdk 사용중 NullpointerException [내부링크]

https://github.com/hyperledger/indy-sdk/tree/v1.16.0/wrappers/java#troubleshooting 위의 트러블슈팅보...

자바+gradle 프로젝트에 로그백(logback)적용 및 auto-configuration [내부링크]

해결하고자하는 문제: 자바 + gradle 프로젝트에서 로그백의 auto-configuration을 가능하게 하고싶다. 스...

netotiateProofWithRevocation(VC 폐기 및 검증) [내부링크]

https://github.com/anstnsp/Hyperledger-indy-practice/issues/7

negotiate proof [내부링크]

https://github.com/anstnsp/Hyperledger-indy-practice/issues/6

Issue Credential [내부링크]

https://github.com/anstnsp/Hyperledger-indy-practice/issues/5

DID document 업데이트 [내부링크]

https://github.com/anstnsp/Hyperledger-indy-practice/issues/4

Schema 및 Credential Definition 생성예제 [내부링크]

https://github.com/anstnsp/Hyperledger-indy-practice/issues/3

DID 및 DID document 생성 [내부링크]

https://github.com/anstnsp/Hyperledger-indy-practice/issues/2

1.Indy-SDK 설치 및 실행 [내부링크]

원본 : https://github.com/anstnsp/Hyperledger-indy-practice/issues/1 # 목적 Mac과 CentOS 환경에...

drone.ci] docker multi-stage-build [내부링크]

드론의 도커 플러그인은 도커레지스트리에 이미지를 빌드하거나 배포할 수있게 해줍니다. 도커파일이 아래...

springboot + mockk + kotest를 이용한 테스트코드 작성(2) [내부링크]

안녕하세요~ 저번 1편에서는 간단하게 kotest의 설치 및 사용법에 대해서 알아 보았다면 이번에는 mockk 사...

springboot + mockk + kotest를 이용한 테스트코드 작성(1) [내부링크]

들어가기에앞서... 생각보다 많은사람들이 테스트코드를 작성하지 않고 테스트코드를 왜 작성해야 하는지 ...

Spring Security + Ajax 호출 시 CSRF 관련 403 Forbidden 에러 [내부링크]

Spring Security를 이용할 경우 Ajax의 POST 호출 시 403 Forbidden 에러가 발생합니다. 처음에는 ...

Thymeleaf 사용시 org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/index" [내부링크]

증상 IDE에서 실행할 때는 이상없이 html 파일을 찾아가는데, 리눅스 환경에서 돌리니 아래와 같은 에러...

mysql] 프로시저,함수 definer확인 및 변경 [내부링크]

-- root 확인 SELECT * FROM mysql.proc WHERE DEFINER='root@%' a...

java.lang.IllegalArgumentException Illegal character(s) in message header value error / Base64.encod [내부링크]

문제상황 에러가 발생하면 슬랙에 에러에 대한 파일을 업로드 하는 기능을 개발하여 k8s 에 배포 하였다. ...

JPA - PESSIMISTIC_LOCK [내부링크]

문제발생 여러명의 사용자가 동시에 해당 테이블의 값을 변경하려고 해서 발생 예를들어, 아래와 같은 상황...

에러]Could not write JSON: JsonObject; nested exception is com.fasterxml.jackson.databind.JsonMappingE [내부링크]

요청을 한 상대방에게 JSON으로 응답을 주려고 했다.. 근데 JSON이 복잡하게 되어있어서... 예를 들어, 아래와 같이 여러개가 있어서 따로 귀찮게 Dto를 만들고 싶지 않았다. 내가 알기론 스프링에서 요청 응답에 대한 json변환을 RestController 사용시 jackson이 해주는 걸로 아는데 해당 jackson은 아마도 자바 클래스를 만들어야만 요청, 응답 시 JSON으로 변환 시켜주는 걸로 알아서... (방법을 아시면 저도 알켜주세요) gson 을 통해 따로 DTO를 만들지 않고 해결 하였다 . 먼저 스프링부트의 JSON기본 라이브러리의 사용을 jackson에서 Gson으로 교체해준다. appliaction.yaml파일에서 아래 처럼 추가! 그 후 컨트롤러의 응답값에 JsonEle.......

컬렉션함수(associateBy,groupBy,partition...) [내부링크]

associateBy 함수와 groupBy 함수는 지정된 키(Key)에 의해 인덱싱된 컬렉션의 원소로부터 Map을 만듭니다. 키(Key)는 KeySelector 파라미터에서 정의됩니다. 뿐만 아니라 옵션으로 valueSelector 를 정의할 수 있습니다. (기본적으로는 해당 원소(element)가 value가 됩니다.) associateBy 와 groupBy 의 차이 associateBy : value를 만들 때, 마지막으로 적합한 값을 value로 지정합니다. (→ key, value 형식의 Map을 만들고 있기 때문에 key가 중복된다면 마지막에 있는 원소가 value가 된다는 얘기입니다.) groupBy : value를 만들 때, 모든 적합한 요소를 사용한다. (→ 모든 적합한 요소라 함은 key가 중복될 때, value를 리스트로 만들어.......

SpringBoot] 스프링부트에서 캐시사용(feat.@Cacheable , @EnableCaching) [내부링크]

1. "spring-boot-starter-cache" 라이브러리 불러온다. (따로 로컬캐쉬를구성하고 싶다면 ehcache도 받아옴) 2. 캐시 기능을 사용하고 싶은 프로젝트에 @EnableCaching을 쓴다. 3. 캐시하고 싶은 메서드에 @Cacheable, 캐시를 제거하고자하는 메서드에는 @CacheEvict를 쓴다. EhCache 구성 1. "spring-boot-starter-cache" 라이브러리 불러온다. (따로 로컬캐쉬를구성하고 싶다면 ehcache도 받아옴) 2. 캐시기능을 관리할 캐시 매니저컨피그 만듬. 3. 캐시하고 싶은 메서드에 @Cacheable, 캐시를 제거하고자하는 메서드에는 @CacheEvict를 쓴다. 여기서 cacheNames는 위의 컨피그에서 만든 캐시이름이고 key는 캐시를 기억할.......

자바]CountDownLatch를 이용한 동시성 높이기 [내부링크]

각종 환경에서 성능을 높이기 위해서 취하는 방법이 멀티 프로세스와 멀티 쓰레드이다. 자바에서는 성능을 높이기 위해서 기본적으로 멀티 쓰레드의 형태를 취하고 있다. 물론, JNI를 사용해서 Native의 프로세스를 띄울 수 있기도 하다. 자바의 기본 패키지중에서 쓰레드를 사용해서 동시성을 극대화 시키는 각종 자료구조와 클래스들은 java.uti.concurrent 패키지를 확인해 보면 알 수 있다. 수학적인 계산을 제외한, 거의 모든 컴퓨터 성능이슈는 느린 I/O 처리를 어떻게 빠르게 처리하냐가 주된 관심사가 아닐까 한다. 그래서, 많이 쓰이는 쓰레드의 형태를 살펴보면.. 1. 잡을 개별 쓰레드로 위임한다. 2. 잡을 개별 쓰레드가 처리하고 결.......

JAVA] volatile 키워드 [내부링크]

Java volatile이란? volatile keyword는 Java 변수를 Main Memory에 저장하겠다라는 것을 명시하는 것입니다. 매번 변수의 값을 Read할 때마다 CPU cache에 저장된 값이 아닌 Main Memory에서 읽는 것입니다. 또한 변수의 값을 Write할 때마다 Main Memory에 까지 작성하는 것입니다. 왜(Why) 필요할까요? volatile 변수를 사용하고 있지 않는 MultiThread 어플리케이션에서는 Task를 수행하는 동안 성능 향상을 위해 Main Memory에서 읽은 변수 값을 CPU Cache에 저장하게 됩니다. 만약에 Multi Thread환경에서 Thread가 변수 값을 읽어올 때 각각의 CPU Cache에 저장된 값이 다르기 때문에 변수 값 불일치 문제가 발생하게 됩니.......

drone] drone을 이용한 CI/CD - 1 [내부링크]

1.드론의특징. yaml문법으로 각 단계 정의. 다양한 plugin을 갖고 있다. golang으로 되어 있다. 2.구성 드론서버 : agent : 각 repository에서 실행하는 pipeline을 수행하는 역할. runner 라고도 한다. 3.설치 0)사전준비 우선 로컬에서 드론서버를 가동 할 것이기 때문에 리버스프록시를 해주는 ngrok을 설치. (로컬호스트로는 접근이 안댄다 했던 것 같다) (ngrok 설치 및 사용은 여기) 1)github oauth에 drone서버 등록 깃허브에 로그인하여 우측상단에 버튼 클릭하여 github -> settings -> developers settings-> OAuth Apps 에서 OAuth Apps을 신규 생성한다. OAuth Apps 신규생성 화면 어플리케이션 등록.......

자바]네티(netty) 정리 [내부링크]

※네티란? Netty는 프로토콜 서버 및 클라이언트와 같은 네트워크 어플리케이션을 빠르고 쉽게 개발하는 것을 가능하게 해주는 NIO 클라이언트 서버 프레임워크이다. Netty는 TCP, UDP 소켓 서버 개발과 같은 네트워크 프로그래밍을 매우 간단하고 능률적으로 만들어준다. 네티는 유지하기 쉬운 높은 성능의 프로토콜 서버 및 클라이언트를 신속한 개발을 위한 비동기 이벤트 드리븐 네트워크 어플리케이션 프레임워크 입니다. 네티는 프로토클 서버 및 클라이언트 같은 네트워크 어플리케이션의 빠르고 쉬운 개발을 가능하게 하는 NIO 클라이언트 서버 프레임워크 입니다. 이는 TCP 또는 UDP 소켓 서버와 같은 네트워크 프로그래밍을 간단하게 할.......

디자인패턴] 템플릿 메소드 패턴 [내부링크]

템플릿 메소드 패턴 템플릿 메소드 패턴의 정의로 GoF Design Patterns 의 정의가 가장 깔끔한 것 같다. Defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Metod lets subclasses redefine certain steps of an algorithm without changing the algorithms structure. – GoF Design Patterns 알고리즘의 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴이다. 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메소드이지만 여러곳에서 다른형태로 사용이 필요한 경우 유용한 패턴이다. 구현하려는 알고리즘에 일정한 단계가 있고, 세부.......

k8s] configmap [내부링크]

컨피그맵(configmap)은 컨테이너에서 필요한 환경설정 내용을 컨테이너와 분리해서 제공해 주기 위한 기능입니다. 클라우드 네이티브 아키텍처에서 컨테이너는 변하지 않는 자원이어야 합니다. 개발할때 사용하는 컨테이너와 실제 서비스용으로 사용되는 컨테이너가 동일해야 한다는 것입니다. 그래야지만 개발과 서비스 사이의 환경 차이에서 오는 잠재적 문제를 제가할 수 있습니다. 그런데 개발용과 서비스용에서는 서로 다른 설정이 필요한 경우가 많습니다. 간단히는 사용하는 DB가 다를수도 있고 실제 개발할때는 로그를 debug모드로 출력하고 서비스용에서는 info 모드로 로그를 출력해야 하는등 여러가지 다른 설정을 해야합니다. 이렇게.......

Linux] 로그 파일 날짜별 생성(logrotate) [내부링크]

redis 같은 경우 로그 파일이 하나의 파일로 계속 쌓입니다. (ex.redis.log) logroate를 통해 log를 날짜별로 rotatation 해보겠습니다. logrotate의 기본 설정 값은 /etc/logrotate.conf 에 있습니다. 주로 logrotate의 전체 환경설정 값을 이곳(/etc/logrotate.conf)에 설정 합니다. 그럼 한번 해당 파일을 열어 보겠습니다. 여러분이 따로 해당 파일을 변경하지 않았으면 위와 같이 되어 있을거라 생각합니다. 그리고 각각의 logrotate 설정은 /etc/logrotate.d 폴더 아래에 구성합니다. 만약 redis 로그를 rotate설정 하려면 /etc/logrotate.d 폴더에 redis 라는 이름으로 파일을 만들면 됩니다. 저는 redis로그파일의 위치를 /var/log/redis.......

redis] OS부팅 시 레디스 자동 시작 등록 [내부링크]

1.스크립트 파일 준비 CentOS 7을 기준으로 작성하였습니다. /redis/redis-6.0.9 디렉토리에 설치되어 있다고 가정합니다. 스크립트 파일 선두에 #!/bin/sh - 가 반드시 포함되어야 합니다. redis-start.sh redis-stop.sh 2.작성한 스크립트를 실행할 수 있도록 모드 변경 3.서비스 파일 등록 /usr/lib/systemd/system 디렉토리에 서비스 파일을 작성합니다. 4.부팅 시 레디스 서버가 시작할 수 있도록 활성화합니다. 5.리부팅합니다. 6.부팅 후 레디스 서버가 잘 시작했는지 확인합니다. ※다음은 간단한 systemctl 명령입니다. systemctl option [service] systemctl daemon-reload 설정 변경 반영 systemctl start/stop redis 레디스.......

redis] waring 제거 [내부링크]

1.TCP backlog 리눅스에 redis를 설치하고 실행 해보면 로그에 아래와 같은 경고가 나온다. 기본적인 소켓 accpet limit 값이다. 보통 리눅스 배포판에는 128로 되어 있고 이 때문에 tcp backlog의 셋팅이 511로 되어 있지만 강제로 128로 적용된다는 거다. 아래의 명령어로 1024 혹ㄱ은 더 높은 값으로 설정 해 준다. (최고는 65535) 확인 : systctl - a | grep somaxconn 2.overcommit_memory 메모리 이용에 관한 설정이다. 메모리 이용이 허용량보다 넘어 가게 될 경우 처리 방법이다 아래 명령어로 해결 가능. 확인 : sysctl -a |grep vm.overcommit_memory 출처 : https://drscg.tistory.com/668

OCSP(Online-Certificate-Status-Protocol) 란 [내부링크]

OCSP는 인증서의 상태를 실시간으로 체크하기 위한 프로토콜로 인증서의 시리얼을 통하여 실시간으로 인증서의 만료여부를 CA 인증서 DB에 직접 요청한다. 실시간으로 인증서의 만료여부를 확인 할 수 있으며 CRL과 같이 불필요한 목록을 모두 받아 볼 필요가 없어 그 속도가 빠르다. CRL (Certificate Revocation List) 도 동일한 기능을 하지만, CRL 보다 개선된 표준이라고 할수 있습니다. OCSP와 CRL 모두 가능한 경우 OCSP가 CRL보다 우선합니다. 하지만 웹브라우져 입장에서 볼때는, OCSP 요청보다 단일 CRL을 다운로드하고 캐시해 놓은 후 다시 조회가 필요할때 캐시를 이용하여 인증서 유효성을 확인하는 것이 효율적일수도 있습니다. 다.......

java] 정규표현식을 이용한 텍스트에서 주민등록번호 찾기 [내부링크]

자바에서 text에서 원하는 특정문자를 찾는 방법입니다. Pattern 클래스 주요 메서드 compile(String regex) : 주어진 정규표현식으로부터 패턴을 만듭니다. matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true를 반환합니다. asPredicate() : 문자열을 일치시키는 데 사용할 수있는 술어를 작성합니다. pattern() : 컴파일된 정규표현식을 String 형태로 반환합니다. split(CharSequence input) : 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리합니다. Parttern 플래그 값 사용(상수) Pattern.CANON_EQ : None표준화된 매칭 모드를 활성화합니다. Pattern.CASE_INSENSITIVE : 대소문자를 구분하지 않습니다. Patter.......

자바8] Stream.flatMap() [내부링크]

"Hello"와 "World"라는 문자열에 속해 있는 단어들을 중복 없이 출력하고 싶다고 가정하겠습니다. 먼저 문자열 두 개의 List를 만들어 줍니다. 스트림의 distinct()를 사용해 중복된 문자를 제거 해보겠습니다. 이런 식으로 하면 될 것 같나요? 잘 생각해보면 word.split을 호출하면 배열이 나옵니다. 그것을 map으로 했으니 요소가 2개가 나오겠죠? String 2개에서 String [] 2개로요. distinct() 불러도 당연히 겹치지도 않겠죠. 결국 우리가 원하는 결과는 나오지 않습니다. 어떻게 해야 할까요? 우리가 필요한 문자 하나하나의 스트림이 필요합니다. 그래야 distinct로 거를 수 있겠죠. 그렇다면 중간에 저 String []에.......

자바8] stream 연습문제 [내부링크]

연습 예제에는 2가지 클래스가 있습니다. Trader 거래자와 Transaction 트랜잭션 두 가지 클래스가 있습니다. Trader.java Transaction.java 아래는 주석으로 문제들을 적어 놓았고 해당 문제에 대한 풀이는 바로 아래에 있습니다. 출처: https://pjh3749.tistory.com/272?category=677074 [JayTech의 기술 블로그]

스프링부트] @Valid 안되는 문제 해결(feat.코틀린) [내부링크]

#문제의 상황 코틀린 + 스프링부트 + gradle 환경에서 @Valid를 쓰기 위해 컨트롤러와 Dto에 아래와 같이 코딩을 했다. 음... 당연히 @NotBlank가 적용되어 "", " ", null 모두다 에러를 내뱉을 줄 알았는데... 적용이 안되는 거였다. 그래서 찾아보니 스프링부트2.3? 인가 부터 javax.valiation은 지원하지 않고 spring-boot-starter-validation 혹은 hibernate-validator 의존성을 해야 한다고 한다. 또한 코틀린에서 위와 같이 생성자 필드에 @NotBlank로 사용해 버리면 생성자에 어노테이션이 걸려 안되던 거였다.. 이는 해당 dto를 디컴파일해서 자바코드로 보면 더 자세히 알 수 있다. 인텔리제이에서는 shfit를 2번누.......

Java - ExecutorService를 사용하는 방법 [내부링크]

java.util.concurrent.Executors와 java.util.concurrent.ExecutorService를 이용하면 간단히 쓰레드풀을 생성하여 병렬처리를 할 수 있습니다. ExecutorService 생성 Executors는 ExecutorService 객체를 생성하며, 다음 메소드를 제공하여 쓰레드 풀을 개수 및 종류를 정할 수 있습니다. newFixedThreadPool(int) : 인자 개수만큼 고정된 쓰레드풀을 만듭니다. newCachedThreadPool(): 필요할 때, 필요한 만큼 쓰레드풀을 생성합니다. 이미 생성된 쓰레드를 재활용할 수 있기 때문에 성능상의 이점이 있을 수 있습니다. newScheduledThreadPool(int): 일정 시간 뒤에 실행되는 작업이나, 주기적으로 수행되는 작업이 있다면 Scheduled.......

스프링부트 + 코틀린 에서 JPA 사용하기 [내부링크]

아래내용 참고 https://blog.junu.dev/37

ApplicationEventPublisher를 통한 문제 해결 [내부링크]

*문제상황 누군가가 게시판의 게시글을 신고하면 디비에 해당 게시글이 신고됐다고 접수가 되고 이를 슬랙 채널에 알린다. 자, 이를 해결하려고 생각해보면 신고접수가 디비에 완전히 저장된 후에 슬랙채널에 알림을 줘야 한다는 걸 알 수 있다. 그렇지 않으면 신고접수가 도중에 실패했는데도 슬랙채널에 알람이 가기 때문이다. 그렇다면 우린 아래와 같은 순서에 따라 코드를 구현하면 될 것 같다. 얼핏 보면 트랜잭션 어노테이션을 사용했기 때문에 하나의 트랜잭션으로 묶여서 잘 만든 것 같지만 슬랙 메세지는 외부 api를 호출하는 것 이기 때문에 메세지를 보낸 후의 로직에서 예외가 발생한다면 디비저장과 같은 것은 롤백 되겠지만 이미.......

객체지향원칙 -SOLID [내부링크]

단일 책임 원칙 (SRP : Single Responsibility Principle) 모든 클래스는 단 하나의 책임을 갖는다. 즉, 클래스를 수정해야 할 이유가 오직 하나여야 한다는 뜻이다. 개방 - 폐쇄 원칙 (OCP : Open - Closed Principle) 확장에 대해서는 개방되어 있어야 하지만, 수정에 대해서는 폐쇄되어 있어야 한다. OCP를 위반하지 않는 설계를 할 때 가장 중요한 것은 무엇이 변하는 것인지, 무엇이 변하지 않는 것인지를 구분해야 한다. 변해야 하는 것은 쉽게 변할 수 있게 하고, 변하지 않아야 할 것은 변하는 것에 영향을 받지 않게 해야 한다. 이 OCP원칙을 지키기 위해서는 전략패턴이 많이 사용된다. 전략패턴에 대해서는 아래 링크에 나와있다. htt.......

디자인패턴] 싱글톤 패턴 - SingletonPattern [내부링크]

Singleton(이하 싱글톤) 패턴은 자바에서 많이 사용한다. 먼저 싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴 을 의미한다. 즉 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환 해주는 것이다. 보통 아래와 같이 사용하게 된다. 위 코드에서는 instance라는 전역 변수를 선언하는데 static을 줌으로써 인스턴스화 하지 않고 사용할 수 있게 하였지만 접근 제한자가 private 로 되어 있어 직접적인 접근은 불가능하다. 또한 생성자도 private으로 되어 있어 new 를 통한 객체 생성도 불가능하다. 결국 getInstance 메서드를 통해서 해당.......

X.509 version3 인증서 양식 [내부링크]

Certificate Format Version : 인증서의 버전 정보 표시(현재는 version3까지있음) Certificate Serial Number : 인증서를 구분하는 시리얼번호(최대 20octet) Signature Algorithm Identifier for CA : CA가 사인할 때 사용하는 알고리즘(version3은 SHA-256withRSA 사용) Issuer Name : CA정보 Validity Period : 인증서 유효기간의 시작일과 만료일 Subject Name : 인증서 사용자 정보 Subject Public Key Information : 인증서 사용자 공개키 Extension(s) (V3) : 인증서의 추가적인 정보와 정책(version3에서 사용가능) CA Signature : CA의 디지털 인증서

자바] 비검사경고를 제거하라(Feat.@SuppressWarnings) [내부링크]

이펙티브자바 아이템27부분을 보고 작성한 글입니다. 먼저 하고싶은 말은 할 수 있는 한 모든 비검사 경고를 제거하라! 입니다. 자바개발을 하다보면 가끔씩 마주치는 아래와 같이 노란색 경고를 보곤 합니다. 저 또한 꽤 많은 경우 보아왔고 별 생각없이 @SuppressWarnings("unchecked") 어노테이션을 줘서 없애던가 IDE의 도움을 받아 설명을 보고 고치곤 했습니다. 그러던 중 이펙티브자바의 글을 보고 자세히 알아보고자 작성합니다. 해당 비검사경고는 비검사 형변환 경고, 비검사 메서드호출경고, 비검사 매개변수화 타입경고, 비검사변환경고 등이 있습니다. 이런 경고들을 그대로 둔다면 런타임 시점에 ClassCastException이 발.......

프로그래머스] 힙-더맵게 [내부링크]

프로그래머스 문제에 이미 힙을 사용하여 풀라고 힌트를 주고 있다. 힙... 내가하면 힙? 엉덩이 힙? 힙한남자? ..... 사실 생각해보니 자료구조 힙에 대해 따로 공부를 해보지 않은 것 같다. 이번 기회에 해당 문제를 풀며 힙,우선순위큐를 정리한다. ※우선순위큐(Priority Queue) 선언 ※우선순위큐(Priority Queue)의 특징 1. 높은 우선순위의 요소를 먼저 꺼내서 처리하는 구조 (큐에 들어가는 원소는 비교가 가능한 기준이 있어야함) 2. 내부 요소는 힙으로 구성되어 이진트리 구조로 이루어져 있음 3. 내부구조가 힙으로 구성되어 있기에 시간 복잡도는 O(NLogN) 4. 응급실과 같이 우선순위를 중요시해야 하는 상황에서 쓰임 ※Priority Qu.......

디비] 인덱스를 걸면 왜 INSERT,DELEDE가 느려질까 [내부링크]

보통 인덱스를사용하면 SELECT속도가 빨라진다고 하는건 모두들 알고계신다고 생각합니다. 그리고 인덱스를 사용하면 INSERT,DELETE 속도는 낮아진다고 하는데 왜 그런지 알아보도록 하겠습니다. ※인덱스 설정 시 INSERT,DELETE 속도 저하 이유 인덱스는 데이터베이스의 메모리를 사용하여 테이블 형태로 저장됩니다. (따라서 인덱스 갯수가 많아지면 저장공간도 늘어나도 속도 저하가일어남.) 인덱스를사용하면 SELECT속도가 빨라지는 이유는 인덱스테이블에 가서 해당 데이터의 위치를빠르게 찾아가기 때문입니다. 하지만 DELETE,INSERT같은 경우에는 새로운데이터가 추가 및 삭제 되면서 기존에 인덱스 페이지에 저장되어 있던 탐색 위치가 수.......

Block vs Non-Block, Sync vs Async (블럭과논블럭,싱크 어싱크) [내부링크]

해당 글은 배달의민족 10분 테크톡의 우 님의 영상을 참고 하였습니다. 함수가 리턴하는 값을 을 결과값을 전달한다고 하고 반환이라 하면 제어권의 반환이라 용어를 칭하면서 글을 진행 하겠습니다. ※Blocking VS Non-Blocking 1)Blocking인 상황 (Sync + Block) 1)Block인 상황에서는 첫번째로 호출자 함수가 실행되면서 제어권을 호출자 함수가 갖게 됩니다.이후 호출자는 자신의 로직을 수행하면서 함수A를 실행하게 됩니다. 2)함수A를 실행하기까지의 제어권은 호출자함수에게 있지만 함수A가 실행되면 제어권은 호출자에게서 함수A에게 옮겨지게 됩니다. 이후 제어권을 갖고 있는 A는 자기 로직을 모두 수행 후 결과값과 함께 제어권을 호.......

Nginx Reverse Proxy로 사용하기 [내부링크]

Nginx를 써본지 어언 2년4개월 정도 된 것 같습니다. 오랜만에 쓰다 보니 Nginx의 역할은 알고 있지만 설정들이 잘 기억나지 않아 복습 겸 다시 정리하는 글 입니다. ※웹 서버란? nginx 는 결국 웹 서버의 한 종류입니다. 그렇다면 웹 서버는 무엇일까요? 웹 서버란 이미지, 동영상, 자바스크립트, HTML, 등 다양한 문서(정적 리소스)를 제공하는 서버 시스템입니다. 주로 HTTP 통신 프로토콜을 통해 리소스를 전달하지만 FTP, SMTP 와 같은 다른 프로토콜도 지원하는 것이 대부분입니다. 대부분의 웹 서비스는 위의 아키텍처처럼 구성되어 있으며 웹서버는 그 중 다음과 같은 역할을 주로 담당하게 됩니다. 1.데이터 전송 HTML 텍스트 파일.......

스프링부트]레디스를 통한 세션공유 [내부링크]

소스코드를 아래의 주소에서 확인하실 수 있습니다. https://github.com/anstnsp/springboot-redis-sentinel/tree/main 문제상황) 일을 하던 중 다른프로젝트의 도움 요청을 받고 문제를 해결해야 하는 상황이 생겼습니다. 문제의 상황은 아래와 같습니다. 보통 와스가 한대라면 세션을 만들어 JSESSIONID로 세션값을 쿠키에 넣어서 유저에게 돌려주면 아무 문제 없겠지만 와스가 2대 이상 늘어난다면 유저가 다시 접속 시 유저가 로드밸런서에 의해 자신이 세션을 받은 WAS가 아닌 다른 WAS에 요청이 보내 진다면 다시 로그인을 해야 하는 상황이 벌어집니다. 이런 상황을 해결하기 위해 AWS의 ALB에서 제공하는 스티키세션을 이용하여 한번 방.......

JAVA] 메모리 구조 [내부링크]

JVM 구조 실행될 클래스 파일을 메모리에 로드 후 초기화 작업 수행 메소드와 클래스변수들을 해당 메모리 영역애 배치 클래스로드가 끝난 후 JVM은 main 메소드를 찾아 지역변수, 객체변수, 참조변수를 스택에 쌓음 다음 라인을 진행하면서 상황에 맞는 작업 수행(함수 호출, 객체 할당 등) Class Loader: JVM내로 클래스를 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈로써 런타임시 동적으로 클래스를 로드한다. Execution Engine: Class Loader를 통해 JVM 내의 런타임 데이터 영역에 배치된 바이트 코드를 실행한다. 이 때, Execution Engine은 자바 바이트 코드를 명령어 단위로 읽어서 실행한다. Garbage Co.......

JAVA] 추상클래스와 인터페이스의 차이 [내부링크]

추상클래스 : 클래스 내에 추상메소드가 하나 이상 포함되거나 abstract로 정의된 클래스를 말한다. (일반변수 + 일반메소드 + 추상메소드 형태) 인터페이스 : 모든 메소드가 public abstract인 인터페이스를 말한다. (다만, 자바8이상에서는 default메소드를 통해 일반메소드를 구현할 수 있다.) 다들 알고 있겠지만 추상클래스, 인터페이스 둘 다 추상메소드의 구현을 강제한다. 그렇다면 왜 추상클래스, 인터페이스를 나누어 놓은 걸까? 각각 언제 사용해야 하나? 결론 : 추상클래스와 인터페이스는 존재 목적이 다르다. 추상클래스는 해당 추상클래스를 상속 받아서 기능을 이용(코드 재사용성)하거나 확장시키는데 있다. 반면에 인터페이스.......

java] stream과 parallel stream [내부링크]

자바에서는 다양한 방법으로 병렬처리를 할 수 있습니다. 기본적인 Thread클래스를 이용할 수 있으며, ExecutorService를 이용하여 스레드풀도 쉽게 만들 수 있습니다. 그리고 CompleteFuture를 이용하면 스레드 간의 데이터 동기화, 실행순서등도 원하는 대로 조작할 수 있습니다. 이러한 병렬 처리를 자바8에서 등장한 Stream으로 쉽게 가능하게 되었습니다. stream().parallel() 처럼 말이죠. Stream 예제 오늘 사용할 예제는 아래와 같습니다. 코드에는 java google style guide를 적용하였습니다. 메서드를 하나 만들도록 하겠습니다. 해당 메서드는 이름을 파라미터로 받습니다. 메서드는 Person 객체를 만듭니다. Person 객체에는 name과.......

스프링] AOP 기본 [내부링크]

AOP 란 개념 AOP(Aspect-Oriented Programming) 는 OOP를 보완하는 수단으로, 흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법이다. 즉, 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것. (AOP를 이용하면 기존코드의 첨삭없이 메소드 호출이전, 메소드호출 이후 필요한 로직을 수행할 수 있게 해준다.) 주요 개념 - Aspect - 여러 곳에서 쓰이는 코드(공통 부분)를 모듈화한 것 - Target - Aspect 가 적용되는 곳 - Advice - Aspect 에서 실질적인 기능에 대한 구현체 - Joint point - Advice 가 Target 에 적용되는 시점 - 메서드 진입할 때, 생.......

스프링] Feign Client 사용 [내부링크]

* 아래 진행한 사항은 https://github.com/anstnsp/FeignClient_Demo에 있습니다. 1.Feign이란 ? Feign은 Netflix에서 개발된 Http client binder 이다. Feign을 이용하면 웹 서비스 클라이언트를 쉽게 작성할 수 있다. Feign을 사용하기 위해서는 interface를 작성하고 annotation을 선언하기만 되어서 쉽다. 스프링이 런타임에 구현체를 제공 (마치 JPA처럼) 2.의존성 추가할 것 3.@EnableFeignClients 추가 위 주석에 써논 것 처럼 프로젝트의 시작점에 @EnableFeignClients를 써줌으로써 @FeignClient를 찾아 구현체를 만들도록 해준다. 4.테스트용 Post클래스 작성 5.@FeignClient 작성 인터페이스의 모든 메소드는 GET,POST.......

java] inner class vs static inner class [내부링크]

먼저 이 글의 목적을 말하도록 하겠다. 멤버 클래스(클래스 안에 클래스)는 되도록 static으로 만들어라!! (멤버 클래스에서 바깥 인스턴스에 접근할 일이 없다면 무조건 static을 붙여서 정적멤버클래스로 만들자!) 예를 들어, 아래소스 처럼 만들라는 얘기다. 이유는 아래 글에서 설명하겠다. Nested Class 자바는 일반적인 클래스를 제외하고 일반적으로 클래스의 중첩을 이렇게 나눈다. Nested Class 패키지가 되는 클래스가 아닌 나머지 클래스 하나의 패키지에 대해 여러 클래스를 사용할 수 있고, 서로간 결합만이 존재하는 클래스의 경우 가독성이 좋고 관리하기 편하다. 클래스가 다른 클래스에만 유용 할 경우 해당 클래스에 클.......

java] 빌더 패턴 (Builder Pattern) [내부링크]

빌더패턴의 장점 인스턴스 생성 시 어떤 변수에 뭐가 들어가는지 확실히 보기 가능. 메소드체인을 사용 가능. 불변객체 생성 가능. 정적팩토리와 생성자에는 똑같은 제약이 하나 있습니다. 바로 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 것입니다. 보통 선택 매개변수가 많을 때는 점층적 생성자패턴을 사용합니다. 아래 예를 들어 보겠습니다. 위와같이 점층적 생성자 패턴도 쓸 수는 있지만 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기어렵습니다. 코드를 읽을 때 각 값의 이미가 뭔지 헷갈리고 , 매개변수가 몇개인지도 주의해서 세어보아야 합니다. 그럼 빌더 패턴을 이용해 보겠습니다. 빌더는 생성.......

java] 정적팩토리메소드 사용 이유 [내부링크]

정적 팩토리 메서드를 들어본 적이 있는가? 프로그래밍을 시작한 지 얼마 안된 사람도 정적 팩토리 메서드라는 단어를 한번쯤은 들어봤을 것이다. 그리고 아마 프로그래밍을 조금 해본 사람들은 정적 팩토리 메서드라는 용어에 많이 익숙해져 있고 실제로도 자주 사용하고 있을 것이다. 이 글은 정적 팩토리 메서드 개념이 익숙하지 않은 사람들을 위한 글이다. 이런 사람들은 주변에서 정적 팩토리 메서드를 자주 사용한다는 이유만으로 그 용도와 역할을 제대로 모른 채 사용할 수도 있다. 이 글을 통해서 정적 팩토리 메서드란 무엇이고 어떤 장점이 있는지 알아보도록 하자. 정적 팩토리 메서드(Static Factory Method)란? 정적(static). 팩.......

자바,스프링] 예외테스트 작성(JUNIT4,JUNIT5) [내부링크]

자바에서 테스트코드 작성 시 예외발생 테스트에 대해 설명합니다. 기존 많이 쓰는 JUNIT4 버전에서는 @Test(expected = "CustomException.class) 와 같이 발생할 예외클래스를 Test어노테이션에 expected옵션을 줘서 해당 예외가 발생함을 검증합니다. 위의 소스코드를 보면 EmptyResultDataAccessException예외가 발생함으로 @Test에 쓰여진 예외가 발생하였으므로 원하는 방식의 테스트코드가 잘 작성 되었습니다. JUNIT버전 : 5.6 JUNIT5에서는 assertThrows라는 함수로 예외를 검증합니다. assertThrows(발생할예외클래스, 예외가발생하는 익스프레션) 간단한 예제를 보겠습니다. 예제1 (예외발생 클래스 확인) 위 예제에서 Int.......

java]enum 응용 및 활용 [내부링크]

https://techblog.woowahan.com/2527/ https://jojoldu.tistory.com/122?category=635881 https://jojoldu.tistory.com/137 https://velog.io/@ljinsk3/Enum%EC%9D%98-%EC%9A%94%EC%86%8C%EB%A5%BC-%EC%A1%B0%ED%9A%8C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-%EB%B9%84%EA%B5%90-%ED%8C%A9%ED%86%A0%EB%A6%AC-%EB%A9%94%EC%84%9C%EB%93%9C-vs-HashMap https://velog.io/@kyle/Java-Enum-%EC%82%AC%EC%9A%A9-2%ED%83%84

회문판별 (Palindrome) [내부링크]

회문이란 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 단어를 말한다. 예를 들어, level, poop, abba 등이 될 수 있겠다. *문제 level, poop와 같이 회문을 만족할 때 true 아니면 false를 리턴 하는 함수를 만들어 주세요. *풀이 맨앞의 문자와 맨뒤의 문자가 같으면 제거 하는 식으로 반복해 나간다. 이 때 반복문으로 풀 수도 있지만 재귀함수를 이용하여 풀이 하였다. (재귀함수는 반복문으로 바꾸기 가능)

JAVA] 자바 메모리 누수 [내부링크]

메모리 누수(leak)의 심각성 자바에서는 GC에 의해 메모리가 자동 관리되어 메모리누수가 없다고 하지만, 사실은 메모리 누수가 발생할 수 있다. 그 이유는 실제로 사용되지 않는 객체의 reference를 프로그램에서 잡고 있으면 (ex.List,Map, Set같은 컬렉션 클래스들에 객체가 담겨있는 경우) 그 객체는 GC에 의해 처리되지 않고 사실상 쓰레기로서 메모리(보다 정확하게는 주소 공간)를 점유하게 된다. (그래서 컬렉션에서 안쓰는 객체들을 지워줘야 gc가 처리해줌) 이런 메모리 누수 현상이 있으면 지속적으로 메모리가 증가되어 성능 저하뿐만 아니라 결국에는 메모리 오류 발생으로 프로그램이 종료되는 심각한 현상이 발생한다. 우리가 자.......

스프링] @Transactional 에서 propagation [내부링크]

내 기억을 더듬어 보면 propagation이란 @Transcational 사용시 기본적으로 해당 어노테이션이 걸린 부분은 트랜잭션의 성질을 띠게 되고 그 하위에 또 @Transactional이 있다면 그 상위의 트랜잭션에 포함되어 움직인다 였다. 그리고 그것을 제어하는게 바로 @Transactional의 옵션 중 하나인 propagation!! 이라고 알고 있었다. 그래서 면접에서는 위처럼 알고있는데로만 대답하였고 좀 더 정확한 활용법을 알고자 이렇게 정리하게 됨. 우선 @Transactional이 무엇인지 살펴보자. @Transactional 우선 해당 어노테이션을 사용하면 적용된 클래스 또는 메소드에 트랜잭션이 적용된다. 따라서 전체 클래스에 트랜잭션을 적용할 것인지 아니.......

codility] Array - OddOccurrencesInArray [내부링크]

*문제 A non-empty array A consisting of N integers is given. The array contains an odd number of elements, and each element of the array can be paired with another element that has the same value, except for one element that is left unpaired.For example, in array A such that:A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9the elements at indexes 0 and 2 have value 9,the elements at indexes 1 and 3 have value 3,the elements at indexes 4 and 6 have value 9,the element at index 5 has value 7 and is unpaired.Write a function:class Solution { public .......

codility] TimeComplexity - FrogJmp [내부링크]

*문제 A small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to a position greater than or equal to Y. The small frog always jumps a fixed distance, D.Count the minimal number of jumps that the small frog must perform to reach its target.Write a function:class Solution { public int solution(int X, int Y, int D); }that, given three integers X, Y and D, returns the minimal number of jumps from position X to a position equal to or greater than Y.For example, given:X = 10 Y = 85 D = 30the function should return 3, becaus.......

codility] TimeComplexity - PermMissingElem [내부링크]

*문제An array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing.Your goal is to find that missing element.Write a function:class Solution { public int solution(int[] A); }that, given an array A, returns the value of the missing element.For example, given array A such that:A[0] = 2 A[1] = 3 A[2] = 1 A[3] = 5the function should return 4, as it is the missing element.Write an efficient algorithm for the following assumptions:N is an integer within the range [0..100,000];the elem.......

codility] TimeComplexity - TapeEquilibrium [내부링크]

*문제A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|In other words, it is the absolute difference between the sum of the first part and the sum of the second part.For example, consider array A such that:A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3We can spl.......

HackerRank] Sales by Match (Easy) [내부링크]

*문제 Alex works at a clothing store. There is a large pile of socks that must be paired by color for sale. Given an array of integers representing the color of each sock, determine how many pairs of socks with matching colors there are.For example, there are socks with colors . There is one pair of color and one of color . There are three odd socks left, one of each color. The number of pairs is 2.Function DescriptionComplete the sockMerchant function in the editor below. It must return an integer representing the number of matching pairs of socks that are available.sockMerchant has the follo.......

객체지향프로그래밍[OOP] [내부링크]

1) 객체객체란 말 그대로 대상을 나타내는 단어입니다.예를 들어, 사람 개인 한 명 한 명을 모두 객체라 할 수 있고, 책 한 권 한 권을 객체라 할 수 있습니다.사람은 생김새와 성격이 똑같을 수는 없기 때문에 개개인을 객체라 할 수 있으며,책도 내용이 같을지라도 한 권의 책에 흠집을 낸다고 해서 모든 책들이 전부 흠집이 나는 것이 아니기 때문에 한 권 한 권을 객체라 할 수 있습니다.2) 클래스사람들은 일반적으로 같은 속성들을 갖고 있습니다.여기서 속성이란 눈, 코, 입, 손, 발, 등의 신체들을 의미합니다.책도 책 이름, 작가, 출판사, 출판일 등 같은 속성을 갖고 있다고 할 수 있습니다.사람, 책 같은 객체들이 공통적으.......

JPA 소개 및 장단점 [내부링크]

JPA이란?RDB(Relational Database)와 OOP 객체 사이의 불일치에서 오는 패러다임을 해결하기 위해 자바는 ORM(Object-Relational Mapping) 기술을 만들어 냈다. RDB는 우리가 흔히 쓰는 Mysql이나 Oracle와 같은 관계형 데이터베이스를 의미하며 ORM은 RDB의 테이블과 객체를 매핑하는 역할을 함으로써 기본적인 쿼리문 같은 경우에는 개발자가 직접 작성하지 않아도 된다. 장점 1.객체지향적으로 관리가 되기에 비즈니스 로직에만 집중할 수 있기 때문에 생산성에 강점을 가진다. 2.기본적인 CRUD SQL을 자동으로 생성해주기 때문에 간편하며 그로인해 기본 CRUD작성에 오타나 버그 생상성을 줄인다. 3.특정 DB에 종속적이지 않다. 단점1.새롭.......

프로그래머스] 이분탐색 - 입국심사 [내부링크]

*문제 *알고리즘 설명 위 문제는 이진탐색을 이용한 문제이므로 먼저 이진탐색에 대해 설명한다. 이진 탐색(binary search)는 정렬되어 있는 자료들의 집합에서 특정 자료를 찾고자 할 때 많이 사용되며 매우 빠른 탐색 알고리즘이다. 이진 탐색은 '퀵정렬'과 유사하게 '분할 후 정복(divide and conquer)'의 전략을 사용한다. 이 전략을 사용하는 알고리즘은 문제를 나누어 해결해 나가는 방법이기 때문에 실행시간은 log의 설징을 갖는다. 특히 문제의 크기를 정확히 양분하는 경우에는 최악의 경우라고 logN의 성능을 보장한다. 이진 탐색의 탐색 시간은 'T = K * logN'으로 O(logN)이다. 선형 탐색의 시.......

프로그래머스] 스택/큐 - 다리를 지나는 트럭 [내부링크]

*문제 *풀이 - "트럭 여러대가 일 차선 다리를 순차적으로 이동합니다" << 이 문장은 큐를 의미 하므로 큐의 사용을 떠올린다. 다리를 하나의 큐로 생각하고 큐에 조건을 걸어 트럭이 진입하고 나오는 식의 코딩으로 풀자. 1.먼저 순차적으로 다리에 트럭이 올라가야 하기 때문에 for문을 통해 트럭에 하나씩 접근한다. 2.이제 다리에 트럭이 진입할 경우를 생각해 봐야 한다. 2-1.먼저 다리(큐)에 트럭이 전혀 없는 경우 이 경우엔 트럭이 다리에 무조건 진입 가능하기 때문에 바로 큐에 넣어주고 다리 위 트럭들의 무게를 의미하는 변수에 진입한 트럭의 무게를 더해준다. 또한, 시간을 의미하는 answer에 도 트럭이 진입했.......

shell] 명령어 실행결과를 변수에 할당 [내부링크]

명령어 실행 결과를 변수에 할당하는 방법은 두 가지가 있습니다.$() 이용하는 방법과 `로 명령어를 감싸주는 방법입니다.출처 : https://wikidocs.net/54525

shell] 해당 프로세스의 프로세스id 얻기 [내부링크]

위 구문은 ps -ef | grep java 를 해서 나온 결과를 다시 grep ssl 통해 ssl만 나오게 한 후 나온 결과에서 2번째꺼를 리턴함. 아래는 자세한 단계별 결과 1) ps -ef | grep java 2) ps -ef | grep java | grep ssl 3) ps -ef | grep java | grep ssl | awk '{print $2}'

shell] ps , ls 로 찾은 갯수 찾기 [내부링크]

형식 : wc [옵션] "파일명"사용예 : wc sendmail.cf wc 명령어는 파일 내의 라인, 단어 문자의 수를 출력합니다. 이처럼 아무런 옵션없이 사용하면 위와 같은 결과를 출력합니다. 즉,sendmail.cf 파일이 1827줄로 구성되었고, 9497개의 단어가있으며, 58290개의 철자(문자)로 이루어졌다는 결과를 알수있습니다. 필요하다면 위처럼 -c 옵션으로 전체 문자의수만 출력할수 있습니다. 위처럼 ls -l 의 결과(디렉토리내의 리스트출력)를 wc -l 로 측정함으로 디렉토리내 파일의 갯수를 샐수 있습니다.위에는 '합계 68'까지 라인에 포함시켰습니다. 따라서 하나를 제외하면 디렉토리내 1개의 파일이 있다는걸 알수있습니다........

[2020 마이블로그 리포트] 한 눈에 보는 올해 내 블로그 데이터! [내부링크]

네이버블로그와 함께한지 17년이라니 !! 시간이 참빠르게 느껴집니다.

레디스(Redis) 란? [내부링크]

1. NOSQL이란?RDBMS는 보통 “관계형 데이터베이스”라고 하며 반면 NOSQL은 “비관계형 데이터베이스”이다. 보통 NOSQL은 키-밸류나 컬럼, 문서 형식의 데이터 모델을 이용한다.(RDBMS가 아닌 다른 형태로 데이터를 저장하는 기술이라고 생각하면 된다.)NOSQL: Not Only SQL, 비관계형 데이터베이스* 그렇다면 왜, 언제 NOSQL을 쓰는 걸까? 아주 많은 양의 데이터를 효율적으로 처리가 필요할 때, 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요할 때 사용한다. 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조이기 때문에, NOSQL을 사용한다.1–1. NOSQL의 종류1)키-밸류 스토리지형.......

codility] binary gap [내부링크]

이거슨... 너와 나의 갭차이다.. *문제A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N.For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binary representation 10100 and contains one binary gap of length 1. The number 15 has binary representation 1111 and has no binary gaps. The number 32 has binary represen.......

codility] Array - CyclicRotation [내부링크]

코딜리티의 lesson2 에 있는 문제. *문제An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9, 7] (elements are shifted right by one index and 6 is moved to the first place).The goal is to rotate array A K times; that is, each element of A will be shifted to the right K times.Write a function:class Solution { public int[] solution(int[] A, int K); }that, given an array A consisting of N int.......

SpringBoot] HTTPS 적용 [내부링크]

1.HTTPS서버에서 사용할 개인키+인증서 생성. 아래의 명령어를 통해 개인키,인증서를 생성하면서 개인키+인증서를 저장할 저장소를 만든다. ※keytool 에 대한 설명 - 먼저 keytool 을 cmd창에서 치면 아래와 같은 도움말이 나온다. 아래 명령어를 통해 해당 키저장소에 인증서와 개인키가 잘 생성됐는지 확인. 2.HTTPS서버의 .yml 파일에 SSL관련 설정. - 이것으로 HTTPS를 사용하고자 하는 서버의 SSL설정이 끝났다.. 아주쉬움. 이제 서버 to 서버로 HTTPS 통신을 할때 주의할점을 알아보자... 3.서버에서 HTTPS를 사용하는 서버로 요청스프링에서 기본적으로 제공하는 RestTemplate을 사용했다. 위에서 봐야 할것은 인증서.......

네크워크]OSI7계층 [내부링크]

잘정리된 자료로 대체 : https://jhnyang.tistory.com/194

WEB] RESTful API 및 Best Practice [내부링크]

| REST API란 REST API란 REST 아키텍처 스타일을 지키는 API를 말합니다. REST 아키텍처는 클라이언트와 서버간의 독립적인 개발을 진행할 수 있는 아키텍처 스타일입니다. 서버와 클라이언트의 데이터는 HTTP 프로토콜 위에서 데이터를 주고받으며 REST 아키텍처 스타일에서 명시하는 조건을 준수하여 해야 합니다.REST API라는 것은 간단히 생각하면 쉽습니다. 클라이언트와 서버는 따로 분리되며 데이터는 HTTP 프로토콜 위에서 주고받는 아키텍처라 생각하면 됩니다. 여기에 몇 가지 특징을 더한 아키텍처 스타일이 REST API이죠. 서버에서 HTML을 그려서 데이터를 보내는 MVC 아키텍처와는 큰 차이가 있습니다.| RESTful 특징클라.......

CentOS7] systemd 등록 [내부링크]

https://seungdols.tistory.com/768

JAVA] 간과하는 ArrayList vs LinkedList [내부링크]

위는 ArrayList와 LinkedList 로 데이터의 추가,삭제,얻기 를 했을 때의 걸리는 시간이다. 그림에서 보다시피 LinkedList는 데이터의 추가와 삭제를 할때 빠르고 데이터를 얻을 때 느리다. LinkedList를 쓸 때는 요소에 대한 무작위 접근이 많지 않거나, 리스트에서 요소의 추가,삭제가 많을 때 사용하면 된다. The difference of their performance is obvious. LinkedList is faster in add and remove, but slower in get. Based on the complexity table and testing results, we can figure out when to use ArrayList or LinkedList. In brief, LinkedList should be preferred if:there are no large number of random access of .......

젠킨스를 활용한 스프링부트 배포 [내부링크]

* docker 카테고리에 [젠킨스 마스터-슬레이브 만들기] 가 있지만 이번엔 젠킨스를 활용한 스프링부트 배포에 대해 이야기 합니다. https://blog.naver.com/anstnsp/221743543323※직접 설치 방법. 기본적으로 자바사 설치가 되어 있어야 젠킨스를 설치할 수 있다. 자바는 open jdk를 설치를 해보자.CentOS 기준 설치 명령어 이다. Ubuntu라면 apt-get install openjdk-8-jdk 으로 설치하는 방법이 있다. 젠킨스 설치 시 방법은 크게 두 가지가 있다. 직접 설치와 도커를 통한 설치. 먼저 직접설치를 알아보고 그 다음에 도커를 통한 설치를 알아볼 텐데 도커에 대한 러닝커브가 존재하기 때문에 시간이 없다면 밑의 도커를 통한 설치부분은 뛰.......

java8] 합성함수(Function Composition) [내부링크]

1.What is function compoistion ? 합성함수란?-> 새로운 함수를 구성하기 위해 결합 할 수있는 재사용 가능한 작은 함수를 만드는 것자, 먼저 어떻게 compose, andThen 함수를 사용하는지 예제를 보자. 아래와 같이 들어온 인자에 2를 곱해주는 time2 함수와 들어온 인자를 제곱하는 squared 함수가 있다. 이 함수들을 compose, andThen을 이용해 결합해보자. 위의 결과를 보면 알다시피 , compose와 andThen의 차이는 함수의 실행 순서다. compose는 parameter(여기서는 squared)를 먼저 실행하고 caller를 나중에 실행한다. andThen은 caller(time2)를 먼저 실행하고 parameter를 나중에 실행한다. author와 tag로 기사들을 검색하는.......

redis - sentinel [내부링크]

Sentinel 은 redis 와 동일한 서버에 설치해도 되고, 독립적인 서버에 설치해도 상관 없습니다. port 만...

redis] redis replication(레디스 복제) [내부링크]

redis의 FailOver 상황을 대비해서 replication 구성에 대해 알아 보겠습니다. 다들 아시겠지만 repl...

redis] redis 설치 [내부링크]

1.기본적인 설치 가장 먼저 https://redis.io/download애 들어가서 redis를 받겠습니다. 현재 시점으로 ...

/dev/null 과 /dev/null 2>&1 [내부링크]

shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미...

MSA(Micro Service Architecture) [내부링크]

모놀리식 아키텍처카카오택시에 대항할 새로운 택시 앱을 만든다고 해봅시다. 필요한 요구사항에서 기능...

JAVA] Interface에서 default 메소드 [내부링크]

Default Method인터페이스는 기능에 대한 선언만 가능하기 때문에, 실제 코드를 구현한 로직은 포함될 수...

프로그래머스] 해쉬 - 완주하지못한 선수 [내부링크]

https://codevang.tistory.com/289?category=827588

프로그래머스]스택_큐/주식가격 [내부링크]

흠... 왜 큐/스택인지 모르겠음.

Stream] groupingBy 사용하기 [내부링크]

참고: https://wraithkim.wordpress.com/2017/04/13/java-8-%EC%8A%A4%ED%8A%B8%EB%A6%BC-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC/

디자인패턴] 전략패턴 - Strategy Pattern [내부링크]

애플리케이션에서 변화하는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리하여 구체적인 행위를 캡슐...

도커 활용 예시 , 도커 사용 이유 [내부링크]

*도커 활용 1.설치가 번거로운 도구를 도커 컨테이너로 가져가 사용함으로써 호스트를 깔끔하게 유지하면서...

도커 컨테이너 명령 및 운영관리 명령 [내부링크]

* 실행 명령 * docker container run [options] 이미지명[:태그] [명령] [명령인자..] docker container ru...

docker를 이용해 jenkins master-slave 구조 만들기 [내부링크]

1.먼저 docker-compose 파일을 작성한다. -volumes를 정의해 호스트 쪽 현재 작업 디렉토리 바로 아래에 je...

JPA] Dirty checking 시 변경분만 업데이트 하기 [내부링크]

Dirty Checking 이란 JPA에서 트랜잭션이 끝나는 시점에 최초 시점 부터 변화가 있는 모든 엔티티를 ...

JPA] VScode 에서 querydsl 사용 시 Qclass 인식 문제 해결 (ClassNotFoundException) [내부링크]

querydsl을 사용하는 해당 프로젝트의 .classpath를 확인. 아래 코드를 추가하면 댐. 이로써 디버깅모드...

base64? [내부링크]

인코딩이란? Base64 인코딩에 대해 알아보기전에 먼저 인코딩이란게 무엇인지 간략하게 알아보자. 인코딩(...

SSL(Secure Sockets Layer)개념 및 동작 원리 알아보기 [내부링크]

HTTPS와 HTTP HTTP(Hypertext Transfer Protocol)은 HyperText인 html을 전송하기 위한 통신규약을 의미한다. 마지막에 S를 붙인다면 Secure라는 뜻으로 보안이 강화된 통신규약을 의미한다. HTTP는 암호화가 되어있지 않은 방법으로 서버에 데이터를 전송하기 때문에 서버와 클라이언트가 서로 주고받는 메시지를 알아내기가 쉽다.그러므로 서버로 비밀번호나 계좌번호 등 중요한 데이터를 전송할 경우에는HTTPS 프로토콜을 사용하여 통신하는 것이 중요하다.HTTPS와 SSLHTTPS는 SSL 프로토콜을 기반으로 돌아가는 프로토콜 중 하나다.SSL 정의 Secure Sockets Layer은 암호규약이다.( 영어: Transport Layer Security, TLS )( 과거.......

PKI(Public Key Infrastructure) [내부링크]

PKI 는 Public Key Infrastructure 의 약자 입니다. 그대로 해석해서 '공개 키 기반' , 또는 '공개 키 인프라' 라고 해석할 수가 있습니다. RFC 2459 바로 그 표준에 관한 문서입니다. 이 문서를 보시면 PKI 에 관한 상세한 내용을 다 아실 수가 있습니다. 예전에 눈에 모래바람이 일어날 정도로 열심히 봤던 기억이 나는군요. X.509 는 인증서 포맷을 의미합니다.이 PKI 기반을 이해할려면 3가지 기본적으로 알고 있어야 하는게 있습니다. 바로 위의 세가지 입니다. 보통 '해쉬 함수' 라고 불리는 Message Digest 와 (그렇지만 일반적으로 Computer Science 에서 부르는 Hash 는 Data Structure 에서.......

전자서명과 인증서 [내부링크]

전자서명이란?서명자를 확인하고 서명자가 서명했다는 사실을 나타내는 데 이용하려고,특정 전자문서에 첨부되거나 논리적으로 결합된 전자적 형태의 정보를 말한다. 전자서명은 말그대로 서명(사인)하는 것을 말한다.서명을 통해서 서명한 사람을 확인하는 용도로 사용하는 것이다.이런 개념을 공개키 암호를 이용하면 통신 간의 인증 및 변조 검증이 가능하다.지난 포스팅에서 개인키(Private key)로 데이터를 암호화 하면 서명방식이라고 언급을 했었다.그림을 보자, 앨리스가 message를 보낼 때, 원본 message를 hash한 값을 자신의 개인키로 암호화 하여 전자서명을 생성하여 message와 함께 밥에게 보낸다.밥은 앨리스의 공개키를 이용.......

gRPC] gRPC VS HTTP API 비교 [내부링크]

※gRPC 장점-- 성능 --gRPC 메시지는 효율적인 이진 메시지 형식인 Protobuf를 사용하여 직렬화됩니다. Protobuf는 서버와 클라이언트에서 매우 빠르게 직렬화합니다. Protobuf serialization은 작은 메시지 페이로드를 발생시키며 이는 모바일 앱과 같은 제한된 대역폭 시나리오에서 중요합니다.gRPC는 HTTP 1.x에 비해 상당한 성능 이점을 제공하는, HTTP의 주요 개정판인 HTTP/2용으로 설계되었습니다.이진 프레이밍 및 압축. HTTP/2 프로토콜은 간단하며, 보내고 받을 때 모두 효율적입니다.단일 TCP 연결보다 여러 HTTP/2 호출의 멀티플렉싱. 멀티플렉싱은 HOL(Head of Line) 차단을 제거합니다.HTTP/2는 gRPC에만 국한되지 않.......

BFS, DFS 문제 [내부링크]

https://developer-mac.tistory.com/64

gradle] 빌드 자동화 [내부링크]

빌드 자동화란?프로젝트에서 개발을 하기전에 보통 로컬 개발 환경 셋팅을 한다. IDE 또는 편집기를 설정하는 일을 제외하면 보통 가장 먼저하는 일이 빌드 환경 설정일 것이다. 정적 타이핑 언어는 보통 코드를 작성하면 컴파일을 해서 오브젝트 파일을 생성하고, 링킹이라는 작업을 통해서 실행 파일 또는 java의 jar와 같은 라이브러리 파일을 생성한다. 언어마다 차이가 있지만 이런 작업들을 자동화하는 것이 빌드 자동화이다.(자바의 경우 jar파일과 같은 라이브러리 파일 만드는게 빌드 자동화이다.)Gradle의 특장점간결함Gradle은 기본적으로 Groovy라는 언어를 활용한 DSL을 스크립트로 사용한다. 사실상 플러그인을 직접 작성할.......

HAProxy와 Nginx 의 로드밸런싱 [내부링크]

NGINXNginx 는 대표적인 웹서버인 Apache 의 문제점을 해결하면서 만들어진 웹서버로 비동기 방식으로 개발되어 가볍고 빠른 것으로 유명한 오픈소스 어플리케이션이다. Nginx 는 http 나 reverse proxy 같은 기능 외에도 load balancer 기능 또한 강력하다.Nginx 로드 밸런싱은 upstream 이라는 옵션으로 설정할 수 있는데, least_conn 은 연결이 가장 적은 서버로 트래픽을 전달하는 역할을 한다. 설정할 수 있는 옵션은 다음과 같다.출처: 생활코딩다만, Nginx 의 유료 버젼인 Nginx Plus 를 사용하지 않는 이상 헬스체크가 불가능하기 때문에 실제 서버의 상태를 체크하는 API 를 만들어서 상황에 따라 스위칭하는 고가용성을 위한 동작에.......

VRRP (Virtual Router Redundancy Protocol) [내부링크]

VRRP ? VRRP는 RFC Standard 문서에 정의된 표준입니다. HSRP와 다르게 Cisco 뿐만 아니라, 모든 Vendor에서도 지원되는 Protocol 입니다.기본적으로, VRRP의 동작 원리는 여러 대 (최소 2대 이상)의 Router를 하나의 group으로 묶어서, Client가 바라보는 Gateway에 대한 IP Address를 공유하며, Priority가 높은 Router가 동작하다가, Router에 문제가 발상하면, 그 다음 Priority를 가진 Router가 Active role를 가지고 Gateway IP Address를 넘겨 받아 동작하여, Client 입장에서는 Router의 장애와 관계 없이 Gateway의 IP Address를 변경하지 않고 Data를 전달합니다.VRRP, HSRP, GLBP에 대한 개념을 이해하기 위해서는 다음과 같.......

JPA] LAZY 로딩으로 인한 JSON 직렬화 오류 [내부링크]

JPA에서 객체 로딩 전략을 LAZY로 할 시 사용하지 않는 객체는 PROXY로 조회되어 JSON직렬화를 수행 할 수 없어서 아래와 같은 에러가 난다. Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception.......

CentOS7에서 한글 깨짐 [내부링크]

https://m.blog.naver.com/PostView.nhn?blogId=drparksc&logNo=220304792251&proxyReferer=https:%2F%2Fwww.google.com%2Fhttps://extrememanual.net/7655

gradle] 멀티프로젝트 2 [내부링크]

본 문서의 대상자는 Maven에 대한 기본 지식이 있는 자바 개발자다. JDK10, Spring Boot 기반 멀티 모듈 프로젝트를 구성하며 Gradle을 빠르게 훑어볼 것이다.자료 대부분은 Gradle User Guide와 권남님의 위키에서 참고했다. 자세한 사항은 두 링크를 보도록 하자.GradleGradle은 기존 Maven의 단점을 다수 개선한 빌드툴이다. Maven의 XML 기반 Pom 파일 대신 Groovy DSL을 사용해 가독성 뿐만 아니라 직접 빌드 스크립트를 짜거나 플러그인을 호출하며, 빌드 과정을 프로그래밍 하듯 할 수 있다. Maven과 더불어 Ant, 스크립트 언어 등의 기능이 합쳐진 것을 Gradle이라고 볼 수 있다.Gradle을 설치 하고 프로젝트 폴더에 들어가 아래 명.......

gradle] plugin 적용 [내부링크]

gradle 에 plugin 을 적용하는 방법은 아래의 2가지 방법이 있다.그냥 1번 방법이 먼저 나오고, 나중에 2번 방법이 추가 되었다.결론은 아무거나 사용해도 되나, 새로운 방법을 쓰면 더 좋겠지? 싶다.1.apply plugin2.plugins taskex) apply plugin 을 plugins task로 바꾸기 출처 : https://goateedev.tistory.com/72?category=831581참조 : https://stackoverflow.com/questions/32352816/what-the-difference-in-applying-gradle-plugin

gradle] sourceSets 사용 [내부링크]

Gradle 에서는 하나의 Source 디렉터리만 지원을 해준다.( src/main/java )SourceSets 은 이러한 제약사항을 지원하기 위해 사용이 된다.하나 이상의 Source 디렉터리를 Gradle 에서 처리를 하기 위해서 SourceSets에 Source 디렉터리를 등록해 주면 된다.java plugin 에 SourceSets 이 등록되어 있고, main 이라는 entry name이 default 로 등록되어 있다.ex) 아래와 같이 SourceSets에 source 디렉터리를 등록 할 수 있다.그리고, 특정 폴더나 파일을 빌드에서 제외 하고 싶으면 exclude 를 사용하면 된다.참조https://examples.javacodegeeks.com/core-java/gradle/gradle-sourcesets-example/출처 : https://goateedev.tistory.com/7.......

Java8] Optional 2 (NULL을 대하는 새로운 방법) [내부링크]

*Null과 관련된 문제들은 크게 2가지로 요약 된다. 1.런타임에 NPE(NullpointerException)라는 예외...

JPA] INSERT 속도 최적화 [내부링크]

일단 자바에서 데이터를 insert하는데 가장 빠른 방식은 Spring Batch를 이용하여 JPA없이 Writer를 ...

JPA] Querydsl기본 전체 정리 [내부링크]

시작하기에 앞서테스트용 MySQL 설치 및 Gradle 프로젝트에서 Querydsl 설정하는 방법에 대해 알아봅...

[hyperledger-fabric v1.2]docker-compose 환경변수 설정 [내부링크]

GOPATH : GOPATH 설정CORE_VM_ENDPOINT : Docker 데몬 주소CORE_LOGG...

docker compose 커맨드 [내부링크]

여기에서는 Docker Compose를 사용하기 위하여 알아두어야 할 커맨드에 대해 설명합니다.Docker Comp...

docker 개념 부터 nodejs를 docker로 실행하기 [내부링크]

도커(Docker)는 전세계적으로 사용되고있는 컨테이너 가상화 플랫폼이다.처음에 가상화툴이라고 하면 ...

Hashing(해싱) [내부링크]

해싱은 임의의 길이의 데이터(키, Key)를 고정된 길이의 데이터(해시값, Hash value)로 변환해 작은 크기...

자바8]자바8에서의 최대/최소 원소 구하기(Loop/Collections/Stream) [내부링크]

자바에서 최소나 최대 원소를 찾을 흔히 사용되는 3가지 코딩 스타일에 대해서 알아보겠습니다.Loop제일...