본문 바로가기

IT 공부104

[리눅스] - 인터프리터, 가상머신, 그리고 실행 파일의 명령어 구조 차이 1. 실행 파일의 경우 (feat. C언어) C언어로 작성한 소스코드는 리눅스에 내장된 gcc 컴파일러를 통해 바로 시스템에서 실행 가능한 프로그램이 된다. gcc로 컴파일을 완료하면 위와 같이 ./hello 를 통해 즉시 실행할 수 있다. 이때, 어떤 프로그램을 매개하지 않는 모습을 확인할 수 있다. 컴파일된 파일은 시스템에서 바로 실행할 수 있는 것이다. 다만 이러한 이유로 C언어 개발자는 플랫폼의 기능을 사용하기 위해 운영체제 시스템과 API에 대한 정보를 배워야 하는 단점이 있다. 2. 가상 머신의 경우 (feat. 자바) 자바의 강점은 자바 가상 머신을 통해 컴퓨터와 OS 장치를 통째로 추상화하여 통일된 규격의 인터페이스를 사용한다는 점이다. 이 지점에서 C언어 개발자와는 달리 자바 개발자는 운.. 2023. 12. 18.
[리눅스] - 심볼릭 링크와 하드 링크 정리 및 사용 용례 1. 용어 정리 링크는 윈도우즈의 "바로가기" 아이콘을 만드는 것과 흡사하다. 데이터 블록은 실제 파일의 데이터를 의미하며, 하드 디스크 어딘가에 저장된 것이다. inode는 원본 파일의 데이터에 대한 정보와 위치를 알려주는 메타데이터다. 소유자, 권한, 생성 시간 등 "ls --long"으로 알아낼 수 있는 정보들이 사실 inode에 담긴 것이다. 하드 링크 파일은 리눅스의 사용자가 파일을 이용할 수 있도록 만든 일종의 아이콘과 같은 것이다. 리눅스 사용자는 파일을 찾을 때 inode를 직접 참조할 수 없다. 대신 원본 파일에 대한 링크를 통해 접근 가능하다. 즉, 하드 링크는 사실 바로 그 파일의 이름이다. (이러한 이유로, 사실 하드 링크는 그것이 링크로 생성되었는 것인지 아니면 원본인지 구분해내기.. 2023. 12. 18.
[자바] - 한글이 깨지는 문제의 원리 1. 문자열과 인코딩 문자열과 관련된 문제를 다루기 위해서는 인코딩(encoding)의 원리를 알면 된다. 컴퓨터는 0과 1로 이루어진 비트로 정보를 처리한다. 따라서 컴퓨터가 정보 처리를 마친 후에 그것을 우리(인간)가 이해하기 위해서는 0과 1로 이루어진 외계어를 사람이 이해하는 기호로 바꿔야 한다. 이 과정을 인코딩(encoding)이라 부른다. 문자열도 마찬가지다. 문자도 정보이므로 이것을 컴퓨터로 작업하기 위해서는 0과 1로 바꾸어 처리해야 한다. 그리고 그 결과를 이해하기 위해 0과 1로 이루어진 순수한 정보를 사람이 알고 있는 알파벳으로 바꿔야 한다. 물론 이때는 표준을 통일시켜 모두가 같은 인코딩 방식을 따라야만 비로소 유용할 것이다. 누군가는 A를 100이라고 하고, 누군가는 101이라고.. 2023. 12. 15.
왜 다른 사람이 작성한 코드는 이해하기 힘든 것일까 (본질적 어려움) 수많은 개발자들이 개발 실력을 업그레이드하려면 다른 사람이 작성한 코드를 읽어보라고 한다. 하지만 막상 오픈소스 하나를 찾아서 코드를 읽다보면 생각보다 정말 이해하기 힘들다. 난 처음에 이 문제의 원인을 내 프로그래밍 실력이 낮아서 문제라고 생각했다. (이건 정답) 그래서 프로그래밍 언어를 더더욱 배워야 한다고 생각했다. (이건 오답) 하지만 개발 공부를 하면 할수록 느껴지는 것이 생겼다. 코드를 읽기 어려운 이유는 코딩 문법이 어려워서가 아니다. 해당 프로젝트가 해결하려고 하는 도메인의 지식 구조와 프로젝트의 구성 요소에 대해 전혀 모르기 때문에 알아 먹기 힘든 것이었다. 막상 시간을 들여 천천히 읽다보면 의외로 구조와 코드 문법은 아주 어려운 것은 없었다. 아주 가끔 모르는 키워드가 나올 수 있는데,.. 2023. 12. 15.