반응형

🖥️ 터미널 완전 정복 치트시트 (프론트 개발자를 위한 20개 명령어)

🎯 이 글을 끝내면 터미널만으로 폴더를 만들고 파일을 쓰고 읽고 지우고, 9100 포트를 누가 쓰는지 찾아낼 수 있게 됩니다.
⏱️ 걸리는 시간: 약 70분 · 선행: 개발 환경설정 완료

왜 터미널이 필요한가

터미널은 컴퓨터에게 말로 시키는 창구입니다. 마우스가 "메뉴에서 골라 클릭"이라면, 터미널은 "이거 해"라고 문장으로 말하는 것이에요.

프론트만 하던 사람은 npm run dev 정도만 치고 살았을 겁니다. 그런데 AWS 서버(EC2)에 접속하면 화면이 없습니다. 마우스도 없어요. 검은 화면에 글자뿐입니다. 거기서 파일을 옮기고 프로그램을 띄우고 로그를 봐야 합니다.

터미널은 피할 수 없지만, 실제로 쓰는 명령은 20개도 안 됩니다. 이 글이 바로 그 20개예요.

개념부터 잡기

폴더 구조와 "현재 위치"

터미널에는 항상 "지금 내가 서 있는 폴더"가 있습니다. 이걸 현재 작업 디렉터리(cwd) 라고 불러요.

/                                 ← 루트. 모든 것의 꼭대기
├── Users/
│   └── me/                       ← 홈 디렉터리. 줄여서 ~
│       └── Desktop/
│           └── study/
│               └── my-board/     ← 여기에 서 있다면
│                   ├── web/      ← cd web      (상대 경로)
│                   └── server/   ← cd ./server (같은 뜻)
└── etc/

절대 경로 vs 상대 경로

종류예시
절대 경로/Users/me/Desktop/study/ 부터 시작. 어디서 치든 같은 곳
홈 기준~/Desktop/.../study~ = 내 홈 폴더. 절대 경로와 사실상 같음
상대 경로web/src지금 서 있는 곳 기준
부모 폴더..한 칸 위
현재 폴더.지금 여기

cd ../server 는 "한 칸 위로 갔다가 server 로 들어가"라는 뜻입니다.

명령어 한 줄의 구조

  ls        -al      ~/Desktop
  │          │          │
  명령     옵션      대상(인자)

옵션은 - 하나에 한 글자(-a), -- 두 개에 단어(--help) 형태입니다. -al-a -l 을 붙여 쓴 것이에요.


직접 따라해 보기

1단계. 위치 파악과 이동

pwd                 # 지금 어디 있나 (print working directory)
cd ~                # 홈으로
cd ~/Desktop/study
pwd
cd ..               # 한 칸 위
cd -                # 직전에 있던 곳으로 되돌아가기

cd 만 치고 Enter 해도 홈으로 갑니다.

2단계. 목록 보기

ls                  # 이름만
ls -l               # 자세히 (권한·크기·수정일)
ls -a               # 숨김 파일(.env, .gitignore)까지
ls -al              # 둘 다. 제일 많이 쓴다
ls -lh              # 크기를 1.2K, 3.4M 처럼 읽기 좋게
.env.gitignorels 만 치면 안 보입니다. 점(.)으로 시작하는 파일은 숨김 처리라서 -a 옵션이 필요해요. 이걸 모르면 나중에 ".env 를 만들었는데 없어졌다"며 헤매게 됩니다.

3단계. 만들기

cd ~/Desktop/study
mkdir 연습                       # 폴더 하나
mkdir -p 연습/a/b/c              # 중간 폴더까지 한 번에 (-p = parents)
cd 연습
touch memo.txt                   # 빈 파일 만들기
ls -al

4단계. 파일에 글 쓰고 읽기

echo "첫 줄이다" > memo.txt      # >  : 덮어쓰기
echo "둘째 줄이다" >> memo.txt   # >> : 이어붙이기
cat memo.txt                     # 전체를 한 번에 출력
첫 줄이다
둘째 줄이다
>>> 의 차이는 반드시 몸에 익혀야 합니다. > 는 기존 내용을 전부 날립니다. 서버 로그 파일에 > 를 잘못 쓰면 로그가 통째로 사라져요.

파일이 길면 cat 은 화면을 넘겨버립니다. 이럴 땐 less 를 쓰세요.

less memo.txt

less 안에서는:

