기계어나 어셈블리로도 서버를 구축하고 돌릴수 있나요?

   조회 2583   추천 0    

이론적으로는 서버 구축에 많이 쓰이는 c++,java,파이썬도

결국 컴파일러를 통해 기계어로 번역되는건 아는데

이런 저급언어나 고급언어없이 가장 컴퓨터에 친숙한

기계어나 어셈블리만 써서 진짜 서버를 구축한 사례가 있나요?

서버 만들고픈 뉴비
짧은글 일수록 신중하게.
https://namu.wiki/w/%ED%81%AC%EB%A6%AC%EC%8A%A4%20%EC%86%8C%EC%9D%B4%EC%96%B4

https://www.clien.net/service/board/park/16569890

이런 분이 해당 분야에 있다면 가능하겠지만 글에 나와 있듯이 이분도 모든 걸 잘하는게 아니라서,,,,,,
결국은 노하우 공유를  통해 집단적 지성을 이용헤 발전하는 것이 더 효용이 크기 때문에
가장 보편적으로 널리 퍼진 언어 툴을 이용하는게 좋을겁니다

요즘은 컴파일러가 매우 효율적이라 대부분의 코드에서 사람이 직접하는 짠거보다 더 옵티마이즈된 결과물을
내놓다는 글을 본적이 있습니다

빌딩을 짓는데 굳이 현대식 건설 장비를 놔두고 삽으로 처음부터 끝까지 지을 필요는 없다라는 말이 생각나는군요....ㅎ
     
이매망량2 2023-07
즉 중장비 안쓰고 삽과 곡갱이로 아파트 짓는 격이군요
          
Qsup 2023-07
그보다 더 심각하죠. 손으로 땅을파서 아파트 짓는겁니다.
삽과 곡괭이라도 있는건 그래도 컴파일러 정도는 갖춰놓고 코딩하는거죠.
               
이매망량2 2023-07
아...북한식 건축이였군요
박문형 2023-07
이론상으로는 가능하다고 생각합니다만 굉장히 노가다인지라..

그만큼 기계어나 어셈블리어만 사용해서 구축할 수 있는 사람이 있을지 모르겠네요..

기계어나 어셈블리어 재대로 다룰수 있는 사람이 상당히 귀합니다..
     
이매망량2 2023-07
요즘은 거의 없다고 듣긴 했습니다
piloteer 2023-07
이제는 현실적으로는 불가능하죠. 서버 코드를 어셈블리로만 짜도 이게 호출하는 커널 함수가 C 코드이고, NIC 드라이버가 C 코드이고, 드라이버를 다시 짜도 메인보드나 NIC에서 돌아가는 펌웨어가 C 코드입니다. 하다못해 CPU 안에도 C언어를 컴파일한 코드가 들어가 있습니다 (부트롬, ME 등). 애플리케이션 레이어만 기계어로 짜는 건 가능합니다만 밑으로 내려가다보면 결국 다른 사람이, 다른 회사에서 짠 코드가 끼어들어서 백날 해 봐야 중간에 고급 언어가 끼어듭니다. 굳이 그게 아니라도 애플리케이션 레이어를 기계어로 짠다는 것 자체가 당연히 말도 안되는 시간 낭비긴 합니다만..

이제는 로우레벨/하드웨어 수준의 개발도 무식하게 어셈블리만 가지고 하는 사람은 없어요. 저도 기계어 만지는 것은 좋아하지만 현실에서 쓰는 일은 리버스 엔지니어링 아니면 컴파일러가 잘 못 활용하는 일부 SIMD명령어 다뤄야 할 때나 합니다.
     
이매망량2 2023-07
실질적으로 불가능하단 거군요
감사합니다
송주환 2023-07
질문의 의도를 모르겠네요
     
이매망량2 2023-07
궁금해서 물어본겁니다
          
제온프로 2023-07
비 상식적이다 는 뜻이고요..

비 상식적인 것이 궁금하였던 것입니다.

그래서 듣는 사람들이 ...생각하기에..

비 상식적이고.. 비 합리적이고... 쌩뚱 맞은 그런 느낌입니다.

