반응형

플러터 3.3.8로 개발합니다.

플러터로 요즘 IT를 만들기로 했었다.

기본적인 프로젝트 세팅을 끝났고, 이제 메인 페이지를 만들 차례이다.

메인 페이지는 가볍게 탭뷰로 가볼 것이고, 탭 뷰는 일단 AOS와 IOS만 탭 리스트로 담을 것이다. (나중에 추가할 계획)

포스팅을 하면서 플러터 기본 설명까지 겸할까 고민해봤는데, 일단 나도 공부할 겸 아는 것만 최대한 써보도록 해보겠다.

플러터는 위젯들의 부모 자식 관계로 구성되어 있다.

(내 생각엔...)가장 중요한 위젯에는 StatelessWidget과 StatefulWidget이 있는데, 영어를 잘하고 응용력이 뛰어나면 알겠지만 액티비티(안드로이드 개발을 했어서 앱 페이지를 액티비티라고 표현하겠다.)의 상태에 관한 위젯이다.

StatelessWidget은 정적 액티비티를 위한 위젯이며 성능이 상당히 좋다. 다만 인터렉션(버튼, 텍스트 박스 등)이 없다.

StatefulWidget은 그 반대라 할 수 있다 대부분의 액티비티가 이 위젯이라 보면 되겠다.

일단 프로젝트 생성했을 때 만들어졌던 샘플 코드를 싹 다 지워버리자. 구글 형들의 선행은 사실 필요가 없다.

주석들도 다 없어지고 아주 깨끗한 메인 다트가 되었다. 역시 사람이나 코드나 꾸미면 보기 좋아진다.

그런의미에서 vscode 코드 매니징 꿀팁을 방출하도록 하겠다.

코드 포매팅 단축키를 지정하여 다트에 맞게 자동 포맷을 할 수 있다.

파일 > 기본 설정 > 바로가기 키 > 문서 서식

원하는 키를 바인딩하여 사용해주면 알아서 포매팅이 된다. 굿.

메인 다트에서 MyApp 클래스가 뭔지에 대해 궁금할 수 있다. 뭐냐면 이 프로젝트의 루트 위젯이라고 생각하면 된다.

루트 위젯은 지금 build 메소드에서 MaterialApp 메소드를 리턴하고 있는데, MaterialApp이 UI를 그려주는 메소드이기 때문에 MyApp 클래스 자체가 Stateful한 것은 아니므로 StatelessWidget을 상속받는다.

따라서 MaterialApp의 프로퍼티 중 하나인 home에서 빨간 줄이 그어져 있기 때문에 우리는 MainTabPage를 만들어 주어야한다.

lib 폴더 내부의 폴더 트리 구조는 정말 개발자 마다 제각각이기 때문에 나도 어디서 주워먹은 트리구조를 사용하도록 하겠다.

페이지 파일을 만들어주고 클래스 까지 만들어 준 다음 임포트를 메인 다트 파일에서 해준다면 빨간줄이 사라지는 것을 확인할 수 있다. 

별로 진행한 것도 없는데 글이 참 길어지는데 더 쓸지말지 고민된다. 너무 진도가 안나갔으니 더 써보겠읍니다.

메인 탭 페이지는 bottomNavigationBar가 핵심 위젯이라 보면 되겠다.

일단 대분류 위젯으로 탭으로 조작을 하기 때문에 StatefulWidget을 상속 받아준다.

State는 뭔가요? createState() => _MainTabPage(); 뭔 개소린가요?;; 라고 할 수 있겠다.

일단 () => 이건 화살표함수라고 하는데 기본적으로 함수의 형태는

type name (args){

~some code~

}

의 형태인데 이 것을 type name (args) => ~some code ~로 줄여주는 것이다. 간단 명료하다. 다만, 한 줄로 줄이는 것이기에 한 줄 메소드만 화살표 함수를 사용할 수 있다.

그리고 State는 뭘까  우리는 메인 탭 페이지를 Stateful하게 사용할 것이기 때문에 State 즉, 데이터에 대한 정의를 해주어야 한다. 플러터에서 State란 데이터를 명시한다는 것을 명심하자 ㅎㅎ