동작
Space / f다음 화면
b이전 화면
/검색어아래로 검색 (n 으로 다음 결과)
G맨 끝으로
g맨 앞으로
q나가기
q 를 모르면 영영 못 나옵니다. 초보자가 제일 자주 갇히는 곳이에요. "less 에서 못 나가겠다" 싶으면 무조건 q!

5단계. 복사 · 이동 · 삭제

cp memo.txt memo-backup.txt      # 복사
cp -r a a-copy                   # 폴더 복사는 -r (recursive)
mv memo-backup.txt 백업.txt       # 이름 바꾸기
mv 백업.txt a/                    # 옮기기 (대상이 폴더면 이동)
rm a/백업.txt                     # 파일 삭제
rm -r a-copy                     # 폴더 삭제
rm 에는 휴지통이 없습니다. 지우면 끝이에요. 특히 아래 두 개는 절대 치지 마세요.
rm -rf /        # 컴퓨터를 날린다
rm -rf ~        # 홈 폴더를 통째로 날린다

안전하게 쓰려면 rm -i (하나씩 물어봄) 를 쓰거나, 지우기 전에 ls 로 먼저 확인하는 습관을 들이세요.

6단계. Tab 자동완성과 Ctrl 단축키

이 두 개를 안 쓰면 터미널 속도가 5배 느려집니다. 반드시 익히세요.
cd ~/Desk        # 여기서 Tab → cd ~/Desktop/ 으로 완성됨
cat me           # Tab → cat memo.txt

Tab 을 눌렀는데 아무 일도 없으면 후보가 여러 개라는 뜻입니다. Tab 을 한 번 더 누르면 후보 목록이 떠요.

단축키동작언제 쓰나
Tab자동완성항상
Ctrl + C실행 중인 프로그램 강제 종료npm run dev 를 끌 때. 가장 많이 씀
Ctrl + D입력 끝 / 셸 종료node REPL 에서 나올 때
Ctrl + L화면 지우기 (clear 와 같음)지저분할 때
Ctrl + A / Ctrl + E줄 맨 앞 / 맨 끝으로긴 명령 고칠 때
Ctrl + U커서 앞을 전부 지우기잘못 친 줄 버릴 때
/ 이전 명령 불러오기항상
Ctrl + R예전 명령 검색ssh 처럼 긴 명령 다시 칠 때

7단계. 파이프 | 와 리다이렉트 >

파이프는 앞 명령의 출력을 뒤 명령의 입력으로 넘기는 관입니다.

[ls -al]  ──출력──▶  |  ──입력──▶  [grep .env]  ──▶ 화면
ls -al | grep env          # 목록 중 env 가 들어간 줄만
cat memo.txt | wc -l       # 줄 수 세기
ls -al > 목록.txt           # 화면 대신 파일로 저장
ls -al | grep txt > 결과.txt

wc -l 은 줄 수, wc -c 는 글자 수를 셉니다.

8단계. grep — 내용 검색

grep 은 "이 글자가 들어간 줄을 찾아줘"입니다. 서버 로그에서 에러를 찾을 때 매일 써요.

grep "둘째" memo.txt                     # 파일 안에서 찾기
grep -n "둘째" memo.txt                  # 줄 번호까지 (-n)
grep -i "DULJJAE" memo.txt               # 대소문자 무시 (-i)
grep -r "PORT" ~/Desktop/.../01-basics   # 폴더 전체 재귀 (-r)

실무에서는 이렇게 씁니다.

pm2 logs --lines 200 | grep -i error     # 최근 로그에서 에러만

9단계. 프로세스와 포트 — 서버 공부 내내 쓴다

우리 서버는 9100 포트, 프론트는 3100 포트를 씁니다. 서버 공부를 시작하면 이런 에러를 반드시 만나요.

Error: listen EADDRINUSE: address already in use :::9100

"9100 을 이미 누가 쓰고 있다"는 뜻입니다. 범인을 찾아서 종료해야 해요.

lsof -i :9100          # 9100 포트를 쓰는 프로세스 찾기
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
node    54321 me         24u  IPv6 0x1a2b3      0t0  TCP *:9100 (LISTEN)

PID(프로세스 번호) 54321 이 범인입니다.

kill 54321             # 정중하게 종료 요청 (권장)
kill -9 54321          # 말을 안 들으면 강제 종료

한 줄로 끝내려면:

lsof -ti :9100 | xargs kill -9

