728x90

(이해는 다 못했지만 ppt보면서 받아적어봄..)

 

 

 

모듈러 블록체인 modular Blockchain

노드의 합의, 실행, 데이터 기능을 분리 

 

합의  Gasper, Narwhal

safe permissionless consensus

 

 

실행

- 오프체인(에서 실행하고 결과만 옾체인에 저장.)

-대체로 순차적 실행하지만 트랜잭션 병렬 실행 시도. EIP-2930 명시하는 방식. 트랜잭션이 충돌하는지 아닌지 확인할 수 있음, 

-파이프라인 ,

-FuelVM, 트랙엔진 개선하려는 시도. 

 

데이터

시간이 지나면서 노드 돌리는게 부담이 됨. 

1. 무상태 실행

기본적으로 잔액확인, 즉 트랜잭션 검증해야함. 그상태 검증을 다 가져해야하는데 아예 보내는 사람이 같이 넘기면 어떨까? 내가 백원이상 가지고 있다는 증거를 넘기는. 전체 상태를 보지 않아도. 기존 머클트리의 역할. 

2. 온체인, 오프체인 선택 volition

3. 상태만기

필요한 데이터 쌓이는거 방지로 끊어주고 다시 시작

p2p네트워크 통해서는 1년내 데이터만 요청할 수 있게 하자 제안. 

4. 데이터 가용성 레이더 data availability layer

저장하는거 전문적으로 하는 체인에 하자. 

 

 

 

 

 

가장 큰 문제 저장공간 증가

굉장히 많은 I/O가 필요하고 너무 큰 디스크 필요. 

 

비탈릭의 아이디어. bitco

이더리움에 트랜잭션 저장하기에는 이더리움 너무 비싸 . 비트코인 캐시에 저장하는거 어떠냐. 

 

현재는 실행 - 데이터 저장 - 검증을 모두 하나의 이더리움 체인 내에서 처리하고 있다. 이를 모놀리틱 블록체인이라고 한다. 이로 인해 확장성 문제가 대두되고 있다.

모듈형 블록체인은 실행 / 데이터 저장 / 검증을 모두 분리해서 실행하는 체인을 의미한다. 해당 과정을 분리할 경우 탈중앙성과 보안 그리고 확장성 이 세가지 블록체인 트릴레마 문제를 해결할 수 있다.

출처: https://muritzy.tistory.com/3039 [Eddy Lab:티스토리]

 

(-> 여기 블로그 글이 정리 잘되어있다. )

 

 

동작

리드 솔로몬 부호.

-인코딩으로 뻥튀기

 

 

전파

-저장 분배. 증명을 통해 확인

 

데이터 저장을 요청하면 데이터를 리드솔로몬 인코딩한 조각으로 나누고 DA풀 노드들에게 분배 

DA 풀노드 는 조각을 저장했다는 증명을 생성

일정개수 이상 증명이 모이면 데이터를 저장했다고 알림

예) 오프체인 롤업 운영자가 블록 혹은 트랜잭션 ㄴ애용을 저장

회수

-원본을 

데이터가 ㄱ필요하면 DA라이트 노드가 DA풀노드들에게 조각을 요청

일정 애수 이상 조각이 모이면 디코딩하여 원본 데이터 복원 가능

나중에 롤업블록 내용을 확인가능 data availability데이터 가용성 오라클

 

 

 

데이터 가용성 레이어는 데이터를 해석하지 않고 저장만,

여러 블록체인이 데이터 가용성 레이어를 공유가능.

해당 블록체인과 관계된 데이터만 조회하는 기능

데이터를 저장/조회하고 신뢰도를 안려주는 API제공

DA라이트 노드는 애초에 데이터 인코딩이 잘못된 경우 사기 증명을 만들어야하고 노드들이 해당조각을 저장하는지 확인해야한다. 

 

 

polygon avail

2D 리드 솔로몬 부호 + kzg커미트먼트

현재 테스트넷 

벨리데이터 노드,DA풀노드 maticnet

 

celestia

머클트리 노드마다 자식노드 범위를 지정함. 

2D 리드 솔로몬 부호 + 네임스페이스 머클트리 NMT

코스모스 SDK로 구현

벨리데이터 노드

브리지 노드, 연결해주는 브릿지 역할 함. 

celestiaorg/optimint 코스모스 기반 옵티미스틱 롤업 샘플

 

 

 

기존 스토리지 블록체인과 유사, storj sia와 특히 비슷

차이점, 

스토리지 규모가 페타바이트 단위

파일 경로 단위로 접근 

복제 증명 강조

암호화로 파일보안

지속적 가용성 유지. 

 

 

ethereum에서는 어떻게 하고 있나.

롤업중심 로드맵과 데이터 샤딩(트랜잭션 실행할 데이터만 제공하는 역할)

롤업은 태랜잭션 calldata영역에 롤업 트랜잭션 내용을 줄여서 기록

과거 이스탄불 하드포크 때 calldata에 정보를 기록할 때 필요한 가스 하락.  ELP-2028

2022년 초 Danksharding제안 ,이더리움 연구자 이름임

ELP-4844는 calldata보다 17배 정도 가스가 저렴한 데이터 덩어리 blob추가 

2D리드 솔로몬 부호 +KZG커미트 먼트 

데이터 덩어리를 온체인 스마트 컨트랙트가 읽을 수 없어. 

 

 

