728x90

KoBERT 모델을 이용하다가 초기에 필요 패키지를 설치하고, 각종 모듈들을 임포트 해주다가 아래와 같은 에러가 발생했다.

 

import torch
from torch import nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
import gluonnlp as nlp
import numpy as np
from tqdm import tqdm, tqdm_notebook

 

/usr/local/lib/python3.10/dist-packages/mxnet/numpy/utils.py:37: FutureWarning: In the future `np.bool` will be defined as the corresponding NumPy scalar. bool = onp.bool

---------------------------------------------------------------------------

AttributeError Traceback (most recent call last)

in ()

4 import torch.optim as optim

5 from torch.utils.data import Dataset, DataLoader

----> 6 import gluonnlp as nlp

7 import numpy as np

8 import pandas as pd

 

10 frames /usr/local/lib/python3.10/dist-packages/numpy/__init__.py in __getattr__(attr)

317

318 if attr in __former_attrs__: --> 319 raise AttributeError(__former_attrs__[attr])

320

321 if attr == 'testing':

 

AttributeError: module 'numpy' has no attribute 'bool'. `np.bool` was a deprecated alias for the builtin `bool`. To avoid this error in existing code, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here. The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

 

NumPy 1.20.0 Release Notes — NumPy v2.1.dev0 Manual

NumPy 1.20.0 Release Notes This NumPy release is the largest so made to date, some 684 PRs contributed by 184 people have been merged. See the list of highlights below for more details. The Python versions supported for this release are 3.7-3.9, support fo

numpy.org

 

이는 Numpy 버전이 맞지 않아 생긴 오류이다.

Numpy 최근 버전에는 np.bool 속성이 제거되었는데, 내가 사용한 Numpy 버전은 업그레이드 된 버전이라 임포트 할 수 없었던 것이다.

 

따라서 Numpy를 다운그레이드 해주면 문제가 해결된다.

# import gluonnlp as nlp 오류 -> numpy downgrade 필요
pip install numpy==1.23.1

 

728x90
728x90

NFS를 사용하여 디렉터리를 공유할 때는 /etc/exports 파일을 필히 다루게 된다.

또한 이를 수정해준 후 exportfs 명령어를 통해 적용하기도 한다.

 

# 엔트리 추가
vim /etc/exports

# 추가한 내용 클라이언트에 반영
exportfs -ra

 

이때 내가 직면한 에러는 세 가지이다.

  1. /etc/exports 파일에 엔트리를 분명 추가해주었는데, exportfs 명령어를 사용해 반영하려고 하면 추가가 되지 않는다.
    클라이언트에서 showmount -e를 통해 확인해봐도 뜨지 않는다.
  2. 그래서 NFS가 제대로 돌고 있는지 확인해보니, 제대로 돌고 있지 않다.
  3. 그래서 NFS 데몬을 실행시키려 하면 "Job for nfs-server.service canceled."가 뜬다.

사진을 통해 설명하지면,

/etc/exports

이처럼 ## 추가 ## 부분을 새롭게 추가한 후 exportfs를 해주었는데

exportfs -ra 실행 결과

추가한 부분이 반영되지 않고

 

이처럼 NFS서버의 상태를 확인해보면 Active: failed (Result: exit-code)가 뜨며 제대로 돌고 있지 않고

 

데몬을 시작하려고 하면 "Job for nfs-server.service canceled."가 뜬다.

 

 

구글링을 해보니 허무하게도 원인은 간단했다.

exports 파일에 있는 엔트리의 디렉터리가 존재하지 않거나, 입력 형식을 잘못 준 것이다.

 

위의 사진을 다시 보면

/etc/exports

 

나는 NFS로 여러 실험을 돌리다 보니 마운트 하는 디렉터리가 자주 바뀐다.

나같은 경우 /home/student1/cluster0이라는 디렉터리가 존재하지 않았다.

예전에 쓰고 지웠던걸 까먹은 것이다.

애초에 No such directory같은 메시지가 나오지 않아서 당연히 있는줄 알았는데, 로그를 까보니 비로소 등장했다.

# 로그 확인
cat /var/log/syslog

 

또한 NFS 관련 데몬들의 상태를 확인해봤을 때도 마찬가지다.

