๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ธ€์“ฐ๋Š” ๊ฟ€๋ฒŒ ๐Ÿ

Dev Study #1

by soy๋ฏธ๋‹ˆ 2022. 2. 16.

 

BackEnd


Web Server ์™€ WAS ์˜ ์ฐจ์ด์ 

Web Server => ์†Œํ”„ํŠธ์›จ์–ด + ํ•˜๋“œ์›จ์–ด

  • 1) ์ •์ ์ธ ์ปจํ…์ธ  ์ œ๊ณตํ•˜๋ฉฐ WAS ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ž์›์„ ์ œ๊ณตํ•œ๋‹ค.
  • 2) ์›น ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ http ์š”์ฒญ(Request) ์„ ๋ฐ›์•„ WAS ์— ๋ณด๋‚ด๊ณ  WAS ๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ (Response)
  • Apache Server, NginX ๋“ฑ 

 

WAS (Web Application Server) => Web Server + Web Container (์†Œํ”„ํŠธ์›จ์–ด ์—”์ง„)

  • 1) ๋™์ ์ธ ์ปจํ…์ธ  ์ œ๊ณต์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Application Server
  • 2) JSP, Servlet ๊ตฌ๋™ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
  • 3) Web Server ๊ธฐ๋Šฅ์„ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉ์ 
  • ex) ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜, ๋ฉ”์‹œ์ง•, ์“ฐ๋ ˆ๋“œ ์ฒ˜๋ฆฌ, DB ์กฐํšŒ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋“ฑ

 

 

๋ฉ”์‹œ์ง€ ํ

ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ•

 

 

Kafka vs RabbitMQ

  • RabbitMQ
    • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋ฐฉ์‹ (์†Œ๋น„์ž ์ค‘์‹ฌ ์„ค๊ณ„), ๋™๊ธฐ/๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ
    • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค : ์‹œ์Šคํ…œ์ด ์ •๋ณด๋ฅผ ํ†ต์‹ ํ•˜๊ณ  ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ
    • ๊ตฌ์„ฑ์˜ ์ž์œ ๋„, ์„ฑ์ˆ™๋„, ์‹ ์†ํ•œ ์š”์ฒญ ๋ฐ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์„œ๋ฒ„์— ์ ์ ˆ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…(์žฅ๊ธฐ ์‹คํ–‰ ์ž‘์—…)
  • Kafka
    • ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ”Œ๋žซํผ
    • pub/sub ๋ฐฉ์‹ (์ƒ์‚ฐ์ž ์ค‘์‹ฌ ์„ค๊ณ„), ๊ตฌ๋… ๋ฐฉ์‹์˜ ๋น„๋™๊ธฐ์‹ ๊ตฌ์„ฑ
    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ณผ ๊ณ ์„ฑ๋Šฅ, ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ

 

 

MariaDB MaxScale

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ™•์žฅ์„ฑ, ๊ฐ€์šฉ์„ฑ ๋ฐ ๋ณด์•ˆ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆ˜ํ‰ ํ™•์žฅ ๋ฐฐ์น˜์—์„œ ๋ณด์•ˆ, ํ™•์žฅ์„ฑ ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ฐจ์„ธ๋Œ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋ก์‹œ
  • SQL ์ฃผ์ž… ๋ฐ DDOS ๊ฐ™์€ ๋ณด์•ˆ ๊ณต๊ฒฉ ๋ฐฉ์ง€

 

 

๋ฌธ์„œ ์ค‘์•™ํ™”๋ž€?

๋ฌธ์„œ ์ค‘์•™ํ™” = ๊ฐ€์ƒํ™” = ECM = ๋ง๋ถ„๋ฆฌ