<polygonZK>

폴리곤 방향성

 

폴리곤 

확장성 솔루션, 

디앱을 위해서. 근데 원하는게 다 다름. 

프로토콜이나 유저들이 원하는데로 사용할 수 있는

 

폴리곤 확장성 솔루션 

 

ethereum

polygon Zero

polygon pos

avail - 데이터 가용성을위한 솔루션

miden

 

폴리곤 더이상 사이드체인이라 불리기 애매하다 

확장성 솔루션 scalability Aggregator

 

 

polygon 

 

ZKrollup

스타크, 스나크..

처음으로 영지식증명을 블록체인에 증명

 

polygon nightfall 

polygon ID 자신 정보를 공개하지 않고 자신특성 증명할 수 있는 서비스. 

 

 

Polygon Hermez 2.0

zkEVM 

하나의 디앱은 하나의 네트워크밖에 못올림. 

 

브릿지 사고, 

네트워크가 분리

 

디앱별로 분리된다고 생각하면 지금 겪고 있는ㄴ 문제가 극단화.

 

zk란 프로폴을 만들 수 밖에 없는 기능적인

증명을 만드는 것. 제대로 동작했는지 확인하는 체크리스트로 함. 이걸 증명증거로 만들어서 스마트 컨트렉트에 보냄. 

프라이빗키맞는지 

잔액이 100보다 많은지

보낸금액이랑 똑같은지. 

 

 

nft는 잔액이 별로 안중요함. 새롭게 발행된 nft가 내 주소에 잘 있는지 잘 맵핑되어있는지 확인. 

체크리스트 만들면 못바꿈. 

네트워크를 새로 만들어야함. 

증명을 만드는 시스템때문에 하나의 디앱별로 하나의 네트워크밖에 못올림. 

 

 

이더리움 네트워크처럼 여러개 하고 싶어서 ZKrollup에서 EVM으로 넘어오고 있음 

zk evm은 연산이 실행됐는지만 확인함. 

 

 

 

 

모든 상태 정보들을 우리가 만든 폴리곤 솔루션에 저장하면 좀 더 수수료가 저렴해라고 주장하고 있음

폴리곤이 모듈로 블록체인으로 바꾸면서 연산, 저장은 서로 상호작용해서 저장할 수 있게 한다. 

 

 

polygon Miden

general purpose, stark

 

 

evm이랑 vm이랑 달라. 

 

스나카가 더 개발자 친환경적. 

스나크를 선택한 프로젝트는 효율성. 

스페셜 라이즈드- 각 기능별로 따로 만드는..

 

 

 

 

polygon zero

증명을 만드는 코드안에 증명을 검증하는 코드도 같이 만듦

layer1 - 연산할 때 마다 비용든다. 

폴리곤 제로는 증명시스템을 만든다. 

두번째 첫번째 프로펄이 올바르다는 내용

세번째, 첫번째 두번째 트랜잭션을 ... 확인 

재귀적인 시스ㅁ템 연ㅇ루. 

 

 

polygon nightfall

기업내에서 거래도 있나봐

 

기업이 블록체인 기술가져와서 만든다 할때 어느정도 속이나는게 

이더리움처럼 기업용에서 요구하

 

 

블록체인에서 영지식증명 쓸때 

1. 개인정보 보호

2. 유효성 검증

 

위해. 

 

Layer2에서 만든 건 다 layer1에 저장되고 있음

 

 

https://muritzy.tistory.com/3039

 

이더리움의 구원자, 폴리곤(Polygon) 모듈러 블록체인?

Markets by TradingView " data-ke-type="html"> <>HTML 삽입 미리보기할 수 없는 소스 출처 : https://xangle.io/research/6267b8999d2628adb3128e9a?utm_source=ddengle&utm_medium=organic_community&utm_campa..

muritzy.tistory.com

 

https://blog.polygon.technology/polygon-avail-unlocking-the-modular-blockchain-future/

 

https://kr.beincrypto.com/learn-kr/%EC%98%B5%ED%8B%B0%EB%AF%B8%EC%A6%98optimism%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/

 

옵티미즘(Optimism)이란 무엇인가 - BeinCrypto Korea

옵티미즘 이더리움은 트랜잭션이 계산되는 레이어2를 사용한다. 이를 통해 비용을 절감할 수 있다. 하지만 그 다음에 트랜잭션 정보는 레이어1로 이동한다. 다시 말해 옵티미즘은 일반적인 이더

kr.beincrypto.com

https://polygon.technology/solutions/polygon-zero/

 

 

https://consensys.net/blog/developers/introduction-to-zk-snarks/

 

Introduction to zk-SNARKS | ConsenSys

An overview of zero-knowledge proofs and how to integrate zk-SNARKs into Ethereum.

consensys.net

 

 

 

 

 

 

 

 

728x90
728x90

https://webisfree.com/2020-02-17/[%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8]-%EA%B0%9D%EC%B2%B4%EB%A5%BC-%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B0%9D%EC%B2%B4%EB%A1%9C-%EB%B3%B5%EC%82%AC-clone%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95 

 

[자바스크립트] 객체를 새로운 객체로 복사 clone하는 방법

자바스크립트에서 객체를 복사, 복제(Clone)하는 방법에 대하여 알아봅니다.

webisfree.com

https://jung-story.tistory.com/118

 

