자바의 기본 구성 단위 객체

이 때까지 Python과 Javascript와 같은 다른 프로그래밍 언어를 다루어오다가 처음으로 Java를 다루게 되었습니다.
가장 차이가 나는 것은 바로 객체에 대한 상당한 의존성이 높다는 점입니다.
사소한 함수 하나를 사용하고 싶어도, 객체를 생성한 다음에 메소드로 구현해야한다는 점은 상당히 번거로운 일이었습니다.
우테코 프리코스 때에는 이러한 자바의 특성에 익숙해졌지만, 어려움을 겪었던 점이 있었습니다.



"원시 값을 포장하여 사용하라"



이게 어려웠던 점은 우리가 "같다" 라는 것을 정의하는 방법에는 많은 방법이 있는데, 자바의 객체로 구성되는 특성상 원시 값으로 포장할 경우에 String을 사용할 때 같음을 비교했던 "equals" 나 정수 값을 비교할 때 사용했던 "==" 이 통하지 않을 것을 알고 있었기 때문입니다.

@Override, 상속 등에 대한 개념도 너무나도 어려웠고, 이것을 왜 쓰는지에 대해서 감이 긴가민가 하던 시절이라 프리코스를 진행하면서는 원시 값 포장의 필요성만 깨닫고 넘겨버렸습니다. 하지만 자바를 본격적으로 다루면서 많은 원시 값 포장을 하게 되었고, 각 객체들의 동일성을 확인할 필요성이 생겼습니다.

객체의 구성요소 중 필드

 

저희는 객체에서 상태를 가질 수 있는 필드라는 값이 있습니다. 필드는 객체당 여러 항목들을 가질 수가 있는데요.
사람을 예시로 한 번 들어보겠습니다.

 

public class People {
    private String lastName; // 성
    private String firstName; // 이름
    private int age; //나이
    
    public String getLastName() {
    	return this.lastName;
    }
    
    public String getFirstName() {
    	return this.firstName;
    }
    
    public int getAge() {
    	return this.age;
    }
}

 

사람은 이렇게 이름으로써 성과 이름을 가지게 됩니다. 

이 때, 우리는 getter를 사용하여 어찌어찌 성과 이름을 비교를 할 수 있게 됩니다. 

 

KSJM.getLastName.equals(JMKS.getLastName)
KSJM.getFirstName.equals(JMKS.getLastName)
KSJM.getAge == JMKS.getAge

 

이렇게 String일 때 사용한다면 각각의 필드 값들은 같다고 나오게 될 것입니다. 

 

하지만 이러한 방식에는 몇 가지 문제점들이 예상이 되었습니다.

 

1. 객체들간의 비교를 할 시에는 하나만 비교하는 것이 아닌 다양한 필드 값들을 동시에 한꺼번에 비교해야만 한다.

우리가 사람을 비교할 때에는 성과 이름을 동시에 비교를 해야합니다. (물론 동명이인일수도 있지만)

하나 하나씩 비교하는 것은 이것을 수행하는 함수를 따로 만들어야하고, 이는 복잡함으로 이어집니다.

 

2. 각각의 필드 타입들의 경우에는 다양한 비교 기준을 가지고 있다.

예시에서도 볼 수 있듯이, Int와 String의 경우에는 동일성을 비교할 때, 다른 방법 "equals" vs "=="를 사용하고 있습니다. 만약 필드 값을 다 가져와서 비교를 하게 되면, 다른 비교 기준을 모두 맞추어 주어야합니다.

 

이러한 문제점들을 해결해주기 위해 사용되는 것이 바로 equals와 hashCode입니다.

 

객체의 단순 비교를 도와주는 equals

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        People people = (People) o;
        return age == people.age && Objects.equals(lastName, people.lastName)
                && Objects.equals(firstName, people.firstName);
    }

 

위에서도 볼 수 있듯이, @Override라는 Annotation을 통해서 상위 객체에서 메서드를 상속받아 재구현을 해준 것을 알 수가 있습니다. 이 때, Object는 모든 객체들의 정점에 있는 객체로써, 저희가 구현하는 객체나 가져오는 객체들의 첫 시작이라고 보시면 됩니다. 즉, 저희가 구현한 People도 코드에서는 작성을 하지 않았지만, 자동으로 위에서 상속받아 사용하게 됩니다. Object라는 객체는 상속하되, equals라는 메소드는 우리가 정의한 객체에 맞게 재정의하여 사용하겠다. 자바 코드 내에서도 equals를 사용해달라! 라는 의미를 담고 있습니다.

 

이 때 자세히 코드를 보시면 저희 People 객체의 여러 필드들이 보이게 됩니다.

 

