SpringCloud-CircuitBreaker(resilience4j)

Resilience4j 란? Resilience4j는 자바 언어로 개발된 내결함성 라이브러리입니다. 이 라이브러리는 분산 시스템에서 장애를 처리하고 시스템의 내결함성을 향상시키는 데 사용됩니다. Resilience4j는 일련의 내결함성 패턴을 구현하고, 이러한 패턴을 사용하여 애플리케이션을 더 견고하고 신뢰할 수 있도록 지원합니다. 주요 기능 리스트 Circuit Breaker : Circuit Breaker 패턴은 서비스 호출을 모니터링하고, 호출 실패 또는 지정된...

프로그래머스 - 택배 상자(Java)

프로그래머스 - 택배상자(Java) 문제 링크 : 택배 상자 문제 해결 접근법 이번 문제는 문제를 이해 하는데 많은 시간을 사용 해야 했다. 아래 주의 사항만 잘 이해 하면 Stack 을 이용 해서 간단히 해결 할 수 있다. 주의 문제 에서 주어진 Order 는 택배 기사 님이 차에 실어 달라는 택배의 순서...

프로그래머스 - 미로 탈출(Java)

프로그래머스 - 미로 탈출(Java) 문제 링크 : 미로 탈출 문제 해결 접근법 이번 문제는 기본 적인 bfs 를 활용 해서 문제를 해결 했다. 규칙 시작 위치를 찾는다. 시작 위치에서 레버(L) 까지의 최단 거리(BFS)를 찾는다. 레버(L) 위치에서 출구(E) 까지의 최단 거리(BFS)를 찾는다. 두 최단거리를 더해서 최종 답변을 낸다. 소스 public class...

프로그래머스 - 호텔 대실(Java)

프로그래머스 - 호텔 대실(Java) 문제 링크 : 호텔 대실 문제 해결 접근법 이번 문제는 기본 적인 bfs 를 활용 해서 문제를 해결 했다. 규칙 예약을 예약 시간이 빠른 순서 대로 정렬 하여 큐(bookingQ)에 입력 합니다. 방 사용 시간을 확인할 스택 배열(useRoomList)을 생성 합니다. 큐에서 예약을 하나씩 가져오면서 각 방의 이용...

프로그래머스 - 틱택토 게임(Java)

프로그래머스 - 틱택토 게임(Java) 문제 링크 : 틱택토 게임 틱택토 게임 이란? 틱택토 게임은 우리나라 오목과 비슷하다. 3*3 보드판에서 O 와 X 를 번갈아 가면서 두고 가로,세로,대각으로 한줄이 완성 되면 이기는 게임이다. 문제 해결 접근법 이번 문제는 규칙을 찾는게 가장 핵심이 었다. 규칙 보드가 전부 비었다면 아직 시작 하지 않았으므로...

프로그래머스 - 리코쳇 게임(Java)

프로그래머스 - 리코쳇 게임(Java) 문제 링크 : 리코쳇 게임 리코쳇 게임 이란? 리코쳇 게임은 1999년에 Alex Randolph가 디자인 한 추상 전략 보드 게임 입니다. 격자 모양의 보드에 로봇이 있는데 해당 로봇은 한 방향으로 이동 할 수 있으며 한번 이동 하면 벽을 만날때 까지 가야 합니다. 문제 해결 접근법(BFS 응용) 문제를...

프로그래머스 - 연속된 부분 수열의 합(Java)

프로그래머스 - 연속된 부분 수열의 합(Java) 문제 링크 : 부분 수열의 합 이번 문제는 연속된 수열(sequence) 에서 부분 수열의 합이 k 가 되는 연속된 부분 수열을 찾는 문에 입니다. 처음에는 단순하게 dps 로 풀려고 시도 하였으나 시간 복잡도를 고려 하지 않아서 시간 초과가 발생 하여 투포인터 알고리즘을 통해 O(n) 으로...

프로그래머스 - 도넛과 막대 그래프(Java)

프로그래머스 - 도넛과 막대 그래프(Java) 프로그래머스 - 도넛과 막대 그래프 문제는 주어진 그래프에서 정점과 도넛 모양 그래프, 막대 모양 그래프, 8자 모양 그래프를 찾는 문제 입니다. 처음에는 그래프 순회 알고리즘을 사용해서 도넛과 막대를 찾고 유니온 파인드를 사용해서 순환그래프를 찾으려 했었습니다…..(반성) 그런데 edge 의 길이가 1,000,000…….문제 풀이 힌트를 좀 참고해서 풀고...

JAVA 21 - VirtualThread 기능 살펴보기

Virtual Thread (Java 21) Java 21에 추가된 Virtual Thread 는 처리량이 높은 동시 어플리케이션을 작성 할 수 있는 경량 스레드 이다. 기존에 사용 하던 Thread 는 OS Thread 를 랩핑 해서 사용 하는 형태로 OS의 총 스레드 개수에 따라 최대 Thread 의 생성 갯수가 정해지며 생성 비용이 높다. 신규로 추가된...

쿠버네티스-WorkLoads 개념(ReplicaSet)

ReplicaSet ReplicaSet 설정 한 Pod 의 목표 숫자 만큼 Template 에 설정 된 Pod 를 생성 하고 축소 합니다. ReplicaSet 은 아래와 같은 기능을 제공 합니다. Auto Healing Pod 에 문제가 발생 했을 경우 복구를 합니다. Auto Scaling Pod 를 추가 할 수 있습니다. Software Update Pod 의 버전을 관리...

쿠버네티스-환경 변수 기초 개념(ConfigMap, Secret)

쿠버네티스-ConfigMap, Secret (Env, Mount) 어플리케이션을 구성 하는 경우 필요한 환경 변수(ex. dev, prod..) 등을 Container 로 전달 하기 위한 옵션 입니다. 전달 받는 방법은 Object 와 File-Mount 방법이 있으며 각 성격은 아래와 같습니다. Object : Pod 생성 옵션에서 환경변수(key:value)를 입력하여 해당 Type 으로 전달 받을 수 있는 방법 Mount :...

쿠버네티스-Volume 기초 개념(EmptyDir, HostPath, PVC/PV)

쿠버네티스-Volume (EmptyDir, HostPath, PVC/PV) K8s 에서 Volume 은 각 파드에 스토리지를 연결하여 전략적으로 구성 하는 기능 입니다. EmptyDir Pod 내에 서만 사용 할 수 있는 볼륨 영역 입니다. 해당 볼륨은 Pod 내에서 사용 할 수 있고 Pod 내의 컨테이너 간에는 공유가 가능 합니다. 다만 Pod가 삭제 되면 함께 삭제 되는...

쿠버네티스-Service 기초 개념(ClusterIP, NodePort, LoadBalancer)

쿠버네티스-Service (ClusterIP, NodePort, LoadBalancer) K8s 에서 Service는 Pod를 서비스로 노출 하기 위한 기능 입니다. Pod 는 K8s 클러스터 내에서 사용 할 수 있는 자신의 IP를 가지고 있지만 Pod는 K8s 환경에서 언제든지 삭제되고 재생성 될 수 있기때문에 IP가 언제든 바뀔수 있습니다. Service 는 사용자가 삭제 하기 전까진 설정된 아이피를 가지고 있고...

쿠버네티스-POD-기초 개념(Container, Label, NodeSchedule)

Kubernetes(k8s)? Kubernetes(K8s) 란 K8s라고도 알려진 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다. K8s 공식페이지에서 제공한 문구입니다. 그럼 이 K8s 의 탄생은 아래표에서 보듯이 점차 기술을 보완 해나가기 위해 발전이 되었습니다. PM VM Container(Docker) K8s 서버를 1대 구매 하여 사용 중에 해당 서버에 설치되어 있는 서비스는 피크타임에만 리소스를...

그래프 알고리즘 기초 - 최소신장트리(MST)

그래프 알고리즘 기초 - 최소 신장 트리(Minimum Spanning Tree) 최소 신장 트리란? (Minimum Spanning Tree) 최소신장 트리는 모든 정점을 포함하면서 가장 적은 비용으로 연결된 부분 그래프를 찾는 알고리즘. 프림 알고리즘과 크루스칼 알고리즘이 있음. 둘의 차이점은 프림 알고리즘은 복잡한 밀집 그래프에 적합하고 크루스칼 알고리즘은 간선이 적은 희소 그래프에 적합하다. 최소 신장...

그래프 알고리즘 기초 - 플로이드 워셜 알고리즘(Floyd-Warshall)

그래프 알고리즘 기초 - 플로이드 워셜 알고리즘(Floyd-Warshall) 플로이드 워셜 알고리즘(Floyd-Warshall) 모든 노드의 최단 거리를 구할 수 있는 알고리즘. 참고사항 시간복잡도(노드수 : v) : O(V^3) 3중 for 문을 이용해서 모든 경로를 탐색 하기 때문에 속도가 느릴 수 밖에 없다. N = 1000개가 넘으면 10억번의 반복을 해야 하기 때문에 시간 초과 할...