# NFS 관련 데몬 상태 전부 확인
systemctl status nfs*

open pipe file /run/rpc_pipefs/nfs/blocklayout failed: No such file or directory

 

 

 

다른 레퍼런스를 보니, exports 파일 엔트리 옵션을 주는 부분에서 공백을 사용해도 오류가 난다고 한다.

예를 들어

home/test_user3                cluster2(rw, async,anongid=1500, no_subtree_check)

처럼 괄호 안에 공백이 있으면 안된다.

 

오늘도 에러 없는 하루를 보내시길!

728x90
728x90

어릴 때 난 이중 리스트를 하나의 리스트로 변환할 때

새로운 리스트 하나 만들어서 이중 for문 돌면서 하나하나 append 해주었다.

시간 복잡도가 너무 커져 배보다 배꼽이 큰 상황이었던 것이다!

 

이중 리스트를 단일 리스트로 간단하게 변환하는 두 가지 방법으로는

  1. sum() 함수 사용
  2. np.hstack() 함수 사용

이 있다.

 

 

아래에 이런 이중 리스트가 있다고 가정하고, 두 가지 방법에 대해 알아보자!

# 이중 리스트
double_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

1. sum() 함수 사용하기

나만 그런건지 모르겠지만 난 sum 함수는 단순히 합해주는 함수로만 생각했다.

하지만 이중 리스트를 하나의 리스트로 변환할 때

sum(이중 리스트, []) 형식으로 사용할 수 있다.

# 이중 리스트
double_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 단일 리스트로 변환
single_list = sum(double_list, [])

print(single_list) # 결과: [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

sum() 함수의 첫 번째 파라미터로는 이중 리스트를 넣고, 두 번째 파라미터로 빈 리스트([])를 넣어주면 이중 리스트를 펼친 단일 리스트로 만들어 준다.

 

 

2. np.hstack() 사용하기

Numpy를 사용해서도 이중 리스트를 하나의 리스트로 풀어낼 수 있다.

이때 사용하는 것이 np.hstack()이다.

import numpy as np

# 이중 리스트
double_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 단일 리스트로
single_list = np.hstack(double_list)

print(single_list) # 결과: [1 2 3 4 5 6 7 8 9]

 

np.hstack()함수는 넘파이에서 주어진 리스트나 배열들을 수평으로 쌓아서 1차원 배열로 만들어주는 함수이다.

728x90
728x90

노마드 코더의 챌린지로 IT 5분 잡학사전이라는 책을 읽기 시작했었다.

 

여러 챌린지에 도전했지만, 생에 처음으로 성공해본 챌린지여서 감회가 남달랐다.

노마드 코더가 잘 완수할 수 있도록 독려해준 것도 있지만, 애초에 책 자체가 좋아서 매일 읽고 싶은 마음이 컸다.

 

이 책은 IT 분야 전반을 넓고 얕게 다뤄주는 책이라고 정의하고 싶다.

넓고 얕다고 해서 이를 건너뛰고 한 분야에 집중된 강의나 책부터 시작하는게 시간낭비 없이 빠른 방법이라고 예전엔 생각했지만, 이 책을 읽고 나서 생각이 달라진 것 같다.

 

숲을 먼저 보라는 말이 있지 않은가?

내가 어느 방향으로 나아가야 하고, 이 방향으로 나아가기 위해 배워야 할 것은 어느 것이 있고,

그 배워야 할 대략의 개념을 짚어주어 진입 장벽을 낮춰주는게 이 책의 역할이라는 생각이 든다.

돌아보면 내가 더 공부하고, 나아가는데 동기부여도 적절해 해준 것같다.

 

전공자이기 때문에 대부분의 개념을 알고 있었지만

기존에 애매하게 알고 있던 개념들이 확실히 잡히기도 했고, 더 깊에 공부하고 싶은 분야도 생겼다.

그래서 새롭게 알게 된 내용은 더 구글링하고 직접 공부해보며 블로그에 기록해보기도 했다.

 

https://jaehhhk.tistory.com/42

 

[IT 5분 잡학사전] C, C++, C#의 차이

