Study

[ SJCE ์Šคํ„ฐ๋”” / 2์ฃผ์ฐจ ] ์œ ๋‹ˆํ‹ฐ ๊ธฐ์ดˆ (๋ผ์ดํ”„ ์‚ฌ์ดํด, State Machine , ๋ฐฐ๊ฒฝ ์„ค์ •, ๋ธํƒ€ ํƒ€์ž„, Enum) ์™€ DB

HUIcode 2025. 4. 24. 13:39

 

 

2024.09.07 (ํ† )


[ ๐Ÿ–ฅ๏ธ Client Part. ] 

๐Ÿ•น๏ธ ์œ ๋‹ˆํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ (Lifecycle)

https://docs.unity3d.com/kr/2023.2/Manual/ExecutionOrder.html

 

์ด๋ฒคํŠธ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ˆœ์„œ - Unity ๋งค๋‰ด์–ผ

Unity ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‚ฌ์ „์— ์ง€์ •ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฒคํŠธ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ์‹คํ–‰ ์‹œํ€€์Šค์— ์–ด๋–ป๊ฒŒ ํฌํ•จ๋˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

docs.unity3d.com

 

Unity์—์„œ์˜ ๋Œ€ํ‘œ์ ์ธ ํ•จ์ˆ˜๋“ค์˜ ์‹คํ–‰ ์ˆœ์„œ

 

๐Ÿ”น Awake (์ฒซ Scene ์‹œ์ž‘ ์‹œ)

  • ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ
  • ํ•œ ์”ฌ ๋‚ด์—์„œ ์˜ค๋ธŒ์ ํŠธ๋งˆ๋‹ค ์˜ค์ง ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋จ
  • ๋น„ํ™œ์„ฑํ™”๋œ ์˜ค๋ธŒ์ ํŠธ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ, ๋‹จ ์Šคํฌ๋ฆฝํŠธ๋งŒ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—” ํ˜ธ์ถœ๋จ

๐Ÿ”น Start (์ฒซ ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธ ์ „)

  • ์Šคํฌ๋ฆฝํŠธ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, ์ฒซ ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธ ์ด์ „์— ํ˜ธ์ถœ๋จ
  • ๋ชจ๋“  Awake๊ฐ€ ๋๋‚œ ํ›„ ์‹คํ–‰๋จ
  • ์—๋””ํ„ฐ ์‹คํ–‰ ์ดํ›„ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์— ์ฃผ๋กœ ์‚ฌ์šฉํ•จ

๐Ÿ”น Update

  • ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ํ•œ ๋ฒˆ ํ˜ธ์ถœ
  • ๊ฒŒ์ž„ ๋กœ์ง ๋Œ€๋ถ€๋ถ„์ด ์ด ์•ˆ์—์„œ ์ฒ˜๋ฆฌ๋จ. ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์ฃผ์š” ์ž‘์—… ํ•จ์ˆ˜์ž„
  • ๋””๋ฐ”์ด์Šค ์„ฑ๋Šฅ์ด๋‚˜ ์ตœ์ ํ™” ์ƒํ™ฉ์— ๋‹ค๋ผ framerate๊ฐ€ ๋ณ€ํ•˜๊ธฐ์— ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ๊ฐ„์ด ๋งค๋ฒˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ

๐Ÿ”น OnDisable(๋๋‚ผ ๋•Œ) & OnDestroy(์˜ค๋ธŒ์ ํŠธ Destroyํ•  ๋•Œ)

  • OnDisable: ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ disabled ๋˜๊ฑฐ๋‚˜ inactive ๋  ๋•Œ ํ˜ธ์ถœ
  • OnDestroy: ์˜ค๋ธŒ์ ํŠธ ์ƒ์กด ๊ธฐ๊ฐ„์˜ ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์ด ์—…๋ฐ์ดํŠธ๋œ ํ›„ ํ˜ธ์ถœ

 