DB (Master & Slave 개념 및 구조)

개요 소프트웨어를 개발하는데 가장중요한것은 DB를 설계하는 것이라고 생각합니다. 많은 소스를 보면서 DB구조가 Master & Slave로 되어있는것 을 볼 수 있었는데, 자세한 개념을 알아 보도록 하겠

jung-story.tistory.com

 

 

https://myinfrabox.tistory.com/20

 

[MySQL][Admin] Binary 로그 소개 및 특징

■ MySQL 바이너리 로그 ▶ 바이너리 로그란?? MySQL 서버에서 Create, Drop, Alter같은 DDL과 Insert, Update, Delete같은 DML을 통해 데이터베이스, 오브젝트, 데이터에 생성,수정,업데이트를 했을 시 그 변화된.

myinfrabox.tistory.com

 

parseInt("-10"); // -10

문자열 "-10"을 숫자로 변환하여 정수 음수 -10을 리턴합니다.

 

parseInt("10.9"); // 10

문자열 타입의 실수값은 소수점을 제거한 후, 정수값만 리턴합니다.

출처: https://hianna.tistory.com/386 [어제 오늘 내일:티스토리]

 

 

 

Array.prototype.slice()

시도해보기

slice() 메서드는 어떤 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환합니다. 원본 배열은 바뀌지 않습니다.

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// expected output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// expected output: Array ["camel", "duck"]

console.log(animals.slice());
// expected output: Array ["ant", "bison", "camel", "duck", "elephant"]

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

 

728x90
728x90

https://d2.naver.com/helloworld/59361

 

 

 

스타일 설명까지 읽었는데 

솔직히 다 이해가 가지는 않는다 다시 읽어봐야지...

728x90
728x90

 1. 브라우저 렌더링 과정

 

엔진마다 렌더링 조금씩 다름, 크롬 기준으로 볼거임

 

(브라우저의 주요 기능은 사용자가 선택한 자원(보통 html) 서버에 요청하고 브라우저에 표시하는 )

* DOM document object model 약자이며, 한글로는 "문서 객체 모델"이라고 부릅니다DOM 객체 지향 모델로써 구조화된 문서를 표현하는 방식

문서 파싱은 브라우저가 코드를 이해하고 사용할 있는 구조로 변환하는 것을 의미

 

태그가 노드객체로 변환되고

연관성 갖을 있도록 트리를 생성함 이게 바로 DOM트리임

최상위에는 document객체가 들어감

 

DOM tree 생성되고, CSS CSSOM tree생성됨

그리고 렌더링 엔진이 DOM트리와 CSSOM 트리 합쳐서 render tree렌더트리 생성

렌더트리는 화면에 표시될 모든 정보 포함하는 트리임

렌더트리가 생성된다음 layout이라는 과정 거침 (reflow라고도 )

뷰포트에 맞춰서 요소들의 정확한 위치랑 크기를 계산하는 과정임

계산하고 화면에 실제 픽셀로 변환해서 그리는 페인트 과정함

출처:  [10분 테코톡] ☕️ 체프의 브라우저 렌더링 https://www.youtube.com/watch?v=sJ14cWjrNis

 

 

사용자가 정보 업데이트 했을때는?

3가지 경우로 동작함

1. 레이아웃이 다시 발생하는 경우 크기 위치

2. 페인트부터 다시 발생되는 경우 -텍스트 이미지

3. 레어어의 합성만 다시 발생

 

2. virtual dom

 

 

 

 

출처:[10분 테코톡] 🥁 지그의 Virtual DOM https://www.youtube.com/watch?v=PN_WmsgbQCo&t=20s

문제는

변화가 발생할때마다 렌더트리가 다시 생성된다는 것이다.

이 과정을 다시 반복하게 됨.

게다가 최근에는 SPA, single page application(페이지를 변경하지 않고 동일한 페이지에서 조작

페이지를 서버가 아닌 브라우저에서 관리)을 많이 사용하면서 dom tree를 변경할 일이 많아졌음

 그래서 virtual dom이 등장했다.

출처:[10분 테코톡] 🥁 지그의 Virtual DOM https://www.youtube.com/watch?v=PN_WmsgbQCo&t=20s

가상돔에 생긴 변경사항을 반영해서 전체 real dom을 바꾸지 않아도 됨

 

이런 처린 실제 돔 아닌 메모리상에서 동작해서 훨씬 빠름

가상돔은 실제로 렌더링 되지 않아서 연산비용을 최소화할 수 있다. 

 

 

virtual dom이 하는 것은 

DOM fragment의 변화를 묶어서 적용한 다음

기존 DOM에 던져주는 과정을 자동화, 추상화해놓은 것이다. 

 

리액트가 가상돔을 이용하는 자바스크립트 라이브러리다. 

ui의 가상적인 표현을 메모리에 저장하고 reactDOM과 같은 라이브러리에 의해 

실제돔과 동기화하는 프로그램이다.

리액트는 JSX를 사용하는데, 각 컴포넌트에서 리턴되는 react element를 JSX문법으로 작성하는 것이다.

JSX는 자바스크립트 확장 문법이다.

바벨이 JSX를 React.createElement()호출로 컴파일한다. 컴파일하는 걸 보면 React elemet객체를 리턴하는 것을 볼 수 있다. 