노마드 코더 챌린지 2일차이다! 이번 포스팅에서는 기존에 나도 새롭게 알게 되었던 C, C++, C#의 차이에 대해 알아보려 한다. 모두가 알듯이 프로그래밍 언어는 정말 다양하다. 단순히 여러 종류

jaehhhk.tistory.com

https://jaehhhk.tistory.com/43

 

[IT 5분 잡학사전] 파이썬이 C보다 느린 이유

노마드 코더 노개북 3일차! 이번에 책을 읽으며 새롭게 배운 내용인 파이썬이 C언어보다 느린 이유에 대해 설명해보려 한다. 파이썬이 C보다 느리다는 것은 당연한 사실로 받아들이고 코드를 짰

jaehhhk.tistory.com

https://jaehhhk.tistory.com/46

 

[IT 5분 잡학사전] SQL과 NoSQL

이번 포스팅에서는 SQL과 NoSQL에 대해 말해보려 한다. 학부 과목으로 DB와 SQL을 배웠지만(이번 학기에도 심화 강의 들어야 함) 해당 수업때는 MySQL 워크벤치나 쿼리문을 중심으로 배웠고 NoSQL에 대

jaehhhk.tistory.com

 

다음 챌린지인 클린코드도 이미 신청하고, 책도 구매했다.

 

날 앞으로 더 나아갈 수 있게 만들어준 노마드 코더에 무한 감사를 표하며,,

이 책을 읽을지 말지 고민하고 있는 사람들이 있다면 진짜 강추한다! 

 

728x90
728x90

힉부 연구생을 하며 연구실이 보유한 클러스터 서버 3대를 다룰일이 생겼다.

 

그동안 내가 주로 이용하던 서버는 연구실 내에 위치하여 GUI가 필요한 툴들을 이용할 때는 모니터와 키보드를 연결해 GUI 모드로 이를 이용하곤 했었는데,

이번에 이용할 서버들도 마찬가지로 GUI를 이용해야 하는데 학교 저 멀리 다른 건물에 위치해있었다...ㅎ

내가 관리하는 서버들 (선정리 해야겠다!)

 

맨처음에는 위 사진처럼 GUI 이용해야 할 날을 이틀 정도 잡고, 모니터 키보드 다 챙겨서 서버룸으로 출퇴근하며 작업해볼까 고민해봤지만

방학이어서 사람들도 거의 없는 건물 빈 방에 혼자 쪼그리면서 개발하면 너무 비참해질 것 같아서ㅎ

다른 방안을 생각해보기로 했다.

 

그 중 생각해낸게 SSH + VNC이다.

내 노트북에 SSH로 서버에 접속한 후, VNC를 이용해 해당 서버를 GUI로 띄우는 것이다.

 

다른 블로그를 보며 실행해봤지만, 나 같은 경우 접속은 성공했지만 검은 화면이 떠 이리저리 알아보며 최대한 해결했다.

그리고 내가 이용할 서버는 SSH 연결도 Gateway 서버 하나 거쳐서 진행하기 때문에 아주 조금 더 복잡했다.

이러한 시행착오들을 이번 포스팅에 다 녹여서 설명해보려 한다. 

 

그전에 ssh와 VNC 개념은 알고 계신다는 가정하에 설치 및 세팅 과정만 작성해보려 한다.

 

과거의 내가 보며 같이 서버 세팅한다는 생각으로 단계별로 최대한 자세하게 풀어쓰려 한다.

시작해보자!

 


환경 정의

연결할 서버는 Ubuntu이다. 요즘 Centos랑 Ubuntu 왔다갔다 하느라 정신이 없다

 

우선 내가 사용할 서버는 곧바로 SSH로 연결하지 않는다.

Gateway 서버 한대를 우선 거친 후 연결되는 방식이다.

 

그래서 간략히 표현하자면

노트북 -> Gateway 서버 -> 접속할 서버

방식으로 접속한다,

 

다른 VNC 뷰어 툴들 중 이러한 세팅을 제일 쉽게 지원하는 툴이 MobaXterm이었다.(내 기준)

 

따라서 나의 계획은

내 노트북으로 ssh로 접속 ->  VNC를 이용하기 위한 서버 세팅 ->  MobaXterm을 이용해 GUI 화면 노트북에 띄우기 

