Device : 2021 M1 Macbook Pro 16
OS : macOS Monterey (12.0.1)

universalaccessd

universalaccessd의 메모리 점유가 비정상적으로 높아지는 상황이 발생했다.

monterey에서 발생하는 메모리 누수 버그

M1한정인지는 모르겠으나, macOS Monterey에서 발생하는 메모리 누수 버그가 있다.

구글링 해 본 바로는, 특정한 상황에서만 발생하는 메모리 누수 버그였다.

아마 이 글을 찾아보는 분들중에는, 대부분 마우스 커서를 변경했을 것이다. 그것이 아니라면 이 글로는 해결이 되지 않는다.

Monterey의 커서 색상 변경 기능

Monterey에서 새롭게 추가된 기능인 커서 색상 변경은, 메모리 누수 버그의 원인으로 보여진다.

커서 색상설정 리셋

해결 방법은 그저, 커서 색상을 설정했던 곳으로 돌아가 설정을 리셋해주면 된다.

시스템 환경설정 > 손쉬운 사용 > 디스플레이 > 포인터 > 재설정

System Preference > Accessibility > Display > Pointer > Reset

Device : 2021 M1 Macbook Pro 16
OS : macOS Monterey (12.0.1)

맥북에서 워드를 사용할 때, 메모리

MacBook에서 Word프로그램을 사용하다 보면 순식간에 엄청난 메모리를 사용하게 될 수 있다.

아래와 같이 순식간에 64GB가 넘는 메모리를 사용하게 될 수 있다..

이렇게 많은 메모리를 사용하게 되면 어느 순간 응용 프로그램이 예기치 않게 종료 되었습니다라는 오류 문구를 보여주며,

프로그램들이 하나씩 강제 종료된다.

메모리를 많이 사용하는 자동 수정(고침), 맞춤법 및 문법 검사 기능

이 현상의 원인은 바로 Word의 자동 수정(고침) 기능때문이다.

Word를 실행한 상태에서 Command + , 버튼을 동시에 누르면 Word 기본 설정창이 나타난다.
또는, 왼쪽 상단에서 Word > Microsoft Word 정보를 누르면 된다.

맞춤법 및 문법 검사

맞춤법 및 문법 검사를 누르면 아래와 같이 여러 가지 검사 옵션이 있다.

최소한으로 필요한 것들을 제외하고서는 모두 체크 해제해준다.

내 경우에는, Word에서 문서를 작성할 때에는 맞춤법 검사를 하지 않고,

문서 작성이 끝나면, 한꺼번에 맞춤법 검사 사이트에서 검사해준다.

자동 고침

자동 고침을 누르면 아래와 같이 입력할 때 맞춤법 및 서식을 자동으로 고침이 체크되어 있을 것이다.

이 체크를 해제해준다.

마치며

맥북을 사용하는 사람들 중, 워드 작업을 주로 하는 분들도 많이 계실 텐데

위 내용을 따라 해서 메모리 사용을 줄여주면 더 이상 문서 작업할 때, 메모리를 고민할 필요가 없을 것이다.

그리고, 혹시나 웹서핑을 할 때 창을 많이 띄워놓고 사용하는 편이라면, Chrome보다는 Safari를 사용하는 것을 추천한다.

Chrome은 많은 메모리를 사용하기 때문에, 최대한 적은 창을 사용하는 것이 좋다.

문제

이번에 2021 Macbook pro 16을 구매한 상태에서, 모니터와 어떻게 연결할지에 관해서 고민을 하게 됐다.

Macbook (Thunderbolt 4) <-> Monitor (Thunderbolt 2)

상담

이에 대해서 애플 공홈에서 상담을 진행한 결과는 아래와 같다.

결론

Thunderbolt 2 케이블 + Thunderbolt 4 to 2 어뎁터 의 조합으로 연결을 하면 된다.


(수정)


Thunderbolt 4 인텔 공식 레퍼런스

위 링크에서 확인했을 때, Thunderbolt 3Thunderbolt 4 가 호환되는것으로 보아,

Thunderbolt 2 케이블 + Thunderbolt 3 to 2 어뎁터 의 조합도 사용이 가능할 것으로 보인다.

❗️ 버전 요구사항

  • Xcode 11 이상
  • macOS Catalina 이상
  • iOS 13 이상

ViewController 소스파일에 Preview를 위한 코드를 삽입

import UIKit

class SignUpViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

}

#if canImport(SwiftUI) && DEBUG
import SwiftUI
@available(iOS 13.0, *)
struct presentable: UIViewRepresentable {
    func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<presentable>) {
    }

    func makeUIView(context: Context) -> UIView {
        SignUpViewController().view
    }

}
@available(iOS 13.0, *)
struct SignUpViewController_Previews: PreviewProvider {
    static var previews: some View {
        presentable()
    }
}
#endif