1. int로 이루어진 age의 경우에는 기존의 == 를 사용하였습니다.

2. String으로 이루어진 firstName, lastName의 경우에는 equals를 사용하였습니다.

 

이를 통해서 객체들의 필드의 특성들을 고려해줌과 동시에 한꺼번에 모든 필드 값들을 비교할 수가 있게 되었습니다.

하지만 그럼에도 불구하고, 불안한 요소들이 있는데요. 

객체들이 인스턴스화될 경우에는 각 메모리에 저장이 되는데, 이러한 주소에 대해서는 신경을 쓰지 못한다는 점입니다.

즉, 동명이인에다가 나이가 같은 사람이 있으면 무조건 같은 사람으로 인식할 위험이 있습니다. 

이 점은 여러 자료 구조에서는 치명적인 결과를 낼 수가 있는데요. (중복이 안된다던가, 정렬이 힘들다던가)

이를 해결하기 위해서 같이 사용하는 것이 hashCode입니다.

 

동일한 메모리 주소를 인지를 확인해주는 hashCode

 

    @Override
    public int hashCode() {
        return Objects.hash(lastName, firstName, age);
    }

 

 

hashCode의 경우에는 객체가 동일한 메모리를 참조하고 있는지에 대한 내용입니다.

만약 김, 철수, 30세 라는 사람이 전국에 여러명 있을 경우에는 다르게 인식을 해주어야하는데, 자바에서는 캐싱을 사용하고 있지 않는 이상 필드는 같아도 다른 메모리에 저장이 되게 됩니다.

이 때문에 equals로 겉보기 필드를 비교하면서도 진짜 고유값이 맞는지를 확인해주는 메소드가 hashCode입니다.

저희가 사실 구현에서는 직접 볼 일이 없지만, 동일성을 확인하다가 일어날 수 있는 부작용을 확인하기 위해서 사용됩니다.

자료 구조에서는 HashMap 등 Hash를 사용하여 정렬하고 저장하는 자료구조에서 key로서 사용하게 됩니다. 이 때, 각각의 equals에서 필드의 동일성을 확인했음에도 불구하고, hashCode를 정의해놓지 않으면 다른 객체로 인식하는 문제가 생깁니다. equals를 정의를 해주셨다면, hashCode도 같이 정의를 해주는 것이 좋습니다.

안녕하세요. 

코드를 작성할 때, 시간 단축 및 가독성을 위하여 에디터를 많이 사용하게 됩니다. 가장 많이 사용하는 것이 아무래도 가벼우면서도 (200MB 안팎의 용량) 여러 Extension을 제공하는 VS code라고 말할 수가 있습니다.

VS code의 경우에는 Microsoft에서 코드를 공개하고 있습니다. 또한, Windows 뿐만이 아니라, Mac, Linux에서도 사용되고 있어요. 하지만 VS Code는 ARM 칩셋에서는 예외적인 경우말고는 정식적인 지원을 하지 않고 있습니다.

이는 VS Code만의 문제가 아닌 x86(Intel 및 AMD 칩셋, 대부분의 노트북과 데스크탑이 해당됩니다.)에서 최적화되게 설계되어있는 대부분의 데스크톱과 노트북 운영체제 특성상 간혹 가다 ARM에서 출시한 컴퓨터가 나오면 에뮬레이터를 거쳐서 사용하기 때문에 속도가 매우 느리거나, 아예 실행이 안 되는 경우가 있었습니다. 

제가 이전에 소개했던 Chromebook Duet의 경우에도 ARM 기반의 MeidaTek의 Helio 칩셋을 사용하고 있기 때문에 특정 라이브러리가 돌아가지가 않거나, 직접 빌드를 해주어야하는 귀찮음이 존재를 합니다. (하지만 공부용으론 이만한 게 없어요!)

하지만 저 x86의 특유의 떨어지는 전성비와 최근 인텔의 삽질로 인하여, 점점 ARM 칩셋이 데스크탑-노트북에 많이 사용하려는 시도를 하면서 (애플의 애플 실리콘으로 이주 및 삼성의 Galaxy book S, Microsoft의 Surface Pro X) 프로그램 호환에 대한 걱정도 많아지고 있습니다. 실제로 Galaxy Book S의 경우에는 그 부분 때문인지 중고시장에서 매우 저렴하게 팔리고 있더라고요. 

때문에 코딩에서 필수적인 요소 중 하나인 VS code를 어떻게 ARM을 구비한 장치에서 설치할 수 있는지에 대해서 알아보려고 합니다.

 

1. MS 유저의 경우 

친절한 마이크로소프트

https://code.visualstudio.com/Download