이다.

 

만약 다이렉트로 SSH 연결이 가능한 경우엔 오히려 좋다.

해당 과정은 건너뛰기만 하면 된다.

 

MobaXterm 설치

앞에서 말했다 싶이 내가 사용할 툴은 MobaXterm이다.

MobaXterm은 VNC 말고도 굉장히 많은 기능들을 지원한다.

나도 다른 기능들 조금씩 이용해보며 정말 많은 것들을 배웠다. 관심있는 분들은 자세히 공부해보면 좋을것 같다.

 

아래 사이트에 접속해 MobaXterm을 설치해준다.

https://mobaxterm.mobatek.net/download.html

 

 

각자 상황에 맞게 어떤 에디션을 설치해줄 지 고르면 된다.

나 같은 경우는 학교에서 비영리적인 목적으로 이용할 예정이기 때문에 Home Edition을 설치해줬다.

 

 

이를 클릭하면 아래와 같은 화면이 나온다.

 

Portable, Installer 두 가지 옵션이 또 나온다. 이 둘의 차이는 아래와 같다.

 

  • Portable Edition
    • 설치 프로그램 없이 단일 파일
    • USB 같은 외부 저장장치에 복사하여 사용 -> 다른 컴퓨터에도 사용 가능
    • 시스템에 직접 설치되지 않음
  • Installer Edition
    • 사용자 컴퓨터에 직접 설치

 

나 같은 경우 Installer Edition을 설치해주었다.

이를 누르면 압축 파일이 하나 다운로드 되는데, 이를 풀면 .msi 파일이 나온다.

해당 파일을 눌러 설치를 진행해준다. 설치 과정은 별거 없다.

 

설치 후 MobaXterm 아이콘이 생길텐데, 이를 클릭하면 프로그램이 실행될 것이다!

 

 

 

여기서 VNC를 사용하기 전에 서버에 세팅해주어야 할 것이 있다.

이를 먼저 진행하려 한다.

 

 

서버 세팅

gnome, vns server 툴 설치

GUI로 띄우고 싶은 서버에서 작업해줘야 한다.

우분투 기준 아래 툴들을 설치해준다.

 

# 이거 설치 안해줘서 VNC 뷰어에서 검은 화면이 떴다
apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal -y

# TIGER VNS 관련 패키지
apt-get install tigervnc-standalone-server tigervnc-xorg-extension -y

 

 

설치를 완료했으면 비밀번호를 설정해줘야 한다.

sudo vncpasswd

 

해당 비밀번호는 추후에 MobaXterm이 localhost 비밀번호 물어볼 때 입력할 것이므로 절대 잊으면 안된다.

(그리고 아래 사진과 달리, 루트 사용자가 아닌 경우 꼭 sudo를 붙이도록 한다.)

 

 

이때 'Would you like to enter a view-only password' 라는 질문엔 n을 입력해줬다.

이는 사용자가 읽기 전용 비밀번호를 설정할 지의 여부를 묻는 메시지다.

나는 VNC 사용자로 들어가 파일들을 조작할 예정이기 때문에 n을 입력한 것이다.

 

 

xstartup 파일 생성

 아래 경로로 xstartup이라는 파일을 새로 만들어 준다.

# xstartup은 기존에 존재하지 않는 파일이다. 새로 만들어주기
vim ~/.vnc/xstartup

 

이후 해당 파일에 아래와 같은 메시지를 복사 붙여넣기 한다.

맨 밑 4줄은 다른 블로그들엔 없는 내용인데, 이를 추가해주지 않으면 나같은 경우 검은 화면만 떠서 추가해줬다.

#!/bin/sh
# Start Gnome 3 Desktop 
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &

# 기존 다른 블로그엔 없던 부분.. 따로 추가
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &

 

그 후 파일 권한을 설정해준다.

# 권한 조정
chmod u+x ~/.vnc/xstartup

 

Xauthourity 파일 생성

# root에 Xauthority 파일 자동 생성
sudo .Xauthority

 

 

서버 실행

서버의 모든 세팅은 다 끝났다.

이제 vnc를 실행시켜주도록 하자.