그래프 알고리즘 기초 - 벨만포드 알고리즘(Bellman-Ford)

그래프 알고리즘 기초 - 벨만포드 알고리즘(Bellman-Ford) 벨만포드 알고리즘(Bellman-Ford) 다익스트라 알고리즘과 동일하게 최단거리를 구할 수 있는 알고리즘 이지만 음수 간선 도 사용이 가능하다. 주로 음수 간선의 여부 확인에 활용. 참고사항 시간복잡도(노드수 : v, 에지 수 : E) : O(VE) 음수 가중치가 있는 경우 에도 사용 할 수 있음. 업데이트 조건 :...

그래프 알고리즘 기초 - 다익스트라(Dijkstra)

그래프 알고리즘 기초 - 다익스트라(Dijkstra) 다익스트라(Dijkstra) 다익스트라 알고리즘은 시작노드에서 모든 노드로의 최단거리를 찾는 알고리즘입니다. 참고사항 시간복잡도(노드수 : v, 에지 수 : E) : O(Elogv) 음수 가중치가 있는경우 사용 할 수 없음. 음수 가중치가 있는 경우 벨만포드 알고리즘(Bellman-Ford) 을 사용. 알고리즘 활용 영역 백준 1753 - 최단경로 https://www.acmicpc.net/problem/1753 다익스트라 구현 코드(백준-최단경로)...

그래프 알고리즘 기초 - 위상정렬(topological sorting)

그래프 알고리즘 기초 - 위상정렬 위상 정렬(topological sorting) 사이클이 없는 방향 그래프(비순환 그래프-Directed Acycle Graph) 에서 모든 노드를 방향성에 거스르지 않고 순서대로 나열하는 정렬 방법입니다. 위상정렬에서는 진입 차수 와 진출 차수 를 알아야 합니다. 진입 차수 : 특정한 노드로 들어오는 간선의 개수 진출 차수 : 특정한 노드에서 나가는 간선의 개수...

그래프 알고리즘 기초 - 유니온 파인드

