IT 지식
Git 대화형 rebase를 사용한 커밋 순서변경, 합치기 등등 방법
저번에 공부했었던 rebase에 대해 더 공부해보자. 이번에 공부할 내용은 대화형 rebase를 통해 커밋한 내용을 지우거나, 순서를 바꾸거나 기존 커밋에 내용을 더 추가하거나 하는 내용을 확인해보자. 커밋 합치기 리베이스를 진행할 때 리베이스를 진행할 브랜치에 커밋된 내용이 길다고 가정해보자. 그러면 그 커밋마다 변경된 내용이 다 달라서 master에 리베이스를 진행할 때 여러번에 conflict를 해결해야 한다. 그래서 오늘 강의해주신 강사님이 말씀하시길 브랜치의 커밋을 하나로 합치고 나서 rebase를 진행하면 좋다고 하셨다. 그럼 합쳐보자. 우선 아래 이미지를 보면 c2와 c3의 커밋을 하나로 합쳐서 아래와 같이 마스터 브랜치에 합쳐보겠다. 우선 위와 같은 상황이 되도록 브랜치를 만들어서 진행해보..
Git의 rebase를 이용한 커밋 정리 (merge와 차이)
Git을 처음 입사 후 진행했던 프로젝트에서 Gitlab을 통해 처음 접해보았다. 확실히 저장소 관리하는 방식과 커밋 전 단계가 제공되는 것 등등 편한 것이 많았다. 하지만 그 때 당시 딱히 팀원이 없었기에 히스토리 관리 및 flow 관리를 해야한다는 필요성을 알지도 못했고 듣지도 못했었다. 그러나 공부를 진행해보면서 git에 rebase라는 좋은 기능이 있다는 것을 알게되었고 배워보고 싶어 nhnent에서 제공하는 사내 교육에 참여하였다. 우선 첫 번째 글로 rebase와 merge에 차이를 설명하고 rebase를 진행해보자. rebase란? 우선 rebase는 base를 다시 지정한다 (re-base)의 의미이다. base가 무엇인가? 다음 그림을 보자. 그림을 보면 master의 c4와 experi..
블록체인 합의 방법 작업증명(pow, proof-of-work) 지분증명 (Pos, proof-of-stake) 소개
오늘 회사에서 샌프란시스코 대학교 블록체인 관련 교수인 정은진 교수님에게 블록체인 관련된 세미나를 들었다. 오늘 강의를 통해 그 동안 내가 블록체인에서 의구심을 가졌던 내용을 정리해보았다. 블록체인이란?우선 앞에 글에서도 설명하였듯이 블록체인은 hash의 연결이다. hash는 y=f(x)로 이루어져 있는 함수로써 함수에 들어간 값에 따라 y의 값이 바로바로 나온다. 이때 사용되는 해쉬는 sha256이다. x값으로 y의 값을 찾는데 어렵지 않으나, y의 값으로 x의 값을 찾는 것은 무지 어렵다. 이런 y값으로 x의 값을 찾는 것이 결국 비트코인을 채굴한다는 의미와 같다. 블록체인은 아래 그림과 같이 각 블록이 hash 값으로 연결되어 있다. 앞에 hash 값은 이전의 블록의 hash 값이 포함되어 있으므로..
Mac에서 일반 키보드 연결시 Home/End 버튼 사용방법
맥북을 사용하다보면 다 좋은데 키보드 연결해서 사용하려고 할때 일반 키보드와 단축키가 너무 달라서 불편한 경우가 굉장히 많다. 특히 개발할 때 홈버튼과 엔드 버튼을 자주 사용하는데 너무 불편했다. 이를 해결하기 위한 방법을 구글링해서 찾았고, 공유 및 정리하기 위해서 글을 올린다. 다른 글이나 동영상 보면 karabinder를 사용하라고 하는데 나는 아무리 해도 적용이 안됐다... 이 글을 보고 나와 같은 문제를 격는 사람들이 문제를 해결 했으면 좋겠다. 1. 먼저 터미널을 실행 시키고 다음 경로로 이동한다. $ cd ~/Library $ mkdir KeyBindings $ cd KeyBindings $ vi DefaultKeyBinding.dict 2. 그리고 vi 편집기로 실행시킨 텍스트에 아래 내용..
Tistory 외부 Editor API Tistory Editor 사용후기
티스토리를 사용하다보니 에디터가 너무 옛날이라 사용하기가 힘들었다. 그래서 찾아보던중 외부 API를 이용하여 개발한 프로그램이 있어서 사용해보았는데 너무 좋았다. 가장 좋았던 이유는 캡처프로그램을 통해 캡처 후 Ctrl + C와 Ctrl + v를 통해 등록이 가능하다. 이 부분이 너무 편하다. 그리고 드래그 앤 드롭으로 사진을 옮겨서 첨부할수 있어서 좋은 것 같다. 다운로드 주소 http://tistory-editor.tistory.com/ 지원 OS 윈도우, mac
Deque를 통해 버킷정렬(Bucket Sort)을 해보자.
저번시간에 만들었던 Deque를 사용하여 버킷정렬을 연습해보기로 했다. 우선 버킷정렬이 무엇인지 알아보자. 버킷정렬(Bucket Sort) 이란?? n개의 데이터를 정렬할 때 같은 크기의 간격을 갖는 n개의 버켓에 데이터를 분배한다. 입력 데이터가 균일하게 분포되었다면 각 버켓에는 1개의 데이터가 있게 되지만, 균일하게 분포되지 않으면 다수의 데이터가 버켓에 들어 갈 수 있으며 각 버켓의 데이터는 정렬하여 저장한다. n개의 모든 데이터를 버켓에 분배하였다면 버켓 번호 순으로 스캔하여 출력하면 정렬된 데이터를 얻게 된다. [예제] 최대 2자리를 갖는 정수 (0부터 99까지의 정수) 10개를 버켓 정렬한다고 하자. 각 버켓은 같은 크기의 간격 (0-9, 10-19, 20-29,…, 90-99)을 갖는 10개..
Deque를 직접 구현해보기
큐는 삽입과 삭제가 리스트의 한쪽 방향에서만 이루어지지만 deque는 리스트의 양쪽 끝 모두에서 이루어질 수 있다. 따라서 양쪽 방향 모두 삽입과 삭제가 이루어질 수 있으므로 기존의 큐나 스택으로 사용할 수 있어 유연하게 사용할 수 있다. 사진출처 : https://dh00023.github.io/algorithm/ds/2018/04/25/algorithm-10/ 이런 Deque를 직접 구현해 보자. 우선 Deque의 기능을 정리한 인터페이스이다.1234567891011121314151617181920212223package practice3; public interface Deque { public void addFirst(T item); public void addLast(T item); public..
Maven 다운로드 및 환경변수(Path) 등록방법
Spring boot cli에서 maven관련 명령어를 사용을 위해서는 Maven이 환경변수 되어있어야 한다. Maven을 윈도우에서 환경변수로 설정하는 방법을 알아보자. 1. 다운로드 경로 : https://www.apache.org/dyn/closer.cgi 아파치 메이븐의 다운로드 페이지가 변경되어서 조금 헷갈린다. 잘모르겠으면 여기서 받으면 된다. http://mirror.navercorp.com/apache/maven/maven-3/3.5.3/ 2. 환경변수 등록 1) 먼저 시스템 변수에서 MAVEN_HOME을 설정해준다. (이미지 참고) 2) Path에서 편집을 눌러 다음과 같이 설정한다. %MAVEN_HOME%\bin 만약 이렇게 설정하여도 정상동작 하지 않으면 다음과정을 확인한다. 1) S..
프로그래밍 코드 작성 시 주요원칙 (SOLID)
단일 책임 원칙 (Single Responsibility Principle) SRP -> 객체는 오직 하나의 책임만을 가져야한다. -> 객체에서 책임이라고 한다면 객체의 역할을 의미한다. 좋은 설계란 => 기본적으로 시스템에 새로운 요구사항이나 변경이 있을 때 가능한 한 영향 받는 부분을 줄여야 한다. 프로그램의 요구사항은 계속해서 변경되기 마련이다. 이를 위해서 항상 변경이 가능하도록 조치가 되어있어야 하며, 이런 시스템이 변화에 잘 적용되도록 설계되어 있는지 확인 하는 것을 회귀 테스트(regression)라고 한다. 개방폐쇄원칙 (Open-Closed principle) OCP - 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다. 리스코프 치한원칙 (LSP) - 자식클래..
피터 코드의 상속 규칙
상속의 오용을 막기위해 상속의 사용을 엄격하게 제한한다. 하위에 존재하는 규칙중 하나라도 만족하지 못한다면 상속을 하지 않아야한다. 1. 자식 클래스와 부모 클래스 사이의 '역할 수행' 관계가 아니어야 한다. -> 요리사는 사람이라는 범주를 상속해서는 안된다. -> 요리사라는 것은 사람이라는 속성의 하나이다. 2. 한 클래스의 인스턴스는 다른 서브 클래스의 객체로 변환할 필요가 없어야 한다. -> 엄마라는 객체는 누군가의 딸이라는 객체가 될 수 있다. -> 이런 속성 변경이 잦을 경우에는 객체의 변환 작업이 필요해서 해서는 안된다. 3. 자식클래스가 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행해야 한다. 4. 자식클래스가 단진 부모클래스의 일부 클래스의 기능을 재사용하기 위한 역할로 클래..