220301 TIL

2022. 3. 1. 23:59코딩/TIL

 

 

1. java.util.NoSuchElementException 

흔하게 발생하는 문제. 공간이 없다는 뜻. 비어있는 공간에서 값을 꺼내려고 하면 발생하는 문제이다. 

Scanner가 읽어올 스트림이 없는데 읽으려고 해서 발생한 Exception이다. 

 

2. nextLine() Enter을 치기 전까지 쓴 문자열을 모두 리턴한다. 

next() 공백 전까지 입력받은 문자열을 리턴한다. 

 

3. charAt(문자열에서의 문자 순서. 0번부터 시작) 

Scanner은 char 타입으로 입력을 받을 수 없고  String 타입으로만 입력을 받을 수 있다. 

그래서 나온 것이 charAt() 

Scanner에서 next()또는 nextLine() 뒤에 쓴다. 

ex ) c1=sc.next().charAt(0); 

c2 = sc.nextLine().charAt(1); 

 

4. printf()에서의 서식문자 

%d, %i = 10진수 정수(양,음수 모두 가능) 

%x %o = 16진수,8진수 정수(양,음 모두 가능) 

%c 1개의 문자 

 

5. toHexString() 10진수 > 16진수 변환해주는 메소드 

 

6. s=input()

print(s[0:2], s[2:4], s[4:6], sep=' ') 에서 ' ' 사이에 한 칸을 띄워주어야 숫자 구분이 된다. 

 

7. keccak256() 블록체인에서 보안은 매우 중요한 문제이다. 솔리디티는 keccak256 이라는 강력한 해시 함수를 내장하고 있다. 깃의 커밋번호를 쓸 때는 SHA-1 코드, keccak은 SHA-3 코드를 사용한다. 

난수 충돌이 일어날 확률이 매우 희박한 안전한 난수를 생성해주니 솔리디티에서는 keccak256 함수 사용 (솔리디티에서 랜덤을 뽑아내는 방법) 

 

ex) a랑 가까운 문자들로 한번 테스트를 해보았는데 완전히 다르다. 

a > 3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb

b b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510

a1 > 37d3424576bafb5fd5f9f8e99478f66780477fcd8d71cb2319b37a64a01640db

 

https://emn178.github.io/online-tools/keccak_256.html

 

* SHA코드는 Secure Hash Algorithm 미국 국가안보국 NSA가 1993년에 처음 설계했으며 미국 국가 표준으로 지정됨. 

해시 값의 크기는 SHA 알고리즘에 따라오는 bit 수만큼 달라진다. 

SHA0~SHA3까지 있으며 현재는 SHA2가 사용 가능하고 SHA3이 권장되고 있으며 SHA0,1은 사용하지 않도록 한다(충돌 발견) 

SHA0~SHA3으로 갈수록 해시 크기가 점점 커진다. 

 

8. ERC-721 

대체불가능한 토큰(증서)에 대한 표준을 정의한 것. ERC-721은 NFT를 추적하고 전송하는 기본 기능을 포함한다. 

고유한 속성을 지니고, 각각 구별할 수 있으며 소유권을 별도로 추적할 수 있어야 한다. 

 

9. mapping 

키-값 구조로 데이터를 저장할 때 활용되는 타입 (자바스크립트의 Object나 파이썬의 딕셔너리) 

솔리디티에서 구조화된 데이터를 저장하는 방법

 

// 금융 앱용으로, 유저의 계좌 잔액을 보유하는 uint를 저장한다

mapping(address => uint) public accountBalance;  // 키는 address이고 값은 uint 

// userID로 유정 이름을 저장/검색하는데 매핑을 쓸 수도 있다. 

mapping(uint => string) userIdToName; // 키는 uint고 값은 string 

 

10. VSCode에서 React 바로 이용하기 

> node.js 최신 버전이 설치되어 있어야 한다. node.js를 설치하면 npm을 이용할 수 있는데 이걸로 react를 이용하는 것이다. 

1) npx create-react-app blog : blog라는 react app 만들어줘 

2) src > App.js에서 작성한 내용 싹다 > index.js를 거쳐 

document.getElementById('root')

index.html로 간다. (여기가 내가 만드는 리액트의 메인 페이지가 된다) 

<div id="root"></div>

 

11. TCP / UDP = 같은 계층 존재 (전송계층) 

TCP는 IP에서 발생하는 데이터 패킷 소실 문제 등을 해결하기 위해 나온 프로토콜 

IP주소의 경우 그저 출발지IP,목적지IP,메시지만 있다면 TCP는 출발지포트, 목적지포트,전송제어,순서,검증정보 등의 역할도 있다는 점이다. 

 

* TCP와 IP의 공통점 : 인터넷을 통해 데이터를 안정적으로 전달하기 위해 함께 작동하는 프로토콜 

IP : 한 호스트에서 다른 호스트로 데이터 전달하는 규칙 

TCP : 전달된 데이터가 손실이나 손상없이 순서대로 전달되도록 하는 규칙 

 

3-Hand-Shake : 클라이언트와 서버가 서로 내 데이터 잘 갔어? 응 잘 왔어! 하고 요청, 응답을 보내는 과정이다 

SYN(내가 보낸 데이터 잘 갔어?) ACK(응 잘 왔어!) 

1) 클라이언트 > 서버 SYN 2) 서버 > 클라이언트 SYN+ACK 3) 클라이언트>서버 ACK 4) 데이터 전송(신뢰가 되었으니)

이렇게 함으로써 클라이언트와 서버 간의 신뢰도가 생긴다. 

그런데 요즘엔 3)번 ACK 과정에서 데이터를 바로 보내버린다고 한다. 

 

TCP는 데이터 전달을 보증해준다 만약에 클라이언트가 1,2,3 순서로 데이터 패킷을 보냈는데 1,3,2로 간다면? 

그렇다면 서버 측에서 1,2,3이 올거라는 IP와 포트 메시지까지 다 갖고 있기 때문에 어? 왜 1,2,3으로 와야 하는데 1,3,2로 오는거지? 잘못 보냈다! 하고 다시 클라이언트에게 너 2번부터 다시 보내 하면서 메시지를 보낸다. 

 

UDP 

하얀 백지장. IP와 같은 역할을 하고 3-WAY-HANDSHAKE나 데이터 전달보증,순서보장도 없다. UDP에는 포트가 있다. 

최근 TCP가 점유율이 거의 90% 육박하기에 (웹에서 뭘 하든 거의 TCP로 돌아간다) TCP에 비해 상대적으로 널널한 UDP 가 각광을 받는다고 한다. 

 

 

12. PORT 

하나의 IP에서 여러 개의 애플리케이션이 동작할 때 (음악,게임을 한번에 진행할때와 같이) 각각의 역할들을 구분해주는게 포트 

'코딩 > TIL' 카테고리의 다른 글

220311 TIL  (0) 2022.03.11
220308 TIL  (0) 2022.03.08
220302 TIL  (0) 2022.03.08
220228 TIL  (0) 2022.03.01
220215 TIL  (0) 2022.02.15