만약 ARM 칩셋을 기반으로 윈도우 노트북을 사용하고 있으면 그냥 쓰시면 됩니다. 

아무래도 MS사에서 이미 Surface Pro X라는 자사의 제품에다 스냅드래곤 칩을 사용한 노트북을 내놓았기 때문에 이를 위해서라도 공식 다운로드 홈페이지에 올려놓은 것 같습니다. 

지금까지 이것을 활용하는 기종은 2020년 9월 기준으로 이전에나온 Galaxy Book2, 그리고 Galaxy Book S, Surface Pro X밖에는 없을 것 같지만 차츰 기종이 늘어나면서 더 많은 기기에서 사용할 수 있을 것 같습니다.

 

2. Linux (Debian) 기반

리눅스 + ARM, 사람들이 어떤 이런 특이한 조합에서 VS code를 사용할까 싶지만, 생각보다 저 기기를 쓰는 사람은 많을 것 같습니다.

바로, Raspberry PI의 존재인데요, Raspberry PI에서는 Debian 기반의 Raspberry OS (구 Raspbian)과 Ubunutu Mate를 사용하는 사람들이 많기 때문에 생각보다 수요가 많은 것 같습니다. 

저 같은 경우에는 Raspberry에서는 코드를 다른 곳에서 짠 것을 넣거나, 조금의 수정해야 할 것 같으면 Vim Editor를 사용하여 곧바로 수정하는 것을 선호합니다. 하지만 이번에 새로 영입한 Chromebook Duet에서는 이전의 크롬북과 다르게 설치가 되지 않아서 이를 해결해야 할 방법이 있는데 두 가지가 있습니다. 

 

VNC 오른쪽에 설치 된것이 VS code Insiders 및 Code-oss 입니다.

 

2-1 Headmelter Code-oss .

 

https://code.headmelted.com/

HeadMelted 대문

이전의 Vscode를 찾는 사람들을 어여삐(?) 여겨 개발자들이 따로 VS code를 맞게 수정하여 빌드시켜놓은 HeadMelter입니다. 여러 버전이 있어서 (통상적으로 6개월마다 하나씩 나오는 것 같습니다.) 알맞게 설치할 수가 있고, CLI에 code-oss라고 치면 나오게 됩니다.

설치하게 될 경우 다음과 같이 나오게 됩니다.

 

다음과 같이 웬만한 기능들이나 Extension설치가 가능하다고 나옵니다. ARM64가 지원이 안된다고 나와있지만, 사용해본 결과 대부분의 기능에서 이상이 없습니다.

 

장점:

1. 이전의 아예 vs code를 사용할 방법이 없었던 사람들에게 되게 유용합니다.

2. 기존의 VS code보다 더 가볍고, 용량을 적게 잡아먹어서 코딩할 때 상당히 유용한 것 같아요.

3. 웬만한 extension 다 돌아갑니다.

 

단점:

1. 제 컴퓨터에서만 그런지는 모르겠지만, 패키지 업데이트할 때 버전을 못 읽어서 패키지 업데이트가 진행이 안 되는 경우가 있습니다. 때문에 이를 해결하기 위해서 패키지 경로에서 지워야 했습니다.

2. 몇몇 Extension이 돌아가지를 않습니다.

3. C언어 실행 시에 gcc 명령어를 입력하여 컴파일을 해주어야 합니다. Vs code에서는 키보드 단축키로 사용이 가능하지만(Windows와 WSL 모두), Code-oss에서는 실행이 되지 않습니다.

2-2 MS Visual Studio Code Insiders

(사실 이것을 쓰기 위해 블로그에 글을...)

Reddit에서 올라온 정보인데, MS Vscode Insiders에서 ARM에서 작동할 수 있도록 Insiders 방식으로 하여 올려놓았다는 글을 보게 되었고, 당장 설치하여 사용하게 되었습니다.

https://github.com/microsoft/vscode/pull/106289#issuecomment-691076575

이때, VS code와 Insiders의 차이가 무엇이냐 하면, 정규 버전과 베타 버전이라고 보시면 될 것 같습니다.

실행의 경우 code-insiders라는 명령어로 실행하게 됩니다.

아까와 달리 지원하지 않는다라는 알림 창이 뜨지 않는 것을 확인할 수가 있습니다.

 

장점

1. C언어 컴파일이 단축키로도 돌아갑니다.

2. 그전보다는 더 많은 Extension을 사용할 수 있습니다.

3. Code-oss은 수동으로 지웠다 다시 설치하는 식으로 업데이트를 하고, 이를 계속 확인을 해주어야 하고, 패키지 관리자에 등록이 될 경우 오류를 뿜어내었는데(Chromebook Duet 기준), 그럴 필요가 없습니다.

 

