최근에 마인크래프트를 팀원분들과 하게 되었다. 올해 새롭게 출시된 엄청나다던 맥북 m4 pro를 구매했기 때문에 쉐이더 모드라는 마인크래프트의 그래픽을 엄청나게 좋게 만들어주는 모드를 설치하려고 했다. 위 보이는 사진은 쉐이더 모드를 설치하기 위한 인스톨러이다. 근데 이게 웬걸, 찾아보니까 MacOS에서 설치하는 방법이 없었다! 절망감에 휩싸이며 포기하려던 찰나, 쉐이더를 설정하는 파일을 봤더니 그 인스톨러의 확장자가 .jar로 끝나는 것을 봤다. 내가 왜 MacOS에서 설치하는 방법이 없었고, 스스로 도전해보지 않았냐면 ARM64 버전 인스톨러가 없기 때문에 '설마 MacOS는 지원을 안 하는 건가?'라고 생각한 것이었다. 그도 그럴게, 게임이라는 카테고리에 있어서는 MacOS는 거의 외딴 섬 취급이기..
최근에 소프트웨어를 깔면서, 그리고 docker image를 빌드하면서 자꾸 ARM과 AMD을 설정해줘야 하는 부분이 있었고, 가끔씩 뭐가 뭔지 까먹는다. 둘이 비슷하기도 하고, 실수해서 잘못 입력하기도 한다. 아무튼, 그러한 작업을 계속하다 보니까 자연스레 관심이 생겼고, 결론적으로는 마인크래프트를 설치하는 과정에서 컴파일러와 인터프리터의 궁극적인 의문점이 생겼다. ( 뭔지는 다음 포스팅에서 다룰 예정 ) 그전에 앞서, ARM와 AMD 아키텍처를 먼저 짚고 넘어가야 할 것 같다. 우리가 흔히 아는 CPU는 아마 Intel일 것이다. 그리고 맥북을 좀 안다면 맥북에서 m1, m2와 같은 CPU를 내고 있다는 것도 알 것이다. CPU 회사들의 제품들 아키텍처는 다음과 같이 정리할 수 있다. 포인트는, in..
개발자 중에서도 사람마다 다양한 성향이 있다. 미적 감각이 뛰어난 예술가같은 개발자도 있고, 철학자같은 사람들도 있는 것 같다. 나는 고고학자같은 느낌이 있는 것 같다. 아무래도 전자전기컴퓨터공학부를 전공했다보니까 Low 레벨에 대한 내용도 꽤 많이 접해서 뭔가 궁금한게 생기면 Low 레벨 수준의 역사들을 발굴해내는 편이다. 예전에 딥러닝 관련해서 연구하는 과정에서 Kaggle에서 데이터를 수집하는 경우가 있었는데, 데이터가 깨지는 경우가 너무 많았다. 왜냐하면 일반적으로 영어로 쓰여있을 줄 알았던 .csv 데이터 속에서는 인도어나 독일어와 같은 다국어로 쓰여 있었고, .xlsx로 파일을 받는 경우에는 99% 확률로 깨져 있었던 것 같다. 그 외에 다른 경험으로는 데이터베이스에서 VARCHAR로 선언..
ssh 연결이란 무엇일까? 간단하게 생각한다면 22번 포트로 원격 접속을 하는 것? 간단하게 클라우드 서비스를 사용할 때까지만 해도 22번 포트로 원격 접속을 하는구나 정도로 알고 있었지만 linux 환경에서 사용자에게 컴퓨팅 리소스를 제공하는 서비스를 하기 시작하면서 ssh에 대해 깊은 이해를 전달하고자 포스팅을 작성한다. 처음에 ssh 연결이 생각했던 것과는 다르게 동작하는 것을 보면서 호기심이 점점 생겼다. 지금 일하는 곳에서 linux를 굉장히 하드하게 쓰게 되다보니 ssh에 대해서 자세히 공부해야할 때가 있었는데, 관련해서 ssh가 뭔지 깊게 정리해서 포스팅하면 좋을 것 같아 글을 쓰게 되었다. 본론SSH(Secure Shell)은 네트워크 연결을 통해서 다른 컴퓨터에 연결하거나 로그인하거나 명..
개발을 처음 시작하며 프레임워크에 대해서 공부했을 때에는 단순히 어떻게 코드를 작성해야 데이터를 보내고 받을 수 있는 지에 대해서만 고민하기 시작했다. 점점 다양한 API를 만들어가고 다양한 사람들과 협업하면서 RESTful한 아키텍처를 지키려고 노력하게 되었다. 대부분의 레퍼런스가 모두 이 RESTful 원칙을 지켜서 API를 만든다. 그래서 별 생각 없이 은연중에 따라 RESTful을 지켜 개발하곤 한다. 오늘은 이러한 RESTful이 뭔지 자세히 정리해보려고 한다. 본론API란?먼저 API는 Application Programming Interface의 약자이다. 이 API라는 것을 통해서 어플리케이션의 데이터를 주고받을 수 있다는 것이다. 그렇게 생각하면 이 API라고 하는 것의 범위가 굉장히 넓..
평소에 백준 사이트에서 PS 문제를 푸는 것을 좋아한다. 알고리즘을 공부하는 것 자체만으로도 재미있고, 코딩 테스트를 언제든 준비할 수 있게끔 녹슬지 않게 실력을 가꾸기 위해서이다. 직접 백준 문제를 풀면서 파이썬을 통해 백준 문제를 풀 때 알아두면 좋은 것들을 정리하려고 한다. 이번 포스팅에서 다루는 것은 파이썬으로 백준 문제를 풀 때에 꼭 알아두어야 맞왜틀( 맞았는데 왜 틀리지 )을 방지할 수 있을만한 내용들이다. 본론시간복잡도 계산알고리즘을 푼다라고 하면 가장 기본적인 것은 시간복잡도 계산이다. 알고리즘에는 다양한 것들이 있지만, 우리가 기본적으로 사용하는 알고리즘의 시간 복잡도를 알고 있다고 가정하자. ( 예를 들어 이진 탐색의 시간 복잡도가 O(logN)이라는 것을 알고 있다 ) 그리고 다음 문..
인터넷의 다양한 웹사이트를 살펴보면 도메인을 입력하면 웹사이트에 연결된다. 이러한 당연한 기능을 막상 구현하려고 하면 생각보다 다양한 부분에서 의문이 생기게 된다. 예를 들어 node 프로젝트를 클라우드 서버(AWS EC2, GCP VM 등)에서 3000번 포트로 실행시키면 IP와 PORT를 통해서 접근해야 한다 ( http://127.0.0.1:3000와 같이 ) 이렇게 기본적인 서버 실행만 시킨다면 AWS 및 GCP 등 클라우드 서비스나 온프레미즈를 통해 웹 프레임워크를 실행시키면 깔끔한 도메인을 갖지 못하는 것을 알 수 있다. ( 뒤에 포트를 붙이거나, http로 연결된다거나 등 ) 이러한 것들을 해결해 줄 수 있는 것이 Nginx과 같은 웹 서버이다. nginx(엔진엑스)는 웹 서버로 HTTP와 ..
배포 파이프라인을 구현하는 과정에서 Java 계열과 node 계열 프로그래밍 언어들이 동작이 미묘하게 다르다는 것을 느꼈는데 (컴파일러와 인터프리터의 차이점으로 인한 것이었다) 관련 내용에 대해서 트러블슈팅하는 과정에서 얻은 인사이트를 요약하여 컴파일러와 인터프리터의 차이에 대해서 포스팅하려고 한다. 또한 전공 수업을 들으면서 C언어의 복잡한 컴파일 과정을 살펴보면서 생긴 개인적인 호기심을 해결하기 위해 조사하며, 함께 자바스크립트의 동작 원리도 좀 살펴보고 개인적인 호기심을 통해 조사한 내용을 읽기 쉽게 최대한 집약해 두었다. 차례차례 빌드, 컴파일, 인터프리터, 하이브리드에 대해서 알아보려고 한다. 빌드(Build)먼저 빌드(Build)라는 것은 단어의 뜻에서 알 수 있듯이 뭔가를 짓는다는 것이다...