Posts ๐Ÿฅ ์ฃผ๋‹ˆ์–ด ์„ฑ์žฅ์ผ๊ธฐ: 2021.04.27
Post
Cancel

๐Ÿฅ ์ฃผ๋‹ˆ์–ด ์„ฑ์žฅ์ผ๊ธฐ: 2021.04.27

  • API Secret Manager
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์„œ๋น„์Šค, IT ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ด์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ƒํƒœ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ํ•ด์ค€๋‹ค.
    • ๋ฆฌ์†Œ์Šค์˜ ๋ณด์•ˆ ์ •๋ณด ๊ต์ฒด๋ฅผ ์ค‘์•™์—์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Spring Cloud์™€ AWS Secret Manager: Spring Cloud๋Š” bootstrap.yml(or properties)์—์„œ ์„ค์ •์„ ๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค. ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ์—์„œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ปจํ…์ŠคํŠธ๋ฅผ ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์˜ ๋ถ€๋ชจ๋กœ ๋จผ์ € ์ƒ์„ฑ๋˜๋ฏ€๋กœ application.yml์—์„œ ์„ค์ •์„ ๋กœ๋“œํ•˜๊ฒŒ ๋œ๋‹ค. ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ปจํ…์ŠคํŠธ๋Š” ์™ธ๋ถ€ ๊ตฌ์„ฑ์„ ์ฐพ์•„ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ convention์„ ์ ์šฉํ•˜๊ณ , ์™ธ๋ถ€ ๊ตฌ์„ฑ์„ ๋ถ„๋ฆฌํ•ด์„œ ์œ ์ง€ํ•˜๊ธฐ์— ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
spring:
	application:
		name: app_name
	profiles:
		active: local
aws:
	secretmanager:
		name: app_name
		endpoint:
		secretKey:
			category:
				key: value.key

๐Ÿ‘ฉโ€๐Ÿ’ป ๋ชจ๊ฐ์ฝ”

  • ๋‘๋ฒˆ์งธ ๋™๋„ค ๋ชจ๊ฐ์ฝ”
  • ์นดํŽ˜๋ฒ ๋„ค ์ง€ํ•˜ 1์ธต ์ฒ˜์Œ ๊ฐ€๋ดค๋Š”๋ฐ ์ž‘์—…ํ•˜๊ธฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ์—ˆ๋‹ค ์•ž์œผ๋กœ๋„ ์ž์ฃผ ์˜ฌ ๋“ฏ!

๐Ÿˆ Catchoo ํ”„๋กœ์ ํŠธ

  • CORS ๋•Œ๋ฌธ์— ๋ชจ๋“  ํŒ€์›๋“ค์ด ๋จธ๋ฆฌ ์‹ธ๋งค๊ณ  ์žˆ๋Š” ์ค‘.. ์ผ๋‹จ ํ”„๋ก ํŠธ์—์„œ ๋ชจ์ข…์˜ ๋ฌธ์ œ๋กœ ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ์‹คํ–‰์ด ๋˜์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๊ฑฐ ๋‹ค ์ค‘๋‹จํ•˜๊ณ  ๋ฐฐํฌ๋ถ€ํ„ฐ ์‹œ๋„ํ•˜๋Š” ์ค‘์ด๋‹ค.. ์ด๋ ‡๊ฒŒ ๋กœ์ปฌ์—์„œ ๋ฌธ์ œ ๋‚  ๋•Œ๋งˆ๋‹ค ํ™•์ธ์„ ๋ชปํ•˜๋‹ˆ๊นŒ.. ใ… _ใ…  ์„œ๋ฒ„ ์‹คํ–‰ํ•˜๊ณ  ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์— ํŒ€์›๋“ค ์•„์ดํ”ผ ๋„ฃ์œผ๋ฉด ๋˜๊ฒ ์ง€. ๊ทธ๋Ÿฐ๋ฐ ์•„์ดํ”ผ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜์ง€? ์ข€ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.
  • Git ์ด ์ •๋ง ๋‚œ๋ฆฌ๊ฐ€ ๋‚˜์„œ^_^ ๋ฃจํŠธํด๋”๊ตฌ์กฐ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ด๋ ‡๊ฒŒ๊นŒ์ง€ ๊ท€์ฐฎ์•„์งˆ ์ค„์€ ๋ชฐ๋ž์ง€.. ๋‹คํ–‰ํžˆ๋„ ์ฒœ์žฌ๋งŒ์žฌ ํŒ€์›๋ถ„์ด ํ•ด๊ฒฐํ•ด์ฃผ์…จ๋‹คใ…  ์—์ธ์ ˆ.. ์•”ํŠผ conflict ๋‹ค ํ•ด๊ฒฐํ•˜๊ณ  ๋ฌด์‚ฌํžˆ master๊นŒ์ง€ mergeํ–ˆ๋‹ค. ์ด์ œ ๋ฐฐํฌ๋ฟ์ด์•ผ