모든 장비의 기저에 시작은 어셈블리 인 것이죠..

그것을 일반인들이 활용하여 개발이 쉽게 편하도록 하는 것이
프로그램잉 랭귀지 인 것 이죠.
AKA지니 2023-07
"진짜 서버" 라는 기준이 뭐지요?
서버라고 거창한걸 생각하시는지 모르겟지만
httpd 데몬만 돌려도 서버 입니다
임베디드쪽 가면 없지는 않습니다
제온프로 2023-07
네 가능하죠..

너무 비싸고.. 비 효율이고. 한것이죠..
김강호 2023-07
옛날 메인프레임은 그러지 않았을까요
dateno1 2023-07
가능은 하지만 아무짝에도 쓸모없는 시간 낭비입니다

그런짓해봤자 성능 향상은 커녕 인터프리터 쓰는 언어보다 빠르면 다행입니다 (시퓨의 명령어셋이랑 레지스터의 숫자등 모든 스팩을 다 파악하고, 모든 가속 명령의 작동 구조등 다 빠삭하게 이해한 상태에서 아주 정확하게 최적화된 구조로 설계후 그걸 엄청난 노가다로 다 일일히 입력해야 제대로 성능이 나옵니다)

거기다 버그 안 걸리길 기도하시거나, 알아서 디버그도 다 하셔야 합니다 (기계어용 제대로된 디버거는 없다시피하고, 어셈만 되어도 찾기 힘듭니다)

그리고 하급 언어로 만들수록 특정 머신 의존적으로 되니 신경써야할게 늘어납니다

옛날부터 기계어로 짜는 경우는 거의 없었고, 2~30년전조차 어셈으로 부분적으로 코딩하는 수준이었습니다
박문형 2023-07
잘은 모르지만

8비트 컴퓨터라면 어느 정도 어셈블리로 프로그래밍이 가능하지만

16비트 이상되면 복잡해지기에 사람 머리로 할 수 있는 한계를 넘어선다고 들었습니다..

현재는 32비트도 넘어서 64비트 컴퓨터 시대입니다..
     
엠브리오 2023-07
0과 1의 조합의 갯수 비교

2^8 = 256개
2^16 = 약 6만5천개
2^32 = 약 43억개
2^64 = 약 1844경 개

천재급 두되를 가졌다면 6만5천개 조합까지는 평생을 바치면 어쩌면 가능할지도?
그러나 32비트 부터는 어림도 없습니다.
          
이매망량2 2023-07
홈부루 컴퓨터도 8비트가 한계고 16비트만 되어도 사실상 매우 힘들다고 한게 다 이유가 있었군요
김경철 2023-07
옛날에 dos 환경에서 돌아가던 netware나 jnos 같은것도 서버의 한 예라고 할수 있을테구요,
구글에 "x86 assembly web server"로 찾아보니 몇개 나오네요. 그중 하나는 여기.

https://github.com/barrettotte/HTTP-ASM64

"The most basic HTTP Server written in 64-bit Assembly with NASM Assembler."라고 합니다.
딱 한페이지만 보여주는 웹서버.

근데 요즘 운영체제에서는 어차피 네트웍 연결을 하라면 운영체제에서 제공하는 시스템콜을 호출할 수 밖에 없는데요,
그럼 C로 프로그램짜나 assembly로 프로그램짜나 거기서 거기입니다.
C는 "고도화된 어셈블리언어"라고 표현해도 될것 같습니다.
시도니 2023-07
기계어나 어셈풀리는 잘모르겠습니다.

아직까지 메인프레임에 코볼이 살아있는 걸 본적은 있습니다.

지금은 아마도 차세대로 바뀌면서 웹인터페이스로 바뀌지 않았을까 싶긴 합니다만,...
흑기사 2023-07
이론상으로는 가능합니다만 그거 만들 시간(=비용)이 되는지부터가.
만든다고 끝이 아니고 만든 것을 사용하다 보면 시간 내에 수정해야 하는 부분들 계속 나올텐데 어셈블리로 만들면 그거 하기도 버겁습니다.
경험상 같은 기능을 하는 프로그램을 어셈블리와 C로 짤 경우 어셈블리 코드 라인수는 C의 10배 정도 됩니다.

