Study

[ SJCE 스터디 / 1주차 ] 3-Tier Architecture 기반 클라이언트, 서버 개발 시작하기

HUIcode 2025. 4. 24. 10:40

 

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 환경 구축

🛠️ 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 에 명시되어있음)

  • 도메인 → IP 매핑

- endpoint : 도메인, 주소, 포트, path(경로) 등의 정보


🧪 5. 과제

🔗 DB 연동

  • Redis 및 MongoDB 설치 후 Node.js와의 연결 실습 예정

🧮 유니티 계산기 구현

  • 사칙연산이 가능한 기본 계산기 구현
  • UI 구성, 입력 처리, 연산 처리 분리