본문 바로가기

분류 전체보기

(84)
쿠버네티스 인 액션 - 1장 쿠버네티스 소개 쿠버네티스는 서버 배포를 자동으로 스케줄링하고 구성, 관리, 장애 처리를 포함하는 자동화에 대한 요구로 개발되었다. 대규모의 클라우드 환경에서 실행되는 서비스들을 추상화 시킬 수 있다. 쿠버네티스가 필요한 이유 모놀리스 애플리케이션에서 마이크로서비스로 전환 마이크로 서비스 배포의 어려움: 배포 조합의 수뿐만 아니라 구성 요소 간의 상호 종속성 수가 훨씬 더 많아지므로 배포 관련 결정이 점점 어려워진다. 실행호출을 디버그하고 추적하기 어렵다.(msa간 로그로 해결한다.) 서비스간의 라이브러리 버전 차이에서 오는 관리의 어려움 → 쿠버네티스가 관리해준다. 애플리케이션에 일관된 환경제공 운영체제, 라이브러리, 시스템 구성, 네트워킹 환경, 기타 모든 것이 동일한 환경을 만들 수 있다면 이상적일 것이다. 지속적..
ISTIO에 대한 간략한 정리 service-a, service-b 사이에 연결해줌 ( k8s, nomad, console에서 실행될 수 있음) 서로 통신하는 방법을 제어할 수 있어야함 1.로드 밸런싱 기능 -> 서비스 a와 서비스 b간의 2. 데이터 제어 기능 3. 접근 제어 4. 가시성 - 로그나 그래프 -> 모든 요소가 제대로 작동하는지 ( 모든 기능은 무료) -- Pilot - a/b테스팅, 카나리 배포, 제한시간 초과를 제어 Citadel - 서비스 메쉬의 보안 측면 - CA를 내장, 필요에 따라 서비스 A와 B의 통신 mixer - 모든 사이드카와 istio가 작동하는 방식을 중앙 집중식으로 관리하는 지점, 텔레메트리와 함께 사용(가시성, 그래프를 pilot 단계에서 표시), mixer는 장착이 기능(다른기능 추가가능), ..
mvc2편 및 고급편 이제 인프런 졸업할래.. 다음 강의는 udemy- The Git & Github Bootcamp 를 들어보자 (2022년 2월 20일 기록) git의 내부동작원리를 이해??
프록시를 사용할때 자주보는 문제 김영한 강의듣고 메모 프록시를 타도록 의도했지만, 자기 내부 함수를 호출하면 → 해당 함수는 프록시를 거치지않음 자신을 호출하는 경우 → 프록시를 거치지 않음 외부에서 호출할때만 프록시를 거쳐서 실행된다. 이런 문제를 해결하는 방법? → aspectj를 사용하면 이런 문제가 발생하지 않음 → 코드에 직접 박히기 떄문( aspectj는 실제로 코드 주입) 자기 자신을 주입하는 것? → setter 주입(생성/주입 단계가 분리되어 있어서, setter 주입을 하면좋다...) → 지연 조회 → application context로 자신을 호출함, 또는 ObjectProvider 구조 변경 → (가장 권장됨) 호출되는 클래스 분리(내부함수호출을 하지않음) ( 다양한 방법이 있을 수 있음) client →1 → ..
프록시 데코레이터 - 김영한 스프링 핵심 원리 고급편을 듣고 느낀점들 RequestMapping, ResponseBody는 인터페이스에서 사용할 수 있음. ( 컨트롤러를 인터페이스화 시켜서 사용하기) 그러나 Controller, RestController는 인터페이스에서 사용할 수 없음. config를 component scan의 대상이 안되도록 하기 위해서 Import 애노테이션 → config class 정의 SpringBootApplication에 scanBasePackage를 설정하여 config를 스캔하지 않도록 한다. 수동등록, 자동등록 → 둘다 많이 사용함 원본 코드를 전혀 수정하지 않고, 부가 기능을 추가할 수 있을까? ⇒ 프록시, 또는 AOP 프록시 요청을 앞서 처리해주는 레이어? 네트워크 프록시, 프록시..
템플릿 메서드 패턴과 전략, 콜백 스프링에서 자주 사용되는 패턴들 김영한 스프링 핵심 원리 고급편을 듣고 느낀점들 핵심 기능 → 객체가 제공하는 고유의 기능 부가 기능 → 로그 추적, 트랜잭션 기능. 핵심 기능과 함께 사용됨 이 모든 것들의 핵심은... → 변하는 것과 변하지 않는 것의 분리 → 변하지 않는 코드는 중복될 수 있는데, 한번만 작성될 수 있도록 하자 좋은 설계는 변경이 일어날 때 자연스럽게 드러난다. 템플릿 메서드 패턴 프레임워크가 만들어놓은 abstact class에서 함수하나만을 구현하면 되는 경우 주로 템플릿 메서드 패턴이라고 한다. 변하는 부분 → 템플릿 메서드 나머지 부분 → 인터페이스, 또는 abstract class에 장착 상속 클래스를 사용하거나, 익명 내부 클래스를 사용한다. (또는 SAM인 경우, 람다를 ..
Flutter 기본 레이아웃 종류 Row, Column children을 사용하여, 가로, 세로 배치 Container, SizedBox Container, 박스배치 (박스에 색칠을 한다던지, 크기를 설정하는 용도) ScrollView 스크롤뷰, 문자그대로 스크롤할 수 있음 ListView와 GridView는 ScrollView의 일종 ListView List로 항목들을 보여준다. Scroll을 상속받아서 작성되었기 때문에, 범위를 벗어나면 Scroll할 수 있음 GridView Grid로 m x n 의 화면 구성을 작성할 수 있다. PageView 슬라이드로 화면전환할 수 있음(Appbar와 BotoomNavigationBar는 변경되지 않는다.) BottomNaviagionBar 하단에 위치된 레이아웃, NavigationBar
Flutter StatelessWidget과 StatefulWidget Flutter에서 기본생성해주는 예제를 살펴보면 버튼 클릭시 카운트를 올려주는 예제로 되어있다. 버튼을 stateless widget이고, 카운트가 올라가는 화면은 statefulWidget이다. 플러터 개발자는 그런 차이를 보여주려고 한 것으로 보인다. StatefulWidget은 state 객체를 가진다. 그리고 state가 수정되면 화면을 다시 렌더링한다. react와 비슷하게 setState로 화면에 그릴 값들을 수정할 수 있다. StateelssWidget은 한번 화면을 그린후, 다시 렌더링하지 않는다.
dart 타입 검사 연산자/ 조건 표현식(null check) as: 형변환( 상위타입으로 변환가능) is: 객체가 특정타입이면 true, 상속관계(is-a)도 반영 is!: 객체가 특정타입이면 false 조건 표현식(null check) if( person != null){ return person.name; } else return null; // 단순화 person?.name 엘비스 연산자 if( person != null){ return person.name; } else return 'no name'; // 단순화 person.name ?? 'no name'
Flutter Dart 함수 다트는 객체지향언어 다트 함수의 특징 - 변수가 함수를 참조할 수 있음 - 함수의 인자로 함수를 전달할 수 있음 - 이름있는 선택 매개변수 - 위치적 선택 매개 변수 - 익명 함수 및 람다 변수가 함수를 참조할 수 있음 var name = getName(){} 함수의 인자로 함수를 전달할 수 있음 getA(getB(), getC()){} 이름있는 선택 매개변수 String getter(String a, {String b, String c ='exmaple'}) { // b와 c를 선택매개변수로 지정, c는 default 값이 있음 return ''; } main(){ getter('a', b: 'b'); getter('a', b: 'b', c: 'c'); } 위치적 선택 매개 변수 String gette..