현재 개발중인 프로젝트에서 새로운 이슈와 브랜치를 파고 작업을 하려했다. 그런데 이미 만들어진 remote 브랜치를 가져오려하니 아래와 같은 에러가 뜬다.(?) 보며면 새로 만든 refactor/#162_multi_module이란 브랜치를 인식하지 못하는 것 같다. 이미 github에는 해당 브랜치가 있는데 인식을 못한다니? 그럼 로컬 깃에서 원격저장소의 정보를 모르는 것 아닐까??? git fetch에 대해 잠깐 알아보자면, 그렇다면 문제를 해결하기위해, 브랜치의 새로운 정보를 git fetch -all 명령어를 통해 원격저장소에서 정보를 불러오자. 새로운 브랜치의 존재를 로컬에서 확인했다. 그럼 이어서 원래 하려 했던 원격 저장소의 브랜치를 가져오자 git checkout -t origin(원하는 원..
IntelliJ IDEA에서 "interface"라는 디렉터리 이름을 사용하는 것은 허용되지 않는다고한다. "interface"는 Java에서 예약된 키워드로... 이러한 키워드는 클래스 이름, 변수 이름 또는 디렉터리 이름과 같은 식별자로 사용할 수 없다. 다시금! "interface"가 Java에서 키워드로 예약되어 있기 때문에, IntelliJ IDEA는 이러한 제한을 강제하며, 이름 충돌을 방지하고 Java 언어 사양을 준수할 수 있도록 해준다! 그렇기에, 만약 interface 를 가진 디렉토리를 명명하자면 아래와 같은 주의사항을 지키며 interfaces 혹은 ifs 로 하는게 좋을 것 같다. 파일 명명 규칙 1. 영문 소문자로만 구성한다. 2. 가능하면 짧게 구성한다(축약어 사용). 3. 특..
항상 개발해올 때, JWT에 대한 참고 코드를 살펴보면 util 이라는 네이밍을 할 때가 많다. 그런데 다른 코드를 레퍼런스로 사용하다가 같은 기능을 제공하는데 이번에는 네이밍을 helper로했다.. 조금 더 가독성 높은 네이밍을 가지려면 무엇이 더 알맞을까?? 먼저 공식 Spring 사이트에 들어가보자. https://www.baeldung.com/java-helper-vs-utility-classes 역시나 나만 고민한게 아니였음을 확인할 수 있다. 공식사이트에서 말하는 Utily 클레스랑 Helper 클레스의 특징을 살펴보고 차이점을 통해 네이밍을 택해보자 . Helper 코드 class MyHelperClass { public double discount; public MyHelperClass(d..
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. 인덱스를 어떻게 사용한다는거지? 테이블에 인덱스 컬럼을 추가하는 건가? 사용해서 어떻게 빨리 찾는다는거지? 각 테이블로 그냥 탐색하는거랑 어떻게 다른건가? 인덱스를 활용하면, 데이터를 조회하는 성능이 함께 향상된다. 만약 index를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 Full Scan을 수행해야 한다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다. 인덱스의 관리 DBMS..
데이터베이스에서 사용하는 키에 대해 알아보자 릴레이션은 테이블, 튜플은 행 혹은 하나의 데이터라고 생각하면 된다. 속성은 테이블의 컬럼(열)이다. 키를 알아보기 앞서 최소성과 유일성의 개념을 알아보자 최소성 : 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질 유일성 : 하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질 최소성은 쉽게 설명하면 키를 구성하는 속성들이 진짜 각 튜플을 구분하는데 꼭 필요한 속성들로만 구성되어 있냐를 의미한다. (후에 배우는 슈퍼키는 속성 여러개를 묶어서 키로 사용한다) 굳이 없어도 될 속성들을 넣지 말자는 말이다. 1. 슈퍼키 (Super Key) 슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플 중 ..
데이터베이스 컨넥션 풀이란? 데이터베이스 컨넥션 풀에 대해 먼저 간략히 말하자면 데이터베이스에 접근할 수 있는 컨넥션을 보관하는 풀장의 개념입니다. 만약 웹서버에서 클라이언트의 요청에 의해 데이터를 제공하려고 데이터베이스에 접근하게 될 때, 즉 쿼리문을 DB로 날리게 되면 바로 접근하는 것이 아니라 컨넥션이라는 객채를 통해 접근하게됩니다. 그럼 왜 이 컨넥션을 풀장 개념으로 보관해야하는가에 대해 의문이 생길 수 있는데, 이는 DB에 접근하기 위해 컨넥션 객체를 만들고 원하는데이터를 찾아오는 과정에서 가장 시간을 많이 소모하는, 즉 비용이 많이드는 부분이 바로 객체를 생성하는 시간이기 때문입니다. 그렇기에 DB에 접근할 때마다 컨넥션 객체를 생성하는 시간을 줄이기 위해 DBCP개념을 두어 비용과 대기 시간..
먼저, 파일시스템에 대해 설명하겠습니다. 파일 시스템은 데이터베이스가 등장하기이전에 데이터를 관리하던 도구입니다. 그러나 현재는 데이터베이스를 더 많이 사용하는데요. 그러한 이유에는 여러 문제가 있었기 때문입니다. 파일 시스템의 경우 데이터를 받는대로 저장하였기에 중복된 데이터가 너무 많았고, 이 때문에 데이터의 추가, 수정, 삭제가 번거로웠습니다. 그리고 만약 데이터가 손실, 파일시스템에 장애가 일어나더라도 회복할 수 있는 기능이 없었습니다. 그리고 동일한 파일을 동시에 다른 프로그램이 접근할 수 없어 불편하고 결정적으로는 응용프로그램에 대한 의존도가 높아 구조를 변경하게 된다면 새로운 프로그램이 필요했습니다. 이러한 문제점을 해결할 수 있는 것이 데이터베이스였습니다. 데이터베이스는 독립성이 보장됩니다..
호스트 사이의 통신 서비스 아래 무엇이 있을까? 네트워크 계층이 호스트 사이의 통신 서비스를 어떻게 제공하는지 정확하게 알아보자 네트워크 계층은 각 호스트와 네트워크 라우터 마다 네트워크 계층의 일부가 존재한다. 또한 네트워크 계층은 가장 복잡한 계층으로, 서로 상호작용하는 데이터 평면과 제어평면의 두가지 부분으로 나눠지며 그 안에 세세한 주제(라우터별제어, 전통적인 IP 포워딩, 일반화된 포워딩, IPv4, IPv6등 ) 를 갖고 알아보자 --- 네트워크계층의 데이터 평면의 역할은 입력 링크에서 출력 링크로 데이터그램을 전달하는 것이고 제어평면의 역할은 로컬 포워딩과 라우터별 포워딩을 대응시켜 데이터그램을 전달하는 것이다. 포워딩이란? 패킷이 라우터 입력 링크로 도달 시, 적절한 출력 링크로 이동시키는..