이때 나 같은 경우 root 권한으로 실행해야 GUI가 제대로 떴다. 루트 권한 아닌 경우 sudo 꼭 넣어준다.

# 서버 실행
sudo vncserver -localhost no

 

여기서 끝에 no는 외부 접속을 허용하기 위한 옵션이다.

이를 주지 않으면 localhost로의 접근만 가능하기 때문에 반드시 넣어줘야 한다.

명령어를 실행해주면 아래와 같이 비밀번호 한번 더 입력하는 안내가 나온다.

똑같이 비밀번호 입력하면 된다.

 

 

 

xxx:1 라는 프로세스가 생성되었다.

끝자리가 1이면 5901, 2면 5902, 3이면 5903 번 포트를 이용해 VNC에 접근한다.

프로세스 리스트를 자세히 확인해보자

 

# VNC 프로세스 리스트
# root 권한으로 반드시!
sudo vncserver -list

 

 

1번 프로세스가 생성되었으므로 포트번호는 5903번이 배정되었음을 확인할 수 있다.

만약 이를 kill하고 싶다면 아래 명령어를 이용하면 된다.

 

# xxx:3 vnc 프로세스 kill
sudo vncserver -kill :1

 

 

 

MobaXterm 실행

서버 세팅은 완료했다. 이제 노트북으로 가서 MobaXterm을 실행시켜본다.

 

 

좌상단에 빨간색 박스 Session을 클릭한다.

그다음 우리가 이용할 VNC를 클릭해준다.

 

이를 클릭하면 아래와 같은 창이 뜨는데,

Basic Vnc Setting 칸에 세팅한 서버의 IP 주소를 입력해준 후 포트 번호를 맞춰주면 된다.

앞서 살펴봤을 때 나와 같은 경우 5901번 포트를 써야 한다는 것을 알기 때문에 5901번으로 맞춰준다.

 

 

자 여기서 갈리는 부분이 있다.

내 서버 같은 경우는 SSH 접속시 노트북에서 서버로 곧바로 연결되는 것이 아니라, Gateway 서버 한대를 거쳐간다.

나와 같은 환경이신 분은 아래 과정을 따라가면 되고, 아닌 분들은 넘어가면 된다.

 

 

Network settings 클릭

 

 

빨간색 네모 클릭

 

 

여기서 각자 환경에 맞는 게이트웨이 서버 설정을 입력해주면 된다.

 

OK 버튼을 누르면 루트 권한으로 VNC 서버 실행하신 분들은 바로 GUI 창이 뜰 것이고,

아닌 분들은 localhost 비밀번호 묻는 화면이 뜰 것이다.

그런 경우 앞서 vncserver passwd 단계에서 설정했던 비밀번호를 입력해주면 된다.

 

실행 결과

 

짜잔~ GUI로 띄우기 성공했다!

이제 내 자리에서 저 멀리 있는 서버들 이용해 GUI 툴들 이용할 수 있다

 

셋업보다 글쓰기가 더 오래 걸린 것 같은 느낌ㅎ

그래도 이 글로 인해 누군가가 도움이 되었다면 난 그걸로 됐다!

728x90
728x90

이번 포스팅에서는 SQL과 NoSQL에 대해 말해보려 한다.

학부 과목으로 DB와 SQL을 배웠지만(이번 학기에도 심화 강의 들어야 함) 해당 수업때는 MySQL 워크벤치나 쿼리문을 중심으로 배웠고

NoSQL에 대해선 제대로 배우지 못했다.

 

따라서 NoSQL의 여러 종류(MongoDB, CassandraDB ... )에 대해 이름은 알고 있었으나 그들의 차이점에 대해 정확히 알고 있지 않았다.

이번에 그 종류와 구분에 대해 개념이 잡힌 것 같아 풀어써보려 한다.

 

그전에 SQL이 무엇인지부터 시작해보려 한다.

 


SQL과 DB

SQL은 DB에 쿼리(질의)를 날리기 위해 어떤 구조를 갖고 있는 언어이다.

즉 데이터베이스를 다루는 언어인 것이다.

 

SQL로 쿼리를 받은 데이터베이스는 데이터를 보관하는 창고의 역할을 한다.

데이터베이스 자체는 데이터를 직접 처리하는 능력을 갖고 있지 않다. 