React elements는 DOM요소의 가상 버전으로 가볍고 상태가지지 않고 불변성 유지한다. 

render에 의해서 실제 돔에 반영한다

 

 

 

 

 

 

https://www.youtube.com/watch?v=PN_WmsgbQCo&t=20s 

 

728x90
728x90

공식문서 참조함. 

git 메뉴얼_이소윤 사원.pdf
2.34MB

 

728x90
728x90

https://dukdukz.tistory.com/entry/210604-Sequelize-auto-%EB%A1%9C-%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%83%9D%EC%84%B1-%EA%B5%AC%EB%AC%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0

https://www.hanumoka.net/2018/11/23/node-20181123-express-setting-sequelize/

 

Node Express에 sequelize를 이용해 mysql접속하기

들어가기Express 프로젝트에 sequelize(시퀄라이저)를 이용하여 로컬에 있는 mysql에 접속하는 예제를 정리해본다. 미리 로컬에 mysql을 설치하고, 스키마와 계정을 생성 해놨다. 테스트용 Express 프로젝

www.hanumoka.net

MySql에서 워크벤치로 테이블구성을 다 하고 

코드에서 시퀄라이즈 연동을 하려니까 번거로웠다. 뿐만 아니라 타입이 일치한데 해당하는 테이블을 찾을 수 없다고 연결이 안돼서 답답했다. 찾아보니 역시 자동으로 구성된 테이블 코드를 짜주는 방법이 있었다!!

 

나는 EER 에서 다이어그램으로 테이블을 먼저 짰다.

그리고 Forward Enginner를 누르면 

만든 다이어그램이 테이블로 생성이 된다. (Synchronize Model하면 기존에 있는 테이블을 수정하고 업데이트할 수 있다.)

 

 

이제 코드에서 만져보자

 

시퀄라이즈 세팅을 먼저 한다. 

(npm i express

npm i -D nodemon

)

npm i sequelize //시퀄라이즈

npm i mysql2   //mysql과 시퀄라이즈를 이어주는 드라이버이다. 

npm i sequelize-cli   //시퀄라이즈 명령어를 실행하기 위한 패키지다

 

npx sequelize init //하면 기본 폴더가 생성된다.

이제 자동으로 db테이블 코드가져와주는

npm i sequelize-auto

를 깐다. 

 

터미널에 명령어를 입력한다.

npx sequelize-auto -o "./models" -d nodejs -h "localhost" -u "root" -p "3306" -x "비밀번호" -e mysql

 

 

-o "경로"
-d "db 이름"
-h "url"->localhost
-u "root"
-p "port"
-x "password"
-e "mysql"

 

 

그럼 필요한 user, music,artist 코드가 자동으로 생긴다. 

근데 문제는 코드가 좀 다르다 function이다.

 

내가 db구조 짤때 참고한 nodejs책에서는 class로 해서 

안에 내용을 기존에 참고했던 식으로 바꿔줬다. 큰틀만 바꾸면 됨

artist.js

그리고 init-model.js도 생겼는데

나는 index.js로 작업하고 잘모르겠고 구조도 바꿔줘서 

주석처리했다. 

대신 관계정의할 때 필요한 것들은 참고해서 넣었다.

artist.js

수정한다음에 혹시몰라서 

워크벤치에 있는 database를 삭제하고

 

npx sequelize db:create로 다시 db를 만들고

npm start 실행했다. 

 

연결잘된다. 

 

 

(

문제는 내가 원하는건 user랑 artist의 1대1관계인데

분명 user에 hasOne, artist에 belongsTo로 줬는데 

왜 다이어그램을 뽑아보면 1대다로 나오는지 모르겠다....)

 

 

 

 

그리고 일대다에도 종류가 두개있어서 놀람

https://jins-dev.tistory.com/entry/RDBMS%EC%9D%98-%EA%B4%80%EA%B3%84-Identifying-NonIdentifying-Relationship-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

RDBMS의 관계 - Identifying & Non-Identifying Relationship 에 대하여

 RDB에서 관계를 맺는데 있어서 식별관계(Identifying Relationship)와 비식별관계(Non-Identifying Reltationship)가 존재한다. 정확히는 RDBMS에서 나누는 관계가 아닌 ER Diagram 상에서 논리상 나누는 개념이..

jins-dev.tistory.com

 

이건그냥 공식문서 필요할때 보라고 넣어둠

https://sequelize.org/master/manual/legacy.html

 

Manual | Sequelize

Working with Legacy Tables While out of the box Sequelize will seem a bit opinionated it's easy to work legacy tables and forward proof your application by defining (otherwise generated) table and field names. Tables class User extends Model {} User.init({

sequelize.org

 

728x90
728x90

rollbackFailedOptional

 

 

https://stackoverflow.com/questions/53981122/npm-install-giving-rollbackfailedoptional

 

NPM Install giving rollbackFailedOptional

After trying to use the Windows Powershell (as an admin), the command prompt (as an admin) and the bash CMD; I repeatedly get the following error after trying an npm install command: npm install npm@

stackoverflow.com

에러 해결방법

npm  / node

삭제후 재설치

https://github.com/npm/npm/issues/17246#issuecomment-311050212

 

rollbackFailedOptional: verb npm-session xxxxxxxxxxxxxxxxxx · Issue #17246 · npm/npm

I'm opening this issue because: npm is crashing. npm is producing an incorrect install. [ X] npm is doing something I don't understand. Other (see below for feature requests): What's go...