그래프 알고리즘 기초 - 유니온 파인드 유니온 파인드 알고리즘(Union-Find) 여러 노드가 주어 졌을 경우 두개의 노드를 1개의 집합으로 묶는 Union 연산과 같은 집합인지 확인하는 Find 연산으로 구성 되어있다. 1차원 배열을 사용 하여 유니온파인드 알고리즘 구현 방법 private static int[] graph; @Test void 그래프변환(){ graph = new int[5 + 1]; //...

그래프 알고리즘 연습(노드를 배열로 만들기)

그래프 알고리즘 기초 - 노드 변환 그래프 알고리즘을 배우기 전에 필수로 연습해야할 그래프를 배열로 만드는 방법에 대해서 정리 해보겠습니다. 그래프 알고리즘 종류 유니온 파인드 알고리즘(Union-Find) 문제 유형 : 그래프에 사이클이 생성되는지 판별 하는 알고리즘 위상 정렬(topological sorting) 문제 유형 : 사이클이 없고. 방향이 있는 그래프에서만 사용할 수 있으며 전후 관계가...

DDD를 위한 헥사고날 아키텍처 이해하기 1

DDD를 위한 헥사고날 아키텍처 이해하기 1 도메인 주도 개발(DDD) 를 위한 헥사고날 아키텍처를 이해하기 위한 첫번째 기록입니다. 개발 아키텍처에는 모놀리식 아키텍처 와 마이크로 서비스 아키텍처 두가지를 가지고 목표와 비즈니스 요건에 따라 다르게 설계를 하고 있습니다. 모놀리식 아키텍처(Monolithic Architecture) 에서는 어플리케이션이 거대한 하나의 아키텍처를 가지고 구성 되어 있는 구조 이기 때문에...

MockWebServer를 활용한 webClient Test

MockWebServer 를 활용 하여 RestAPI 테스트 하기 RestAPI 를 통한 어플리케이션 개발시 목적지 API 의 기능이 다 완성 되지 않았거나 미계약 등등의 사유로 API 스팩만 전달 받고 개발을 진행 할 경우가 있었습니다. 이런 경우 MockWebServer를 활용 하여 선개발을 진행 할 수 있습니다. 간단한 테스트 클래스를 작성하여 테스트 하는 방법을 알아...

Spring new instance 에 @Autowired 하려면?

스프링 new instance 에 @Autowired 하는 방법 스프링 기반의 개발 하다 보면 new instance, static class 를 사용하게 되는 경우가 있습니다. new 로 생성 되는 인스턴스의 경우에는 스프링 IoC에서 관리 되는 Bean을 주입 받지 못 하고 @Autowired 로 주입된 bean 이 null 인 것을 확인 할 수 있습니다. @Autowired 어노테이션이...

Github에 commmit 을 했는데 잔디가 없다!?

Github 에 잔디가 없을때 대처 방법 생각지도 않았습니다. 잔디가 생기지 않고 있을 줄은 .. 커밋을 했는데 잔디가 생기지 않는 경우를 위해 정리 합니다. user.email 확인 github에 잔디가 생기지 않는 경우는 github email 과 commit 한 email 정보가 틀린 경우 발생 할 수 있습니다. user.email 확인 방법은 아래와 같습니다. (프로젝트 폴더...

ubuntu 서버 locale 설치 및 셋팅

ubuntu 서버 locale 설치 및 셋팅 서버 인스턴스 생성 후 locale 셋팅을 하다보니 자꾸 까먹어서…..기록 해두기 위한 포스팅 입니다. ubuntu 기본 locale 은 en-US.UTF-8 로 설정 되어있어 ko_KR.UTF-8 로 변경 하기 위함입니다. locale 확인 locale ko language pack 설치 sudo apt-get install language-pack-ko ko_KR.UTF-8 설치 sudo locale-gen ko_KR.UTF-8 로케일 설정...

Spring AMQP 를 활용한 메시징 서비스 구축(with rabbitMQ)

AMQP(Advanced Message Queuing Protocol) AMQP(Advanced Message Queuing Protocol, 어드밴스트 메시지 큐잉 프로토콜) 은 메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜입니다. 메시지 전달의 전달 보증, 신뢰성, 라우팅을 위한 기능 입니다. 무중단 서비스, 서비스의 scale-out, MSA 등을 위해서는 MQ를 사용 하는 시스템 구조가 유용합니다. MQ 에는 여러 가지 서비스가 있으나...

스프링 배치 여러 곳에 write 를 하려면? (CompositeItemWriter)

스프링 배치 여러 곳에 write 를 하려면? 대부분의 배치서비스는 테이블 데이터를 읽어서(reader) 값을 확인 & 계산(processor) 한뒤 insert & update(writer) 하는 구성으로 되어있습니다. 하지만 1:1 구성으로 하나의 테이블 데이터를 읽어서 배치 처리를 하는 경우는 간단 하지만 하나의 테이블을 읽어서 여러 테이블에 처리를 해야 하는 경우에는 어떻게 처리를 할 것인가에 대해서...

스프링 배치 테스트 코드 작성 방법~!

스프링 배치에서 테스트 코드를 작성 하려면 어떻게 해야 할까? 대부분의 배치 서비스들은 데이터를 읽어서(itemReader) 가공(itemProcess) 하여 처리(itemWriter) 하는 로직으로 구성 되어있습니다. 배치 서비스를 개발 하다 보면 실제로 배치를 수행 해보고 DB를 확인 하여 정상적인지 확인 하는 방법으로 검증 하였습니다. 로컬 테스트시에도 배치 대상 데이터를 임의로 생성 하고 배치를 돌려서 결과가...

CVE-2021-45105 Log4j 2 DoS 취약점, CVE-2021-42550 Logback RCE 취약점

CVE-2021-45105 Log4j 2 DoS 취약점, CVE-2021-42550 Logback RCE 취약점 Log4j 보안 취약 관련 하여 log4j < 2.16.x 버전으로 업그레이드를 하였으나 또 다른 취약점이 발생 하여 제거 하기로 하였습니다. 사실 프로젝트에서 Logback 을 default logger 로 사용 하고 있기 때문에 하지 않아도 되나.. 혹시 모를 누군가의 사용을 방지 하기 위해 제거...

Log4j 새로운 보안 취약점 발견! 2.15.x 버전이 우회 되었습니다. (CVE-2021-45046)

log4j 2.15.x 버전이 우회되는 취약점이 발생 했습니다. (CVE-2021-45046) 이전 포스팅에서 log4j 보안 이슈에 대해서 정리 했는데. 어제 저녁 12/14일 2.15.x 버전이 우회 되어 신규 취약점이 발견 되었습니다. CVE-2021-45046 해당 취약점을 확인 하시고 2.16.x Log4j 2.16.x 링크 버전으로 업그레이드를 다시 진행 하셔야 합니다. 조치 방법 2.16.0 이상 (Java8 이상) 버전 업데이트...

Log4j 보안 취약점 이슈! (CVE-2021-44228, NVD)

Log4j 보안 취약점 이슈! (CVE-2021-44228, NVD) Apache Log4j 에서 발생한 보안 이슈에 대해서 정리 합니다. 아파치 제단의 Log4j의 취약점 보고(CVE-2021-44228, NVD) 를 통해서 악성 코드 감염 및 원격 접속 등의 피해가 발생 할 수 있다는 보고가 나왔습니다. 해당 이슈를 통해서 전세계 적으로 라이브러리 패치를 진행 하였으며 전사 프로젝트도 점검을 하였습니다....

Github Achievements(Arctic Code Vault Contributor)!

Github Achievements 획득! 오랜만에 Github에 접속! 못보던 뱃지가 생겼습니다. 뱃지 이름은 Arctic Code Vault Contributor! 새로운 뱃지가 생겨 기분 좋은 마음으로 어떤 뱃지 인지 알아보기 시작 했습니다. 북극?? 저장소?? 이게 다 무슨 말인지 알아 보겠습니다. Arctic Code Vault Contributor. 북극 저장소에 보관 되는 소스 코드 기여자! 2020년 2월 2일에 Github...

인텔리제이 Database 기능 사용하기(DataGrip)

JetBrains 의 제품중에서는 Database Tool 인 DataGrip 이라는 유료 제품이 있습니다. Database 관리를 하기에 최적화된 툴이지만 유료이기 때문에 접근하기에 어렵습니다. 하지만 인텔리제이에서도 기본적인 Database 를 사용 할 수 있는 기능을 제공 하고 있습니다. 인텔리제이에서 Database 에 접속 하여 사용 하는 방법을 정리 해보겠습니다. 인텔리제이 프로젝트 생성 Database 를 관리 하기...

Sonarqube Jenkins 연동

사내에서 코드 품질 관리를 하기 위해 Sonarqube 를 사용 하기로 결정 되어 POC 진행 하면서 내용을 정리 합니다. 이번에는 Jenkins 를 활용 하여 github -> sonarqube scan -> build 처리 하는 방법에 대해서 정리 해보겠습니다. Jenkins plugins 설치 Jenkins 에서 Sonarqube 를 사용 하기 위에서 플러그인을 설치 해야 합니다. Jenkins...

JPA 메소드 키워드

JPA 에서 제공 하는 키워드 정리 Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is,Equals findByFirstname,findByFirstnameIs,findByFirstnameEquals … where x.firstname = 1? Between findByStartDateBetween … where x.startDate between 1? and ?2 LessThan findByAgeLessThan...

도커에 MYSQL 설치 하는 방법(Docker)

도커를 이용하여 MySql 환경을 구성 하는 방법을 정리해봅니다. 도커에 대해서 기본지식이 있는 상태에서 테스트가 가능합니다. 도커 설치 방법에 대해서는 아래 포스팅을 참고 하시기 바랍니다. 도커에 MySql 이미지 설치 하기 MySql 이미지 다운로드(https://hub.docker.com/_/mysql/?tab=tags&page=1&ordering=last_updated) $ Docker pull mysql:8.0.25 MySql 이미지 확인 $ Docker images Docker MySql 컨테이너 생성 및 실행 Docker 에...

김치프리미엄 조회 사이트 오픈(비트코인)

김치 프리미엄 조회 사이트 오픈 ###국내에서 거래되고 있는 코인의 시세 동향 및 김치프리미엄율을 조회 할 수 있는 참조 사이트 비트코인, 이더리움, 도지코인, 알트코인등의 현재 업비트 거래 시세와 바이낸스의 거래 시세를 비교 하여 현재 김치 프리미엄을 계산하여 제공함. 사이트 링크 : 김프다닷컴(kimpda.com)

젠킨스 스케쥴을 순차적으로 실행 해보자

젠킨스 + 스프링 배치를 사용한지도 꽤 되었습니다. 기존에 사용 하고 있던 Cron 기반의 반복 처리 되고 있는 배치 서비스들이 전부 젠킨스 + 스프링배치에 녹아 들어 왔습니다. 편하게 사용을 하다보니 배치의 경계가 조금 무뎌지고 일 배치 뿐만 아니라 조금 더 빈번 하게 동작 해야하는 배치 서비스도 젠킨스 + 스프링배치를 통해서 구성...

젠킨스 서버 SSH Key 생성 & 등록

젠킨스 SSH 연결을 위한 SSH Key 생성 및 설정에 대한 기록 입니다. Jenkins Plugins Jenkins 관리 > 플러그인 관리 > 설치 가능 Publish Over SSH Git Github Github API Maven Integration SSH Key 생성 하기 배포 서버에서 타겟서버로 배포 하기 위해서는 배포서버(Jenkins Server) 의 SSH KEY 가 필요합니다. $ cd...

젠킨스 서버 vue.js node.js 설정

젠킨스 node.js 설정을 위한 기록입니다. 배포 서버에 npm or node 를 설치 하지 않고 jenkins plugin 을 통해서 사용하는 방법입니다. Jenkins Plugins Jenkins 관리 > 플러그인 관리 > 설치 가능 NodeJS Plugin NodeJS 설정하기 Jenkins 관리 > Global Tool Configuration > NodeJS 아래 이미지를 참고 하여 해당되는 NodeJS 버전을 선택...

알고리즘 풀이 - 동적계획법(백준-1003 피보나치 함수)

이전 포스팅에 이어서 백준 알고리즘의 동적계획법 카테고리에 있는 알고리즘 문제를 풀고 있습니다. 이번 문제도 동일하게 동적계획법을 통해서 해결 할 수 있습니다. 문제 - 피보나치 함수 (백준 알고리즘 - 1003) 문제 링크 : https://www.acmicpc.net/problem/1003 풀이 피보나치 함수 처리 메소드에서 동적 계획법을 추가 하여 검색 효율 증가 시켜야지 시간 초과를 해결 할...

알고리즘 풀이 - 동적계획법(백준-2748 피보나치 수 2)

이전 포스팅에서 알고리즘 문제중 재귀 문제 4가지를 확인 했습니다. 이번에는 동적 계획법을 통해서 어떻게 더 효율적으로 결과를 출력 할 수 있는지에 대해서 확인 해보겠습니다. 동적 계획법이란? DP(Dynamic Programming) 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 설계 기법입니다. 이 알고리즘은 이미 계산된 값을 메모리에...

알고리즘 풀이 - 하노이 탑 이동(백준 알고리즘-재귀)

2020년 첫 알고리즘 풀이. 백준 알고리즘 문제의 재귀 카테고리에 있는 4가지 유형의 문제입니다. 재귀 알고리즘은 매우 기초적이지만 자주 헤깔릴 수 있는 알고리즘으로 아래 4가지 유형의 문제 풀이를 보고 되뇌여 보겠습니다. 문제4 - 하노이 탑 이동 순서 문제 링크 : https://www.acmicpc.net/problem/11729 풀이 하노이의 탑은 퍼즐을 일종으로 세 개의 기둥에 N개의 원판이...

알고리즘 풀이 - 백준 알고리즘(별찍기)

2020년 첫 알고리즘 풀이. 백준 알고리즘 문제의 재귀 카테고리에 있는 4가지 유형의 문제입니다. 재귀 알고리즘은 매우 기초적이지만 자주 헤깔릴 수 있는 알고리즘으로 아래 4가지 유형의 문제 풀이를 보고 되뇌여 보겠습니다. 문제3 - 별찍기 문제 링크 : https://www.acmicpc.net/problem/2447 풀이 별찍기 문제는 주어진 별 그림을 보고 패턴을 분석 하여 결과를 출력 하는...

알고리즘 풀이 - 백준 알고리즘(팩토리얼, 피보나치의 수)

2020년 첫 알고리즘 풀이. 백준 알고리즘 문제의 재귀 카테고리에 있는 4가지 유형의 문제입니다. 재귀 알고리즘은 매우 기초적이지만 자주 헤깔릴 수 있는 알고리즘으로 아래 4가지 유형의 문제 풀이를 보고 되뇌여 보겠습니다. 문제1 - 팩토리얼 문제 링크 : https://www.acmicpc.net/problem/10872 풀이 팩토리얼 알고리즘은 주어진 정수의 모든 원소를 곱한 값을 출력하는 문제입니다. 주어진 정수...

네티의 데이터 컨테이너 - ByteBuf 알아보기

자바 NIO 의 ByteBuffer 의 사용을 편리하게 사용 할 수 있도록 기능을 제공하는 API 가 바로 네티의 데이터 컨테이너인 ByteBuf 입니다. ByteBuf 의 기능을 살펴 보고 사용하는 방법에 대해서 살펴 보겠습니다. ByteBuf 의 장점은? ByteBuf 는 순차적인 두가지 포인트 변수(readerIndex, WriterIndex)를 제공 하여 읽기 쓰기 전환 없이 사용이 가능 합니다....

네티의 핵심 인터페이스 정리(Channel, EventLoop, ChannelFuture, ChannelHandler, ChannelPipeline)

고성능 자바 서버를 만들기 위해 네티 학습 두번째 포스팅 입니다. 이번 포스팅에서는 네티의 핵심 인터페이스에 대해서 정리 해보겠습니다. 네티의 핵심 인터페이스(Channel, EventLoop, ChannelFuture, ChannelHandler, ChannelPipeline) Channel Channel 인터페이스는 네티의 소켓이나 I/O 의 처리가 가능한 읽기, 쓰기, 연결하기, 바인딩 과 같은 기능을 제공하는 인터페이스 입니다. Channel 은 아래의 기능을 제공 합니다....

네티 서버&클라이언트 프로그래밍 시작

자바 네트워크 프로그래밍에서 매우 유명한 프레임워크인 Netty 를 이용 해서 서버 & 클라이언트 프로그래밍을 하는 방법을 알아보는 첫번째 포스팅 입니다. 서버 어플리케이션 개발을 하면서 Netty는 알고 있었지만 대부분의 서버 어플리케이션이 Java.Nio API 로 개발이 되어 있어 Netty를 사용해 보지 못하였기 때문에 “네티 인 액션” 도서를 학습하면서 정리 해보겠습니다. 네티란?? 네티는...

스프링 보안은 어떻게2?? OAuth2 인증 서버 만들기

OAuth2 토큰 발급 이전 포스팅에서 SpringBoot OAuth2 를 이용하여 소셜 에서 인증을 받아서 나의 사이트에 로그인을 하는 기능을 살펴 보았습니다. 이번에는 third party 앱에서 나의 사이트에 접속하여 토큰을 발급 받고 인증을 할 수 있는 서버 기능을 추가 해보겠습니다. 환경 구성 기본 환경 Spring-boot 2.2.1.RELEASE JDK 1.8 이상 Maven 사용 가능한...

스프링 보안은 어떻게2?? OAuth2를 이용한 소셜 로그인

OAuth2 ?? OAuth2 란 Open Authorization , Open Authentication 를 뜻하는 것으로 Third party 에게 자원을 공유하거나 인증을 처리 해주는 표준 프로토콜 입니다. OAUth2에는 크게 토큰을 발급 할수 있는 서버 기능과 토큰을 이용한 인증 기능을 하는 기능으로 나뉘게 됩니다. 이번 시간에는 앞서 스프링 시큐리티에서 로그인 기능을 구현 하였기 때문에 해당...

스프링 보안은 어떻게?? 로그인 만들어보기 (Spring Security)

스프링 시큐리티?? 스프링 시큐리티는 어플리케이션의 보안을 위해 권한(Authorization)과 인증(Authentication) 에 대한 기능을 제공 합니다. 권한(Authorization)은 URL을 사용할 수 있는 권한을 말하며 인증(Authentication) 은 어플리케이션에 로그인 할 수 있는 기능을 말합니다. 허용되지 않은 페이지에 사용자가 접근 할 경우 스프링 시큐리티는 페이지 호출 전에 인증이 되어있는 지를 체크 하고 페이지에 접근 할...

스프링으로 예약 작업 만들기(Spring Scheduling)

이번에는 스프링을 이용해서 예약 작업을 만드는 방법에 대해서 정리 해보겠습니다. 예약 작업은 특정 시간이나 반복되는 시간에 업무를 처리하는 어플리케이션입니다. 스프링에서는 예약 작업 기능을 제공함으로서 예약 작업을 편리하게 만들 수 있습니다. 환경 구성 기본 환경 Spring-boot 2.2.1.RELEASE JDK 1.8 이상 Maven 사용 가능한 IDE H2 Database 예제 소스 : https://github.com/ParkHyeokJin/SpringRepo/tree/master/Spring-Scheduler 기능...

스프링 배치 어플리케이션 만들기(Spring Batch)

오늘은 매우 쉽고 간단한 스프링 배치 어플리케이션을 만들어 보겠습니다. 배치는 매우 중요한 서비스 입니다. 실시간으로 처리 하지 못하는 대량의 업무를 배치로 처리를 하고 있기 때문에 배치 개발을 알아 두는 것은 필수입니다. 환경 구성 기본 환경 Spring-boot 2.2.1.RELEASE JDK 1.8 이상 Maven 사용 가능한 IDE H2 Database 예제 소스 : https://github.com/ParkHyeokJin/SpringRepo/tree/master/JPA-Exam12-Batch...

스프링 RestAPI 로 웹 서비스 만들기

스프링 RestAPI를 통하여 회원 가입, 확인, 삭제 기능을 웹서비스를 만들어서 스프링 RestAPI 에 대한 사용 방법을 배워 보겠습니다. 스프링부트 웹서비스 만들기(RestAPI) 기본 환경 Spring-boot 2.2.1.RELEASE JDK 1.8 이상 Maven 사용 가능한 IDE 예제 소스 : https://github.com/ParkHyeokJin/SpringRepo/tree/master/JPA-Exam11-RestApi 기능 정의 회원 등록 기능(PUT) 회원 확인 기능(GET) 회원 삭제 기능(DELETE) pom.xml <dependencies> <dependency>...

스프링 + JPA 웹사이트 만들기(로그인편)

이번에는 앞서 공부 했던 JPA 와 스프링부트를 이용해서 웹사이트 로그인 부분을 만들어 보도록 하겠습니다. 매우 기본 적인 기능으로 로그인과 회원 가입 기능을 JPA 를 이용해서 사용 해보도록 하겠습니다. 스프링부트 + JPA 웹사이트 로그인 만들기 기본 환경 기본 환경은 앞선 포스팅 참조 : https://parkhyeokjin.github.io/jpa/2019/11/08/JPA-chap11.html 예제 소스 : https://github.com/ParkHyeokJin/SpringRepo/tree/master/JPA-Exam10 기능 정의 로그인...

스프링에서 JPA 사용 하기(스프링부트, JPA)

이번에는 스프링 프레임워크에서 JPA를 사용 하는 방법에 대해서 정리 해보겠습니다. 스프링 프레임워크 프로젝트에서 스프링 데이터 JPA를 얼마나 효율적이고 간단하게 사용이 가능 한지 기능 별로 살펴 보겠습니다. 스프링 데이터 JPA 개발 환경 구성 환경 Spring-boot 2.2.1.RELEASE JDK 1.8 Maven Eclipse IDE 라이브러리 설정 pom.xml 의존성 추가 <!-- h2 database --> <dependency>...

JPA JPQL 작성의 모든 것!!

JPA 의 EntityManager.find() 기능으로 내가 원하는 검색을 하기에는 어려운 점이 많습니다. 다양한 조회 조건으로 검색을 해야 원하는 결과를 얻을 수 있습니다. 이럴 경우 엔티티 객체를 대상으로 검색을 할 수 있도록 하는 방법이 JPQL(Java persistence Query Language) 입니다. JPQL은 아래와 같은 방법으로 작성 할 수 있습니다. 기능 설명 JPQL   Criteria...

JPA 값타입

값타입 JPA 값 타입에는 JAVA 의 기본 값타입 (int, String)이 있고 사용자가 직접 정의한 임베디드(embedded type) 값 타입과 컬렉션(collection) 값 타입이 있습니다. 오늘은 이 값 타입에 대해서 정리 해보겠습니다. 임베디드(embedded type) 값 타입 임베디드 값 타입 사용(@Embedded) 사용자가 직업 정의한 값 타입을 임베디드(embedded type) 값 타입 이라고 합니다. 회원 정보...

JPA 영속성 전이 (CASCADE) 와 고아 객체(ORPHAN)

영속성 전이 (CASCADE) 란? 영속성 전이 (CASCADE) 란 특정 엔티티를 영속성 상태로 만들때 연관되어진 엔티티도 함께 영속성 상태로 변경 하는 것을 말합니다. 아래 예를 살펴 보겠습니다. Shop shop = new Shop(); shop.setName("JPA마켓"); em.persist(shop); //영속성 상태변경 Shop_Payments payment = new Shop_Payments(); payment.setName("JPA간편페이"); payment.setShop(shop); em.persist(payment); //영속성 상태변경 Shop_Order order = new Shop_Order();...

JPA 연관관계 - 프록시(Proxy)

JPA 프록시(Proxy) 란? JPA 에서는 find() 명령어를 사용하여 조회 할때 항상 데이터베이스를 조회하는 것은 아닙니다. 아래 case1 과 case2를 살펴 보겠습니다. case1 public void findMemberAndTeacher(String id){ Member member = em.find(Member.class, id); Teacher teacher = member.getTeacher(); System.out.println("회원의 강사 : " + teacher.getName()); } case2 public void findMemberAndTeacher(String id){ Member member =...

알고리즘 풀이(JAVA) - 백준 알고리즘_5430(AC)

문제 문제 링크 : https://www.acmicpc.net/problem/5430 풀이 이 문제는 앞뒤로 입출력이 가능한 자료 구조인 덱(deque) 을 활용 하여 풀이하면 쉽게 풀 수 있다. R : 방향을 변경할때 배열을 돌리려고 하면 시간초과가 뜨기 때문에 변수(dir)를 선언 하여 방향을 저장 한다. D : 방향(dir) 에 따라서 firstPoll(), LastPoll() 을 활용하여 앞 뒤로 큐를...

알고리즘 풀이(JAVA) - 백준 알고리즘_1966(프린터 큐)

문제 문제 링크 : https://www.acmicpc.net/problem/1966 풀이 Queue의 어떤 위치에 있는지를 알려주는 M(0이상 N미만) 이 무엇을 의미 하는지 이해하는데 한참이 걸렸다. M 은 예제로 주어진 우선순위 문서의 위치 값을 나타낸다. 예) 1 1 9 1 1 1 우선순의에서 M : 0 을 주었때에 가장 첫번째 있는 1을 말하는 것이다. 입력 :...

알고리즘 풀이(JAVA) - 백준 알고리즘_11866(조세퍼스 문제O)

문제 문제 링크 : https://www.acmicpc.net/problem/11866 풀이 두개의 큐를 생성하여 풀이 진행 K 번째 의 수를 queue에서 빼서 rQueue 로 이동 시키면서 반복 처리. 소스 조세퍼스(11866) public class Baekjoon_11866 { public static Queue<Integer> queue = new LinkedList<>(); public static Queue<Integer> rQueue = new LinkedList<>(); public static void main(String[] args) throws IOException...

알고리즘 풀이(JAVA) - 백준 알고리즘_2164(카드2)

문제 1 문제 링크 : https://www.acmicpc.net/problem/2164 풀이 큐를 이용해서 쉽게 풀이가 가능 소스 카드2(2164) public class Baekjoon_2164 { public static Queue<Integer> queue = new LinkedList<>(); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); for(int i = 1; i <= N; i++) { queue.add(i);...

JPA 연관관계 매핑 - 조인 테이블(@JoinTable)

조인 테이블 데이터베이스 테이블의 연관관계를 설계 하는 방법은 크게 두가지 입니다. 첫 번째는 앞서 복합키 매핑에서 살펴 보았듯이 외래키를 가지고 연관관계를 설계 하는 조인 컬럼 방법과 테이블과 테이블 사이에 별도의 조인 테이블을 만들어 양 테이블간의 연관관계를 설정 하는 방법이 있습니다. 이번 시간에는 조인테이블을 만들어서 테이블간의 연관 관계를 설정하는 방법에 대해서...

JPA 연관관계 매핑 - 복합키 매핑

복합키 매핑 데이터베이스의 테이블을 설계 할때에는 식별관계와 비식별관계 두가지 방법으로 설계를 할 수 있습니다. 식별 관계와 비식별 관계에 대해서 정리 해보도록 하겠습니다. 식별관계와 비식별관계 식별관계 식별관계 매핑은 부모테이블의 키를 자식테이블이 내려 받아서 기본키 + 외래키 형태로 사용 하는 매핑 방식 입니다. 부모의 키가 자식 테이블로 상속 되면서 테이블의 키가 많아지는...

JPA 연관관계 매핑 - 상속관계 매핑 전략

상속관계 매핑 전략 이번시간 에는 JPA 연관관계 매핑의 상속관계 매핑 전략 대해서 정리 해보도록 하겠습니다. @Inheritance : JPA 연관관계 매핑의 상속 관계에서 전략을 지정하는 어노테이션입니다.. @Inheritance 전략 옵션 정보 Enum TYPE 전략 정보 InheritanceType.JOINED 조인전략 자식 테이블이 부모의 키를 받아서 외래키로 사용하는 전략 InheritanceType.SINGLE_TABLE 단일테이블전략 단일 테이블에 부모 자식 데이터가...

JPA 연관관계 매핑 - 양방향매핑

JPA 연관관계 매핑 JPA 연관관계 매핑 - 단방향매핑 에서 JPA의 방향성에 대해서 알아보았다. 이번에는 회원관리 엔티티를 이용 하여 양방향 매핑에 대해서 알아보자. 양방향 매핑 회원 엔티티의 속성은 아래와 같다. 회원은 한명의 강사에 소속되어 있다. 회원과 강사는 다대일(N:1) 관계이다. 강사 엔티티의 속성은 아래와 같다. 강사는 여러명의 회원이 등록 되어 있다. 강사와...

JPA 연관관계 매핑 - 단방향매핑(@ManyToOne, @OneToMany, @OneToOne)

JPA 연관관계 매핑 엔티티들은 어떠한 키를 기준으로 여러 엔티티와 연관 관계를 가지고 있다. JPA 의 객체 관계 매핑은 이해 하지 못하면 매우 어렵다. JPA 에서의 연관관계는 크게 아래와 같다. 1) 방향성(Direction) 단방향 : 회원정보 -> 강사 또는 강사 -> 회원정보 중 한 쪽만 참조되는 경우 양방향 : 회원정보 -> 강사,...

알고리즘 풀이(JAVA) - 백준 알고리즘_1780(종이의 개수)

문제 문제 링크 : https://www.acmicpc.net/problem/1780 풀이 앞선 쿼드 트리 문제는 배열을 반으로 계속 잘라 가며 숫자를 비교 했다면 이 문제는 배열을 1/3 로 잘라가면서 비교를 하는 방식이다. 쿼드 트리의 이해와 배열의 이해가 있으면 쉽게 풀이가 가능 하다. 종이의 갯수을 카운트 하기 위한 3개의 int 변수 선언(int minus, zero, one) 종이를...

Jekyll 초안 활용 하기(drafts)

Jekyll 초안 활용 하기(drafts) Jekyll 을 이용한 블로그의 디렉토리 구조는 아래와 같다. . ├── _config.yml ├── _data | └── members.yml ├── _drafts | ├── begin-with-the-crazy-ideas.md | └── on-simplicity-in-technology.md ├── _includes | ├── footer.html | └── header.html ├── _layouts | ├── default.html | └── post.html ├── _posts | ├── 2007-10-29-why-every-programmer-should-play-nethack.md |...

알고리즘 풀이(JAVA) - 백준 알고리즘_1992(쿼드 트리)

문제 문제 링크 : https://www.acmicpc.net/problem/1992 풀이 이 문제는 앞선 색종이 자르기https://parkhyeokjin.github.io/algorithm/2019/08/22/baekjoon-2630.html 를 풀어 보았다면 쿼드 트리를 이용해서 쉽게 해결 할 수 있다. 쿼드 트리는 4개의 자식 노드를 가지는 트리 구조이다. 영상 입력 처리 readData(reader, N) 재귀 함수(cut()) 를 이용 하여 4부분으로 반복적으로 자른다. 잘려진 영역의 문자열이 동일할 경우 압축 한다....

JPA 영속성(persistence context)

JPA 영속성(persistence context) 영속성 컨텍스트는 엔티티를 영구적으로 저장하는 환경이라는 뜻으로 엔티티 매니저는 엔티티를 저장하거나 조회 할때 이 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트는 논리적인 개념이기 때문에 해당 부분을 이해하지 않으면 데이터를 저장을 했는데 저장이 안되거나 하는 경험을 하게 된다. 영속성 컨텍스트에 대해 하나씩 알아보자. 1. 엔티티 매니저 팩토리(EntityManagerFactory)와 엔티티...

JPA 환경 구성 및 회원 기능 구현

Eclipse, H2 DataBase 설치 JPA 테스트를 하기 위해서 이클립스와 H2 database 를 설치 하자. Eclipse 설치(or intellij) 다운로드 경로 : https://www.eclipse.org/downloads/ H2 DataBase H2 Database 는 자바로 작성되어 별도의 설치 과정이 없고 2M 이하의 매우 가벼운 데이터 베이스이기 때문에 간단한 프로젝트를 개발 할때 매우 유용하다. 다운로드 경로 : https://www.h2database.com/html/download.html 설치...

JPA (JAVA PERSISTENCE API) 란?

JPA (Java Persistent API)란? 자바 어플리케이션을 개발을 하면서 JDBC + myBatis 를 이용한 개발을 주로 다루었다. xml 에 쿼리를 작성 하고 entity 로 맵핑을 하고 메서드에서 객체를 가지고 로직을 구현 하는 것에 대부분의 개발 시간을 소요 하게 되었고 테이블이나 쿼리에 수정사항이 발생하면 xml에서 부터 메서드 까지 모든 부분을 수정 해야...

알고리즘 풀이(JAVA) - [이분 탐색] 백준 알고리즘-1300(K번째 수)

문제 문제 링크 : 이분탐색-K번째 수 https://www.acmicpc.net/problem/1300 풀이 이 문제는 어떻게 이분 탐색으로 접근을 해야 할지 아무리 머리를 굴려도 모르겠어서 문제 풀이를 좀 살펴 보고 이해를 해야 했다. 배열을 정렬 해서 K 번째 배열 값을 출력 하면 될 문제인데 … 이 문제가 어떻게 이분 탐색으로 되지??? 풀이 시작 첫번째. 배열의...

젠킨스 스케쥴을 이용하여 업무시간을 단축 하기

저는 현재 개발운영파트(?)에 소속 되어있다 보니 개발도 하고 운영도 하고 있습니다. 매일 아침 출근 해서 처음 하는 일이 각 운영 서버에 접속 해서 간밤에 별일이 없었는지 서버별로 체크를 하는 반복적인 작업을 하는 것으로 하루 일과를 시작합니다. 서버 로그를 감지하는 솔루션이 있지만 운영팀의 숙명(?)인지 아직 사람 눈으로 매번 체크를 해야 합니다.(부장님이...

젠킨스 파이프라인 작성방법(기초)

젠킨스 파이프라인 젠킨스 파이프라인은 연속된 작업을 연결 해놓은 젠킨스의 자동화 된 프로세스를 표현 하는 말입니다. 이전 Jenkins + Git + Maven 환경 구성 해서 작업 생성 해보기 에서 젠킨스 환경을 구성 해서 젠킨스 파이프라인을 통해서 빌드 하는 환경을 맛보기 해보았습니다. 젠킨스 파이프라인은 Groovy 문법을 사용 하기 때문에 디테일한 부분은 따로...

알고리즘 풀이(JAVA) - [이분 탐색] 백준 알고리즘-2110(공유기 설치)

문제 문제 링크 : 이분탐색-공유기 설치 https://www.acmicpc.net/problem/2110 풀이 이 문제는 어떻게 이분 탐색으로 접근을 해야 할지 한참을 생각 해야 했다. 첫번째로 주어진 갯수 만큼 공유기를 설치해야 하고. 두번째로 공유기가 설치 된 집간의 거리를 구해서 거리를 측정해야한다… 문제를 해결 할 수 있었던 방법은 이분탐색의 mid 값을 집간의 거리 로 생각 하고...

알고리즘 풀이(JAVA) - [이분 탐색] 백준 알고리즘-2805(나무 자르기)

문제 문제 링크 : 이분탐색-나무 자르기 https://www.acmicpc.net/problem/2805 풀이 이 문제는 랜선자르기(https://parkhyeokjin.github.io/algorithm/2019/10/09/baekjoon-1654.html) 에서 고민을 많이 한 덕에 조금 쉽게 접근을 하였으나 문제를 정확히 분석 하지 못한 탓에 수자례 실패를 맛봐야 했다. 실수1. 상근이는 항상 나무를 가져갈 수 있다. 필요한 나무가 M 이지만 더 많이 가져 갈 수 있고 딱 맞게 가져갈...

알고리즘 풀이(JAVA) - [이분 탐색] 백준 알고리즘-1654(랜선 자르기)

문제 문제 링크 : 이분탐색-랜선 자르기 https://www.acmicpc.net/problem/1654 풀이 이 문제는 정말정말 매우 어려웠다. 두가지 문제점때문에 몇번을 틀리고 시간을 소모 했다. 첫번째 int 선언 -> 랜선의 최대 길이가 N <= 2³¹-1 이므로 전체 길이를 더했을 때 int 최대 범위를 벗어 날 수 있음. 두번째 문제에서 주어진 n 개만큼만 구하면 되는줄 알고...

젠킨스 오프라인 설치 (젠킨스 플러그인 오프라인 설치)

젠킨스 오프라인 설치 스토리 나의 업무 환경은 인터넷망과 업무망이 구분 되어있고 서버의 경우 인아웃바운드의 차단 정책이 매우매우매우 폐쇄적이다. 젠킨스는 커녕 메이븐 레파지토리는 물론 깃허브는 …… 어쨋든 다행이 몇몇 기능을 빼고는 오프라인 구성이 가능 하기때문에 오프라인 구성을 하는 방법을 정리 해본다. 젠킨스 설치 젠킨스 설치는 아래 경로에서 해당 OS에 맞는 버전을...

알고리즘 풀이(JAVA) - [이분 탐색] 백준 알고리즘(숫자 카드2)

문제 문제 링크 : 이분탐색-숫자 카드2 https://www.acmicpc.net/problem/10816 풀이 첫번째. 입력 데이터를 배열 처리 두번째. 이분 탐색을 위해 카드뭉치 정렬(Arrays.sort(cards)) 세번째. 정렬된 카드 뭉치(cards) 에서 찾고자 하는 숫자(num)가 시작 되는 배열의 index를 찾는다(findLeft()) 네번째. 정렬된 카드 뭉치(cards) 에서 찾고자 하는 숫자(num) 보다 처음 큰수가 나오는 index를 찾는다(findRight()) 다섯째. findRight - findLeft...

알고리즘 풀이(JAVA) - [이분 탐색] 백준 알고리즘(수 찾기)

문제 문제 링크 : 이분탐색-수 찾기 https://www.acmicpc.net/problem/1920 풀이 이 문제를 풀기 전에 이분탐색에 대해서 알아보자. 이분 탐색 설명 : https://parkhyeokjin.github.io/algorithm/2019/10/01/binarySearchAlgorithm.html 이 문제는 이분 탐색을 알면 쉽게 풀 수 있다. 숫자들의 집합 (aLen) 찾아야 되는 숫자의 집합 (bLen) 이분탐색은 정렬되어있는 배열 에서 찾는 탐색 방법으로 aLen을 오름 차순으로 정렬한다. bLen 의...

이진 검색 알고리즘(Binary Search Algorithm)

1. 이진 검색 알고리즘(Binary Search Algorithm) 이진 검색 알고리즘은 이미 정렬 되어 있는 배열에서 특정한 값의 위치를 찾는 알고리즘 이다. 탐색 방법 예) int[] arr = new int[] {9, 7, 2, 1, 5, 8, 3, 6, 4} 탐색 조건 : 3번 숫자 찾기 1) 배열을 오름 차순으로 정렬한다. 2) 정렬된...

Jenkins + Git + Maven 환경 구성 해서 작업 생성 해보기

Jenkins 신규 프로젝트 서버를 신규 구축 할 일이 생겨서 간단하게 설치 부터 기초 파이프라인 실행 까지의 작업을 정리해보았습니다. 1. Jenkins, Git, Maven 설치 하기 설치 환경 필수 정보 256 MB of RAM, although more than 512MB is recommended 10 GB of drive space (for Jenkins and your Docker image) Java...

ELK STACK(Elastic Search, Kibana, Logstash) 이란 ?

ELK 란? ELK 란 Elastic Search, Kibana, Logstash 를 말한다. ELK Stack 이란? ELK 기능에 Beats가 더해져서 Stack 이라고 말한다. Beats : 데이터 수집기로 로그 파일, 네트워크 데이터, 이벤트 로그, 감사데이터 등등을 수집하여 Elastaic Search 나 Logstash로 전송 한다. Elastic Search 란? 분산 검색 엔진으로 Logstash 로 부터 수집된 데이터를...

우아한테크세미나 - 우아한 스프링 배치 기록

우아한 스프링 배치 테크 세미나 소식에 고민 1도 없이 신청서를 작성 해서 신청 했는데 운좋게 참석 할 수 있어서 다녀 왔다. 개발 하면서 매우 도움을 많이 받았던 블로그의 주인인 jojoldu 님 께서 발표를 해주셨고 기본편 & 활용편으로 나누어 진행 되었다. 잊어버리기 전에 빨리 기록을 남긴다. 전반전 : 기본편 배치 어플리케이션이란?...

알고리즘 풀이(JAVA) - 백준 알고리즘(가운데를 말해요)

문제 문제 링크 : (가운데를 말해요) https://www.acmicpc.net/problem/1655 수빈이는 동생에게 “가운데를 말해요” 게임을 가르쳐주고 있다. 수빈이가 정수를 하나씩 외칠때마다 동생은 지금까지 수빈이가 말한 수 중에서 중간값을 말해야 한다. 만약, 그동안 수빈이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다. 예를 들어 수빈이가 동생에게 1, 5, 2,...

알고리즘 풀이(JAVA) - 백준 알고리즘(절댓값 힙)

문제 문제 링크 : (절대값 힙) https://www.acmicpc.net/problem/11286 절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다. 배열에 정수 x (x ≠ 0)를 넣는다. 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다. 프로그램은 처음에 비어있는 배열에서 시작하게...

Maven package 시 참조된 라이브러리 배포하기

Maven을 이용한 프로젝트 배포시 War의 경우는 자동으로 WEB-INF/lib 에 Dependency 라이브러리들이 복사가 되지만 Jar Package 할 경우에는 Class & Resoueces 만 패키징 된다. 이 경우 Dependency Lib 를 관리 하는데 두가지 방법이 있다. 1. 특정 디렉토리에 Dependency Lib 파일 복사 Maven Dependency Plugin에 아래 명령어를 추가 하면 지정된 디렉토리에 Dependency...

알고리즘 풀이(JAVA) - 백준 알고리즘(최대힙, 최소힙)

문제 문제 링크 최대힙 : https://www.acmicpc.net/problem/11279 최소힙 : https://www.acmicpc.net/problem/1927 풀이 풀이) 이번 문제는 여러 가지로 도전을 하였으나 속도 제한에 걸려서 조금 고민을 하였다. 정렬을 하는 부분에 있어서 힙정렬 퀵정렬을 메소드 등을 이용하여 정렬을 해서 처리하려고 했으나 결국에는 PriorityQueue 자료 구조를 이용해서 처리를 해서 성공을 하였다. 소스 최대힙 import java.io.BufferedReader; import...

알고리즘 풀이(JAVA) - 백준 알고리즘_1436(브루트포스-영화감독 숌)

브루트포스(brute-force) 브루트포스란? brute는 “짐승같은, 난폭한”이라는 뜻이고, brute-force는 “난폭한 힘, 폭력”이라는 뜻이다. 암호학 용어로는 brute-force attack 또는 exhaustive key search, 우리말로는 노가다 또는 무차별 대입 공격이라 부른다. 주로 암호학에서도 쓰이는 방법이긴 하지만, 굳이 암호학만의 문제는 아니고 다른 알고리즘 분야에서도 사용되고 있다. 간단하게 말하자면 노가다와 다굴을 논리적이고 과학적으로 하는 방식. 특징 조합...

알고리즘 풀이(JAVA) - 백준 알고리즘_1018(브루트포스-체스판 다시 칠하기)

브루트포스(brute-force) 브루트포스란? brute는 “짐승같은, 난폭한”이라는 뜻이고, brute-force는 “난폭한 힘, 폭력”이라는 뜻이다. 암호학 용어로는 brute-force attack 또는 exhaustive key search, 우리말로는 노가다 또는 무차별 대입 공격이라 부른다. 주로 암호학에서도 쓰이는 방법이긴 하지만, 굳이 암호학만의 문제는 아니고 다른 알고리즘 분야에서도 사용되고 있다. 간단하게 말하자면 노가다와 다굴을 논리적이고 과학적으로 하는 방식. 특징 조합...

알고리즘 풀이(JAVA) - 백준 알고리즘_7568(브루트포스-덩치)

브루트포스(brute-force) 브루트포스란? brute는 “짐승같은, 난폭한”이라는 뜻이고, brute-force는 “난폭한 힘, 폭력”이라는 뜻이다. 암호학 용어로는 brute-force attack 또는 exhaustive key search, 우리말로는 노가다 또는 무차별 대입 공격이라 부른다. 주로 암호학에서도 쓰이는 방법이긴 하지만, 굳이 암호학만의 문제는 아니고 다른 알고리즘 분야에서도 사용되고 있다. 간단하게 말하자면 노가다와 다굴을 논리적이고 과학적으로 하는 방식. 특징 조합...

알고리즘 풀이(JAVA) - 백준 알고리즘_2231(브루트포스-분해합)

브루트포스(brute-force) 브루트포스란? brute는 “짐승같은, 난폭한”이라는 뜻이고, brute-force는 “난폭한 힘, 폭력”이라는 뜻이다. 암호학 용어로는 brute-force attack 또는 exhaustive key search, 우리말로는 노가다 또는 무차별 대입 공격이라 부른다. 주로 암호학에서도 쓰이는 방법이긴 하지만, 굳이 암호학만의 문제는 아니고 다른 알고리즘 분야에서도 사용되고 있다. 간단하게 말하자면 노가다와 다굴을 논리적이고 과학적으로 하는 방식. 특징 조합...

알고리즘 풀이(JAVA) - 백준 알고리즘_2798(브루트포스-블랙잭)

브루트포스(brute-force) 브루트포스란? brute는 “짐승같은, 난폭한”이라는 뜻이고, brute-force는 “난폭한 힘, 폭력”이라는 뜻이다. 암호학 용어로는 brute-force attack 또는 exhaustive key search, 우리말로는 노가다 또는 무차별 대입 공격이라 부른다. 주로 암호학에서도 쓰이는 방법이긴 하지만, 굳이 암호학만의 문제는 아니고 다른 알고리즘 분야에서도 사용되고 있다. 간단하게 말하자면 노가다와 다굴을 논리적이고 과학적으로 하는 방식. 특징 조합...

알고리즘 풀이(JAVA) - 백준 알고리즘_2630(색종이 만들기)

백준 알고리즘_2630(색종이 만들기) 문제 링크 : https://www.acmicpc.net/problem/2630 주어진 네모 배열을 재귀함수를 활용 하여 반복적으로 잘라서 동일한 색깔의 종이가 나올때까지 반복 수행 하는 문제 이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Baekjoon_2630 { private static int whiteCnt = 0; private static int blueCnt = 0; public static void main(String[]...

정렬 알고리즘 기초5 - 계수 정렬(Counting Sort)

1. 계수 정렬 알고리즘(Counting Sort) 현재까지 개발이 된 정렬 알고리즘은 O(n log n) 의 속도를 가지고 있는 퀵정렬, 힙정렬, 병합 정렬이 가장 빠르다. 하지만 어떠한 특정한 조건 이 된다면 O(n) 의 속도를 보이는 정렬이 바로 계수정렬이다. 어떠한 조건에 의해 정렬이 되는지 알아보자. 정렬 방법 이전의 정렬 방법들은 전부 위치를 교환...

정렬 알고리즘 기초4 - 병합 정렬(Merge Sort)

1. 병합 정렬 알고리즘(Merge Sort) 병합정렬은 분할 정복 알고리즘이다. 병합 정렬 알고리즘은 정확히 반씩 나누어 계산을 하기 때문에 최악의 경우에도 O(n log n)의 동일한 속도를 보장 한다. 정렬 순서 예1) 3,5,1,2,4,8,6,9,7,10 배열을 오름차순으로 정렬 하려고 할 경우 1) 병합 정렬은 항상 반으로 쪼개어 정렬을 수행 한다. (2의 배수) 0 1...