java도 시스템 자원 낭비하는 비효율적인 언어라고 욕을 먹고 있지만 빨리 만들 수 있으니 널리 쓰이는겁니다.
지금은 시스템 성능도 좋아져서 규모가 아주 커지지 않는 이상 체감성능은 차이도 안납니다.
maronet 2023-07
진지댓글 하나 달아 보겠습니다.
질문 하신 내용 보면
컴파일러 : 인터프리터도 구분 못하시고,
저급언어 : 고급언어도 구분 못하시고,
서버란 용어도 여렴풋이 이해하고 있는거로 보입니다.
카더라성 정보에 의존해서 상상력을 키우는 것도 좋지만,
서버에 관심 있으시면, 진지하게 운영체제론 책이라도 보시면서 기초를 다지시면 좋을 것 같습니다.
죠슈아 2023-07
저는 진지하지 않고 비아양 대는 것으로 반문  합니다.
컴퓨터나 계산기 대신 주판으로 회계 장부를 정리하는 것도 가능하냐고 묻는 것과 어떻게 다른지요 ?
머 한마디로 정리하면 일단 되긴 됩니다.
어셈블리어로 소켓통신 가능합니다. 구현 사례도 있습니다.

다만 os없이 생짜로 boot레벨부터 어셈블리어로 가능하냐?
가능이야 하겠지만 비 현실적이겠죠. 네트워크 카드 하나만 두고 보더라도 예전에는 하드웨어 제어가 대부분이었다면, 지금은 소프트웨어 제어가 대부분입니다.
드라이버 용량이 커지는 이유도 여기 있구요.
     
흑기사 2023-07
x86 기준 리눅스의 경우 시스템콜은 int 0x80 (masm 문법 사용시 int 80h)로 호출하고 소켓 관련 function도 여기서 다 제공합니다.
( 도스의 int 21h와 같은 역할이고, http://www.linuxassembly.org 에서 모든 function을 소개하고 있습니다.)
근데 써보면 호출하는 모양이 POSIX와는 동떨어진 느낌이 듭니다. glibc 같은 C 라이브러리에서 POSIX 비슷하게 포장해주고 있어서 C로만 했다면 안보이는 부분.

말씀하신 boot 레벨에서 생짜로 할꺼면 어셈블리는 필수입니다.
cpu 특수 레지스터를 다루는 초기 환경 셋업, 외부장치 in/out, interrupt 처리 및 관련 셋업들은 컴파일러 출력 바이너리 포맷과 맞지 않는다거나 부팅후 한두번 정도만 쓰는 특수명령어도 사용해서 C/C++로도 불가능한 곳들이 많습니다. 근데 로직은 만들 시간도 없고 그거 만회할려고 사람 많이 쓰면 돈이 감당못할 정도로 많이 들어가니 어셈블리 안씁니다. 쓴다면 사이즈가 중요한 곳 정도. 예를 들자면 x86 기준 부트로더 1차 로드 부분은 디스크 1sector 크기에 다 우겨넣어야 합니다.
마왕 2023-07
x86 16 비트 어드레스주는 것만 해도 빡세다고 했었습니다.

c 언어에서요.


QnA
제목Page 286/5724
2015-12   1764041   백메가
2014-05   5238526   정은준1
2023-08   2139   Smile
2023-08   1879   NNTHH
2023-08   1869   훌딱이
2023-08   1697   구차니
2023-08   1852   시도니
2023-08   2380   rainma
2023-08   2991   GPGPU
2023-08   2948   미친감자
2023-08   3462   일론머스크
2023-08   2620   VSPress
2023-08   2739   미수맨
2023-08   5438   달광이
2023-08   2154   미친감자
2023-08   2993   영산회상
2023-08   2344   달광이
2024-12   431   LUNA
2023-07   2347   slowcity
2023-07   2062   회원
2023-07   3296   래바이
2023-07   2631   pumkin