-t 는 PID 만 출력하는 옵션이고, xargs 는 그 값을 뒤 명령의 인자로 넘깁니다.

현재 돌고 있는 프로세스를 보는 명령도 알아두세요.

ps aux | grep node                  # node 로 돌고 있는 것들
ps aux | grep -v grep | grep node   # grep 자기 자신은 빼고
명령한 줄 요약
lsof -i :91009100 포트를 점유한 프로세스 찾기
ps aux | grep node실행 중인 node 프로세스 목록
kill PID정상 종료 요청
kill -9 PID강제 종료 (최후의 수단)
Ctrl + C지금 터미널에서 돌고 있는 것을 끄기

10단계. ssh 맛보기

ssh다른 컴퓨터의 터미널을 내 터미널에서 쓰는 것입니다. AWS EC2 에 접속할 땐 이렇게 생겼어요.

ssh -i ~/.ssh/my-board-key.pem ubuntu@3.36.12.34
조각
-i ~/.ssh/....pem열쇠 파일(비밀키). AWS 가 EC2 만들 때 준다
ubuntu접속할 계정 이름 (Ubuntu 의 기본 계정)
3.36.12.34서버의 공인 IP

접속하면 프롬프트가 me@맥북 % 에서 ubuntu@ip-172-31-x-x:~$ 로 바뀝니다. 이때부터 치는 명령은 전부 AWS 컴퓨터에서 실행돼요. 나올 때는 exit.

지금은 "내 맥에서 배운 명령이 저기서도 똑같이 먹힌다"는 것만 알면 됩니다. 그래서 이 글이 AWS 실습의 준비물이에요.

✅ 확인 — 이렇게 나오면 성공

아래를 순서대로 치고 마지막 출력이 일치하면 성공입니다.

cd ~/Desktop/study
mkdir -p 연습/로그
cd 연습
printf 'INFO 시작\nERROR DB 연결 실패\nINFO 종료\n' > 로그/app.log
grep -n ERROR 로그/app.log
cat 로그/app.log | wc -l
2:ERROR DB 연결 실패
       3

포트 확인도 해봅니다. 아무것도 안 띄운 상태라면 결과가 비어 있는 게 정상이에요.

lsof -i :9100
echo "종료코드: $?"
종료코드: 1

($? 는 직전 명령의 종료 코드입니다. 0 이면 성공, 0 이 아니면 실패/결과 없음.)


🔧 흔한 에러 해결

증상원인해결
zsh: no such file or directory: web지금 폴더에 web 이 없음pwd 로 위치 확인 → ls 로 이름 확인 → Tab 자동완성
less 를 열었는데 못 나감종료 키를 모름q 를 누른다
rm 으로 지웠는데 복구하고 싶다rm 에는 휴지통이 없음복구 불가. 앞으로 ls 로 먼저 확인하거나 rm -i 사용
EADDRINUSE ... :::9100이전 서버가 안 죽고 남음lsof -ti :9100 | xargs kill -9 후 재실행
permission denied: ./deploy.sh실행 권한이 없음chmod +x deploy.sh 후 재실행
ls 했는데 .env 가 안 보임점으로 시작하면 숨김ls -a 또는 ls -al
한글 폴더에서 Tab 이 이상하게 완성됨맥의 유니코드 정규화따옴표로 감싼다: cd "연습"
> 로 썼더니 기존 내용이 날아감> 는 덮어쓰기이어붙이려면 >>. 복구는 불가
npm run dev 터미널에서 다른 명령이 안 먹힘그 터미널은 서버가 점유 중새 탭(Command + T) 또는 Ctrl + C 로 서버 끄기

📝 과제

과제 1. 연습 문제 10개 (전부 터미널로)

~/Desktop/study/연습 폴더 안에서 풉니다. 답은 직접 명령을 만들어 내세요.

  1. 지금 서 있는 폴더의 절대 경로를 출력하라.
  2. 연습 안에 drill/a/b 폴더를 한 줄 명령으로 만들어라.
  3. drill/a/b 안에 hello.txt 를 만들고 hello world 를 써 넣어라 (touch 없이 한 줄로).
  4. hello.txtsecond line기존 내용을 지우지 않고 추가하라.
  5. hello.txtdrill/a복사하고, 원본은 greeting.txt 로 이름을 바꿔라.
  6. 연습 아래에서 line 이 들어간 파일을 줄 번호와 함께 전부 찾아라 (재귀).
  7. 연습 의 파일 목록을 목록.txt 로 저장하되, 숨김 파일도 포함하라.
  8. 목록.txt몇 줄인지 파이프를 써서 세어라.
  9. 지금 내 맥에서 3100 포트를 쓰는 프로세스가 있는지 확인하고, 있으면 PID 를 찾아 종료하라.
  10. drill 폴더를 통째로 삭제하라. 단, 삭제 전에 ls -R drill 로 먼저 확인하라.