์‚ฌ๋‚ด ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ํ•œ ๊ณณ(์„œ๋ฒ„)์— ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ, ๋ฒ„์ „ ๊ด€๋ฆฌ๋ถ€ํ„ฐ ๋ฌธ์„œ์˜ ์ƒ์„ฑ - ์ˆ˜์ • - ์‚ญ์ œ ์ „ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DLP (Data Loss Prevention)

  • ๋ฌธ์„œ ๋ณด์•ˆ์„ ์œ„ํ•œ ๊ธฐ์ˆ 
  • ๋ฐ์ดํ„ฐ ์†์‹ค ์ฐจ๋‹จ
  • ์‚ฌ๋‚ด ์ค‘์š” ๋ฐ์ดํ„ฐ์˜ ์œ ์ถœ์„ ์ฐจ๋‹จ

DRM (Digital Right Management)

  • ๋ฌธ์„œ ๋ณด์•ˆ์„ ์œ„ํ•œ ๊ธฐ์ˆ 
  • ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ์˜ ๊ถŒํ•œ(์ €์ž‘๊ถŒ) ๊ด€๋ฆฌ

 

 

 

FrontEnd


React JSX ๋ž€?

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋ฒˆ๋“ค๋ง๋˜๋Š” ๊ณผ์ •์—์„œ babel ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ HTML ์ž‘์„ฑํ•˜๋“ฏ์ด ๋น„์Šทํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • react ์˜ virtual dom ์€ ์ปดํฌ๋„ŒํŠธ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ๋น„๊ตํ•˜๊ณ ์ž ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€๊ฐ€ ํ•˜๋‚˜์˜ DOM ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ์Œ -> ์ปดํฌ๋„ŒํŠธ์— ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์š”์†Œ๊ฐ€ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

 

function App(){
	return(
    	<div>
    		<h1>ํ…Œ์ŠคํŠธ1</h1>
    		<h2>ํ…Œ์ŠคํŠธ2</h2>
        </div>    
    )
}

 

 

React HOC (Higher-Order Component, ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ) ๋ž€?

  • ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ƒˆ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • render ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ref ๋Š” ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

App.js

import './App.js';
import SecondComponent from './Component/SecondComponent';

function App() {
	return(
    	<div>
        	<h1 classname="App-header">
            HOC ํ…Œ์ŠคํŠธ
            <SecondComponent name="whatishoc"></SecondComponent>
            </h1>
        </div>
    )
}

export default App;

 

  • ํ™”๋ฉด์— "HOC ํ…Œ์ŠคํŠธ" ํ…์ŠคํŠธ ๊ทธ๋ฆผ
  • SecondComponent ํ˜ธ์ถœ๋จ (ํŒŒ๋ผ๋ฏธํ„ฐ: whatishoc)

 

 

SecondComponent.js

import React, { Component } from 'react';
import ThirdComponent from './ThirdComponent';

class SecondComponent extends Component {
	render(){
    	console.log('2. Second render');
        return(
        	<div>props.name : {this.props.name}</div>
        )
    }
}

export default ThirdComponent(SecondComponent, 'Test');

 

  • FirstComponent ์—์„œ SecondComponent ๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์œผ๋‚˜ ThirdComponent ๊ฐ€ export ๋˜๊ธฐ ๋•Œ๋ฌธ์— SecondComponent ์—์„œ render ํ•จ์ˆ˜๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์Œ
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ SecondComponent ์ž์ฒด์™€ 'Test' ๋ผ๋Š” ํ…์ŠคํŠธ ์ „๋‹ฌ
  • SecondComponent ์˜ this.props.name ์€ App.js ์—์„œ ์ „๋‹ฌํ•œ whatishoc ์ž„

 

 

ThirdComponent.js

import React from 'react';
export default function ThirdComponent(DrawComponent, DrawContent){
	return class ExportComponent extends React.Component {
    	componentDidMount(){
        	console.log(`3. ThirdComponent : ${DrawContent}`);
        }
        render(){
        	console.log('1. First Component');
            return(
            	<DrawComponent {...this.props}></DrawComponent>
            )
        }
    }
}

 

  • ThirdComponent ๋‚ด render ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ฝ˜์†”์— 1. First Component ๋จผ์ € ์ถœ๋ ฅ
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ DrawComponent (=SecondComponent) ๋ฅผ ๊ทธ๋ฆผ
  • ์ฝ˜์†”์— 2. Second render ์ถœ๋ ฅ -> ํ™”๋ฉด์— props.name : whatishoc ๊ทธ๋ฆผ
  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒซ ๋ Œ๋”๋ง ๋œ ์ดํ›„ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ธ componentDidMount ์‹คํ–‰ -> ์ฝ˜์†”์— 3. ThirdComponent : Test ์ถœ๋ ฅ

 

 

 