github.com

프록시 제거

 

근데 나는 이번에는 시간 지나니까 npm install 모듈 깔리긴했음

 

728x90
728x90

https://youtu.be/r1_G9ayX980

d

동적배열 종류

c++ STL에 vector / java에는  array list/ c#에는 list / golang에는 slice

 

동적배열은?  <--------------------------> 정적배열(fixed size array 길이 정해진 배열 [10]int)

[]int

길이 변하는 배열

 

실제 고정 길이의 배열이 따로 있고 그 고정 길이 배열을 가르키고, 포인트하고 있다!!

배열의 길이가 늘어나면 새로운 더 긴 배열을 만든 다음에 거기로 모든 값을 복사시키고 그 배열로 포인트 바꿈

 

"동적 배열은 실제 배열을 포인트하고 있다."

 

 

 

동적배열선언 만드는 여러 방법들

var a [] int

a:=[]int{초기값}

a:=make([]int,3)

a:=make([ ]int,  length, capacity)

 

length 길이

내가 쓰고 있는 길이

 

capacity 확보해놓은 공간

 

(동적배열, 값을 추가할 때 배열 늘리는데 2배씩 확보해놓음 그래서 길이와 cap다를 수 있음)

항목 추가 명령어 append

a:= []int {}

a= append(a,1)

a에 다시 대입

 

슬라이스 = append(슬라이스,항목)

 

 

a[start Index : End Index]

   (start ~ end]  마지막은 포함안됨

 

a[10]int{1,2,3,4,5,6,7,8,9,10}

a[4:6]

a[시작인덱스 5번째 : 6번째]

즉 5번째~6번째까지 슬라이스 의미

 

a[4: ]

5번째부터~ 끝까지

a[ :4]

처음부터 ~4번째까지

 

슬라이스는 원래 배열이 있고 그 배열을 가르키는 포인터

슬라이스는 잘라내는 게 아니라 그 일부분을 가르키는 배열! 

 

 

 

//추가된 값이 원래길이,확보된 공간 벗어나게 되면

새 메모리 만들어서 거기에 복사됨. 그럼 메모리 주소 바뀜!

코드로 보기

package main

import "fmt"

func main() {

//////////////////////////////////len cap 메모리를 새로 확보해야돼서 주소도 달라짐  새로운 메모리에 담아서
	// a:= []int{1,2}
	// b:= append(a,3)
	// fmt.Printf("%p %p\n",a,b)
	// for i := 0; i<len(a); i++{
	// 	fmt.Printf("%d,",a[i])

	// }
	// fmt.Println()
	// for i := 0; i<len(b); i++{
	// 	fmt.Printf("%d,",b[i])
	// }
	// fmt.Println()

	// fmt.Println(cap(a)," ", cap(b))

	///////make로 넣기//메모리 같아서 b값 바꾸니까 a도 바뀜

	// a:= make([]int, 2,4)
	// a[0]=1
	// a[1]=2
	// b:= append(a,3)

	// fmt.Printf("%p %p\n",a,b)
	// fmt.Println(a)
	// fmt.Println(b)
	// b[0]=4
	// b[1]=5

	// fmt.Println(a)
	// fmt.Println(b)
	//////처음부터 아예 공간을 다르게 확보하게 싶다면
	// a:= []int{1,2}
	//
	// a := make([]int, 2, 4)
	// a[0] = 1
	// a[1] = 2
	// //슬라이스 새로 만듦
	// b := make([]int, len(a))
	// for i := 0; i < len(a); i++ {
	// 	b[i] = a[i]
	// }
	// b = append(b, 3)
	// fmt.Printf("%p %p\n",a,b)

}

 

3가지 경우임

1. 값넘쳐서 새 메모리에 담아짐

2. 값안넘쳐서 메모리 a랑 b같음 b변경될때 그대로인 메모리안에서 바뀌어서 a도 바뀜

3. 아예 슬라이스 새로 만들어서 공간 따로 확보함

 

 

 

//배열 뒤에서 하나씩 지우기

package main

import "fmt"

//뒤에 하나씩 지워나가는 함수//배열 반환,int 맨뒤에 값도 반환
func RemoveBack(a []int) ([]int, int){
	//처음부터 a배열길이에서 1뺀것, 즉 맨뒤에를 하나 없앤다
	return a[ :len(a)-1], a[len(a)-1]

}

func main() {


a:=[]int{1,2,3,4,5,6,7,8,9,10}

	for i :=0; i<5; i++{
		var lastlostone int
		a, lastlostone= RemoveBack(a)
       fmt.Printf("%d,",lastlostone)
	}
	fmt.Println()
	fmt.Println(a)


}

 

 

 

728x90
728x90

print: 괄호안 내용을 단순히 출력, 줄바꿈 안됨

printf: %d,%f 등을 쓸 때 사용. 

println: 괄호안 내용 출력한 후 한 줄 띄워짐

 

 

 

 

 

 

728x90
728x90

1. %d : 10진수로 출력 정수형
2. %f : 실수형
3. %e : 지수형
4. %o : 8진수로 출력
5. %x : 16진수로 출력
6. %u : 부호없는 10진수로 출력
7. %g : 실수형으로 자동 출력
8. %p : 포인터의 주소를 출력
9. %c : 하나의 문자로 출력 문자형
10. %s : 문자열을 출력