데이터를 처리하는 시스템은 DBMS(DB Management System)이 담당한다.

SQL로 데이터베이스와 상호작용을 하려면 이러한 DBMS를 거쳐야 한다.

 

이러한 DBMS의 여러 종류 중 하나가 우리가 흔히 알고 있는 MySQL, Oracle이다.

각 DBMS에는 각자가 쓰는 SQL이 있다.

 

 


NoSQL

NoSQL은 앞서 살펴본 SQL과 성격이 다르다.

NoSQL은 각자의 성격에 따라 다시 Document DB, Key-Value DB, Graph DB로 나뉜다. 

 

Document DB

도큐먼트 데이터베이스로 대표적인 것은 Mongo DB가 있다.

몽고 디비는 데이터를 JASON 형태로 저장한다.

대괄호와 중괄호를 이용해 데이터를 구분해서 저장하는 것이다.

 

기존 SQL로 다루는 데이터베이스는 표의 형태를 띄고 있어 매우 정적(Static)이다.

만약 기존 데이터베이스에서 하나의 열을 늘리고 싶다면 다른 행에는 반드시 추가할 열에 들어갈 값이 명시되어 있어야 한다.

 

반면 몽고 디비와 같은 도큐먼트 데이터베이스는 데이터마다 구성 요소가 같을 필요가 없다.

덕분에 개발자가 원하는 모양의 데이터를 자유롭게 저장할 수 있다는 장점이 있다.

 

Key-Value DB

키값 데이터베이스로 대표적인 것은 Cassandra, Dynamo DB가 있다.

 

카산드라는 열이 넓다는 특징이 있다.

매우 넓은 열을 갖고 있는 데이터베이스인 것이다.

덕분에 많은 데이터를 매우 빠른 시간에 처리할 수 있다는 장점이 있다.

이러한 특징으로 애플, 넷플릭스, 우버 등의 회사가 이를 이용하고 있다.

 

Graph DB

페이스북이 개발한 그래프 데이터베이스는 노드로 관계를 표현하는 데이터베이스이다.

페이스북을 예시로 들면 사용자1이 사용자2에 좋아요나 댓글을 남길 수 있다.

이때 사용자2는 사용자1과 팔로우하 중인 사용자3도 존재한다.

이처럼 사용자 한 명 한 명을 하나의 노드로 보았을 때의 여러 측면의 관계를 그래프로 표현할 수 있다.

728x90
728x90

이번에는 웹개발에서 중요한 키워드인 프런트 엔드(Front-End, FE)와 백엔드(Back-End, BE)에 대해 알아보고,

더 나아가 풀스텍(Full Stack)에 대해서도 알아보려 한다.

 

맨 처음 소프트웨어 학과 공부를 시작할 때 가장 먼저 했던 고민이었던 것 같다.

'만약에 웹 개발자가 된다면 프런트 엔드로 나아가야 할까? 백엔드로 나아가야 할까?'

 

지금은 인프라쪽으로 진로 방향을 잡고 나아가고 있지만

모든 소프트웨어를 공부하려고 하는 사람들이라면 무조건 알아야 할 것들이라 생각한다.

 


Front-End

 

프런트 엔드는 말 그대로 '프로그램의 가장 앞'을 말한다.

우리가 사용하는 웹 사이트의 화면들을 프런트 엔드라고 한다.

사용자가 보는 화면의 인터페이스인 것이다(UI).

 

사용자 인터페이스는 사용자와 상호작용하는 것을 의미한다.

예를 들면 우리가 웹 사이트에서 볼 수 있는 여러 버튼들, 입력창, 반응형 디자인 등등

 

이러한 것들을 개발하는 직군이 프런트 엔드 개발자이다. 

프런트 엔드 개발자들은 HTML과 CSS, Java Script, React, Vue.js 등으로 개발을 진행하며

관련 코딩 트렌드와 유행하는 툴들이 자주 업데이트 되어 커리어 중에도 습득해야 할 학습량이 어마어마하다.

그래서 이러한 고충 때문에 JavaScript Fatigue 라는 용어도 따로 있다고 한다..(이건 몰랐네)

 