완료 조건: 10개를 전부 직접 친 명령이 ~/.zsh_history 에 남습니다. 확인은 history | tail -30.

과제 2. 포트 점유 상황을 일부러 만들고 해결하기

터미널 A 에서 아래를 실행해 9100 을 점유시킵니다.

node -e "require('http').createServer((q,s)=>s.end('hi')).listen(9100, ()=>console.log('9100 점유중'))"

터미널 B(Command + T)에서 같은 명령을 다시 실행해 EADDRINUSE직접 봅니다. 그다음 터미널 B 에서 lsof -i :9100 으로 PID 를 찾아 kill 로 종료하세요.

완료 조건: 터미널 A 의 프로세스가 죽고, 터미널 B 에서 같은 명령이 이제 성공한다.

과제 3. 나만의 alias 3개 만들기

~/.zshrc 에 자주 쓸 단축어 3개를 추가합니다. 예: alias p9='lsof -i :9100'.

완료 조건: source ~/.zshrc 후 새로 만든 단축어 3개가 전부 동작한다.

🎯 요약 (3줄)

  1. pwd(어디) → ls -al(뭐가 있나) → cd(이동) 세 개가 터미널의 90%입니다. 나머지는 Tab 과 로 칩니다.
  2. | 는 앞 출력을 뒤로 넘기는 관, > 는 덮어쓰기, >> 는 이어쓰기입니다. grep 과 조합하면 로그에서 에러만 뽑아냅니다.
  3. 서버 공부 중 EADDRINUSE 가 뜨면 lsof -i :9100 으로 범인을 찾고 kill 로 끝냅니다. 이 한 세트를 계속 씁니다.
반응형
반응형

✅ Widget이란?

  1. 독립적으로 실행되는 작은 프로그램
  2. 주로 바탕화면, 앱 화면 등에서 날씨·뉴스·생활정보 등을 보여줌
  3. 그래픽이나 데이터 요소를 처리하는 함수를 가짐

👉 일반적으로 말하는 위젯은 작은 프로그램이지만,
Flutter에서의 위젯은 더 넓은 개념을 가집니다.


✅ Flutter의 위젯

  1. UI를 만들고 구성하는 모든 기본 단위 요소
  2. 보이지 않는 레이아웃 요소까지도 위젯
  3. 즉, Flutter의 모든 것은 위젯

✅ Flutter 위젯의 종류

  • Stateless Widget
    • 상태가 없는 정적인 위젯
    • 이전 상호작용의 값을 저장하지 않음
    • 예: 텍스트, 아이콘, 이미지
  • Stateful Widget
    • 상태(state)를 추적하고 보존하는 위젯
    • 사용자의 입력이나 데이터 변화에 따라 모양 변화
    • 예: 버튼 클릭, 텍스트 입력, 데이터 로딩 상태
  • Inherited Widget
    • 위젯 트리 전체에 데이터를 전달하는 특수한 위젯
    • 주로 상태 관리에 활용

✅ Stateless 위젯 특징

  1. 화면에 존재만 할 뿐 변화 없음
  2. 실시간 데이터 저장 불가
  3. 변화(모양·상태)를 유발하는 value 값 없음

✅ Stateful 위젯 특징

  1. 사용자의 상호작용(클릭, 입력 등)에 따라 모양이 변함
  2. 데이터를 받으면 UI가 다시 그려짐

✅ Flutter 위젯 트리 (Widget Tree)

위젯들은 트리(tree) 구조로 정리됩니다.
부모 위젯(Parent) 안에 자식 위젯(Child)을 포함할 수 있으며, 이를 Widget Tree라고 합니다.

예시 구조:
MyApp
└─ MaterialApp
└─ MyHomePage
└─ Scaffold
├─ AppBar
└─ Center
└─ Column
├─ Text
├─ Image
└─ Button


✅ 간단 예시 코드

1) Stateless Widget

import 'package:flutter/material.dart';

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return const Text(
      '안녕하세요! 저는 Stateless Widget 입니다.',
      style: TextStyle(fontSize: 20),
    );
  }
}