출처: https://clanguage.tistory.com/1 [프로그래밍 블로그]

728x90
728x90

11월 팀플 때 서버배포를 시도하면서 

aws를 썼다. 무료 프리티어지만 용량초과되면 돈 나간다길래 

나름 조심해서 썼다. 

 

(인스턴스를 여러 나라별로 만들어봐서 문제가 생긴걸까..?)

암튼 옆에서 이전달에 쓴게 청구됐다는 얘기를 들어서 쓰고 바로 

인스턴스 중지를 했다. 그리고 이번달, 다음달, 예상청구금액 없는것도 확인함.

 

 

 

하지만

며칠 전

돈 빠져나감!

 

찾아보고 청구서를 자세히보니까 "탄력적 ip"를 썼기 때문이었음 (블로그 보면서 무작정 따라하다보니..ㅜ)

그중에서도 

탄력적ip가 인스턴스랑 연결 안되어있어서 돈 나간다는 거. 

그래서 탄력적ip 바로 삭제하러 갔는데

 

연결해제나 다른 버튼은 활성화안되어있었음

찾아보니까 

릴리즈

가 삭제라길래 그거 누르니까 삭제됨

 

근데 문제는!!! 

심지어 12월 예상청구금액도 찍혀 있었음 충격

얘도 마찬가지로 탄력적 그 똑같은 서비스가 청구됐다고 뜸

 

혹시 몰라서 찾아보면서 있는거 다지움

 

이제 됐겠지 하고 

 

문의메일도 보냄

 

나 11월에 완전 조금 쓰고 중지할거했는데도 돈나갔고

무엇보다 12월에 요금이 자꾸 추가되고 오른다 문제있다 환불해달라

 

 

하니까 11월꺼 환불해줌 근데 문제에 대한 답장은 없음

 

 

 

됐으려나 기다림 

계정 삭제하고 싶은데 뭐가 문제인지 너무 알고 싶음(12월금액 자꾸오르는 이유)

 

 

근데 다음날 또 확인해보니 12월 예상청구금액 3배 오름 

안돼..

 

 

예약도 구독도 없어!

혹시 몰라서 비번도 바꿈

 

메일 답장왔는데 11월 환불잘해줬고 

12월은 너가 이전에 쓴거에 대한 요금이야

이러는데 

 

왜 추가돼? 지금 안쓰는데 왜 오르냐고요

 

 

근데 찾다보니 이거 봄 온디맨드 비용 

뭐 이런게 충당률 보고서에 있더라 

하지만 이게 언제 지출된건지 안나와서

11월꺼일수도 있음

 

(12월 청구된것도 마찬가지로 탄력적ip에서 나갔다하니까..)

 

문제는 계정을 해지해도

예약 인스턴스나 

구독인 애 있으면 돈 계속 나간다는 거야

그게 무서워

 

위에서 봤듯이 하나하나 다 눌러보고 확인해봤는데 없어

온디맨드 저게 예약 항목에 있어서 걱정되고...

온디맨드는 사용한 시간당 돈 지불하는 원래보다 저렴하게 하게 해주는 그런 서비스인거같던데

진짜 뭘까.

 

결론 아무리 찾아보고 해봐도 

나는 안쓰는게 맞는데 계속 12월 쌓이는거 보는거보다 

일단 계정 자체를 해제하기로 마음먹음(예약인스턴스,구독없는거 확인했으니까)

 

 

 

이런 것도 발견함. 의심시작 얜가?

(뭔지 잘모르겠음 내 생각에 내가 사용했던 프리티어 그 크레딧인듯. 구독..그거랑 다르겠지

게다가 사용한 금액 0 이고 남은금액이 오히려 찍혀있는데..

 

확인했다고 없다고 구독같은거 안했다고)

 

 

 

만료 날짜까지 돈나가는거 아니야? 후덜덜해지기도 함

정말 aws 야금야금 돈 뜯어가네

 

해지해도 이전에 청구된거는 다 받아가고

구독,예약있음 뜯어간대 조심

 

결제 예정이거나 미납된 애들 없는거 다 확인하긴 했는데

12월 예상청구...저 놈이 있으니까

거기까지는 오케이해도

 

다음에 더 계속 나가면 문의해야쥐

 

 

 

찾아보면서 진짜 영어잘해야겠다 싶은게 타고 들어가다 보면 공식문서 영어임

거의 1000만원 나와서 취소하려는 사람도 프리토킹으로 해결했다고 하고

 

aws 뒤통수 때리기 멈춰!! 

 

(예산 제한 그것도 설정해봤는데 걍 내가 제한해놓은 값까지만 결제되는게 아니고 넘어갔다고 알람해주는 거였음.....ㅎ

얘네도 그거 알아서 그런지 처음에 환불문의하는거는 돌려주는 거 같긴함. 다른 사람들 중에서도 진짜 안쓰는데 계속 돈나가서 문의하니까 자기네들 설정이 잘못되어있는게 맞다고 너 안쓰는거 맞다고 취소해줬다고 함. )

 

 

 

 

 

 

 

조심...또 조심...

728x90
728x90

이해한 내용 적어보자면~~

 

값 연결된 형태

next 로 다음 값 가르키고 있음

 

array랑 많이 비교되곤 하는데

값을 삽입하고 뺄 때 array에 비해서 빠름!