흠.. 탭 페이지는 다음 포스트에서 할까..?

반응형

'Flutter' 카테고리의 다른 글

Flutter 프로젝트 만들기 - 3  (0) 2022.11.13
Flutter 프로젝트 만들기 - 1  (0) 2022.11.13
Flutter vs React Native  (0) 2022.10.02
반응형

플러터로 프로젝트를 시작해보자

간단하게 앱 컨텐츠로 개발자 면접 정보 디스플레이 앱이고, 파이어 베이스에 연동하여 업데이트가 용이하도록 만들 생각이다.

메인 위젯은 탭 뷰와 리스트 뷰가 되겠고, 정보를 담는 메인 위젯은 마크다운 위젯이 될 것 같다.

이렇게 정리해보고 프로젝트를 시작해보자.

플러터는 aos, ios, 웹, 윈도우, 리눅스, 맥을 지원하기 때문에 환경 구성을 조금 해주어야한다.

따라서 우리에게 환경을 진단해줄 의사선생님인 flutter doctor가 필요하다.

의사 선생님을 호출하면 flutter 환경 구성에 대해 어떤 것이 부족한지 진단을 싹다 해주시는데, 이 부분은 뭐.. 검색들을 해보면서 잘 맞춰보자 

간단하게 안드로이드 스튜디오를 설치해서 sdk 매니저에서 설치하란거 설치하고, 비주얼 스튜디오에서 c++ 워크로드 설치하고 vs code 설치하고 플러터 sdk 설치하면 된다. 뭐 이정도만 해도.. 다 된다고 본다.

그 밖에 에뮬레이터를 연결하는 부분은 안드로이드 스튜디오에서 에뮬레이터를 입맛에 맞게 설치하고 vscode 에서 f1을 누른 뒤 select device를 검색한 후 거기서 에뮬레이터를 선택해주면 실행되고 나중에 플러터 개발을 하게되면 그 에뮬레이터에 반영이 되는 구조이다. 일단은 내가 윈도우에서 하고있어서 구글 폰밖에 못써봤다...ㅠ

각설하고, 환경 구성이 끝났다면 프로젝트를 생성해보자.

최신 개발자 면접 정보 앱 답게 요즘 IT 라는 앱을 만들 것이다.

flutter create recent_it를 입력해주고 아래 지시 대로 두 줄을 입력해준다.

아무래도 같이 설치되는 것이 많기 때문에 시간이 좀 오래 걸리는 느낌이다. 아님 내 엘지 그램이 똥컴이거나...

프로젝트가 생성되면 다음과 같은 프로젝트 트리가 생성되는데 중요한 것들에 대해 설명하도록 하겠다.

lib: 우리가 가장 많이 접근해야 하는 폴더로 메인 소스코드가 담기게 되며 lib의 메인 코드를 빌드하게 되면 android, ios, linux, macos, web, windows: 각각의 플랫폼에 관련된 코드가 담기게 된다. 

test: lib에서 개발한 flutter 코드를 테스트할 수 있는 공간이다.

pubspec.yaml: 외부 라이브러리 등 프로젝트에 대한 설정 파일이다. 

플젝을 생성하기만해도 위 사진과 같이 데모 앱을 만들어주신다. 역시 구글 형님들 잘쓰겠습니다.

구글 형님들의 친절을 고맙게 받아 요즘 IT를 잘 만들어 봅시다! 화이팅~!

반응형

'Flutter' 카테고리의 다른 글

Flutter 프로젝트 만들기 - 3  (0) 2022.11.13
Flutter 프로젝트 만들기 - 2  (0) 2022.11.13
Flutter vs React Native  (0) 2022.10.02
반응형

나는 안드로이드 개발은 해봤는데, 항상 문제점이 ios 앱은...? 이었다.

그러던 중 크로스 플랫폼에 대해 알아보게 되었고 크로스 플랫폼 개발에는 flutter, RN(React Native) 등이 있는데 언급한 두가지가 가장 유명한 것으로 확인했다.

그렇다면 나는 어떤 것을 사용해야 할까에 대한 조사를 해보았다.