매일 업데이트 되는 트렌드로 이를 팔로업 하기 위한 정보량이 많지만, 끊임없이 자신을 발전시키는 것을 좋아하는 분들, 최신 기술을 이용하는데 흥미를 갖는 분들이라면 정말 매력적인 직무라고 생각한다.

 

만들면서도 진행 상황을 레이아웃으로 한번에 확인 가능하고, 사용자 피드백도 즉각적으로 받을 수 있는 영역이기 때문이다.

 

 

Back-End

 

백엔드는 반대로 '프로그램의 가장 뒤'를 말한다.

데이터베이스(회원 정보 등등)와 라우터 등의 웹의 뒷 부분을 담당한다.

 

백엔드는 프런트 엔드와 달리 사용자가 눈으로 즉각적으로 볼 수 있는 부분이 아니지만, 실제 우리가 사용하는 기능들의 전반이다.

회원 생성, 글 업로드, 댓글 작성 등의 기능들을 백엔드에서 처리한다.

 

관련해 여러 프로그래밍 언어 및 SQL을 알고 있어야 한다는 고충이 있지만, 프런트 엔드보다 개발 환경이 안정적이라는 장점이 있다.

프런트 엔드가 불안정적이라는 뜻이 아니라, 백엔드는 개발자가 선택한 프래임 워크(Django, Spring,,,)에서 트렌드가 프런트 엔드와는 달리 확 바뀌지 않는다는 것이다.

 

하지만 프런트 엔드와 달리 사용자 눈에 보이지 않는 뒷면을 개발하다보니, 즉각적인 피드백을 받을 수 없다.

 

 

Full-Stack

 

풀스택은 프런트 엔드, 백엔드에 더해 데브옵스(DevOps)이다.

풀스택 개발자들은 이들을 다 할 줄 알아야 한다.

이때 데브옵스는 소프트웨어 개발 + 운영이다.

 

이들은 개발 뿐만아니라 데브옵스, 즉 서버 선정, 서버 셋업, 보안 등 수많은 것들을 담당할 수 있어야 한다.

 


 

이렇게 프런트 엔드, 백엔드, 풀스텍에 대해 알아보았다.

나 같은 경우 리눅스 서버를 주로 만지다 보니 개발 영역에는 모르는 부분들이 많다.

그래도 나름 웹/앱 관련 툴들이나 용어들에 대해서는 전반적으로 다 알고 있다고 생각했는데, 책을 읽으면 읽을 수록 내가 모호하게 알고 있던 부분이나 새로운 개념들이 명확해지기 시작했다. 

728x90
728x90

오늘 새로 배운 내용을 정리해보고자 한다

 

바로 도메인 주소 관리에 대하여이다!

우리가 이용하는 인터넷 주소 즉 도메인의 관리는 어떻게 되고 있을까?

 

오늘은 우리의 삶을 편리하게 만들어주는 도메인 시스템과 레지스트리

그리고 처음으로 약간의 개인적인 이야기를 덧붙여 내가 개발을 하려는 이유에 대해 말해보려 한다.


우리 삶을 편리하게 만들어준 도메인 시스템

 

모든 개인용 노트북 및 컴퓨터부터 시작해 기업이 운영하는 서버들은 모두 IP주소를 갖고 있다.

그러므로 당연히 우리가 사용하는 홈페이지는 모두 IP주소로 접속 가능하다.

 

하지만 그 긴 숫자들을 외우는 것 보다 간단한 이름으로 입력을 해서 들어가는 것이 더 편리하고, 그것이 지금 우리가 사용하고 있는 도메인 체계이다.

 

예를 들어 네이버의 IP주소는 202.131.30.11이다.

우리는 이 숫자들을 직접 주소창에 입력하여 네이버에 접속하는 대신, www.naver.com을  을 입력하여 접속한다.

 

이러한 도메인 시스템 덕분에 우리가 네이버의 주소를 입력하면, 브라우저는 도메인 시스템에서 네이버에 해당하는 IP주소를 찾아 사이트로 이동한다.

이 부분에 대해 기술적이고 자세한 이야기는 추후에 더 깊에 풀어써보려 한다.

 

 

도메인 시스템과 레지스트리

위에서 알 수 있듯이 도메인은 하나의 전화번호부라고 생각하면 된다.