단점.

1. Code-oss보다 살짝 느리다는 느낌이 주관적으로 들었습니다.

 

저는 이런 이유 때문에 Code-oss에서 Visual Studio Code Insiders로 넘어가게 되었지만, 아마 Raspberry PI에서 사용하게 되면은 다시 Code-oss를 사용할 것 같습니다.

ARM VS Code를 정식 출시되는 날이 빨리 왔으면 좋겠습니다. 

'개발 환경 설정 > Linux' 카테고리의 다른 글

Linux 볼륨을 조정해보자. Alsamixer  (0) 2020.05.09

솔직히 말해서 저는, 외국에서 직구하는 것을 엄청 좋아하진 않습니다. AS 문제도 있고, 한번 전자 제품을 사면 최소 5년은 굴리는 저의 특성상 배터리는 한 번은 갈아줘야 하는데, 이것이 참 힘들어지기 때문이죠 (아직도 아이폰 SE유저입니다...)

하지만 기존에 구입해서 사용하고 있던 Galaxy Note 10.1 2014 Edition이 너무 노쇠화 + 어플리케이션 호환이 안된다는 점 때문에 점점 한계점을 느끼고 있었습니다. 하지만 다음 태블릿 pc의 경우에는 이제는 학생의 신분이 아니기 때문에 필기가 그다지 필요하지 않았고, 대신에 간단한 개발이나 코딩 테스트 연습과 같은 기능에 조금 더 적합한 기기를 찾게 되었습니다. 이런 기능을 쓰기 위해서는 크롬 OS의 성질을 가져야 하는데.. 크롬 OS는 일부 기종과 Pixel Slate를 제외하고는 기본적으로 랩탑으로 나오고 있었기 때문에 저의 목적을 완벽히 만족은 못 시켜주는 것 같았습니다. 

하지만 이번에 두 기능을 완벽하게 만족시켜주는 Lenovo Chromebook Duet이 나오게 되었고, Google Pixel Slate와 비교하던 저는 아무래도 조금 더 업데이트가 오래가는 Duet을 선택하게 되었고 리뷰를 한번 남겨보도록 하겠습니다. (1년간 쓰던 Samsung Chromebook 3ㅂㅂ..)

 

회사에서 원격으로 프로그램 돌려놓고 찍어봤습니다.

 

I. Lenovo Chromebook Duet

지난 1월에 발표되어 5월에 출시된, Lenovo의 Chromebook이자 Tablet 제품입니다. 이전에 Acer, Asus, Lenovo에서 Chrome OS를 장착한 테블릿을 내놓게 되었지만 그다지 좋은 평을 얻지 못하였습니다. 안드로이드와 가벼운 OS, 그리고 리눅스 사이에서 길을 잃은 태블릿 환경하에서의 Chrome OS의 모습입니다. 하지만 이번 Chreombook Duet은 출시되고 얼마 안돼서 매진을 기록하며 엄청나게 인기를 끌고 있는 것 같습니다. 적어도 Amazon이나 BestBuy와 같은 사이트에서는 못 구하고 기존 출시가에 비해서 거의 30% 정도의 프리미엄을 붙여서 이베이에서 팔고 있는 것 같습니다. 심하면 50%까지도 가는 것 같아요.

 

II. 장점

a. 배터리

배터리가 정말로 오래가는 것 같습니다. 사용 시간이 10시간이 넘는다고 되어 있는데, 설마 진짜 그 정도로 가겠어?라는 생각이 들었지만, 지금 3일째 배터리 충전 안 하고 계속 사용하고 있는 것 같습니다. 동영상만 보는 것이 아닌 리눅스를 이용하여 코딩도 하고, 문서 작업도 하는 등 많은 작업을 했는데도 아직도 20% 정도 남았습니다. 기존의 크롬북도 물론 배터리로 오래가지만, Intel 칩셋 특성상 이 정도로 오래가지는 않았는데... 아마 블루투스 이어폰을 사용 안 하거나, 밝기를 조절한다면 더 좋을 것 같습니다. 

 

b. 휴대성

아무래도 기존 크롬북의 경우 서브로 많이 쓰긴 하지만, 경량화 노트북에 비해서는 상당히 비중(?)이 높기 때문에 엄청 가볍지는 않았습니다. 하지만 Lenovo Chromebook Duet의 경우에는 키보드와 합해도 그렇게까지 무게가 나간다는 생각은 들지 않았습니다. 더군다나 키보드를 빼서 사용하면 통근 시간 때 유튜브 머신으로 활용하기도 참 좋았고요. 화질도 1920x1200으로 깔끔하다는 생각이 들지 화질이 나쁘다는 생각이 들지는 않았습니다.

 

