Rust is an open-sourcce system programming language which can provide more effective and safe way to build up the software. You can also use it for a simple repetitive job or an interface.
Rust 모듈 시스템
Rust provides clients with a set of the functions which help them to manage and construct the code structure. This program is normally consisted with the Crate, Module, and etc.
- Crate : Compilation Unit of Rust. This is the smallest unit compiled by Rust.
- Module : Rust module is like an constructor which can help programmers to in a crate unit.
- Path : You can simply name the code by using path. For example, path can be a definition for vector, code function and module etc. You can also manage the private info in the path by using module. s
그냥 막연하게 - 프로젝트를 서버에 올리기 위한 'deploy' 작업에 앞서 거쳐야 하는 export 과정으로만 이해하고 있었다.
멍청하게도 개발자로 막 취업을 한 이 시점까지 모르고 있다.
빌드란 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적 형태로 변환하는 과정을 말한다. 예를 들어 JSP 기반의 프로젝트를 진행한다면, 개발자가 작성한 Java 프로젝트를 진행한다면 개발자가 작성한 A.java와 여러 html과 같은 정적 파일 등에 해당하는 resources가 필요하다.
이때 빌드는 소스코드를 컴파일해서 .class로 변환하고 resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF 와 MANIFEST.MF들을 하나로 압축하는 과정을 의미한다.
컴파일은 빌드의 부분 집합이라고 생각하면 된다. 이러한 빌드 과정을 도와주는 도구를 Build Tool이라고 하며
컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일을 Build라는 개념으로 생각하면 된다.
빌드 툴의 종류에는 우리가 프로젝트 할 때마다 사용 했었을 Maven, Gradle등이 해당된다.
가끔가다보면 정의되어 있는 용어가 왜 그 뜻인지 생각해보아야 하는 no직관성에 짜증날때가 있다.
귀찮아서 그냥 직역해놓은 것인지 무튼 헷갈려서 다시 찾아봤다.
Synchoronous (동기) : start from the top of the file and exectue all the way down to bottom of the file
java의 기본 코드 수행과 비슷하다. 수행하는 행위를 top에서부터 bottom까지 순차적으로 진행하고 모든 코드가 order에 맞추어 진행된다.
예를 들어, 누군가에게 $5를 보내기 위하여 거치는
procedure : 액수 입력 -> 전송하기 클릭 -> 수신자에 전달 완료 -> 나와 상대방에게 각각 송금/수신이 완료되었습니다 (동시 팝업)
는 동기에 해당되는 방식이다.
왜냐? 위의 procedure는 순차적으로 일어나야 마지막 목적에 도달할 수 있고 만약 순서가 뒤바뀌어 버리면 목적에 도달하는데 문제가 생기기 때문이다.
Asynchoronous (비동기) similar to the that of Synchoronous. but, during that execution it will run into ascynchoronous function or code, or it split off and execute that asynchoronous code seperately from the rest of the code and that's usually because it used to wait..
동기 방식과 동일하게 top to the bottom으로 코드를 수행한다. 다만 중간에 asynchronous function이 삽입되어 있을 시, 이를 수행하거나 아니면 코드에서 뜯어내어 마지막에 수행한다.
마지막에 수행하는 이유는 -> 코드가 수행되기까지 시간이 걸리기 때문인데 시간이 걸리는 이유는 여러가지가 될 수 있다.
그 중 한 가지 이유는 개발자가 직접 delay time을 걸어놓은 경우다.
아래에 첨부되어 있는 코드는 개발자가 애초에 setTimeOut function으로 코드를 실행하는 시간을 100ms로 설정해놓았다.
by web dev simplified channel youtube.
우측 콘솔 창에 보면 colesole.log(a), conesole.log(b) 가 먼저 실행된 것을 볼 수 있다.
100ms 을 기다리는 동안 다른 코드를 먼저 수행한 것이다.
아래 사진은 많이 헷갈려 하는 개념이라고 하는데, 코드 중간에 보면 a =10으로 allocate 해두었다.
by web dev simplified channel youtube.
a 는 중간에 10이라는 값을 할당받고 console.log('Synchronous'), (a), (b)를 수행했다. 때문에 콘솔 창에도 a 는 10의 값을 출력하고 있으며, 그 이후에 수행된 비동기 function인 setTimeOut 또한 10을 출력하고 있다.
=> top of code page에서 변수 a 가 할당받은 값이 1일지라도 function은 a 가 10을 allocate받은 다음에 수행되었기 때문에 function 안의 a 또한 10을 배정 받는 것이다.
보면 setTimeOut이라는 내장 객체 안에 함수가 들어가 있다. 어떤 특정 이벤트가 발생할 시에, 자동으로 호출되는 함수를 콜백 함수라고 하는데 사용하는 경우는 아래 네 가지로 보면 된다.
1.사용자 이벤트 처리
브라우저 화면에서 발생하는 사용자의 이벤트는 예측이 불가능하다. 따라서 이런 화면이벤트를 관리담당하는 녀석에게 우리는 특정이벤트가 발생할 때 호출을 원하는 내용을 callback 함수에 전달하게 된다.
2.네트워크 응답 처리
화면단에서 서버에게 요청을 보냈을 때, 그 응답이 언제 올지 알 수 없다. 따라서 이런 서버에 대한 응답처리 등도 비동기적으로 처리해야 한다.
3.파일을 읽고 쓰는 등의 파일 시스템 작업
4.의도적으로 시간 지연을 사용하는 기능(알람 등)
위와 같이 이벤트 등을 기다리는데 하나뿐인 소중한 스레드를 사용한다면, 또 서버의 응답을 기다리기 위해 하나뿐인 소중한 스레드를 사용한다면… 사용자는 멈춰져 있는 화면을 보게되는 것이다. 위와 같이 스레드의 블록킹을 야기하는 작업은 필수적으로 비동기적 프로그래밍을 해야 한다.
어디서부터 어디까지 다시 보는게 좋을 지 잘 모르겠지만 어차피 끝은 없으니.. 선 시작..
Javascript : 정적인 HTML 콘텐츠를 프로그램 구현 통해 동적으로 변경하거나 데이터를 받고 내보내는 담당을 하게된다.
Object 기반의 스크립트 언어로, Node.js와 같은 프레임 워크 사용하면 서버 프로그래밍에도 사용할 수 있다.
=> 웹 브라우저에 인터프리터가 내장 되어있다
Javascript의 core function 크게 4가지
1. 유효성 체크 : 데이터가 DB에 저장될 수 있는지, 부족한 것은 없는지 검사
(말은 유효성이라고 거창한데, 그냥 조건 걸어서 사용자 입력값을 DB에 넣을지 뺄지 확인하는 거다.)
2. html 태그 컨트롤
3. Ajax를 통한 웹서와의 데이터 통신
4. 동적인 메뉴 제작. 이미지 효과 등. ->
이미지나 메뉴 blinking, blur 같은 효과는css 구문 자체로도 있기는 한데, script 태그 안에 function 넣는게 젤 편하다. 지저분하게 CSS 구문이나 HTML 구문을 늘리는 것, 또는 html태그 안에 포함시키는거보다 function만 js파일에 따로 모아놓는게 나중에 코드 수정할때 편하다.
변수 선언 방식
1. var : 변수를 선언하고 추가로 동시에 값을 초기화 한다.
2. let 블록 내 지역 변수를 선언 & 값 초기화
3. const 지역내에 읽기 전용 상수 선언. (Ex clock 과 같은 function 들은 const로)
내장함수
1. eval(문자열) : 문자열을 수식으로 변환 2. Number(문자열) : 문자열을 숫자로 변환, 정수/실수 가리지 않고 숫자로 변환 3. parseInt(문자열) : 문자열을 정수로 변환 4. isNaN(문자열) : 문자열이 숫자형식이 아니면 true, 숫자형식이면 false -> Not-A-Number(숫자가 아님) 5. alert(문자열) : 문자열을 대화상자로 출력 6. confirm(문자열) : 문자열을 확인/취소 대화상자로 출력 7. prompt(문자열) : 문자열이 제목으로 표시되는, 값을 입력받기 위한 대화상자 호출
Math함수는 java와 기본적으로 동일.
1. Math.ceil() : 소수점 올림, 정수 반환
2. Math.floor() : 소수점 버림, 정수 반환
3. toFixed() : 숫자에서 원하는 소수점 길이만큼만 반올림하여서 반환.
Return.
(1) 주어진 값을 호풀 지점으로 반환
(2) function을 벗어남 -> 함수에서 return 문에 도달하면 break처럼 조건문을 나와 다음 코드를 실행하는 것이 아니라, 아예 function 밖으로 나가버린다.
var a = 10
a = 100
console.log("1 = >" + a)
{
var a = 200
console.log("2 = >" + a)
{
var a = 300
console.log("3 = >" + a)
{
var a = 400
console.log("4 = >" + a)
}
console.log("5 = >" + a)
}
console.log("6 = >" + a)
}
console.log("7 = >" + a)
var 변수 - 각기 구역 다른 값을 출력한다. 어디에서 어떻게 사용될지 파악하기 힘듬. 때문에 let과 const방식을 보완.
구역 잡아놓은 것과 관계 없이 최근의 a 값을 가지고 내려간다.
ex2 -2 | let
<script type="text/javascript">
let a = 100
a = 250
console.log("1 = >" + a) //200
{
let a = 50
console.log("2 = >" + a) // 50
{
let a = 200
console.log("3 = >" + a)
{
let a = 300
console.log("4 = >" + a)
}
console.log("5 = >" + a)
}
console.log("6 = >" + a)
}
console.log("7 = >" + a)
</script>
let 변수 - 구역내에 변수값이 지정되어 있으면 해당 값을 그대로 가지고 간다.
let은 변수에 재할당이 가능하다. 하지만, const는 변수 재선언, 변수 재할당 모두 불가능하다.