대신 조회할 때는 상대적으로 느림 

 

링크드리스트

연결된 그 뭉텅이...를 노드라고 함

 

노드 안에는 값이랑 다음 노드를 가르키는 애(이름뭐였지)가 있음

 

맨앞에 있는 노드를 head

맨 뒤 꼬리에 있는거 tail

 

head를 찾아서 next로 값 빼고 넣고 함

 

변수로 새로 할당해서 하는데 삭제를 먼저 하는게 아니라

다음값 가르키고 나서 삭제해야 뒤에 안잃어~

https://visualgo.net/ko

 

VisuAlgo - 영상을 통한 자료구조와 알고리즘의 시각화 (한국어판) (Korean)<br>

VisuAlgo is free of charge for Computer Science community on earth. If you like VisuAlgo, the only payment that we ask of you is for you to tell the existence of VisuAlgo to other Computer Science students/instructors that you know =) via Facebook, Twitter

visualgo.net

-> 이 비주얼고로 알고리즘 어떻게 작동되는지 살펴볼 수 있음 좋구만

 

본 강의

https://youtu.be/sq49IpxBl2k

 

 

 

 

 

 

 

 

 

 

728x90
728x90

스택

후입선출(가장 늦게 넣은 데이터가 가장 빨리 나가는 것)

객체들의 집합소, 데이터를 기록하는 구조

비어있는 스택에서 원소 추출하려하면 stact underflow

스택 넘치는데 스택 추가하려고 하면 stack over

집합에서 가장 오랜 시간 존재했던 원소를 삭제

선입선출( 가장 먼저 넣은 데이터가 가장 빨리 나간다)

 

프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야함.

프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.

프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지

1. 코드code 영역->실행할 프로그램의 코드저장되는 영역,cpu가 여기서 명령어 가져가서 처리함

2. 데이터data 영역->프로그램의 전역변수와 정적 변수가 저장되는 영역, 프로그램 시작과 함께 할당되고 종료되면 소멸

3. 스택stack 영역->함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 곳,함수호출시 할당되고 종료시 소멸

4. 힙heap 영역->사용자가 직접 관리할 수 있는,그래야하는 메모리 영역,사용자에 의해 메모리공간이 동적할당되고 해제됨. 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됨.

 

 

--수업때 얘기는 밑에--

 

 

스택은 컴파일러가 돌기 전 단계.

힙은 구동된 다음에 메모리 반환 해제가 됨

스택 영역에 메모리 선언하면 해제도 못함

 

함수내부는 stack

헤더파일은 heap

 

선언할 때 함수에 많이 하면 터진다..스택이라서..

헤더에 해라..

 

 

 

 

출처

https://hwan1402.tistory.com/110

 

스택(Stack)과 힙(Heap) 차이점

메모리 구조 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 합니다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다. 따라서 컴퓨터의 운영체제

hwan1402.tistory.com

 

728x90
728x90

템플릿(template)은 C++ 프로그래밍 언어의 한 기능으로, 함수와 클래스가 제네릭 형과 동작할 수 있게 도와 준다. 함수나 클래스를 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 동작할 수 있게 한다. 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀.

출처: https://blockdmask.tistory.com/43 [개발자 지망생]

 

템플릿은 함수, 클래스 붕어빵 만드는 붕어빵 틀

재료는 객체타입

 

템플릿의 종류는 함수 템플릿과 클래스 템플릿의 두 가지가 있다.

 

함수 템플릿

여러 다른 자료형(int, long, float, double, class... )을 템플릿 인자 ('<...>' 안에 들어가는)로 받아, 함수 내부에서 활용할 수 있도록 한 것이다. 다시 말하면, 여러 다른 자료형에 대하여 같은 역할을 하는 하나의 함수 계열을 하나의 템플릿으로 표현할 수 있다는 점이다. 

클래스 템플릿

클래스 템플릿은 클래스를 템플릿 변수에따라 생성할 수 있게 하는 기능이다. 클래스 템플릿은 컨테이너의 용도로 많이 쓰인다. 

 

 

 

템플릿 특수화

특정 타입, 다른 기능수행 즉 특수화하게 하려고 따로 템플릿 정의해 만드는거

 

템플릿 만들 때는 템플릿 선언 

template <typename T>

T라는 타입에 템플릿 선언한다는 뜻 , 

myFunc(1,3)

여기 맞게 값넣으면 알아서 함수구체화됨

"이렇게 템플릿의 구체화는 컴파일 타임에 필요한 타입에 대해서만 구체화를 하게된다. 위코드에서 구체화된 두 개의 함수 이름은 같고 시그니처만 다르므로 서로 오버로딩 관계다. 색이 다른 붕어빵~"

 

 

 

둘의 차이점

클래스 템플릿 사용할 때 반드시 타입 명시해줘야 함.

auto obj = MyClass<int>(3):

 

3써서 타입추론이 자동이뤄지는거 아닐까? 왜 타입을 강제지정할까?

 

[클래스 템플릿 구체화에 대한 이해]

(객체생성) 인스턴스화가 되기 전(=생성자가 호출되기 전)에 먼저 객체를 위한 메모리가 할당되어야 하는데

메모리 할당을 위해서는 

생성자에 전달되는 인수의 타입을 미리 알아야함! (여기서 객체에서 사용되는 타입은 클래스 멤버 변수의 타입을 말함.)

