api gateway는 msa에서 필수 요소중 하나로 하나의 api로 여러개를 호출 할 수 있다고 한다. 예를 들어, web, app 등등이 존재한다고 가정하면 하나의 API로 이것들을 통신이 가능하다고 한다. 근데 나는 솔직히 이해가 되지 않았다. 왜냐하면 rest api가 web이든 app이든 바뀌지 않을텐데 하나의 api로 통신이 된다는게 말이 되지 않는다고 생각했다. 그림으로 그려보면 다음과 같다. 분명히 restapi는 변경이 되지 않을텐데 api gateway가 있을 필요가 없다고 생각했다. 근데 이건 잘못된 생각이 었다. 단 한가지 내가 빼먹은 부분이 존재하는데 그건 바로 포트(port)다. 즉, 기기1는 1000번 포트를 기기2는 2000번 포트를 기기3은 3000번 포트를 가진다고 해보자..
스프링에서는 빈이라는 객체를 만들어서 관리할 수 있습니다. 이것을 IOC라고 부릅니다. 빈을 만드는 방법은 어노테이션 방법과 XML방법이 존재합니다. 하지만 여기에서는 빈 생성 방법에 대해 설명하지는 않겠습니다. 이러한 방법이 발전을 해서 @ComponentScan 을 이용해서 빈 등록이 가능해집니다. 정확히 말하면 이게 빈을 등록하는 직접적인 방법은 아니지만, 이 글에서 중요한 부분이 아니기 때문에 넘어가도록 하죠. 이렇게 빈을 생성하게 되면 (어떠한 방법이든 상관없습니다.) @Autowrite라는 어노테이션을 활용해서 빈을 사용할 수 있습니다. 이것을 의존성 주입이라고 부릅니다. 의존성 주입에는 총 3가지가 존재합니다. 필드 주입 필드 주입 방법은 말 그대로 필드 위에 @Autowrite같은 의존성 ..
SOLID는 객체지향 원칙으로 SRP, OCP, LSP, ISP, DIP의 앞자리를 하나씩 부르는것을 말한다. 생각보다 원칙을 지키면서 코드를 작성하는 것은 쉽지 않고, 설령 원칙을 지키면서 코드를 작성할 수 는 있지만, 원칙을 지키기다 보면 인터페이스나 클래스를 추가하게되 오히려 위 원칙을 지키지 않는 것이 훨씬 더 좋은 상황이 발생할 수 도 있다. (사람바이사람, 상황바이상황) 따라서 상황에 맞춰서 SOLID원칙을 지키면서 할지 아니면 그냥 구현으로 할지 결정을 해야한다. 그러면 이제 SOLID를 하나씩 살펴보면서 어떻게 사용될지 생각해보자. SRP : 단일 책임 원칙 이 원칙은 하나의 클래스에는 단 하나의 행동만 가져야 된다는 원칙이다. 오해하면 안되는게 절대로 하나의 기능만 있어야 된다는 뜻은 절..
sudo 명령어 : root권한 설정 할 수 있는 권한을 사용할 수 있음 여기서 최고 권리란 root 권리를 뜻합니다. 리눅스 계열의 OS는 최상위에 root라는 유저가 존재합니다. root는 다음과 같은 일들을 한다고 합니다. ip 설정, 네트워크 작업, 웹서버, 인증서 설치, rebooting, halt 등 이들의 공통점은 일반 사용자가 사용하면 위험하다는 것들이 특징입니다. 이 밑은 올리는게 어렵기 때문에 이미지는 올리지 않습니다. chown : 파일의 소유자 바꾸기 chown user : group target 누군가의 권한을 뺏거나 그렇기 때문에 sudo를 필요하다. find 명령어 : targer을 찾아준다. find 경로 조건 target top 명령어 : cpu 사용률,메모리등을 알려준다...
ln 명령어 : 파일에 링크를 만들어주는 명령어. 이 명령어를 이해하려면 리눅스 파일 시스템에 대해 이해되야 되지만, 그것 까지 할려면 귀찮기 때문에 그냥 소개정도만 작성할려 한다. 왜냐하면 정리할 명령어가 생각보다 많기 때문이다. link 방식에는 hard 방식과 soft방식으로 구분되어 있다. hard방식은 말 그 대로 물리적인 링크를 만들어주는것에 있다. 생성하는 방식은 다음과 같다. ln ./temp3.java ./temp.java 이것을 해석하면 현재 페이지에서 temp3.java를 temp.java로 링크를 만든다는 뜻이 됩니다. 그러면 확인해봅시다. 결과는 다음처럼 등장합니다. 13821726 -rw-r--r-- 2 사용자 staff 106 9 5 00:34 temp.java 13821726..
명령어 mkdir : 디렉토리 생성 - mkdir temp cd : change directory 디렉토리 변경 최상위: / /home /home/guest / : 절대 위치 기준 ./ : 현재 위치 기준 ../ : 현재 위치 상위 ~/ : Home 위치 기준 pwd : 현재 경로를 확인할 수 있다. 현재 위치 : /Users/(개인정보)/temp 이를 토대로 cd 명령어를 살펴보자. cd는 change directory의 약자로 디렉토리를 변경시키는 것을 뜻한다. ls : 어떤 파일이 존재하는지 알려준다. ls -l : 구체적으로 ls -a : 숨겨진 파일 . , ls -i 파일 링크 표시 toutch 파일명 : 빈파일 만들기 나는 java 개발자이기 때문에 java로 파일을 만들어 봤다. 앞에 이상한..
LocalDateTime은 LocalDate와 LocalTime두 개를 합친 클래스입니다. 이들은 모두 java 8에 처음 등장하였습니다. 그런데 이상합니다. 자바 릴리즈 노트에 따르면 JDK Releases The release information on this page covers the Java SE releases that were widely distributed or significant to the development of Java. It does not cover patch releases or other one-off releases. java.com 2014-03-18 Major 8 LTS Documentation, JSR 337, Configurations 자바 8은 2014년 3..
AOP란 Aspect Object Programming의 약자로 관점 지향 프로그래밍이라고 한다. 객체 지향 프로그래밍의 보완성으로 나온 프로그래밍방식이라합니다. 어떻게 보면 객체 지향의 상위 호완이라 생각할 수 있겠지만, 그거는 설명하기 귀찮기때문에 넘어가자. 여기에 서로 다른 클래스가 존재한다. 3개의 클래스안에는 공통적인 기능이 존재한다. 공통적인 기능이 존재해도 3개의 클래스 모두 같은 기능을 추가해야한다. 물론, 리펙토링을 통해 이것을 처리할 수 있겠지만, 애초에 리펙토링 자체도 코드 한줄을 입력해야 되는 것이기 때문에 어떻게 보면 3개의 기능을 추가한다는 건 다르지 않는다. 그러면 관점을 조금만 바꿔서 생각해보자. 만약에 클래스가 시작할때, 클래스가 종료될때 로그를 찍히게 만들 수 있게 한다면..
스프링에서는 다양한 방법으로 DI와 IOC(Injection Of Controller) 를 지원한다. 근데 이들이 어떤것이 존재하는지 알 필요가 있을까? 내 생각에는 종류를 아는 것도 중요하지만, 용어의 뜻부터 아는 것도 중요하다고 생각이 든다. 먼저 DI는 dependency Injection의 약자로 의존성 역전이 되었다는 의미라 할 수 있다. 여기서 의존성이란 존재함을 의미한다. 일반적으로 의존하고 있다는의미는 마치 부모가 자식을 낳는 듯한 느낌처럼 자식이 탄생하기 위해서는 부모가 반드시 있어야 된다는 뜻이다. 이것을 코드화 시켜보자. public class Parents { public void birth() { Child child = new Child(); } } 부모가 birth라는 메서드를..
최근에 스터디에서 쿠버네티스를 하게 되었다. 그 과정에서 15단계로 배우는 도커와 쿠버네티스를 공부하게 되었다. 그래서 이를 바탕으로 작성하려 한다. 이 책에 나와 있는 최대한의 정보를 내 나름대로 가공해서 전달할 예정이다. 그런 과정에서 이해하기 힘든 표현이 존재할 수 도 있겠지만, 나에게 그딴건 중요하지 않는다. 왜냐하면 남들이 어떻게 이해했냐가 중요한것이 아니라 내가 쿠버네티스를 이해하는 것이 중요하다고 생각하기 때문이다. 그래서 모든 내용들을 내가 궁금한 것 으로 채울 예정이다. 쿠버네티스란? 쿠버네티스는 컨테이너화된 애플리케이션을 효율적으로 배포하고 운영하기 위해 설계된 오픈 소스 플랫폼이다. 이라고 하는데 솔직히 컨테이너가 뭔지 모르겠다. 이에 대한 내용은 나중에 2장에서 설명할 것이지만 내 ..
드디어 프록시를 배운다. 프록시는 중재자다. 이 장에서는 프락시 기능에 대한 특별한 지원, 그리고 프락시 서버를 사용할 때 보게 될 몇 가지 교묘한 동작을 포함하여 HTTP 프락시 서버의 모든 것에 대해 이야기 한다고 한다. 다음과 같은 것을 학습한다고 한다. - HTTP 프락시와 웹 게이트웨이를 비교하고 HTTP 프락시가 어떻게 배치되는지 그림으로 보여주면서 설명한다. - 몇 가지 유용한 활용방법을 보여준다. - 프락시가 실제 네트워크에 어떻게 배치되어 있는지 그리고 트래픽이 어떻게 프락시 서버에 가게 되는지 설명한다. - 브라우저에서 프락시를 사용하려면 어떻게 설정해야 하는지 보여준다. - HTTP 프락시 요청이 서버 요청과 어떻게 다른지, 그리고 프락시가 어떻게 브라우저의 동작을 미묘하게 바꾸는지 ..
Unified Modeling Language의 약자로 객체들간의 관계를 표현하는데 사용한다고 한다. 대충 UML은 이렇게 생겼다. 이런 그림을 보면 개발하는데 편할거라 생각이 든다. 물론 UML자체는 의사소통의 도구이기 때문에 개발의 용의성과는 거리가 멀다고한다. 그렇다고는 하지만 이렇게 UML을 그려놓으면 핵심을 파악 할 수 있기 때문에 좋다고 생각이 든다. 이곳에서는 짤막하게 UML에 대해 설명할 예정이다. 다음과 같은 코드가 있다고 해보자. * 아래 코드는 자바로 배우는 리펙토링 입문에 있는 코드입니다. interface Executable { abstract void execute(); } abstract class ParentClass { Something _fild1; static int F..