여기서 주의할 점은 Controller class 이름에 맞춰서 코드를 작성해야 한다는 것 입니다.

위 코드에서는 SingUpViewController 로 일치하는 것을 볼 수 있습니다.

Preview 실행

에디터 오른쪽 상단에 있는 두번째 아이콘

Canvas 를 클릭.

Layout → Canvas on Right 클릭해서
Preview를 보기 수월하게 할 수 있습니다.

완성된 화면

주의사항

  • Storyboard에서 편집한 화면은 적용되지 않습니다.

출처
https://stackoverflow.com/questions/67057597/how-to-change-xcode-preview-position-side-to-right-side
https://hryang.tistory.com/8

대략 30~35GB까지는 설치가 안되다가, Command Line Tools를 지운 시점인 47GB부터는 설치를 할 수 있게 되었다.

기존의 Xcode 12.5버전에서 업데이트를 하려는 분들 중, 용량이 부족하신분은

기존 Xcode와 Command Line Tools를 지워서라도 45GB이상을 확보하신다면 설치를 할 수 있습니다.

자료를 찾아보다가 깃허브에서 괜찮은 자료를 발견했을 때
그 레포지토리에 너무 많은 디렉토리가 있고, 내가 원하는 자료는 그중 일부라면 레포지토리를 통째로 클론하는것은 부담이 된다.
그럴때는 특정 디렉토리만 클론할 수 있는 방법을 사용해야 한다.


상황

예를 들어서 아래와 같이 수많은 디렉토리가 있고,

나는 그중 src/algo 디렉토리만 클론하기를 원한다.


방법

1. 일단 내 local에 클론을 할 공간을 만들어준다.

git init

2. sparse Checkout기능을 사용하도록 설정한다.

git config core.sparseCheckout true

3. 원하는 디렉토리를 sparse Checkout의 대상으로 지정해준다.

echo src/algo > .git/info/sparse-checkout

4. remotes repository에서 local로 파일을 받아온다.

git pull origin master

REF

https://www.lesstif.com/gitbook/git-clone-20776761.html

상황


서버에는 A의 ip로만 접속할 수 있도록 방화벽이 설정되어있습니다.

그렇기에 다른 곳에서 B의 ip로 서버에 접속할 수 없는 상태입니다.

구성


위와 같이 방화벽 예외 설정이 되어있는 A의 ip를 경유 서버로 활용하여 목표하는 서버에 접속하는 방법을 사용합니다

이것을 Jump Host라고 합니다.

준비


B는 mac(linux or unix), A는 window 인 본인의 환경으로 설명을 하겠습니다.

B가 window일경우 putty를 , A가 mac일 경우 macOS SSH서버 를 준비하면 됩니다.

1. A가 클라이언트가 아닌 서버가 되어야 합니다.

2. A는 포트포워딩이 되어 있어야 합니다. 

3. 접속이 원활한지 확인해봅시다.

 

1. A를 경유 서버로 만들기

더보기

1. A에 OpenSSH서버 설치

검색창에 앱 및 기능을 검색합니다

선택적 기능에 들어갑니다

기능 추가를 클릭합니다

ssh를 검색한 후, OpenSSH 서버를 설치합니다

설치 완료


2. 서버 실행

관리자 권한으로 PowerShell을 실행해 줍니다.

아래의 명령어를 입력해서 서버를 실행, 종료할 수 있습니다.

start-service sshd stop-service sshd

3. 비대칭 키 인증 적용을 위한 서버 설정

비밀번호를 이용하면 보안에 취약할 수 있으므로 Public Key를 이용한 인증을 사용합니다.

관리자 권한으로 실행한 PowerShell에 아래와 같이 입력합니다.

notepad.exe $env:Programdata\ssh\sshd_config

이 파일에서 Ctrl+F를 이용해 아래의 항목들의 주석을 해제하고 값을 변경해줍니다.

PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no

그리고 아래 코드 블록을 찾아서 주석 처리해줍니다

Match Group administrators
	AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
주석처리한 모습

4. 클라이언트(B)에서의 Public Key 발급

이제 위에 설정한 서버(A)의 클라이언트(B)가 될 pc에서 Public Key를 발급받겠습니다.

여기서의 B가 이번 절의 대상(클라이언트)입니다.

본인의 경우 클라이언(B)트 pc는 맥북입니다.

일단, 이미 발급한 Key가 있는지 확인하기 위해 터미널을 열어 아래의 명령를 입력합니다

cat ~/.ssh/id_rsa.pub
이렇게 나온다면 이미 존재하는 것 이므로 다음 절로 넘어갑니다.

Key를 발급하는 것은 매우 쉽습니다. 아래와 같은 명령만 입력하면 됩니다.