c. 태블릿+리눅스

태블릿에서 리눅스를 사용하려면 Termux를 사용하는 등 다른 어플리케이션을 거쳐야하는데...이게 여러모로 불편하거나 오류가 나는 일이 많더라고요. 크롬 OS에서는 베타 기능이긴하지만 Debian기반의 리눅스를 별도의 설정 없이 클릭 몇번으로 설정할 수 있기 때문에 이 점이 편리했던 것 같았습니다.

oh-my-zsh를 설치하고 나서 크롬북에서의 터미널 모습

또한, 기존의 픽셀 슬레이트의 경우에는 발적화 논란으로 원활하게 기능이 돌아가지 않는다는 이야기가 많았는데, 이번 Chromebook Duet에서는 그냥 테블릿 사용하는 것처럼 사용할 수 있어서 좋았던 것 같았습니다. 멀티태스킹 등의 점에서 안드로이드 웬만한 Tablet못지않게 좋았습니다.

 

d. 생각보다 좋은 성능

MediaTak Helio + 4GB RAM...으로 인해서 과도한 멀티태스킹이나 빠른 성능은 기대를 안 해야겠다는 생각이 들었습니다.

하지만 사용하다 보니까 의외로 애플리케이션이 원활히 돌아가고, 여러 크롬 탭을 띄워도 그렇게 느려지거나 끊긴다는 생각은 들지 않습니다. 이 정도면 크롬 OS에서는 유튜브 머신이나 문서작성 정도로 충분히 사용할 수 있는 것 같습니다.

 

III. 단점

a. 갤럭시 시리즈와 비교했을 때의 필기

갤럭시 시리즈의 경우 플래그쉽 모델의 경우에는 펜이 내장이 되어있고, 이를 기반으로 팜 리젝션이 잘되기 때문에 순수하게 필기만 하면 진짜로 괜찮은 선택인 것 같습니다. 추가 비용도 들지 않고요. 하지만 이번 Chromebook Duet의 경우에는 USI 펜을 사용한다고는 하지만, 정식적으로 팬이 같이 오지 않기 때문에 따로 구매를 해야 하고 USI 팬은 상당히 지금 가격이 비싸게 형성이 되어있어서... 필기만 하면 추천드리지 않을 것 같습니다. 다른 팬도 사용을 해봤는데, 팜 리젝션 문제 때문에 원활히 필기를 하지 못해서 좀 아쉬웠던 것 같습니다.

 

b. 키보드

키보드 자체가 도킹이 돼서 사용하는 건 서피스의 느낌이 난다는 생각이 듭니다. 하지만 이 키보드의 경우 타건감이 그렇게 좋지는 않습니다. 또한 상당히 말랑말랑(?)해서 언제 찌그러들지 모르는 강도를 가지고 있기 때문에 상당히 불안한 점도 있는 것 같습니다.

 

c. 가상 머신에서의 리눅스의 한계

지난 WSL2 패치 이후에 윈도의 WSL은 상당히 속도가 빨라진 게 체감이 될 정도로 사용감이 괜찮아졌습니다. 원래 리눅스로 무조건 설치해야지 했는데, 조금은 생각이 바뀔 정도로요. (근데 요즘 다시 리눅스 깔고 싶습니다.) 하지만 아직 크롬 OS의 경우에는 기존의 WSL이 채택하던 가상화 머신처럼 운용이 되고 있는데, 이에 따라 답답하게 느린 것 같습니다. 리액트 시작하는데 3분은 걸려요.... 단순한 코딩 공부라면 괜찮긴 하지만, 조금 큰 라이브러리나 프레임워크 다루면 조금은 속도차가 느껴질 것 같아요.

 

d. ARM 프로세서의 한계

갤럭시 북 s가 나오게 되면서, 저도 계속 ARM PC를 노려보고 있는데... 이번 ChromebookDuet으로 한계점을 확실히 알 수 있었던 것 같았습니다. scss와 같은 확장자를 사용하지 못한다는 것과 visual studio code와 같은 프로그램도 ARM으로 빌딩이 안되어있기 때문에 따로 수정을 해주거나, 빌드를 다시 하거나 혹은 그에 맞는 프로그램을 다시 설치를 해줘야 한다는 단점이 있는 것 같습니다.

Code-oss

물론 비슷하게 나온 Code-oss와 같은 프로그램을 사용하면 돼서 불편한 점은 조금 사라진다만.... 스크롤이나 클릭, 그리고 Extension에서 호환성 문제가 확실히 보이며, 몇몇 기능이 작동하지 않는 것이 보입니다. 쓸 수는 있지만, 한번씩, 아? 왜 이게 안되지 하는 수준이랄까요?

