Jpa를 공부하다보면 제일 먼저 Entity를 만나볼 수 있습니다. 이걸 보고 있으면 객체이면서 테이블 같은 오묘한 기분을 느낄 수 있습니다. 이는 사실 JPA의 특징의 영속성과 큰 연관이 있습니다. 영속성 영속성이라는 것은 한 객체가 생성 작업이 종료 되었음에도 지속적으로 존재하는 상태라는 것을 말합니다. 물론 억지로 close같은 걸 이용하거나 프로그램을 강제로 종료 시킨다면 소멸 되겠지만 그렇지 않으면 웬만하면 죽지 않습니다. 그게 바로 영속성입니다. 근데 어째서 JPA에서는 영속성이라는 용어를 사용하면서 관리를 하는 걸까요? 그건 바로 객체를 이용해서 테이블을 생성하고 이용하고 싶기 때문이라고 생각합니다. 물론 마이바티스 처럼 자바에서 쿼리를 작성해서 DB에 연동시키는 게 더 좋을거라 생각할지도 ..
maven 내용을 복사한뒤 gradle에 복사하면 gradle로 변환이 되서 반영됨 - 현재 라이브러리는 gson으로 되었지만 다른 것도 가능 - 안되는 것도 있을 수 있겠지만 지금까지는 모두 가능했음 - 현재 사용하는 버전은 7.1 distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip - 다른 버전은 확인안해봐서 모르겠음 - 그래도 상위 버전은 되겠지? - ide는 인텔리제이 gradle내용을 복사한뒤 pom.xml에 붙여넣기를 하는건 의미가 없음 반영되지 않음
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장에서 설명할 것이지만 내 ..