정렬 알고리즘 기초3 - 힙 정렬(Heap Sort)

1. 힙정렬 알고리즘(Quick Sort) 우선 힙정렬을 이해하기 위해서는 이진트리 구조를 이해해야 한다. 이진트리 이진트리란 루트(root) 노드 부터 시작해서 최대 두개의 자식 노드를 가지는 트리 구조를 말한다. 힙(Heap) 이란 최소값이나 최대값을 빠르게 찾아내기위한 완전 이진트리를 기반으로 하는 트리입니다. 힙에는 최대 합과 최소합이 존재하는대 최대 합은 부모노드가 자식노드보다 큰합이라고 할 수 있습니다....

정렬 알고리즘 기초2 - 퀵 정렬(Quick Sort)

1. 퀵정렬 알고리즘(Quick Sort) 퀵 정렬(Quicksort)은 찰스 앤터니 리처드 호어가 개발한 정렬 알고리즘이다. 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다. 일반적인 상황에서 최고의 정렬 성능을 보인다. 프로그래밍에 가장 많이 구현된 정렬 알고리즘 중 하나이다. 퀵 정렬은 분할 정복(divide and conquer) 방법을 통해 리스트를 정렬한다. 정렬 순서는 아래와 같다. 리스트...

정렬 알고리즘 기초(선택정렬, 버블정렬, 칵테일정렬, 삽입정렬)