e. 포트가 하나.

USB C 포트 하나밖에 없습니다. 태블릿을 생각하면 그렇게 적지 않지만, 이 기기의 원래 정체성이 크롬북임을 생각했을 때는 상당히 작은 편입니다. 이어폰을 사용하려면 블루투스 이어폰이나 잭을 사용해야 하고, HDMI사용도 USB 포트가 필요합니다. 이 때문에 상당히 추가 비용이나 추가적인 물건들을 들고 다녀야 한다는 점이 단점으로 작용을 하는 것 같습니다.

 

 

IV. 결론

단점이 다섯 개 장점이 세 개임에도 불구하고 좋은 기기인 것 같습니다.

첫 번째로는 말도 안 되는 가성비.. 지금 프리미엄이 조금씩 붙는 것 같지만, 이전에 비싼 가격과 희대의 발적화 + 발열로 욕을 들어먹었던 구글 픽셀 슬레이트의 가격과 성능을 비교해봤을 때 이 정도 가격이면 정말 거저 준다는 생각이 들었습니다.

두 번째로는 타깃이 명확한 점입니다. 필기 기능의 경우 저는 학교 졸업이기 때문에 필요하지 않고, 오히려 타자 기능 + 간단한 개발 기능이 필요했는데, 이러한 부분에서는 따라갈 기기가 없는 것 같습니다. 물론 필기 기능을 원하거나 좋은 화질을 원하신다면 갤럭시 탭 S시리즈를 추천드릴게요.

 

엄청 하이엔드 기기를 원하지 않지만, 다양한 태블릿 + 노트북의 멀티플레이어의 성질을 가지면서, 가성비를 따지고 싶다면 이 기기를 적극 추천드리고 싶습니다.

I. Introduction