즉 클래스의 생성자가 호출되기 전에 객체를 위한 메모리가 할당되어 있어야 한다는 거~

 

 

 

 

 

 

 

 

출처: 

<대박적 설명>

https://thrillfighter.tistory.com/408

 

C++ 템플릿(template) 이해하기

템플릿을 사용하여 프로그래밍 하는 것을 일반화(Generic) 프로그래밍이라고도 한다. 개인적으로 C++을 제대로 공부하기 위한 첫 번째 관문은 템플릿(template) 아닐까 생각한다. 템플릿을 알아야 S

thrillfighter.tistory.com

https://ko.wikipedia.org/wiki/%ED%85%9C%ED%94%8C%EB%A6%BF_(C%2B%2B)

728x90
728x90

c(순차적 프로그램)에서 확장됨

c++객체지향프로그램

 

객체지향프로그램: 자바,씨샵,씨플플 

 

객체지향

객체의 속성, 객체의 동작(method)

객체 묶어둔게 클래스

 

 

cout은 객체

객체에 대한 것을 어디서 정의함

 

화면출력할 때 std::cout 사용

입력은 std::cin

 

ios에 입출력 라이브러리의 모든 클래스 여기 다들어있음

 

namespace

여러개의 라이브러리 클래스들이 중복되어있을 수 있음 이들을 구분하여 중복되지 않도록 하는 키워드를 의미

 

 

함수나 클래스 작성시 소속된 네임스페이스를 일일이 기술하는 작업 번거로워서

네임스페이스 생략하기 위해 using문 사용

>  using namespace 네임스페이스명;

 

https://youtu.be/JoAdRwJi-GI

728x90
728x90

절차지향 프로그래밍, 여기에서 개선해서 객체지향 나온 거래 둘 다 함수 사용하지만

정리정돈 도구인 객체가 존재한다가 둘의 큰차이

 

함수를 만들어서 함수 안에 코드 넣어서 깔끔하게 만들어줬음

근데 이제 함수가 또 많아지면?

 

서로 연관되어있는 함수, 변수들을 객체라는 것으로 그루핑. 박스에 넣는 것처럼

그 이름 도 새로 지어. 연관된 함수들을 다른 함수랑 분류하고 그룹지어~~

그게 바로

 

객체지향(프로그래밍 방법론)

object oriented programming

 

만들어진 틀(클래스) 안에 여러 객체 묶어줘서 

번거롭지 않게 한번에 실행할 수 있음

 

 

 

 

상속은 물려받는 것

인터페이스는 장착하는 것

 

 

 

객체지향- 은닉성 특징, 내부구조는 감춰두고 외부구조에서 조작할 수 있는애들만

public으로 공개

 

 

 

 

 

https://youtu.be/vrhIxBWSJ04

https://youtu.be/dy9yQIx38u8

 

728x90
728x90

파일 만들기 

mkdir 파일명

 

파일 미리 만들어놨을 경우, 거기에 리액트까는 법은

cd 파일명

yarn create react-app .

 

커밋할때 모듈 너무 많아서 안될때는

.gitignore

파일 만들고 그 안에 

 

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

#dependencies
0.5/node_modules
8.4 useMemo/node_modules
9styling-react/node_modules



node_modules/

 

 

이렇게 하니까 모듈 빼고 되더라

 

728x90

'웹 공부' 카테고리의 다른 글

C++ 객체지향프로그램 cout 입력출력  (0) 2021.11.29
객체지향 절차지향  (0) 2021.11.29
toLocaleDateString 날짜 시간 나타내기  (0) 2021.10.27
배열과 객체 차이  (0) 2021.10.27
디버깅/npm/path  (0) 2021.09.24
728x90

const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', timeZoneName: 'long' };

 

이게 중요한거같아

const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('ar-EG', options));
// expected output: الخميس، ٢٠ ديسمبر، ٢٠١٢

console.log(event.toLocaleDateString(undefined, options));
// expected output: Thursday, December 20, 2012 (varies according to default locale)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

 

Date.prototype.toLocaleDateString() - JavaScript | MDN

The toLocaleDateString() method returns a string with a language sensitive representation of the date portion of this date. The new locales and options arguments let applications specify the language whose formatting conventions should be used and allow to

developer.mozilla.org

 

https://ichi.pro/ko/tolocaledatestring-eul-sayonghayeo-javascript-naljja-hyeongsig-jijeong-45462506610720

 

toLocaleDateString을 사용하여 JavaScript 날짜 형식 지정

도우미 기능이 없으면 날짜 형식을 지정하는 것이 어렵습니다. 로케일에 민감한 방식으로 날짜 형식을 지정해야하는 것은 훨씬 더 고통 스럽습니다.

ichi.pro

 

 

 

참고로 투두리스트 만들 때 시간 적용한 코드는 이와 같음

new Date(); 생성자로 불러와서 쓰는듯

728x90

'웹 공부' 카테고리의 다른 글

객체지향 절차지향  (0) 2021.11.29
비주얼스튜디오 폴더 사용, 깃, 리액트 깔기 팁  (0) 2021.11.03
배열과 객체 차이  (0) 2021.10.27
디버깅/npm/path  (0) 2021.09.24
java 반복문 for문으로 별찍기/ while문  (0) 2021.08.18

+ Recent posts