1. 선택정렬 알고리즘(Selection Sort) 선택 정렬 알고리즘은 제자리 정렬 알고리즘의 하나로, 선택한 수를 가장 작은 수와 자리를 교체 하는 방법으로 정렬을 한다. 선택 정렬 알고리즘은 다음의 순서로 이루어진다. 예) 3,5,1,2,4,8,6,9,7 배열을 오름차순으로 정렬 하려고 할 경우 1) 3 5 1 2 4 8 6 9 7     3─1─────┤ 3을 선택 하여...

Mybatis org.apache.ibatis.reflection.ReflectionException

[MyBatis] org.apache.ibatis.reflection.ReflectionException Exception 기록을 위한 채널입니다. error:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class 클래스명 with invalid types () or values (). Cause: java.lang.NoSuchMethodException: 클래스명() 해결 MyBatis 연동 도중 위와 같은 Exception 발생 해당 오류는 Default Constructor 가 없어 발생 하는 오류로 확인. public class TestBean{ private long seq; private...

JDK 12 features

JDK 12 features (Switch Expressions) JEP 325 : Switch Expressions (Preview) 자바의 오래된 스위치 식은 여러 가지 문제점을 가지고 있습니다. 장황한 break 문, 시각적인 노이즈 발생, 디버깅의 어려운점을 예로 들 수 있습니다. JDK 12 에서는 이러한 전통적인 스위치 식을 개선하여 개발자의 코딩을 향상 시킵니다. 어떤 부분이 향상 되었는지 알아보도록 하겠습니다....

일반적인 프로그래밍 원칙(JAVA)

Effective Java E/3 학습을 하며 정리 하는 글입니다. 지역변수를 최소화 하라. 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 볌위를 줄이는 방법 가장 처음 쓰일 때 선언 하라. 선언과 동시에 초기화 하라. 메서드를 작게 유지하고 한 가지 기능에 집중 하라. 전통적인 for 문보다 for-each 문을...

프로젝트에 Maven, Nexus 연동하기(CI/CD)

프로젝트를 전달 받았는데 프로젝트관리도구도 없고…배포도 수작업으로 말아서 하고 있고 라이브러리도 /project/libs 폴더에 버전별로 마구잡이로 들어있었다. 맙소사….. 버전관리는 SVN으로 관리 하고는 있다. 하지만 Commit history를 제대로 기입 해놓지 않았다….. 일단 이클립스에 셋팅을 위해 SVN에서 소스를 받았다. 오류가 마구 발생한다. 컴파일 버전은 몇 버전이지.. 일단 라이브러리 폴더에서 라이브러리들을 참조 한다. 아….라이브러리가 버전별로...

Java 문자열을 연결하는 방법(StringJoining.class and String.join())

StringJoining.class and String.join() 여러 문자열 리터럴 또는 객체를 연결 하는 것은 프로그래밍에서 일반적인 요구 사항이다. 오랫동안 JDK API에서는 여러 문자열 리터럴 또는 객체를 연결 하는 방법이 없었기 때문에 별도로 개발을 해야 했다. 아래와 같은 요건이 주어졌을 경우를 생각해보자. 요건 1 : {“hello”, “java”, “World”}의 문자열 배열이 있다. 이 문자열 배열을...

생성자를 관리 하는 여러가지 방법

Effective Java E/3 학습을 하며 정리 하는 글입니다. 생성자를 관리 하는 여러가지 방법 private 생성자나 열거 타입으로 싱글턴임을 보증하라. 인스턴스를 오직 하나만 생성 할 경우 싱글턴 을 많이 사용 한다. 여러가지 싱글턴 생성 방식을 살펴보자. 예1) public static final 방식의 싱글턴 public class SingletonClass { public static final SingletonClass INSTANCE...

Builder Pattern

Effective Java E/3 학습을 하며 정리 하는 글입니다. 생성자에 매개변수가 많다면 빌더를 고려하라. 생성자에 매개 변수가 많을 경우 어떻게 하는가? 아래와 같이 점층적 생성자를 통해 생성 할 수 있다. public class MoonbucksCoffee { private String size; //필수 private int shot; //필수 private int water; //필수 private boolean syrup; //선택 private...

static factory method

Effective Java E/3 학습을 하며 정리 하는 글입니다. 생성자 대신 정적 팩터리 메서드를 고려하라. Effective Java 에서는 생성자 대신 정적 팩터리 메서드를 고려 하라고 설명한다. 정적 팩터리 메서드가 무엇인지 알아보자. 일반적으로 클라이언트가 클래스의 인스턴스를 생성 하기 위해서는 아래와 같은 방법으로 얻을 수 있다. SomeClass sc = new SomeClass(); .... 하지만...

Kotlin 스터디 1일차

Hello World 스터디 환경 IDE : IntelliJ OS : Windows10 JVM : JDK1.8 프로젝트 생성 File -> new Project -> Kotlin/JVM Hello World src -> new File -> Kotlin file / class app.kt package org.kotlinlang.play // 1 fun main() { // 2 println("Hello, World!") // 3 } package org.kotlinlang.play //...

Eclipse Vs IntelliJ Refactor 단축키 비교

이 글은 Eclipse 와 IntelliJ의 Refactor 단축키에 대해 정리 하는 글입니다. 동작 Eclipse 단축키 Intellij 단축키 Refactor Menu Alt + Shift + T Ctrl + Shift + A(Action Search) Copy 없음 F5 Move Alt + Shift + V F6 Rename Alt + Shift + R Shift + F6 Safe Delete...

자바 디자인 패턴의 종류

디자인 패턴이란? 디자인 패턴이란 프로그래밍 할때 문제를 해결하고자 코드의 구조들을 일정한 형태로 만들어 재이용 하기 편리하게 만든 일정한 패턴이다. 이 용어를 소프트웨어 개발 영역에서 구체적으로 처음 제시한 곳은, GoF(Gang of Four)라 불리는 네명의 컴퓨터 과학 연구자들이 쓴 서적 ‘Design Patterns : Elements of Reusable Object-Oriented Software’ (재이용이 가능한 객체지향 소프트웨어의...

Quartz 아키텍쳐를 활용 한 배치 업무 만들기

자바 Quartz 오픈 소스 예제 자바 어플리케이션에서 사용할 수 있는 유명한 오픈 소스 작업 스케쥴링 라이브러리인 Quartz 의 기본 설정 및 사용 방법에 대해 알아보자. 1. 프로젝트 환경 Java8 Quartz 2.3.0 SLF4J 1.7.7 Maven 3.3.3 Eclipse 4.10.0 2. Quartz 다운로드 Quartz Team github : Quartz GitHub Link 3. Maven 의존성...

TDD Example(Bowling Game)

이글은 백명석님의 강의를 학습하면서 정리 된 자료 입니다. 개요 볼링 게임 점수 계산을 하는 프로그램을 TDD로 작성 해보자. 볼링 게임 예제 소스 : (https://github.com/ParkHyeokJin/BowlingGame-Example.git) 규칙 볼링 게임은 10개의 프레임으로 구성된다. 각프레임은 대개 2 룰을 갖는다(10개의 핀을 쓰러뜨리기 위해 2번의 기회를 갖는다) Spare: 10 + next first roll 에서 쓰러 뜨린...

Java11의 새로운 기능

Java11의 새로운 기능 JAVA11 발표 및 라이센스 변경 오라클은 6개월마다 새로운 버전을 제공 한다고 발표를 했습니다. 그리고 라이센스 및 지원 모델을 변경 했습니다. Java11 은 더이상 상업용도로 무료가 아닙니다. 개발에서 사용 하는 것은 가능 하지만 상업적으로 사용 하려면 라이센스를 구매 해야 합니다. 2019년 1월 부터 Java8 지원을 중단 하고 추가...

자바 람다식 튜토리얼

자바 람다식 소개 이 포스팅에서는 Java Lambda Express 에 대해 소개 합니다. Lambda 기능은 Java8에서 소개 되었는데 Functional Programming 을 하기 위한 첫번째 단계로 볼 수 있습니다. 클래스 없이 함수를 만들 수 있고 매개변수로 전달도 가능 하며 필요에 따라 언제든지 실행 할 수 있습니다. Java Lambda expressions 는 전달할 수...

jekyll 을 이용한 blog 만들기

jekyll을 이용하여 나만의 git blog 만들기 jekyll 을 이용해서 나만의 블로그를 만들어 보자. 이 포스트에서는 빠르게 jekyll을 이용하여 사이트를 생성 할 수 있도록 정리 하였다. 자세한 사항은 jekyll 공식 사이트에서 확인 하기 바란다.jekyll 공식사이트 이동하기 jekyll? jekyll은 아주 심플하고 블로그 지향 적인 사이트 생성기이다. 텍스트(마크다운) 파일로 컨텐츠를 작성하고 폴더로 관리한다....

MarkDown 태그

Header 표현 <h1> ~ <h6> 까지 표현 # Header 1 ## Header 2 ### Header 3 #### Header 4 ##### Header 5 ###### Header 6 Header 1 Header 2 Header 3 Header 4 Header 5 Header 6 <h1> , <h2> 는 다음과 같이 표현 가능 제목 1 ====== 제목 2...

DB ERD 관계선 정리

DB ERD 관계선 관계 선 실선 : 식별 관계 부모 자식 관계에서 자식이 부모의 키를 외래키로 참조 점선 : 비식별 관계 부모 자식 관계에서 자식이 부모의 키를 일반 속성으로 참조 관계의 종류 (1 : 1) 관계 : 부모는 하나의 자식이 있다. (1 : N) 관계 : 부모는 하나 이상의 자식이...

Java8의 8가지 새로운 기능

Java8의 8가지 새로운 기능 2014년 JDK 8 (Java SE 8, JDK 8, JRE 8) 발표 2014년 JDK 8 Lambda 추가 2011년 JDK 1.7이 나온 이후로 3년이 업데이트에 3년이 걸렸습니다. 하지만 1.7에서 구현하지 못했던 많은 변화들이 1.8에 담기게 됩니다. 변화된 기능 1) Lambda Expression 기본 구분 (argtype arg...) -> { return...

Java7의 10가지 새로운 기능

Java7의 10가지 새로운 기능 2011년 JDK 7 (Java SE 7, JDK 7, JRE 7) 발표 JDK 1.0에서 JDK 6까지 2년마다 업데이트가 되었지만 JDK 7은 5년만에 업데이트 되었습니다. JDK 7의코드 네임은 Dolphin입니다. 제품명은 아래와 같습니다. Java™ Platform Standard Edition 7 (Java™ SE 7) Java™ SE Development Kit 7 (JDK™ 7) Java™...