๐Ÿ”€ ์ƒํƒœ ๋จธ์‹ (FSM: Finite State Machine)

๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ์˜ ์›€์ง์ž„(์˜ˆ: Idle → Move → Attack)์ฒ˜๋Ÿผ ๋™์ž‘์„ ์ƒํƒœ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์–ดํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์„ค๊ณ„ ํŒจํ„ด

  • State: ๊ฐ์ฒด์˜ ๋™์ž‘์„ ์ƒํƒœ๋กœ ๋ถ„๋ฅ˜ (Idle, Move, Attack ๋“ฑ)
  • Transition: ์ƒํƒœ ๊ฐ„ ์ „ํ™˜ ์กฐ๊ฑด ์ •์˜(์ƒํƒœ์™€ ์ƒํƒœ ์‚ฌ์ด์˜ ์ „์ด๋ฅผ ์ •์˜ํ•จ ex. Idle์—์„œ Move๋กœ ์ƒํƒœ๊ฐ€ ์ „์ด๋  ๋•Œ์˜ ์กฐ๊ฑด ์ •์˜)
  • Action: ๊ฐ ์ƒํƒœ์—์„œ ์‹คํ–‰ํ•  ๋™์ž‘ ์ •์˜ (ex. Attack ์ƒํƒœ์—์„œ ์ˆ˜ํ–‰ํ•  ๋™์ž‘์„ ์ •์˜)

State Machine

 

 


๐Ÿ‘พ ๋ฐฉ์น˜ํ˜• ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ

2025.04.24 - [๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ] - [ Unity2D ] ๋ฐฉ์น˜ํ˜• ๊ฒŒ์ž„ - Background ์„ค์ •

 

[ Unity2D ] ๋ฐฉ์น˜ํ˜• ๊ฒŒ์ž„ - Background ์„ค์ •

SJCE ์Šคํ„ฐ๋””์—์„œ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์น˜ํ˜• ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ์˜ ๋ฐฐ๊ฒฝ์€ 3๊ฐœ์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋ฐ˜๋ณตํ•ด์„œ ๋“ฑ์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค. ์ด๋ฒˆ ์ฃผ์ฐจ์— ๋ฐฐ์šด ๊ธฐํƒ€ ๊ฐœ๋…์— ๊ด€ํ•œ ๊ธ€์€ ์•„๋ž˜์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 2025.04.24

record-coding53.tistory.com

 

โฑ๏ธ ๋ธํƒ€ ํƒ€์ž„ (Time.deltaTime)

ํ”„๋ ˆ์ž„ ์†๋„์— ๋”ฐ๋ผ ์˜ค๋ธŒ์ ํŠธ ์›€์ง์ž„ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์œผ๋กœ ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์œผ๋กœ๋ถ€ํ„ฐ ํ˜„์žฌ ํ”„๋ ˆ์ž„๊นŒ์ง€์˜ ๊ฐ„๊ฒฉ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ์ด์ „ ํ”„๋ ˆ์ž„์ด ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด๋‹ค. ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ถœ๋˜๋Š” ์ด ๊ฒŒ์ž„์—์„œ, ๊ธฐ๊ธฐ ์„ฑ๋Šฅ ๋“ฑ์— ๋”ฐ๋ผ A๋Š” 10fps(frames per second), B๋Š” 60fps๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด A๊ฐ€ ์œ ์ด์•Œ์ด 1์ดˆ์— 10m๋ฅผ ๋‚ ์•„๊ฐ€๋Š” ๋™์•ˆ B๊ฐ€ ์œ ์ด์•Œ์€ 1์ดˆ์— 60m๋ฅผ ๋‚ ์•„๊ฐ€๊ฒŒ ๋˜์–ด ๊ณต์ •ํ•˜์ง€ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ”„๋ ˆ์ž„ ๊ฐ„ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ธ ๋ธํƒ€ ํƒ€์ž„์„ ์ ์šฉํ•œ๋‹ค. ์ฆ‰, ๋ธํƒ€ ํƒ€์ž„์„ ๊ณฑํ•˜์—ฌ ์ด๋™ ๊ฑฐ๋ฆฌ ๋“ฑ์„ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