ssh-keygen

아래 질문에는 Enter를 눌러 Default값으로 설정해 줍니다.

default값인 ~/.ssh/id_rsa

그리고 key를 사용할 때 입력할 비밀번호를 입력해줍니다. 그냥 Enter을 치면 비밀번호 없이 접속 가능합니다.

설정이 끝난 상태

이렇게 발급이 끝났으면 다시 한번 아래 명령을 입력해 key값을 확인합니다.

cat ~/.ssh/id_rsa.pub
key값을 확인

 


5. 클라이언트(B)의 key값을 서버에 저장

다시 서버(A)로 사용할 윈도우 컴퓨터, 위에서 봤을 때 A컴퓨터로 돌아옵니다.

관리자 권한으로 PowerShell을 켠 뒤, 아래 명령어를 입력해줍니다.

mkdir "$HOME\.ssh"

이제 클라이언트(B)의 key값을 저장할 파일을 만들겠습니다. 아래 명령어를 순서대로 입력해줍니다.

$authorizedKeyFilePath = "$HOME\.ssh\authorized_keys"
New-Item $authorizedKeyFilePath
notepad.exe $authorizedKeyFilePath

그런 다음, 클라이언트(B)에서 발급받은 key값을 모두 복사하여 이곳에 붙여 넣어줍니다.

ssh-rsa부터 전부 입력되어야 합니다.

이렇게 한 뒤 저장하면 서버(A)에 내 Public Key값이 저장되게 됩니다.


6. 인증 키를 저장한 파일의 권한 설정하기

똑같이 관리자 권한으로 실행한 PowerShell에 아래 명령을 순서대로 입력하면 됩니다.

icacls.exe $authorizedKeyFilePath /remove "NT AUTHORITY\Authenticated Users"
icacls.exe $authorizedKeyFilePath /inheritance:r
Get-Acl "$env:ProgramData\ssh\ssh_host_dsa_key" | Set-Acl $authorizedKeyFilePath
명령을 순서대로 입력한 모습

이렇게 하면 경유 서버로 사용할 서버(A)의 설정이 모두 완료됩니다.


2. 경유서버(A) 포트포워딩 하기


이부분은 공유기마다 서로 다르기 때문에 공유기에 따른 포트포워딩 방법을 검색하셔서 참고하시면 됩니다.

포트포워딩은 22번포트, 공유서버(A)의 IPv4주소로 포트포워딩 해주십시오.


3 .클라이언트(B)에서 서버(A)에 접속해보기


더보기

1. 서버의 정보 알아내기(내부 IP, 이름, 외부 IP)

일단 접속할 서버(A)의 IP와, UserName을 알아야 합니다.

그래서 서버(A)의 컴퓨터에서 다시 관리자 권한으로 PowerShell을 실행하여 아래 명령을 입력한다.

ipconfig

결과창에서 IPv4 주소를 참고하면 된다.

IPv4주소를 알아낸다.

아래 명령어로 서버를 켜고

start-service sshd

아래 명령어로 자기 자신의 서버(A)에 접속합니다.

ssh 172.xxx.x.xx(자기의 IPv4 주소)

질문이 나오면 yes(Enter)를 입력합니다.

우리가 필요한 것은 두번째 빨간 박스이다.

우리는 이전에 Public Key인증을 등록해놨기 때문에 Key가 없으면 접속이 허용되지 않습니다.

그래서 위와 같이 Permission denied오류가 나오는 것입니다.

위의 결과창에서 우리는 UserName을 얻을 수 있습니다.

본인의 경우는 빨간 박스 쳐진 sever입니다.

마지막으로 외부 IP를 알아내야 합니다.

간단하게 www.ipconfig.co.kr 에 접속하여 나오는 주소가 외부 IP입니다.


2. 클라이언트(B)에서 서버(A)에 접속하기

이제 클라이언트(B)로 넘어가 봅시다.

외부에서 서버(A)에 접속할 때에는 IPv4 주소가 아닌 서버의 외부IP 주소를 통해 들어가게 됩니다.

외부IP주소를 통해 들어가면 포트포워딩이 된 내부IP로 연결이 되게 되는것입니다.

terminal창에 아래와 같이 아까 알아낸 Username@외부IP 주소를 입력합니다.

ssh sever@112.xx.x.xx (UserName@외부IP 주소)

질문이 나오면 yes(Enter)을 입력해줍니다.

그런 뒤 아까 Key를 만들면서 입력했던 비밀번호를 입력해준다. 비밀번호 없이 그냥 Enter 했다면 이 창은 나오지 않습니다.

아래와 같이 바뀌면 접속이 성공적으로 완료했다는 것을 알 수 있습니다.

접속 완료! 맨위의 Title도 바뀌었다.

실행


