본문 바로가기

분류 전체보기77

M1 사용기 - JVM환경에서 ARM / Rosetta 번역 알아내기 개발을 하다보면 JVM만이 아닌 다른 환경에 종속적인 코드를 작성할 때가 있습니다. (ex. TestContainers - docker 컨테이너를 실행) 이때, JVM은 정상적으로 로제타로 번역이 되어서 잘 실행되지만, 이런 코드로 실행되는 것들은 M1에 맞지 않는 경우가 있습니다. 이런 경우를 대비하여 코드단에서 ARM / M1인지 알아보는 방법을 작성해보겠습니다. * 해당 내용은 Kotlin으로 작성되었습니다. 1. System.getProperty 먼저 해볼 수 있는 것은 아키텍쳐 이름을 가져오는 것입니다. 이 정보는 시스템 클래스에 os.arch로 저장되어있습니다. 아래와 같은 코드로 확인이 가능합니다. if (System.getProperty("os.arch").toLowerCase().cont.. 2021. 10. 10.
Gin / time 타입 parsing 오류 (parsing time "~~~" as "~~~": cannot parse "~~~" as "~~~") 평화롭게 Gin을 가지고 놀던 어느 날, 시간 Field를 Request로 받아서 작업해야 할 일이 생겨서 관련하여 공부해보았습니다. 대충 format 지정해주고 넘기면 알아서 찰떡같이 parsing 해주리라 생각했던 것과는 달리, 꽤나 골치가 아팠어서 블로그에 정리해봅니다. 위에 이야기를 한 것과 같이 시간 정보를 parsing 해주기 위한 format을 어떻게 지정해주는지 알아봤습니다. 그리고 금세 나오는 정보는 아래와 같은 코드였습니다. type Person struct { Birthday time.Time `json:"birthday" time_format:"2006-01-02 15:14:13"` } 아하! 이런 식으로 bind할 structure에 time_format을 지정해주면 되는구나! 그.. 2021. 9. 25.
컴퓨터 내부 구조 😊 본 글은 한 권으로 읽는 컴퓨터 구조 책을 읽고 정리했습니다. 우리는 앞에서 이야기 한 내용들을 이용하여 비트를 조작하는 회로를 만들 수 있게 되었다. 이런 회로를 우리는 컴퓨터라고 한다. 현대의 컴퓨터는 크게 메모리, 입출력, CPU로 나누어진다. 이번 장에서는 이 세가지 부분이 서로 어떻게 연관이 되는 지 공부해보겠다. 메모리 컴퓨터에는 조작할 비트들을 저장할 저장소가 필요하다. 앞에서 이를 메모리에 저장한다고 배웠는데, 이제 컴퓨터가 이 메모리를 어떻게 쓰는 지 알아보자. 메모리는 각 위치에 주소가 부여되며, 이 주소로 메모리에 접근을 할 수 있다. 예를 들어서 64MiB의 메모리를 사용한다면 64 * 1024 * 1024인 67108864바이트만큼의 주소가 생성이 된다. 이렇게 주소로 메모리를.. 2021. 9. 12.
메모리와 디스크의 핵심 : 순차 논리 😊 본 글은 한 권으로 읽는 컴퓨터 구조 책을 읽고 정리했습니다. 우리는 지금까지 컴퓨터가 입력을 어떻게 처리하는지에 대하여 배운다. 이를 조합 논리라고 칭하였다. 하지만, 이것만으로는 우리가 원하는 복잡한 작업을 처리할 수 없다. 조합 논리만으로는 흐름의 일부분을 떼어내서 기억할 수 없기 때문이다. 이러한 문제를 해결하기 위하여 순차 논리에 대하여 이야기해볼 것이다. 순차 논리란 입력의 현재 상태와 과거 상태를 함께 고려한다. 이번 글에서는 시간을 만들어 내는 회로와 과거를 기억하기 위한 회로에 대해 이야기해 볼 것이다. 시간 표현과 상태 기억 발진자 발진자는 인버터의 출력을 다음 그림과 같이 입력에 연결하는 트릭을 이용하여 동작한다. 이러한 출력을 입력에 되먹이는 특성(feedback)을 통하여 출력.. 2021. 8. 8.