mount _ ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด DOM ์— ์‚ฝ์ž…๋˜๋Š” ๋‹จ๊ณ„

  • constructor : ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋จ
  • render : ํ™”๋ฉด์— ํ‘œํ˜„๋  JSX ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํ™”๋ฉด์— ๊ทธ๋ฆผ
  • componentDidMount : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋ชจ๋‘ ๊ทธ๋ ค์ง„ ํ›„ ํ˜ธ์ถœ๋จ, ์—”๋“œํฌ์ธํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ API ํ˜ธ์ถœํ•˜๊ธฐ ์ข‹์€ ์œ„์น˜

 

 

React.lazy ๋ž€?

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ์‹œ์ ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” util ํ•จ์ˆ˜ (๋™์  import ๊ฐ€๋Šฅ)
  • ํ•ด๋‹น ํŒŒ์ผ์ด ๋งˆ์šดํŠธ๋  ๋•Œ ์ž„ํฌํŠธ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์–ด๋–ค ์‹œ์ ์—์„œ (ex. ํด๋ฆญ์ด๋ฒคํŠธ) ๋กœ๋”ฉ ๋˜๋„๋ก ํ•œ๋‹ค. ํผํฌ๋จผ์Šค ๋ฉด์—์„œ ์ข‹์Œ. (router ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Œ)
// Hello.js
export default function Hello() {
	return <div>Hello</div>
}


// App.js

const hello = React.lazy(() => import("./Hello"));

const App = () => {
	return(
    	<div>
        	<Suspense fallback={<div>๋กœ๋”ฉ ์ค‘์ž…๋‹ˆ๋‹ค.</div>}>
             <!--fallback ์€ ๋กœ๋”ฉ์ด ๋๋‚˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ณด์—ฌ์ค„ UI -->
            	{visible && <hello />}
            </Suspense>
        </div>
    )
}

export default App;

 

 

Suspense

  • ๋ฆฌ์•กํŠธ ๋‚ด์žฅ ์ปดํฌ๋„ŒํŠธ, ์ฝ”๋“œ ๋ถ„ํ• ๋œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋กœ๋”ฉํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ณ , ๋กœ๋”ฉ์ด ๋๋‚˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ณด์—ฌ์ค„ UI ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Suspense ์˜ fallback ์€ ๋กœ๋”ฉ์ด ๋๋‚˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ณด์—ฌ์ค„ UI ์ด๋‹ค.

 

 

Git


Git ์—์„œ --recursive ์˜ต์…˜์˜ ์˜๋ฏธ

  • ํ•˜์œ„ ์„œ๋ธŒ ๋ชจ๋“ˆ๊นŒ์ง€ ๋ชจ๋‘ clone ํ•œ๋‹ค.
  • ์„œ๋ธŒ ๋ชจ๋“ˆ์ด๋ผ๊ณ  ํ•˜๋ฉด, ๊ธฐ์กด ์ €์žฅ์†Œ ํ•˜์œ„์— ๋‹ค๋ฅธ ์ €์žฅ์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

'๊ธ€์“ฐ๋Š” ๊ฟ€๋ฒŒ ๐Ÿ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Dev Study #4 (feat. Design Pattern)  (0) 2022.02.21
Dev Study #3 (feat. Design Pattern)  (0) 2022.02.18
Dev Study #2 (feat. JAVA)  (0) 2022.02.18
[Book Review] ์ธ์ƒ์€ ์‹ค์ „์ด๋‹ค  (0) 2021.10.07

๋Œ“๊ธ€