언어

Flutter (Dart)

  • 객체지향언어이다.
    C문법을 따르고 있어 대부분의 개발자가 쉽게 배울 수 있다.
  • Flutter 개발에 최적화 되어있다.
  • Null Safety를 지원한다.

RN (JavaScript)

  • 많이들 쓴다.
  • npm으로 쉽게 패키지를 가져올 수 있다.
  • 커뮤니티가 크다.

러닝 커브

러닝커브는 한마디로 학습 난이도인데, 내 입장에선 자바스크립트의 장점인 많이들 쓴다...에서 막히므로 새로운 것을 도전하는게 나아보인다. 내가 생각했을 때 러닝커브라는 것은 성실함으로 무찌를 수 있기 때문에 이 섹션은 넘어가보자.

성능

공부하기 쉽고, 개발이 빠르다 이전에 가장 중요한 점은 성능이라 할 수 있다.

Flutter는 2d 기반 오픈소스 라이브러리인 skia 그래필 라이브러리와 C/C++ 엔진을 사용한다.

RN은 JS Bridge로 불리는 자바스크립트 런타임 환경을 기반으로 하며 페이스북에서 개발한 FLUX아키텍쳐를 사용한다.

정리하자면, Flutter가 좀 더 기계어에 가까운 언어를 사용하므로 성능이 높다.

테스트

RN은 통합 및 UI 수준의 테스트에 대한 공식 지원이 없다. 서드파티 도구를 이용해야하며 IOS 앱을 앱스토어에 자동으로 배포할 수 없다.

플러터는 공식적인 테스트 자동화를 지원한다.

결론

조금 비교할 만한 항목들이 더 있긴 하지만... 나는 더이상 비교할 필요가 없다고 느꼈다.

RN은 페이스북, 플러터는 구글 뭐 이런 문제가 아니라 성능이나 테스트 난이도 이 두가지에 초점을 맞췄기 때문에 플러터를 선택하기로 했다.

앞으로 크로스 플랫폼 앱을 플러터 기반으로 잘 만들어 보겠다.

반응형

'Flutter' 카테고리의 다른 글

Flutter 프로젝트 만들기 - 3  (0) 2022.11.13
Flutter 프로젝트 만들기 - 2  (0) 2022.11.13
Flutter 프로젝트 만들기 - 1  (0) 2022.11.13
반응형

아쉽게도 컴퓨터가 1대밖에 없으므로 마스터 노드밖에 띄울 수 없지만... 그래도 작성하도록 하겠다.

저장소 업데이트 및 필수 패키지 추가

sudo apt-get update

sudo apt-get install -y apt-transport-https ca-certificates curl

gpg key 세팅

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

k8s 저장소 추가

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

kubelet, kubeadm, kubectl 설치

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

쿠버네티스 서비스 등록 및 재시작

sudo systemctl daemon-reload
sudo systemctl restart kubelet

Control-plane 구성(master node only)

kubeadm init

이 부분에서 아마 아래와 같은 에러가 날 것이다.

[init] Using Kubernetes version: v1.25.2
[preflight] Running pre-flight checks
    [WARNING SystemVerification]: missing optional cgroups: blkio
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR CRI]: container runtime is not running: output: E1002 10:06:30.565908   17133 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2022-10-02T10:06:30+09:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

이때의 해결 방법은

sudo rm /etc/containerd/config.toml

sudo systemctl restart containerd

sudo kubeadm init

이렇게 해주면 에러가 사라진다.

그리고 만약 아래와 같은 에러가 난다면,

failed with error: Get "http://localhost:10248/healthz"

이렇게 해결해보자.

cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker


kubeadm reset

토큰 발행

위와 같은 에러들을 물리치고 init에 성공한다면 마스터 노드의 토큰을 얻을 수 있다.

kubeadm join 192.168.0.14:6443 --token triczh.7z1uwuwtxqygrt12 \
    --discovery-token-ca-cert-hash sha256:[KEY] 

권한 설정

모든 사용자가 kube명령어를 사용할 수 있게 하기 위해 설정한다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Pod network add on 설치(master only)

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