๐Ÿ“‘ Enum (์—ด๊ฑฐํ˜•)

C#์—์„œ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜๋ฅผ ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

enum GameState { Idle, Move, Attack }
GameState currentState = GameState.Move;
  • ๊ธฐ๋ณธ์ ์œผ๋กœ enum์˜ ์ƒ์ˆ˜ ๊ฐ’์€ ๋‚ด๋ถ€์  int ํ˜•์‹์ด๋ฉฐ, 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค
  • ์—ฐ๊ฒฐ๋œ ์ƒ์ˆ˜ ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค
enum ErrorCode: ushort
{
	None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}
  • ๋ช…์‹œ์  ๋ณ€ํ™˜์„ ํ†ตํ•ด ์—ด๊ฑฐํ˜• ํ˜•์‹๊ณผ ๊ธฐ๋ณธ ์ •์ˆ˜ ํ˜•์‹์„ ๋ณ€ํ™˜ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
public enum StateBtn
{
	None = 0,
    Btn1 = 1,
    Btn2 = 2,
    Btn3 = 3,
}
public StateBtn sBtn = StateBtn.None;

-----

case StateBtn.Btn3:
	{
    	Debug.Log("Btn3");
    }break;
    

case(StateBtn)3:
	{
    	Debug.Log("Btn3");
    }break;
    
# ์ด ๊ฒฝ์šฐ, case ๊ตฌ๋ฌธ ๋‘ ๊ฐ€์ง€๋Š” ๋™์ผํ•œ ์˜๋ฏธ์ด๋‹ค.

 

๐Ÿ“š C# Enum ๊ณต์‹ ๋ฌธ์„œ


๐Ÿž ๋””๋ฒ„๊น…

๋””๋ฒ„๊น…(Debugging) : ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ์ • ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋‚˜ ๋น„์ •์ƒ์ ์ธ ์—ฐ์‚ฐ ์ฆ‰, ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ

  • ์ค‘๋‹จ์ (Breakpoint) ์„ค์ •/ํ•ด์ œ: F9 (์กฐ๊ฑด๋ถ€ ์„ค์ •๋„ ๊ฐ€๋Šฅ: ์ƒ์„ฑ๋œ ์ค‘๋‹จ์ ์—์„œ ์šฐํด๋ฆญ-์กฐ๊ฑด)
  • ๋””๋ฒ„๊ทธ ๋ชจ๋“œ ์‹คํ–‰: F5 (์ค‘๋‹จ์ ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•ด๋‹น ๋ผ์ธ ์‹คํ–‰ ์ง์ „์— ์ค‘๋‹จ, ํ•œ๋ฒˆ ๋” ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ์ค‘๋‹จ์ ์ด ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ ๋˜๊ธฐ ์ „๊นŒ์ง€ ์‹คํ–‰)
  • ํ•œ ๋‹จ๊ณ„์”ฉ ์‹คํ–‰(ํ”„๋กœ์‹œ์ € ๋‹จ์œ„ ์‹คํ–‰): F10,  F11(ํ•œ ๋‹จ๊ณ„์”ฉ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ํ•จ์ˆ˜ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ ์ง„์ž…)
  • ๋””๋ฒ„๊น… ์ข…๋ฃŒ: Shift + F5

๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•

  1. ํ”„๋กœ๊ทธ๋žจ์„ ๋ช‡ ๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ๋‹จ๊ณ„๋ณ„๋กœ ์ฒดํฌ
  2. ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์ขํ˜€ ๋‚˜๊ฐˆ ๊ฒƒ
  3. ์ž…์ถœ๋ ฅ์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์—ˆ๋Š”์ง€ ๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ์ž‘๊ณผ ๋ ํ•จ์ˆ˜์˜ ์‹œ์ž‘๊ณผ ๋ ๋ถ€๋ถ„ ๋“ฑ ์ฃผ์š” ์ฝ”๋“œ ์œ„์ฃผ๋กœ ์ฒดํฌ
  4. ์ค‘๋‹จ์  ํ™œ์šฉ

 

 


 