import 'package:flutter/material.dart';

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _count = 0;

  void _increment() {
    setState(() {
      _count++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text('버튼 클릭 횟수: $_count', style: const TextStyle(fontSize: 20)),
        ElevatedButton(
          onPressed: _increment,
          child: const Text('클릭'),
        ),
      ],
    );
  }
}

 

📌 정리 (Summary)
Flutter의 모든 것은 위젯이다.
변화가 없는 UI → Stateless Widget
모양·상태가 바뀌는 UI → Stateful Widget
위젯은 항상 트리 구조로 구성된다.

반응형

'Flutter > Flutter' 카테고리의 다른 글

[ Flutter ] Container 위젯  (0) 2023.09.21
반응형

업비트에서 바이낸스( 국내에서 해외로 코인 전송 )로 출금하는 방법입니다.

 

업비트 로그인 / 바이낸스 로그인 이후 내용입니다.

 

1. 검색창에 원하는 코인을 입력하고 클릭합니다.

 

 

2. 시장가를 클릭하고 주문총액을 입력한 후 매수를 클릭합니다.

 

 

3. 입출금을 클릭한 후, 매수한 코인 이름을 검색한 다음 출금을 누르고 출금수량을 최대로 한다음 아래 출금신청을 클릭합니다.

 

 

4. 받는사람 주소를 입력하는 창이 열리게 됩니다. ( 현재 창은 그대로 두고, 바이낸스로 넘어갑니다. )

 

 

5. 우측 상단에 Deposit을 클릭합니다.

 

 

6. 하단에 암호화폐 입금 ( Deposit Crypto )를 클릭합니다.

 

 

 

7. 매수한 코인을 선택하고 네트워크도 선택해줍니다. ( 트론의 메인 네트워크는 TRC20입니다. ) 그리고 Address를 복사합니다.

 

 

8. 다시 업비트로 돌아와서 복사한 주소를 붙여넣고 아래 출금신청을 클릭합니다. 출금 전 잠깐이라는 내용이 나오는데, 아니요를 클릭하시면 됩니다.

 

 

9. 카카오톡 인증을 진행합니다.

 

 

10. 출금을 완료하면 출금 진행중이라는 문구가 뜨고, 1 ~ 2분 정도 기다리면 출금 완료가 됩니다.

 

 

11. 우측 상단에 지갑모양을 클릭하고 Spot을 클릭하면 매수한 코인이 보이며, Convert를 클릭해서 매수한 코인을 USDT로 옮기면 작업은 완료 됩니다.

 

 

전송 네트워크만 잘 확인하시면, 다른 코인으로도 방법은 같습니다. 

 

부 - 자 되세요~

반응형
반응형

Java JDK를 설치하는 방법입니다.

 

java JDK 다운로드

 

위 오라클 사이트에서 DMG로 받았습니다.

 

 

받은 dmg파일을 열어 .pkg파일을 실행해서 설치를 해줍니다.

 

설치 확인하기

$ java -version

 

 

 

설치한 java JDK 확인하기

$ /usr/libexec/java_home -V

 

 

java JDK 기본 설정 변경하기

 

.zshrc

.zshrc파일에 아래 내용을 추가하고 터미널을 다시 실행시킨다음 java -version을 확인하면 21버전으로 변경된 것을 확인 할 수 있습니다.

$ export JAVA_HOME=$(/usr/libexec/java_home -v 21.0.2)

 

java JDK 삭제하기

경로는 본인이 설치한 위치에 따라 조금 다를 수 있습니다.

$ cd /Library/Java/JavaVirtualMachines 

$ sudo rm -rf openjdk-17.0.9

 

 

반응형

'IT' 카테고리의 다른 글

[ Mac ] 아파치 톰캣 ( Apache Tomcat ) 설치하기  (0) 2024.02.12
반응형

아파치 톰캣 ( Apache Tomcat )을 설치하는 방법입니다.

 

brew

$ brew install tomcat

 

위처럼 설치방법은 굉장히 간단합니다.

 

설치 확인

 

$ cd /opt/homebrew ~
$ cd bin

// 톰캣 실행
$ ./catalina start

// 톰캣 종료
$ ./catalina stop

 

실행후에 http://localhost:8080로 이동했을 때 아래처럼 톰캣 페이지가 보이게됩니다.

stop은 말그대로 종료입니다.

 


 