git을 제대로 사용하고 시작하고 나서는 어떤 branch로 사용하고 있는지, 버전은 어떻고 경로는 어디인지 쉽게 확인하기 위하여 bash에서 zsh 환경으로 바꾸고 사용하고 있습니다. WSL에서도 사용 가능한 것을 확인하고 잘 사용하고 있습니다. 물론 우분투에서 쓸 때 만큼 창이 깔끔하게 나오는 것 같지는 않아서 agnoster로는 설정을 하지 않았습니다. (그래픽 관련된 것만 띄우지 못하지 터미널 관련된 문자로 나타내는 것들은 모두 사용 가능한 것 같습니다. 하지만 초기 설정이 잘못이 되어서 그런지 다음과 같은 글들이 나오고 나서 커맨드 창이 나오게 됩니다.

초기 시작 문구들

사실 쓰는데 별 지장은 없지만, 계속 뜨다보니까 지저분하기도 하고 신경이 계속 쓰이게 되는 것 같습니다. 때문에 이 문제를 수정해보았습니다.

II. 해결책

cd
pwd

먼저 가장 상위 폴더로 가기 위해서 cd만 터미널에 입력을 해줍니다. 그 이후에는 pwd를 눌러서 주소를 확인해주는데 

/home/[사용자 이름]

이 나오게 되면 괜찮습니다.

 

그 다음에는 

vim .zshrc

를 입력을 해줍니다. vim editor를 사용하여 설정을 조금 바꿔줄겁니다.

참고로 오늘 쓸 단축키는 i(삽입), esc(상황 종료? 비스무리합니다.), :wq(저장 및 editor 종료입니다.)

 

위 버튼을 누르면 밑과 같은 창이 뜨게됩니다.

 

 

zsh 설정 창

이 창에서는 여러 zsh 테마와 같은 설정을 바꿔줄 수가 있습니다.  저희는 먼저 j를 눌러서 두번째 줄로 이동한 다음 i를 눌러서 삽입 모드로 전환하도록 하겠습니다. 그 다음에는 다음과 같은 글을 쳐주시면 됩니다.

 

ZSH_DISABLE_COMPFIX = TRUE

 

그 이후에는 :wq를 입력하여서 editor를 종료해주시면 됩니다.

이후에 WSL Terminal을 켜주게 된다면 이전과 같은 글들이 뜨지 않는 것을 확인 할 수 있습니다.

 

문제 해결

 

'개발 환경 설정 > WSL 환경 설정' 카테고리의 다른 글

WSL2 변환 및 세팅  (0) 2020.07.21
WSL에서의 Jupyter notebook 사용하기.  (0) 2020.05.15

I. Introduction

 

드디어, WSL2 업데이트를 할 수 있는 Windows10 2004 버전이 출시가 되었습니다. (블로그에 떡밥푼지 3개월만에..) 사실, MS사는 Window10의 업데이트 버전을 3월과 9월에 각각 출시를 하고 있습니다. 하지만 여러 가지 회사 사정과 전대미문한 판데믹 사태 때문에 출시가 조금 늦어진 것 같아요. 공식 출시일은 5월 진짜 말이었던 것으로 기억합니다.

하지만, 출시하고도 몇몇 기기들의 경우 호환성 문제 때문에 업데이트가 되지 않았는데 최근에서야 저의 노트북의 호환성에 맞는 업데이트가 갖추어지게 되어서 바로, WSL2로 갈아타게 되었습니다.

 

II. 과정

먼저 본인의 컴퓨터의 Window10이 2004 버전, 빌드는 19041과 같거나 높은지 확인해주세요

 

설정 - 시스템 - 정보 - 윈도우 사양에 가서 확인할 수가 있습니다.

Windows 사양 확인

 

(WSL 설치가 되어 있지 않은 분들은 WSL 설치를 먼저 오고 와주세요, VS Code 이전까지 설정해주시면 됩니다.)

https://ksjm0720.tistory.com/2

 

WSL 개발 환경 설정(1) - 초기 설정

그냥 리눅스 컴퓨터 쓰세요. 안녕하세요. 오늘은 Windows에서도 리눅스 컴퓨터를 사용할 수 있도록 하는 WSL (Windows Subsystem for Linux)환경 설정을 시작해보도록 하겠습니다. 아마 WSL을 사용하려는 이�

ksjm0720.tistory.com

 

WSL2 전환의 경우 매우 간편하고 많이 걸리지 않습니다.

 

먼저, Powershell을 열고 나서 관리자 권한으로 실행을 누르시길 바랍니다.

그 다음에 명령어를 입력해주세요

 

 Powershell

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 

powershell CrossPlatForm으로서의 전환

 

 

이후에 컴퓨터를 재시작해주시길 바랍니다.

 

그 다음엔 만약 아직 어떤 리눅스 배포판을 쓸지 생각 안하신 분은

 

wsl --set-default-version 2

 

이미 설치를 하신 분은 설치 한 버전의 것을 다음과 같이 넣어주시면 됩니다.

 

wsl --set-version [설치한 리눅스 배포판] 2

 

저의 경우에는 Ubuntu20.04를 사용했기 때문에 다음과 같이 넣어주게 되었습니다.

 

wsl 2단계 업데이트 명령어 및 업데이트 중

그 이후엔 버전 체크 명령어인

 

wsl -l -v

 

를 통해 확인해 줄 수가 있습니다.

 

WSL 업데이트 전 버전
WSL업데이트 후 버전 확인

다음과 같이 변한 것을 확인 할 수가 있네요.

 

III. 그래서 뭐가 좋은데?

a. 속도

MS사 공식 소개 영상에 보면 이전보다 속도가 어마어마하게 빨라졌다고 자랑은 합니다만.. 엄청 크게 체감은 안되는 것 같습니다. 하지만, 단순히 sudo apt-get update나 upgrade 명령어를 넣고 기다릴 때 짧게 기다렸습니다. 그리고 기존의 WSL의 경우에는 터미널에서 가끔 신호가 끊기는 현상이 있었는데, (특히 패키지 다운로드 할거나 작업 복잡한거 돌릴때) WSL2의 경우에는 조금 그 부분이 개선된 것 같습니다.

b. Windows Terminal에 추가

Windows Terminal 기존의 옵션

 

WSL2 업그레이드 이후의 Windows Terminal 옵션

이전에는 잘 쓰지 않았던 Windows Terminal이라는 어플리케이션에서 추가할 수 있는 기능이 생긴 것 같습니다. 사실 오른쪽 클릭 이후에 Linux를 열면 되는거라 그렇게 신경은 안 쓰고 있었는데, 브라우저의 탭 기능처럼 여러 Linux terminal 창을 띄워서 쓸 수 있는 점은 정말 매력적으로 다가오는 것 같습니다.

Windows Terminal에서의 WSL 실행

 

c. 몇몇 오류 해결

Subsystem의 한계에 의해서 기존의 WSL Ubuntu 20.04의 경우에는 여러 문제들이 많았습니다. Github와 Stackoverflow에서 해결책을 찾아보려고 하더라도 돌아오는 답변은 시스템의 불안정과 지원문제 때문에 Ubuntu를 다운그레이드 하라는 이야기가 많았습니다. 하지만 WSL2로 넘어오면서 몇몇 문제들이 해결되는 것을 확인하였습니다.

I. Intro

지난 번 WSL에서 Jupyter notebook을 사용하게 되었는데, 사실 Python은 여러 가지 패키지 상의 문제나 시스템 상의 이유로 다양한 버전을 다운로드 받아서 사용하고 있는 경우가 많습니다. 저의 경우에도 인제 막 시작한 Django를 혼자 쓸 때나 데이터 분석 툴들을 사용할 때에는 Python3.8을 사용하지만, 동아리에서 진행하는 Django sesison이나 Tensorflow를 건드려 볼때에는 3.8 버전이 아직 나오지 않아서 3.7 버전을 어쩔 수 없이 사용하게 됩니다. 그래서, 이 두 개의 버전을 Jupyter notebook에 사용하고 싶어서 처음에는 따로 따로 다운 받아서 사용하면 된다고 생각을 하였습니다.

 

python3.8 -m pip install jupyter notebook

python3.7 -m pip install jupyter notebook

 

이렇게 깔아주고 패키지 관리를 각각 파이썬 별로 해주면 됩니다. 근데, 이렇게 되었을 때 jupyter notebook에 가서 다음과 같은 명령어로 버전을 확인해주면,

 

import sys

sys.version

 

아마 처음에 깔린 python 버전만 나오지, python3.7 -m jupyter notebook이라는 명령어로 실행시키더라도 python3.8이 실행되는 분통터지는 모습을 볼 수가 있을 겁니다. 이러한 일이 일어나는 이유는 무엇이고, 어떤 방법으로 해결할 수가 있을까요?

 

II. 들어가기전 개념 정리

 

이상적인 패키지 정리

 

보통은 많은 패키지들은 위의 방식과 같이 각각의 Python version에 대해서 하나씩 깔리는 형태를 취하고 있습니다. 때문에 Python3.7 버전에서 다운 받은 django, pandas, numpy와 같은 패키지들이 3.8에서 사용되지 않는 것은 의존성이 각각의 버전에 맞추어져있고, 따로 따로 깔아서 사용해주어야 한다는 점으로 볼 수가 있을 겁니다.

Jupyter notebook은 어떨까요?

우리가 착각했던 관계

 

Jupyter notebook의 경우에도 pip를 사용하여 깔 수 있으나 조금은 다른 방식으로 접근을 해주어야한다는 것을 알 수가 있습니다. 바로 R과 같은 다른 언어에서도 기존의 Jupyter Notebook을 이용하여 사용할 수 있다는 점인데요. 아까의 패키지가 각각의 버전에 따로 깔려서 사용한다면 R에서는 작동이 되지 않아야하는데, R과 같은 다른 언어에서도 사용할 수 있다는 점이 살짝 이상하게 다가오긴 합니다. 때문에 관계는 다음과 같게 설정됨을 알 수가 있습니다.

 

진짜 관계

여기서 저희는 이런 프로그램 언어들이 돌아갈 수 있는 환경을 커널이라고 부르고 있습니다.

각각의 python3.7 python3.8 R과 같은 커널들이 존재를 하고 이 언어들을 Jupyter Notebook에 인식을 시켜서 우리는 Jupyter Notebook을 통해서 파일을 수정하고 실행을 해보게 됩니다. 때문에, python 다른 버전에서 설치를 해도, 이미 설치가 되어있는데, 뭘 설치를 하라는건지 컴퓨터에서는 아리송할 수 밖에 없는 것이죠. 만약 하나에 설치가 되어 있으면 커널 추가를 통해서 문제를 해결 할 수 있습니다.

 

III. 커널 추가

 

초창기 상태 입니다.

 

먼저 저의 상태는 python3이라는 python3.8의 버전이 깔려 있습니다. 여기에 3.7을 추가해보도록 하겠습니다.

 

입력할 명령어는

 

python3.7 -m pip insatll ipykernel

python3.7 -m ipykernel install --user --name="이름"

 

입니다. 이 때 추가를 원하는 버전의 python을 기준으로 앞의 python3.7 버전을 수정시켜주시면 되고, 이름의 경우에는 원하시는 인식명을 적어주시면 됩니다. 저의 경우에는 "Python(3.7)"로 하게 되었습니다.

이후 추가 되었다는 결과문이 나오게 되고 jupyter notebook을 다시 실행시켜주게 되면.

 

 

잘 설치 되었습니다.
시스템도 인식됩니다.

 

다만 Default로 설정되어있는 값이 존재를 하기 때문에, Jupyter notebook 파일을 열고나서는 커널을 기본 커널이 아닌 다른 커널로 변경을 해주셔야합니다.

'Programming > Python' 카테고리의 다른 글

Programming tip - Meta Programming  (0) 2020.04.04

+ Recent posts