코드란 보편적으로 두 가지를 명령한다.
How & What
1) What의 가장 좋은 예시는 SQL문이다. SQL은 원하는 결과값을 위해 서로 다른 query문을 작성하더라도, query optimizer가 가장 효율적인 방법으로 결과값을 가져온다.
2) 그렇다면 How의 가장 좋은 예시가 무엇일까?
우리는 코드 작성 시 알고리즘으로 how를 컨트롤 한다 생각하지만 실제로 우리가 얼마만큼 How을 이해하고 있는지 생각해볼 필요가 있다. python의 라이브러리를 사용한 코딩과 c언어의 원초적인 코딩은 근본적으로 다르지만, c언어가 어떻게 기계어로 compile 되고 결과값을 도출하는지 설명할 수 있나? 정말로 How를 완벽하게 컨트롤 하려면 더욱 더 low level로 가서 assembly 언어를 공부해볼 필요가 있다.
그렇다면 백엔드 개발자에게 어셈블리 언어는 필수일까? 밑은 내가 흥미롭게 본 글이다.

생각해보면 assembly 언어도 기계가 이해하는 언어가 아니다. 기계는 결국 0과 1로 된 sequence를 받아내어 cpu안에 내장된 여러가지 HW가 0과 1을 처리하여 machine state를 update하는 것이다. 그러니 진짜 how를 원한다면 0과1로 된 기계 언어를 공부하고, HW가 어떻게 구성됐는지 전자회로를 공부하고, 전자의 움직임을 파악하기 위해 전자기학과 양자역학을 공부해야 한다. (나는 다 공부한건데 왜 모르지..?)
아무튼 단순한 CRUD 정도는 GPT놈이 나보다 잘하니, 미래에 백엔드 개발자가 되려면 low level로 가면 갈 수록 좋지 않을까...? 하는 생각은 있다. 하지만 또 막상 개발자가 되려면 공부할게 워낙 많으니 시간 분배를 잘 할 필요도 있다.
전체 코드 : https://www.mycompiler.io/view/FoGvBGZRt5a
Input은 여기서 변경하고

코드 실행 및 출력은 여기서 하면 된다.

유클리드 호제법을 사용하지 않고 다음과 같은 알고리즘을 사용했다. 비효율 적인 파이썬 코드이지만 어셈블리 언어가 작성된 방식 그대로를 표현했다.
array = [12,36]
temp_divisor = 2
gcd = 1
while (temp_divisor <= array[0] and temp_divisor <= array[1]) :
if (array[0] % temp_divisor == 0 and array[1] % temp_divisor == 0) :
gcd = temp_divisor
temp_divisor += 1
print(gcd)
전체코드 : https://www.mycompiler.io/view/52Mob9ApnJ6
Bottom Up merge sort를 구현하였다.

Pointer 비교 연산을 구현하였다.

전체코드 : https://www.mycompiler.io/view/Av0YWJ6JMd9
문제 보러 가기 : https://school.programmers.co.kr/learn/courses/30/lessons/60057

각 알고리즘이 어셈블리 언어로 어떻게 구현되었는지 대한 자세한 설명은 밑의 링크에서 :
https://drive.google.com/drive/u/0/folders/14GRi5y-iVrewUYpG1VPFkLJBOlZMvas8