이제 클라이언트(B)->경유 서버(A)->서버의 방식으로 접속할 준비가 모두 끝났습니다.

이번에 사용할 방법은 ProxyCommand인데

ssh의 프록시 옵션인 ProxyCommand와 ssh 내장 netcat proxy를 사용하는 방법입니다.

아래와 같은 포맷으로 입력해주면 됩니다.

ssh -o ProxyCommand="ssh -W %h:%p server1" server2

server1은 경유 서버(A)이고 server2는 목적 서버.

%h는 server1, %p는 server2의 ssh포트(default=22)입니다.

만약목적 서버로 접속하기 위한 포트가 따로 있다면 %p대신 포트번호를 입력해 주면 됩니다.

본인의 경우 동아리에서 NIPA로부터 지원받은 GPU 서버를 사용하고, 접속 포트가 정해져 있기 때문에 그것을 사용합니다.

포맷에 맞게 입력했다면, 비밀번호는 이전에 발급받은 key의 비밀번호를 입력하면 됩니다.

fingerprint에 대한 질문이 나오면 역시 yes(Enter)를 입력해줍니다.

마지막으로 목적 서버의 비밀번호를 입력해줍니다.

접속완료!


마무리


이렇게 한번 설정이 완료됐다면, 간단하게 경유 서버를 이용해 접속할 수 있습니다.

zsh를 사용하는 경우 ~/.zshrc,

bash를 사용하는 경우 ~/.bash_profile 파일을 열어,

내부에 아래 명령어를 넣어줍니다.

alias nipa="ssh -o ProxyCommand="ssh -W %h:%p sever@112.xx.x.xx" ubuntu@175.xx.xx.xx"

이후에는 아래와 같이 nipa라는 명령어 하나로 쉽게 접속할 수 있습니다.

 

이 기능을 자주 사용하신다면, PowerShell을 관리자권한으로 실행한 후 아래 명령을 입력하십시오.

Set-Service -Name sshd -StartupType 'Automatic'

경유서버(A)의 pc를 켤때마다, 서버를 실행할 수 있도록 도와줍니다.

sshd라는 기능이 백그라운드 자원을 메모리기준 4mb정도밖에 사용하지 않는것을 확인하였습니다.

그래서 자동실행을 해도 메모리 걱정 없이 사용할 수 있을 것입니다.

메모리 사용량 4mb정도


출처

더보기

이번에는 JAVA프로그래밍을 위한 JDK와 IDE인 Eclipse 환경을 사지방에 조성해보도록 하겠다.

항상 사지방에서는 D드라이브를 이용해야한다.

그래서 JDK와 Eclipse또한 D드라이브에 설치해주면 되겠다.

JDK 설치

일단 사지방은 32bit환경이기 때문에 그에 맞는 jdk버전을 설치해주어야 한다.

 

32bit에 맞는 Windows x86버전을 설치한다.

설치를 하다보면

 

이렇게 설치경로를 설정하는 단계가 나오는데, 여기서 Change를 눌러준다.

 

이 부분을

 

이렇게 바꿔주면 D드라이브에 설치를 하는 것이다.

이 부분만 바꿔주면 설치가 가볍게 끝난다.

Eclipse 설치파일 주소

이곳에 들어가서 오른쪽 패널을 보면

 

4.9버전 이하만 32bit를 지원한다

4.9버전 아래로 원하는 버전을 선택해서 들어간다.

 

우리는 JAVA를 사용할 것 이기 때문에 동일한 파일을 찾아서 32bit버전을 설치한다.

필자가 설치한 4.8버전 Eclipse IDE for Java의 32bit 의 링크이다.

다운받은 후 압축을 해제해줄 때 D:\Program Files 이 경로를 지정해주면 된다.

 

D:\Program Files에 압축해제한 eclipse폴더

자 이제 eclipse 폴더에 들어가서 실행파일을 실행 해 보면

 

이런식으로 오류가 뜰 것이다.

대충 이런 뜻이다 : 형광팬을 쳐 놓은 경로에서 javaw.exe를 찾을 수 가 없다!

그러므로 우리는 저 경로에 원하는 파일을 갖다주면 된다.

저 파일은 우리가 처음에 설치한 jdk와 같이 설치되어 있으므로

java폴더에 들어가서 아래 박스표시 해놓은 jre폴더를 복사한 후

 

이클립스 폴더에 붙여넣기 한다

 

실행이 잘 되는것을 볼 수 있다.

 

컴파일도 잘 된다!

이렇게 사지방에서 JAVA프로그래밍을 할 수 있는 환경을 조성해보았다.

동일한 방법으로 안드로이드 스튜디오도 설치해서 사용할 수 있다.

다음시간에 가볍게 설치해보는 시간을 갖도록 하겠다.

+ Recent posts