마스터 노드에서 노드 확인하기

(base) walter@walter:/etc/init.d$ kubectl get nodes -o wide
NAME     STATUS     ROLES           AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
walter   NotReady   control-plane   6m26s   v1.25.2   192.168.0.14   <none>        Ubuntu 22.04.1 LTS   5.15.0-48-generic   containerd://1.6.8

결론

아주 좋다. 워커 노드가 없어서 마스터에서만 설정했지만은... 결국은 마스터 노드의 토큰을 이용해서 워커노드에서 join을 하면 되는 형식이다.

굿굿

반응형

'MLops' 카테고리의 다른 글

Ubuntu에 Docker 설치  (0) 2022.10.01
쿠버네티스 개요  (0) 2022.10.01
반응형

저장소 설정

$ sudo apt-get update

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

도커 공식 GPG key 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Stable repository 설정

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker 엔진 설치

최신 버전의 Docker Engine 및 containerd를 설치한다.

  sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

설치 완료 후 제대로 설치되었는지 확인한다.

sudo docker version

Docekr 서비스 등록 및 실행

sudo systemctl enable docker
sudo systemctl start docker
반응형

'MLops' 카테고리의 다른 글

쿠버네티스 설치  (0) 2022.10.02
쿠버네티스 개요  (0) 2022.10.01
반응형

우분투 code에서 한글 입력이 불가능한 경우가 있다.

다른 곳에선 잘 되는데 code에서만 안될 경우 snap형식의 code를 설치한 경우 우분투의 입력기인 IBus와 충돌해 한영 변환이 불가능하다고 한다. 따라서 snap 형식의 설치되어 있는 code를 제거하고 deb파일을 다운로드 받아 파일 베이스로 설치하면 재설치된 code에서는 문제가 해결된다.

방법은 다음과 같다.

1. 설치된 snap 형식의 code를 제거해준다.

$ sudo snap remove code

2. 아래 사이트에서 .deb 형식의 code를 직접 다운로드 받는다.

 

Download Visual Studio Code - Mac, Linux, Windows

Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.

code.visualstudio.com

3. 다운로드 한 .deb파일을 아래와 같이 설치한다.

$ sudo dpkg -i [CODE_FILE_NAME].deb

 

반응형

'리눅스' 카테고리의 다른 글

E: Sub-process /usr/bin/dpkg returned an error code (2) 에러 해결 방법  (0) 2022.03.31
SSH 접속 오류 (ECDSA host key 에러) 해결법  (0) 2021.11.10
rar 압축 풀기  (0) 2021.03.25
scp 파일 전송  (0) 2021.03.25
purge vs remove  (0) 2021.02.16
반응형

쿠버네티스란?

명칭

쿠버네티스(Kubernetes)는 간단하게 Kube 또는 k8s라고 부르기도 한다.
k8s의 뜻은 kubernetes의 첫 글자인 k와 마지막 글자인 s 사이의 스펠링이 8개인 것을 반영한 이름이다.

정의

쿠버네티스를 정의하려면 컨테이너의 개념을 알아야 한다.
컨테이너

  • 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술

컨테이너를 다루는 도구는 컨테이너 런타임이라고 하는데, 가장 유명한 컨테이너 런타임 어플리케이션은 당연 도커(Docker)라고 할 수 있다.
본론으로 들어와서, 쿠버네티스를 정의하자면 컨테이너 런타임을 통해 컨테이너를 오케스트레이션하는 도구이다.

여기서, 오케스트레이션은 무엇일까?
오케스트 레이션

  • 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위

사용 이유

쿠버네티스의 정의는 결국 오케스트레이션이라고 할 수 있는데, 그래서 왜 사용하는지가 궁금할 수 있다. 우리는 멀쩡히 도커를 잘 사용하고 있기 때문이다.

단편적으로 예를 들면, 우리가 멀티 서버를 이용해 컨테이너 기반으로 서비스하려한다. 이때 각 서버의 컨테이너를 관리하기 위해서 도커만을 이용한다면... 각 서버에 접속하여 각 컨테이너의 설정을 해주고 등등 아주 복잡하다.

