2022-01-04

1/4 도커 실습

- 도커를 다운로드

컨테이너 가상화기술.

도커 실행후

docker info 로 확인

docker ps -a 

docker pull 이미지명

레지스트리로부터 이미지를 다운받는다. 

docker container rm 컨테이너명

run 명령어를 통해서 컨테이너 생성및 실행 동시에 할 수 있음. 

- 옵션

- p 포트포워딩. 호스트 os를 컨테이너의 os 와 연결시켜주는 통로를 뚫는다

--name 옵션지정하면 원하는 이름으로가능

-d detached mode 데몬으로 백그라운드 실행

-e environment 기타 환경변수 넣을 수 있다. 

 




2022-01-03

1/3 sleuth 를 이용하여 msa 통신을 추적하기

 


- msa 서비스는 하나의 서비스가 다른 여러 서비스들을 호출하고. 또 그것이 비동기적으로 다른스레드로 요청되기 때문에 하나의 트랜잭션을 추적하기에 어려움이 있다

- 이것을 도와주는 것이 sleuth 라는 라이브러리

- 하나의 요청 단위를 trace Id로, 스레드별로 id를 두개 

traceId는 하나의 요청단위에 있어서 유니크하며 이것은 서비스간 소통을 할때에도 동일하게 유지된다 (신기하군. AOP 로 구현할수있을것같음 )

위 이미지에서보듯이 스레드가 달라졌다 - feignClient 이용한 비동기요청

그러나 traceId 는 유지된다. 


동일하게 - 호출된쪽의서비스에서도 해당 traceId를 유지하고있는 것을 확인할 수 있다. 

이것을 zipkin서버와 연동하여 시각화 하면 더 좋다고는 하는데!!zipkin자체서버를 또 만들어야한다는 부담은 있다.. sleuth 만 넣어줘도. 좋을듯??

근데 - 결국에는 로그를 계속 심어줘야해서.... -> 이부분 어짜피 AOP로 해야되니까 걍 sleuth 안쓰고 다 AOP직접 구현해서 할수있을것도 같네...

2022-01-02

1/2 mariadb 설치 및 패스워드 변경

 1. homebrew install mariadb

2 . 초기의 경우 공백의 패스워드로 접근 가능

mysql.server start 

한후

mysql -u root -p 

로 접속하고 그냥 패스워드는 앤터

3. 패스워드 재설정

set password for 'root'@'localhost' = password('새로운 패스워드');

4. select host, user, authentication_string from user;

하면 패스워드가 암호화되어 들어가있는것확인할수있음!



1/2 카프카 설치 및 실행

 1. 아파치 홈페이지 혹은 homebrew 이용하여 카프카 설치

2. 주키퍼 실행( 브로커들을 관리하고, 리더 브로커를 선출하는 역할)

- 이전에, localhost 가 listen 할수있도록 config 파일을 수정한다. 

3. 카프카 서버 실행

4. 카프카 토픽생성 


5. 프로듀서 실행
6. 컨슈머 실행


- 카프카의 장점:

다양한 데이터 소스가 있을수있다. 몽고 DB같은 형식, RDB형식등등.. 프로듀서도 다양하고 컨슈머도 다양하다. 프로듀서 입장에서 일일이 이 컨슈머의 타입에 맞추어서 convert 하기란 이만저만 복잡한것이 아니다. 일일이 컨버터를 구현하고 커스터마이징해야하므로

- 이때 카프카와 같은 미들웨어를 사용하면 . 보내는 쪽도 받는쪽도 커스터마이징 필요없이 카프카만 상대하면 된다. !! 

2022-01-01

12/31 rabbitMQ 윈도우 설치

 

1.  https://erlang.org/downloads

다운로드

2. https://rabbitmq.com/install-windows.html#installer

서버 버전 다운로드. 윈도우 인스톨러 이용

3. 윈도우 환경변수 > 시스템 환경변수 >  Path 에 각각 추가




4. ELRANG_HOME 시스템 환경변수 추가




5. 윈도우 커맨드 창 관리자 권한으로 실행 후

rabbitmq-plugins enable rabbitmq_management 

명령어 실행으로 플러그인 설치


6. 서비스 에서 rabbitMQ설치확인


--------------------------

23.1 버전의 erlang은 현재 최신버전의 rabbitMQ와 호환되지않는 문제발생하여
최신버전인 24.2로 다시 다운로드 하였다.
rabbitmq-server로 시작!!


일단 로그인의 경우 guest/guest로 가능하다.



2021-12-31

12/31 토큰인증

 1. 토큰을 api요청시마다 확인하는건 너무 과부하.. 따라서 한번 인증되면 - 캐싱해둔다. 이때는 RDB같은 file 혹은 디스크 IO기반의 저장소보다. 메모리기반의 저장소(redis, memcached)를 사용한다

2. MSA서비스에서의 인증 / 인가 방식

1) 모든 서비스api가 공유하는 중앙저장소 사용 : redis, memcached 등

2) api gateway 에서 직접 인증/인가 구현

3) api gateway 와 auth service협력하여 인증/인가 구현

3. 토큰인증

# 필요성?

- 모바일 app의 경우, web과 달리 cookie jar기능이 없다. 따라서 세션/쿠키 방식의 전통적인 인증인가가 불가능하다.

- 모바일 app의 경우 , json으로 데이터를 주고받는데. 웹은 html로 응답하므로 불일치가 발생한다. 

=> json방식 토큰인증을 사용하여 인증/인가를 일원화할수있다는 편리함? 장점이 있다.


# 취약점?

- 토큰인증이든 쿠키인증이든.. 탈취위험성에는 쌤쌤.

그럼 탈취되었다고 가정하고. 토큰의 경우에는 서버쪽에서 이 토큰의 유효기간을 끊어낼방법이 없다고한다 ? -> 그래서 이걸 해결하려고 공유 저장소를 사용한다 

-> 근데 이러면 결국 stateless하게 인증인가한다는 장점을 버리게 되는거 아니냐?라는 . 

결국엔 장단점이 있고... 아아 좀더 공부하자!!!

인증인가가 심오하구나. 쉽게쉽게 스프링시큐리티 붙이면 되지머~ 하고 볼게 아니다.!!!

2021-12-30

12/30 super() 호출

 - spring cloud gateway 에서 , 커스텀 필터를 만들때 주의사항

- AbstractGatewayFilterFactory 를 상속하여 apply 메서드를 구현한다

단. 상속하는 부모의 생성자는 제네릭 파라메터로 들어가는 C타입을 부르는 생성자 뿐이다.

그러나 자바에서는 생성자를 명시적으로 작성해주지 않았을때 기본생성자만 만들어주고, 만든 생성자가 있으면 기본생성자를 불러주지 않는다.

- 내가 CustomFilter 를 만들었을때 - 이 부모의 생성자를 불러주지 않아서 오류가 발생했다. 

- 명시적으로 부모의 생성자를 호출하든지 아니면 부모에 기본생성자를 추가해야 함 (당연히 이건 내가 클라이언트로서 사용하는거니까 불가능..) 

현재 AbstractGatewayFilterFactory의 기본생성자또한 자기 부모의 super를 호출하고 있음. 여기에 넘겨줄 C타입의 class 가 필요. 



0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...