[ ๐Ÿ’พ Server Part. ] 

 

๐Ÿ—ƒ๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๐Ÿ”ธ RDB (Relational Database, ๊ด€๊ณ„ํ˜• DB)

  • ํ–‰(Row)๊ณผ ์—ด(Column)์ด๋ผ๋Š” ์ผ์ข…์˜ ํ‘œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ ์ข…์†์„ฑ์€ ๊ด€๊ณ„(Relation)๋กœ ํ‘œํ˜„๋จ
  • ํ•œ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  row๋Š” ๊ฐ™์€ ๊ธธ์ด์˜ colum์„ ๊ฐ€์ง.
  • ์ด column์˜ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ์˜ ๊ด€๊ณ„๊ฐ€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ(Schema)๋กœ ์‚ฌ์ „ ์ •์˜๋จ
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•จ
  • SQL(Structured Query Language) ์‚ฌ์šฉ
  • ์˜ˆ: MySQL, PostgreSQL, MSSQL(Microsoft SQL Server), MariaDB, Oracle, Database, Amazon Aurora ๋“ฑ

 

๐Ÿ”ธ NoSQL (Not only SQL)

  • ์ „ํ†ต์ ์ธ SQL ๊ธฐ๋ฐ˜ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ์™ธ์— ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ์ˆ 
  • RDB์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ์ƒˆ๋กœ์šด ํ˜•ํƒœ
  • ์˜ˆ์™ธ๋Š” ์กด์žฌํ•˜๋‚˜ ๋ณดํ†ต ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ ๋„ ๋ถ€๋ฆ„
  • ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ(๋ช…์‹œ์ ์ธ ์Šคํ‚ค๋งˆ ์—†์ด ๋™์ž‘), ์ˆ˜ํ‰ ํ™•์žฅ ์šฉ์ด, ๋ถ„์‚ฐ ์ €์žฅ
  • ์˜ˆ: MongoDB, Redis, HBase ๋“ฑ

 

 


 

 

 

 

Redis ํŠน์ง•

  • Key-Value ํ˜•์‹์œผ๋กœ ๊ฐ’ ์ €์žฅ
  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ๋ฐ์ดํ„ฐ ํœ˜๋ฐœ์˜ ๋ฌธ์ œ๋Š” ๋ฐฑ์—…์œผ๋กœ ๋ณด์™„ ๊ฐ€๋Šฅ

 

๐ŸŽ’ Redis ๊ธฐ์ดˆ ๋ช…๋ น์–ด

SET key value    # key์— value ์ €์žฅ
GET key          # key๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” value ์กฐํšŒ
DEL key          # ํ‚ค ์‚ญ์ œ (์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๋Š” ๋ฌด์‹œ๋จ)
HSET key field value  
# ์ง€์ •ํ•œ hash keyํ•˜์œ„์˜ field์— value ์ €์žฅ (ํ•„๋“œ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ณ  ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ ํ•ด์‹œํ‚ค ์ƒ์„ฑ)
HKEYS key        # ํ•„๋“œ ๋ชฉ๋ก ์กฐํšŒ
KEYS * 			 # ๋ชจ๋“  ํ‚ค๋ฅผ ํ™•์ธ (KEYS pattern ๊ผด๋กœ *, ?, [a-c] ๋“ฑ glob-style pattern์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)
  • Redis์˜ hash๋Š” ์ž‘์€ key-value ์Œ๋“ค์˜ ๋ชจ์Œ
  • field๋Š” hash key์˜ sub key ๊ฐœ๋…

๐Ÿ“š Redis ๊ณต์‹ ์‚ฌ์ดํŠธ