๐Ÿ  JIB ํ”„๋กœ์ ํŠธ

ํ”„๋กœ์ ํŠธ์žฅ๋‹˜์ด ๊ทธ์ €๊ป˜ ๋‚ด ์„ฑ์žฅ์ผ๊ธฐ๋ฅผ ๋ณด์‹œ๊ณ  ๋ฆฌ์•กํŠธ ๋Šฅ๋ ฅ์ž์ธ ์ค„ ์•Œ๊ณ  ์—ฐ๋ฝ์„ ์ฃผ์…จ๋‹ค.. ํ•˜ํ•˜ํ•˜ ์ œ๊ฐ€ ๋ฆฌ์•กํŠธ ๋Šฅ๋ ฅ์ž์ธ์ค„ ์•„์…จ๋‹ค๋ฉด ๊ฒฝ๊ธฐ๋„ ์˜ค์‚ฐ์ž…๋‹ˆ๋‹ค ๊ทธ์ €๊ป˜ ์„ฑ์žฅ์ผ๊ธฐ์˜ ํ”„๋ก ํŠธ์—”๋“œ ํŒŒํŠธ๋Š” ๋ฆฌ์•กํŠธ ๋Šฅ๋ ฅ์ž์ธ ์บฃ์ธ„ ํŒ€์›๋ถ„๋“ค์ด ํ•˜์‹  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ฒƒ..ใ…Žใ…Ž ์„ ์„ค๋ช…๋“œ๋ฆฌ๋‹ˆ๊นŒ ๊ทธ๋ž˜๋„ ์ผ๋‹จ ์ด๋ ‡๊ฒŒ ๋œ๊ฑฐ ํ”„๋ก ํŠธ์—”๋“œ๋„ ํ•ด๋ณด์ž! ํ•ด์„œ ์–ผ๋–จ๊ฒฐ์— ํ”„๋ก ํŠธ ํšŒ์˜๋„ ์ฐธ์„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‘˜๋‹ค ํ•˜๋ฉด ์ •๋ง ์ข‹๊ฒ ์ง€๋งŒ ์ •๋ง ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ์ข€ ๋” ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ํšŒ์˜

  • ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ์•กํŠธ์˜ ๊ฐ€์žฅ ํ•ต์‹ฌ

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

  • ๊ธฐํšํŒ€์—์„œ ์ž‘์„ฑํ•œ ํ”Œ๋กœ์šฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ์ดํ•ด๋ฅผ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

  • Class Component๊ฐ€ ์•„๋‹Œ Functional Component๋ฅผ ์‚ฌ์šฉํ•  ๊ฑฐ๋ผ๊ณ  ์ •ํ•ด์กŒ๋‹ค.

    • Functional Component๊ฐ€ ๋ณด๋‹ค Class ๋ฐฉ์‹๋ณด๋‹ค ์ข€ ๋” ๊ฐ„๋‹จํ•˜๊ณ , ์š”์ฆ˜ ํŠธ๋ Œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. Class ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ƒ์„ฑ์ž๋„ ์‚ฌ์šฉํ•˜๊ณ , ComponentDidMount, Update, Delete ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ render()๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋“œ์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. Functional ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ์ด ๋ชจ๋“  ๊ฒƒ๋“ค์ด ๋น„ํ•˜์ธ๋“œ ์”ฌ์—์„œ ์ผ์–ด๋‚œ๋‹ค๊ณ  ํ•œ๋‹ค.
    • ์ž๋ฐ”๋กœ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ณ  ํ˜„์žฌ์ง„ํ–‰ํ˜•์œผ๋กœ ์ž๋ฐ”๊ฐœ๋ฐœ์ž๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ๋‚˜๋กœ์„œ๋Š” ํด๋ž˜์Šค ๋ฌธ๋ฒ•์ด ๋” ์ง๊ด€์ ์ด๋ผ๊ณ  ๋Š๊ปด์ง€์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ๋น„ํ•˜์ธ๋“œ ์”ฌ์—์„œ ์ด๋ฃจ์–ด์ง€๋‹ˆ ์ƒ์‚ฐ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์€ ํ–ฅ์ƒ๋  ๊ฒƒ ๊ฐ™๋‹ค.
    • ์‹ค์ œ๋กœ ํ•จ์ˆ˜ํ˜•์€ ํด๋ž˜์Šค๋ณด๋‹ค ํ›„์— ๋‚˜์™”๊ธฐ์— ๋” ํŽธํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ํ•จ์ˆ˜ํ˜•์€ state, lifeCycle ๊ด€๋ จ ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ด๋Š” Hook์„ ํ†ตํ•ด ํ•ด๊ฒฐ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šคํ˜•๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ๋œ ์‚ฌ์šฉํ•œ๋‹ค. ๋˜ํ•œ ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ์ด ํŽธํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋‹จ ์ž„์˜ ๋ฉ”์„œ๋“œ๋Š” ์ •์˜ํ•  ์ˆ˜๋Š” ์—†๋‹ค.
    • ํด๋ž˜์Šคํ˜•๊ณผ ํ•จ์ˆ˜ํ˜• ์ฐจ์ด
  • ๊ทธ๋ฆฌ๊ณ  ๋Œ€์žฅ๋‹˜์ด ๋ฆฌ์•กํŠธ LifeCycle์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด์„œ ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค.

    image

    ์ถœ์ฒ˜: https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

    • Mount(์ƒ์„ฑ): ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด, DOM์— ์‚ฝ์ž…๋  ๋•Œ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋œ๋‹ค.
      • constructor()
      • render()
      • componentDidMount()
    • Update: props๋‚˜ state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด render(๊ฐฑ์‹ )๊ฐ€ ์ง„ํ–‰๋˜๋ฉฐ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋œ๋‹ค.
      • render()
      • componentDidUpdate()
    • Unmount: ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์ œ๊ฑฐ๋  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค.
      • componentWillUnmount()

    ๋œฌ๊ธˆ์—†์ด ์Šคํ”„๋ง ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค

  • ๊ณผ์ œ: ๋ฆฌ์•กํŠธ ์‚ฌ์šฉํ•ด์„œ JIB์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ๊ตฌํ˜„

๋ฐฑ์—”๋“œ์—”๋“œ ํšŒ์˜

  • DB ๊ฒฐ์ •
    • NoSQL(MongoDB): ์กฐํšŒ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.
    • SQL + Redis: RDB๋Š” ์กฐํšŒ ์„ฑ๋Šฅ์ด ์•ˆ์ข‹๊ธฐ ๋•Œ๋ฌธ์— Redis๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•ด ์„ฑ๋Šฅ์„ ๋†’์ผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
  • ์˜์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ(Persistance Framework)
    • MongoDB๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, JPA์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ๋งŒ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๊ฐ„๋‹จํ•˜๋‹ค.
    • SQL์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.
  • ๋ชฉํ‘œ
    • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)
    • ํ™•์žฅ์„ฑ ์žˆ๋Š”(Scaleable) ๊ฐœ๋ฐœ
This post is licensed under CC BY 4.0 by the author.

๐Ÿฅ ์ฃผ๋‹ˆ์–ด ์„ฑ์žฅ์ผ๊ธฐ: 2021.04.26

๐Ÿฅ ์ฃผ๋‹ˆ์–ด ์„ฑ์žฅ์ผ๊ธฐ: 2021.04.28

Loading comments from Disqus ...