[ SJCE 스터디 / 1주차 ] 3-Tier Architecture 기반 클라이언트, 서버 개발 시작하기
2024.08.24(토)
스터디 들으면서 노션에 대충 정리해 놓고 다시 정리하면서 블로그로 옮겨야지 ~ 하고 이제 생각나서 정리중 ..
이번 스터디는 클라이언트부터 서버, 데이터베이스까지 3계층 아키텍처(3 Tier Architecture) 를 모두 구현해보는 것을 목표로 하고 있다.
🎯 1. 스터디 방향성 및 목표
- 아키텍처 구성:
- 프레젠테이션 계층 (Client) : Unity (2022.3.43f1 LTS) + C#을 사용하여 2D 방치형 게임 개발
- 로직 계층 (Server) : Node.js (v20.17.0) 기반 Express 프레임워크 활용
- 데이터 계층 (DB) : MongoDB + Redis 사용
- 학습 범위:
- JWT 인증
- 소켓 통신
- 기본적인 클라이언트 & 서버 구조
- DB와의 연동 및 데이터 흐름
- 실시간 통신 기반 기능 구현 등
🔧 2. Git 시작하기
Git 사용법은 별도 문서로 정리
🕹️ 3. 유니티 시작하기
2024.09.02 - [FE/Unity] - [ Unity ] 시작하기
[ Unity ] 시작하기
우리가 Unity 개발환경을 세팅한 방법은 다음과 같다. Step 1. 유니티 허브 설치 파일 다운로드 : https://unity.com/kr/download 해당 링크로 접속해 사용자의 OS에 맞는 유니티 HUB를 다운받는다.Step 2. 유니
record-coding53.tistory.com
🌐 4. 서버 개발 시작하기
⚙️ Node.js 환경 구축
- Node.js 공식 홈페이지에서 다운로드
- 설치 후 버전 확인: node -v, npm -v
🛠️ Express 기반 서버 구축
Node.js를 이용한 서버를 편리하게 구현할 수 잇게 해주는 프레임워크인 express를 함께 설치한다.
npm init # package.json 생성
npm install express --save # express 설치
# cat package.json 명령어로 package.json 파일 내용을 출력해 의존성에 express가 추가되었는지 확인
- index.js 파일 생성 → Hello World 예제 코드 작성 (공식 예제)
vi index.js
i # INSERT 모드 진입
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
ESC # 커맨드 모드 진입
:wq # 파일 저장 후 나오기
- 서버 실행: node index.js
- 접속 확인: http://127.0.0.1:3000 또는 http://localhost:3000
📌 명령어 정리
code . (visual studio code 실행)
vi (편집기 호출 명령어. 없는 파일을 편집하고 저장하면 해당 파일이 생성됨)
ll (현재위치의 파일 목록을 보여주는 명령어 ls -l 옵션을 별명(alias)으로 등록해둔 것으로, 파일의 자세한 정보(권한, 소유자, 크기, 수정 시간 등)를 리스트 형식으로 보여줌
rm (파일 삭제 명령어)
💡 주요 개념
- express: Node.js 서버 구축을 위한 웹 프레임워크
- mime-types 모듈
[ Node.js ] MIME TYPES
mime-types는 Node.js에서 많이 쓰이는 MIME 타입 관련 유틸리티 모듈이다 주로 서버에서 파일의 콘텐츠 타입(Content-Type)을 결정할 때 사용한다.🔍 MIME 타입이란?MIME 타입(Multipurpose Internet Mail Extensions)
record-coding53.tistory.com
- JSON(JavaScript Object Notation): 서버-클라이언트 간 데이터 전송에 사용되는 데이터를 저장하거나 전송할 때 많이 사용하는 경량의 텍스트 기반 데이터 교환 형식 (cf. xml파일)
- Port: 같은 IP에서 여러 서비스(소프트웨어)를 구분해주는 번호 (ex: 443 = HTTPS, 80 = HTTP)
- IP: 서버나 컴퓨터의 주소
- 공인 IP(Public IP) vs 사설 IP(Private IP)
- 공유기는 public한 IP를 받아서 가상의 IP를 뿌려주는 것이다. 따라서 인터넷 사용료는 public IP를 할당 받는 비용이다. 기본 게이트웨이는 공유기의 주소이다(공유기 네트워크 설정 시 게이트웨이 주소로 접속한다)
- ipconfig 시 ipv4 주소가 내 IP 주소이다. 공유기가 뿌려줄 경우 가상IP인 것이다.
- whois ip 조회를 통해 ip 주소를 할당받은 사업자를 알 수 있다
🔹 공인 IP (Public IP)
- 전 세계에서 유일한 IP 주소
- 인터넷에 직접 연결되는 장비(예: 공유기, 서버 등)가 가지는 주소.
- 인터넷 제공업체(ISP)가 할당
- 예시: 203.252.112.3 같은 주소
🔹 사설 IP (Private IP)
- 로컬 네트워크 내부에서만 사용하는 주소
- 인터넷에서는 직접 사용 못 함 (공인 IP로 NAT 변환해야 나감)
- 공유기나 라우터가 집 안의 각 기기에 뿌려주는 IP
- 예시:
- 192.168.x.x
- 10.x.x.x
- 172.16.x.x ~ 172.31.x.x
📡 공유기의 역할
네가 정확히 말했듯이,
공유기는 공인 IP 하나를 받아서, 로컬 네트워크에 사설 IP들을 뿌려줘.
- 공유기가 ISP로부터 공인 IP를 받아요.
- 그다음 내부에서는 사설 IP를 각 기기에 DHCP로 배포.
- 외부에서 보면 모든 기기가 하나의 공인 IP를 공유하는 것처럼 보여요.
이걸 **NAT(Network Address Translation)**라고 해요.
💰 인터넷 사용료 = 공인 IP 사용료?
맞아. 엄밀히 말하면:
- 우리가 돈 내는 건 공인 IP를 통해 외부 인터넷에 접속할 수 있는 권리
- 사설 IP는 무료로 무한히 생성 가능하지만, 인터넷에 직접 나갈 수는 없음
🧭 기본 게이트웨이란?
기본 게이트웨이 = 패킷을 외부로 보내기 위한 첫 번째 관문
- 일반적으로 공유기의 IP 주소 (예: 192.168.0.1)
- 네트워크 설정할 때, 이 주소로 접근하면 공유기 관리 페이지가 떠요.
🖥️ ipconfig에서 보는 정보
ipconfig 또는 ifconfig (맥/리눅스)로 확인하면:
IPv4 주소 | 내 컴퓨터의 사설 IP 주소 |
서브넷 마스크 | 네트워크 범위 계산용 |
기본 게이트웨이 | 공유기 IP 주소 |
🌐 whois로 IP 조회
- whois는 공인 IP 주소가 어느 나라, 어느 ISP 소속인지 알 수 있음
- 사설 IP는 조회해도 의미 없음 (전 세계 공통이니까)
예:
whois 8.8.8.8
→ Google 소유라는 정보가 나옴
- 도메인 & 호스트:
- 127.0.0.1 = localhost (내 컴퓨터를 가리킴)
- (C:\Windows\System32\drivers\etc 의 hosts 파일 | /etc/hosts 에 명시되어있음)
- 127.0.0.1 = localhost (내 컴퓨터를 가리킴)
- 도메인 → IP 매핑
- endpoint : 도메인, 주소, 포트, path(경로) 등의 정보
🧪 5. 과제
🔗 DB 연동
- Redis 및 MongoDB 설치 후 Node.js와의 연결 실습 예정
🧮 유니티 계산기 구현
- 사칙연산이 가능한 기본 계산기 구현
- UI 구성, 입력 처리, 연산 처리 분리