쿠버네티스에서 Pod는 애초에 쓰고 버리고 새롭게 시작할 수 있게 설계되어 있다. Pod의 IP주소는 기동시 부여되고, 종료시 회수되기 때문에 Pod가 죽고 다시 살아날 때 IP주소가 변경된다. 그렇기 때문에 Pod의 IP주소로 Pod에 접근할 수 없다. 그래서 Pod에 접근하려면 Service를 사용해야 한다. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR clusterip-nginx ClusterIP 10.104.201.2 80/TCP 5m34s app=nginx-app 위와 같은 서비스가 있다고 해보자. ClusterIP로 된 Service이다. 이 서비스는 app=nginx-app인(key-value 구조) Pod들에 접근할 수 있는 서비스이다. ..
대리님들이 자바8의 메서드 참조에 대해 말씀하시는걸 주워듣고 나도 이래저래 공부를 했는데 메서드 참조는 이해가 안 갔다. 그러다가 오늘 갑자기 깨달음을 얻어서 간단하게 정리해둔다. 메서드 참조는 말그대로 메서드를 참조하는 것이다. 그렇다면 메서드를 왜 참조하느냐? 이미 있는 메서드를 사용하기 위해서이다. public class Hello { private static final String HELLO = "안녕하세요!"; public String sayHello() { return HELLO; } public String sayHello(String name) { return name + "님, " + HELLO; } } 위와 같은 클래스가 있다고 해보자. 이름을 입력하면 이 이름을 이용해서 인삿말을 출..
외부 직원에게 사정상 vm 접근권한을 보내줄 때, 나는 따로 계정을 만든 뒤, /etc/sudoers에 등록하고 넘겨주면 되지 않나 했는데, 팀장님은 wheel 그룹을 주면 된다고 하셨다. 그래서 wheel 그룹을 찾아보니 /etc/sudoers에 이미 wheel 그룹이 정의되어 있어서 wheel 그룹을 주는 방법이 더 간단하겠다고 생각했다. 이때 wheel 그룹에 유저를 추가하는 명령어도 여러 가지가 있는 것 같은데 우선 팀장님이 알려주신 것과 더 찾아본 바 아래 두 가지와 같다. // 1. gpasswd -a [사용자계정] wheel // 2. usermod -aG wheel [사용자계정]
DispatcherServet은 HTTP 요청을 제일 앞에서 받아 적합한 컨트롤러로 요청을 넘겨주는 Front Controller의 역할을 한다. DispatcherServlet이 어떻게 동작하는지 보기 위해서는 그 클래스를 까보면 된다. (예전같았으면 인터넷 검색을 주로 했겠지만 스프링 자체가 실력있는 분들이 작성한 코드다보니 이런 분들이 작성한 코드를 보고 배우는 경험도 되고 직접 뜯어보는게 훨씬 기억에 잘 남아서 요즘은 공식문서를 보며 코드를 뜯어보고 있다.) 먼저 계층구조를 뜯어보면 위와 같다. 이제부터 살펴볼 DispatcherServlet은 FrameworkServlet을 상속하고 있다. FrameworkServlet은 WebApplicationContext를 멤버변수로 가지고 있다. publ..
log 설정도 한 번 봐야지, 봐야지 하다가 오늘 마침 설정 건드린 김에 정리해본다. 오늘 내가 설정 수정한 내용은 시스템 분리였다. 기존 A시스템이 있는 상태였고, 여기에 B시스템을 새로 추가하면서 로그를 따로 관리하게 되어 분리해야했다.(기존 시스템에 새로운 시스템을 추가하는 것에 대한 논의는 차치하고.) logback 설정파일 일반적으로 logback 설정파일은 src/main/resources 아래에 logback.xml로 존재한다. 구조는 , 안에 (선택), (선택), 최대 1개의 로 구성되어 있다. // 선택 // 선택 // 최대 1개 참고로 logback 0.9.17버전부터는 태그 이름의 경우, 대소문자를 구분하지 않는다고 한다. 예를 들어, , , 는 모두 이다. 다만, 이런 식으로 구성할..
기존 SVN 레포지토리에 있던 소스를 다른 레포지토리로 옮기고 체크아웃 후 실행하는데 그 과정에서 발생한 문제들의 해결방법을 정리해본다. 1. properties 파일을 찾지 못하는 문제 프로퍼티 파일이 존재하는데 프로파일을 찾지 못하겠다며 다음과 같은 오류가 발생했다. class path resource [config/properties/system-properties-local.yml] cannot be opened because it does not exist 그래서 찾아보니 build path의 문제였다. 이클립스의 프로젝트 위에서 오른쪽 클릭 후 [Build Path] - [Configure Build Path]를 선택한다. Source탭에서 properties 파일이 존재하는 경로를 넣어준다...
쿼리를 작성하면서 이 쿼리는 테이블 풀 스캔이 일어나는 쿼리다, 일어나지 않는 쿼리다, 인덱스는 어떻게 사용하는 게 더 좋을 것 같다 등의 말을 들었는데, 도대체 그걸(테이블 풀 스캔이 일어나는지, 아닌지) 어떻게 아는지 궁금했다. 그러다가 EXPLAIN을 알게 되어 정리해본다. 아래의 링크들을 참고하여 작성했다. 8.8.1 Optimizing Queries with EXPLAIN MySQL :: MySQL 8.0 Reference Manual :: 8.8.1 Optimizing Queries with EXPLAIN 8.8.1 Optimizing Queries with EXPLAIN The EXPLAIN statement provides information about how MySQL executes ..