brew 설치하는 방법

 

반응형

'IT' 카테고리의 다른 글

[ Mac ] JavaJDK 설치하기  (0) 2024.02.12
반응형

React를 새로 생성했을 때 발생했던 에러입니다.

One of your dependencies, babel-preset-react-app, is importing the "@babel/plugin-proposal-private-property-in-object" package without declaring it in its dependencies. This is currently working because "@babel/plugin-proposal-private-property-in-object" is already in your node_modules folder for unrelated reasons, but it may break at any time. babel-preset-react-app is part of the create-react-app project, which is not maintianed anymore. It is thus unlikely that this bug will ever be fixed. Add "@babel/plugin-proposal-private-property-in-object" to your devDependencies to work around this error. This will make this message go away.

 

처음에는 Stack overflow에 나와있는 방법으로 해결을 했었습니다.

 

$ npm install --save-dev @babel/plugin-proposal-private-property-in-object

 

그런데 계속해서 뜨는게 거슬려서 확실하게 하고자 뭐가 문제인지 더 찾아봤습니다.

 

해결방법

여러 글들을 찾아다니다보니 npm과 create-react-app의 버전 호환 충돌일 가능성이 있다는 내용들이 있었습니다.

그래서 npm을 최신버전으로 올려주었더니 오류가 사라지는걸 확인할 수 있었습니다.

$ npm install -g npm@latest

 

 

반응형
반응형

react-native-vector-icons 사용하는 방법입니다.

Mac 기준입니다.

( icon 하나 사용하는데 하루가 걸린 기분이 듭니다... )

 

npm

$ npm install react-native-vector-icons
$ npm install -D @types/react-native-vector-icons

 

저는 typescript를 사용하고 있기 때문에 @types 부분도 추가했습니다.

 

 

iOS에서 아이콘 추가하기

 

1. 프로젝트를 열고 터미널을 열어줍니다.

$ cd ios
$ pod install

 

ios로 들어간다음 pod install을 해줍니다.

 

2. 프로젝트 폴더에서 ios -> project-name.xcworkspace를 열어줍니다. ( 대기 ! )

 

3. 다시 프로젝트 폴더에서 node_modules -> react-native-vector-icons -> Fonts 폴더를 복사합니다.

 

4. 아까 대기시켜둔 workspace에 project-name 폴더 아래에 복사한 Fonts폴더를 추가해줍니다.

추가할 때 아래 창이 뜨면 이렇게 해주면 됩니다.

 

아래처럼 추가된 모습을 볼 수 있습니다.

 

5. Fonts폴더를 추가시키고 아래를 보면 Info파일이 있습니다.

Info로 들어가서 아래처럼 내용들을 추가해줍니다.

Informations Property List
 - Fonts provided by application
   - item 0 ~ item 18 ( value에 폰트 내용을 추가합니다. )

 

Informations Property List 옆에 +를 누르고 Fonts provided by application을 추가합니다. ( 자동완성 )

Fonts provided by application 옆에 +를 누르고 item들을 추가시킨다음 Fonts내부에 ttf파일들 이름을 추가시켜줍니다.

 

추가를 하고난다음 Info를 닫고 프로젝트에서 ios -> project-name -> Info.plist파일을 열어보면 아래처럼 추가된 내용을 확인 할 수 있습니다.

 

workspace에서 project-name 폴더에 Build Phases -> Copy Bundle Resources를 확인해보면 여기도 Fonts가 추가된 것을 확인 할 수 있습니다.

 

이렇게 완료하고 ios를 재시작하면 icon이 들어오는 것을 확인 할 수 있습니다.

( 아이콘 추가방법을 가장 아래 추가해 두었습니다. )

 

 

Android에서 아이콘 추가하기

 

1. android/app/build.gradle 파일로 이동해서 아래 내용을 추가해줍니다.

apply from: file("../../node_modules/react-native-vector-icons/fonts.gradle")

 

2. android/settings.gradle 파일로 이동해서 아래 내용을 추가해줍니다.

include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')

 

3. 다시한번 android/app/build.gradle 파일로 이동해서 아래 내용을 추가해줍니다.

dependencies {
    implementation project(':react-native-vector-icons')
    ...
}

 

dependencies 내부에 추가해줍니다.

 

4. gradlew clean를 실행합니다.

$ cd android
$ ./gradlew clean

 

pod install 한것과 같습니다.

 

이렇게 iOS, 안드로이드 모두 아이콘을 추가할 준비가 됐습니다.

 


 