IP주소와 도메인 이름이 매핑되어 있는 것이다.

 

하지만 그렇게 단순히 1:1로 매핑해서 관리하기에는 전세계 도메인 수는 엄청나다.

그래서 넓고 복잡한 도메인 시스템을 관리하는 방법이 따로 존재한다.

바로 큰 전화번호부 안에 세부로 전화 번호부를 따로 두는 것이다.

이러한 작은 전화번호부를 레지스트리라고 한다.

 

레지스트리는 기업에서 운영한다.

가장 유명한 레지스트리 기업은 베리사인(VeriSign)이라는 곳이다.

https://www.verisign.com/

 

Verisign is a global provider of domain name registry services and internet infrastructure - Verisign

Verisign enables the security, stability and resiliency of key internet infrastructure and services, including the .com and .net domains. The domains that define the internet are Powered by Verisign.

www.verisign.com

 

베리사인이 가장 유명한 이유는 많은 도메인 중에서 닷컴(.com)을 관리하고 있기 때문이다.

 

근데 여기서 오해하면 안되는 것이 베리사인과 같이 레지스트리를 관리하는 기업은 도메인을 생성하기만 할 뿐 이를 직접 판매하지는 않는다. 

 

도메인을 구입하려면 리셀러들에게 구매를 해야한다.

대표적인 리셀러로는 고대디(GoDaddy), 우리나라 기업으로는 관심 있는 분들은 자주 들었을만한 카페24(Cafe24)가 있다.

https://www.cafe24.com/

 

카페24 - No.1 글로벌 전자상거래 플랫폼

회원가입만 하면 글로벌 쇼핑몰부터 제작, 배송, 마케팅까지 이커머스에 필요한 솔루션과 인프라를 원스톱으로 제공

www.cafe24.com

이러한 리셀러가 필요한 이유는 도메인을 레지스트리에 등록하는 과정이 매우매우 복잡하기 때문이다.

 

레지스트리를 운영하려면 도메인을 관리하는 기구인 ICANN(Internet Corporation for Assigned Names and Numbers)에 신청을 해야한다.

(하지만 신청 비용도 엄청나고, 레지스트리를 운영할 수 있는 인프라와 기술을 입중해야 한다고 하니 개인 단위에서 신청하는 것은 거의 불가능해 보인다ㅎ)

 


내가 개발을 하는 이유

내가 개발을 하는 이유에 대해 짧게 써보려 한다.

사실 지금 난 인생에서 아주아주 혹독한 겨울을 보내고 있다.

부끄럽지만 28년동안 처음으로 내가 지금까지 살아온 인생을 돌아보고 있는 중이기도 하고, 수많은 후회와 깨달음을 반복해가며 울고 웃기도 하고 있다.

 

내가 이번 겨울을 돌아보며 뼈저리게 느낀 것은 두 가지이다.

첫 째는 해야겠다고 생각한 일은 절대로 미루지 말자.

둘 째는 모든 일에는 준비가 되어 있어야 한다. 

나는 이 두가지를 소홀히 해서 인생에 큰 기회라고 생각했던 아주 아주 많이 소중했던 것을 잃었다.

 

이걸 알고 내 삶을 돌아보니, 사소한 것들에서도 이 두 가지가 제대로 되어있지 않은 채 습관이 되어 있더라

그래서 이걸 뿌리채 뽑아버렸고, 이 두개를 내 삶의 큰 원칙으로 삼고 살아가보니 세상을 바라보는 눈과 내 생활 패턴이 신기하게 완전히 바뀌었다.

 

인간이 상실감을 느낄 때가 가장 창의성이 높아질 때라고 한다.

그렇게 나한테도 운좋게 좋은 아이디어가 스쳤고, 그걸 생각난 김에, 그리고 그 아이디어가 타이밍 맞게 세상에 나오기 위한 준비를 하고자 개발을 하려 하고, 노마드 코더 챌린지도 신청했다. 

 

더 깊은 이야기는 다음주 쯤에 올려야겠다.

슬퍼하더라도 이번주에 있을 세미나랑 랩미팅을 마저 끝내고 슬퍼해야겠다.

 

 

728x90

+ Recent posts