쿠버네티스를 이용한다면, 서버 클러스터링을 통해 각 서버의 리소스를 관리하여 어느 서버에 컨테이너를 할당할지, 컨테이너의 설정(리소스, 이미지 등)을 마스터 노드에서 관리하는 등의 관리를 쉽게 할 수 있다.

좀 더 어려운 느낌으로 사용 이유를 열거해보자.

  • 서비스 디스커버리와 로드 밸런싱 서비스는 IP주소 또는 DNS를 이용하여 노출시킬 수 있고, 트래픽에 따라 로드 밸런싱이 가능하다.
  • 스토리지 오케스트레이션 로컬 저장소, 공용 클라우드 등과 같이원하는 저장소 시스템을 자동으로 탑재할 수 있다.
  • 자동화된 빈 패킹(bin packing) 각 컨테이너가 필요로하는 리소스(CPU, RAM 등)을 지시하면 노드에 맞추어 핸들링 해준다.
  • 자동화된 복구 실패한 컨테이너를 다시 시작하고, 교체하고, 죽이는 작업을 통해 컨테이너를 자동으로 복구할 수 있다.
  • 시크릿과 구성 관리 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장할 수 있음.

쿠버네티스 용어

마스터: 쿠버네티스 노드를 제어하는 서버
노드: 테스크를 요청대로 수행하는 서버, 마스터도 노드의 일부
파드(Pod): 단일 노드에 배포된 하나 이상의 컨테이너 그룹. 파드에 있는 모든 컨테이너는 IP주소, IPC, 호스트 이름, 기타 리소스를 공유하며 파드는 기본 컨테이너에서 네트워크와 스토리지를 추상화함.
복제 컨트롤러: 클러스터에서 실행되어야하는 동일한 파드 사본의 개수를 제어
서비스: 파드에서 작업 정의를 분리함. SSH, Jupyter notebook등을 서비스로 설정할 수 있음.
Kubelet: 노드에 존재하며, 컨테이너 매니페스트를 읽고, 정의된 컨테이너가 시작되어 실행 중인지 확인하는 서비스.
kubectl: 쿠버네티스 명령어 ex) # kubectl get pod

반응형

'MLops' 카테고리의 다른 글

쿠버네티스 설치  (0) 2022.10.02
Ubuntu에 Docker 설치  (0) 2022.10.01
반응형

소스가 csv이거나 python 코딩을 하다가 dataframe 데이터가 산출될 때 이것을 테이블로 만들고 싶은 경우가 있을 수 있다.

처음에 pymysql로 db 객체 만들어서 conn에 넣어주는데 계속 컬럼 개수가 안맞다는 둥 에러가 났다. 구글 검색해보니 친절하신 분께서 답을 내주셔서 쉽게 진행할 수 있었다.

# pip install pymysql
# pip install sqlalchemy
import pymysql
from sqlalchemy import create_engine

# MySQL Connector using pymysql
pymysql.install_as_MySQLdb()
import MySQLdb

# {} 안에 해당하는 정보 넣기. {}는 지우기.
engine = create_engine("mysql+mysqldb://{User}:{Password}@{Host}:3306/{Database}}", encoding='utf-8')
conn = engine.connect()

# MySQL에 저장하기
# 변수명은 이전에 만든 데이터프레임 변수명
# name은 생성할 테이블명
# index=False, 인덱스 제외
match_info.to_sql(name='pcs3as_matches_info', con=engine, if_exists='append', index=False)

미리 테이블을 만들면 exist에러가 나니 주의하자. 자료형이나 기본키같은 옵션은 만들어진 테이블에서 업데이트 해야할 것 같다.

출처: https://velog.io/@haenyy3153/DataFrame-to-MySQL

반응형

'MySQL' 카테고리의 다른 글

MySQL 외부접속 허용하기  (0) 2022.09.12
Ubuntu MySQL 설치하기  (0) 2022.09.12
mysql connection pool  (0) 2021.08.31
MySQL 디비 커넥트 지속시키기  (0) 2021.07.13

+ Recent posts