아이콘 추가하기

react-native-vector-icons 바로가기

 

위 사이트에 접속하면 아래처럼 빨간배경에 제목과 아이콘 이름들을 확인 할 수 있습니다.

제목은 import할 때 사용하고 아이콘 이름은 아이콘을 추가할 때 사용하는 이름입니다.

 

 

아이콘 추가하는 방법 1

import { StyleSheet, Text, View } from "react-native";
import AntDesign from 'react-native-vector-icons/AntDesign';

const Headers = () => {
    return (
        <View>
            <Text>Header</Text>
            <AntDesign size={35} name="creditcard" color="#000000" />
        </View>
    );
}


export default Headers;

 

아이콘 추가하는 방법 2

import { StyleSheet, Text, View } from "react-native";
import Icon from 'react-native-vector-icons/FontAwesome';

const myIcon = <Icon name="rocket" size={30} color="red" />;

const Headers = () => {
    return (
        <View>
            <Text>Header</Text>
            {myIcon}
        </View>
    );
}

export default Headers;

 

 

확인해보면 아래처럼 아이콘이 추가된 것을 확인 할 수 있습니다.

 

 

 

React Native... 쉽지 않습니다..

반응형
반응형

React 프로젝트를 진행할 때 ../../../ 와 같은 상대경로가 아닌 @components/, @pages/ 와 같은 절대경로는 설정하는 방법입니다.

프로젝트를 진행할 때 간단한 페이지면 문제가 없는데, redux같은 상태관리를 사용하거나 component가 늘어나면 ../../../component/ 이런식으로 깊어질 때가 있습니다.

이럴때 절대경로를 통해서 최상위부터 시작하는 방법으로 저는 craco를 사용했습니다.

 

Craco

Craco는 Create-React-App Configuration Override의 약자입니다.

CRA를 사용할 때 webpack을 설정하려면 오버라이딩을 해야하는데 이 webpack을 직접 설정하려면 eject를 해야합니다.

하지만 그렇게하게되면 CRA의 장점들이 사라지게 됩니다. ( 트랜스파일링, 번들링 등 )

그래서 이때 Craco 라이브러리를 사용해서 eject를 하지 않고 webpack 설정을 변경해줍니다.

 

npm

$ npm install @craco/craco

 

package.json

  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  },

 

scripts부분에 react-scripts부분을 craco로 변경해주었습니다.

 

craco.config.js

const path = require('path');

module.exports = {
  webpack: {
    alias: {
      '@components': path.resolve(__dirname, 'src/components'),
      '@pages': path.resolve(__dirname, 'src/pages'),
      '@styles': path.resolve(__dirname, 'src/styles'),
      '@json': path.resolve(__dirname, 'src/json'),
      '@items': path.resolve(__dirname, 'src/items'),
    },
    "compilerOptions": {
      "baseUrl": "src"
    },
    "include": [
        "src"
    ]
  },
};

 

최상위 경로에 craco.config.js파일을 생성해서 위처럼 오버라이딩 할 설정을 해줍니다.

 

이후 저같은 경우 babel-preset-react-app, is importing the "@babel/plugin-proposal-private-property-in-object" package without declaring it in its dependencies 이런 경고창이 보였습니다.

 

저같은 경우는 stack overflow를 따라 아래처럼 해결했습니다.

stack overflow 바로가기

$ npm install --save-dev @babel/plugin-proposal-private-property-in-object

 

 

반응형
반응형

NuxtJS 정적 사이트 배포하는 방법입니다.

:: Nuxt2 입니다.

:: Nuxt3 github pages 배포하기 바로가기

 

npm

$ npm install push-dir --save-dev

 

push-dir, github actions, Travis CI 등 방법은 여러가지 있습니다. ( 여기서는 push-dir을 사용했습니다. )

 

nuxt.config.js

export default {
  target: "static",
  router: {
    base: "/깃허브 레포지토리 이름/"
  },
}

 

github에서 Repository name에 적었던 이름입니다.

 

전제조건

  • github Repository
  • nuxt.config.js의 ssr값이 false

 

package.json

  "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "start": "nuxt start",
    "generate": "nuxt generate",
    "deploy": "push-dir --dir=dist --branch=gh-pages --cleanup",
    "test": "jest"
  },

 

사실 deploy 한 줄 추가됐습니다.

 

배포파일 생성하기

$ npm run generate

 

저는 정적파일 배포를 하려고 했기 때문에 generate를 해주었습니다.

 

dist파일이 생성된 모습입니다.

 

github pages 브랜치에 업로드하기

$ npm run deploy

 

정상적으로 업로드가 완료되었다면 gh-pages 브랜치가 생성되고 내부에 dist 파일들이 업로드 되어있을 것입니다.

 

 

사이트 접속하기

https://shiro21.github.io/repository-name/

자신의 github.io에 repository-name을 붙여주면 배포한 사이트에 접속할 수 있습니다.

 

반응형

'VueJS > VueJS' 카테고리의 다른 글

[ Vue ] Vue3 defineEmits  (0) 2022.09.29
[ Vue ] Vue3 defineProps  (0) 2022.09.28
[ Vue ] Vue3 Vuex 상태 관리 패턴  (2) 2022.09.21
[ Vue ] Vue3 Global 변수  (1) 2022.09.21
[ Vue ] Vue3 scss 사용하기  (0) 2022.09.06
반응형

React Native 프로젝트 생성하고 앱을 실행하는 방법입니다.

xcode와 Android Studio가 설치된 이후에 시작하는 내용입니다.

 

brew install

$ brew install node
$ brew install watchman

 

node version은 18이상으로 설치해줍니다.

watchman은 파일 시스템의 변경 사항을 감시하기 위한 도구입니다.

 

:: watchman 설치 에러가 일어날 때

python@3.11: the bottle needs the Apple Command Line Tools to be installed. You can install them, if desired, with: xcode-select --install

 

위와같은 에러가 나오면 아래 내용을 입력해줍니다.

$ xcode-select --install

 

 

react native cli 생성하기전에 이전에 글로벌로 react-native-cli를 설치한적이 있다면 제거해줍니다.

:: 이전에 글로벌로 설치한 경우 문제가 발생할 수 있다고 합니다.

$ npm uninstall -g react-native-cli @react-native-community/cli

 

 

프로젝트 생성하기

생성할 때, cocoaPods추가 내용이 나왔을 때 y 해주었습니다. ( 종속성 관리 시스템입니다. )

$ npx react-native@latest init AwesomeProject

 

특정 버전으로 새 프로젝트를 시작할 때

$ npx react-native@X.XX.X init AwesomeProject --version X.XX.X

 

프로젝트 실행하기

$ npm start

 

 

위처럼 실행하면 문제없이 바로 실행이 되는줄 알았습니다...

 


 

에뮬레이터 작동안되는 문제..

Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'

> err...

 

 

문제내용

  • JDK 버전
  • Android 환경변수

 

먼저 java 버전을 확인해줍니다.

$ java --version

 

 

첫번째 문제가, 자바 버전이 11이였기에 문제가 일어났었습니다. 그래서 일단 버전을 17로 올려주었습니다.

 

JDK 17버전 설치하기

$ brew install openjdk@17

 

이후 .zshrc 파일에 경로를 추가해주었습니다.

$ export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"

 

터미널에서 추가하기

위처럼 vi로 적용하거나, 아래처럼 입력하면 .zshrc에 추가하고 변경사항을 저장해줍니다.

$ echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc

 

 

두번째 문제는 안드로이드 환경변수가 설정되어 있지 않아서 발생했습니다.

 

먼저 Android SDK Tools(Obsolete)를 체크해주었습니다.

 

Android SDK Tools체크하러 가기

1. Android Studio에서 SDK Manager로 들어갑니다.

 

2. Android SDK -> SDK Tools -> Hide Obsolete Packages 해제 -> Android SDK Tools (Obsolete ) 체크

 

 

ANDROID_HOME 환경변수 추가하기

.zshrc 파일에 아래 내용을 추가합니다.

ANDROID_HOME에 있는 경로는 위 이미지에 Android SDK Location의 경로입니다.

$ export ANDROID_HOME=/Users/junhyeok/Library/Android/sdk
$ export PATH=$PATH:$ANDROID_HOME
$ export PATH=$PATH:$ANDROID_HOME/emulator
$ export PATH=$PATH:$ANDROID_HOME/tools
$ export PATH=$PATH:$ANDROID_HOME/tools/bin
$ export PATH=$PATH:$ANDROID_HOME/platform-toolsexport PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"

 

위 내용들을 실행하고 난 후에 Android와 iOS 에뮬레이터가 문제없이 작동되었습니다.

반응형

+ Recent posts