๋ฐ˜์‘ํ˜•

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 294

[AWS] DynamoDB๋ž€?

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์— ์นœ๊ตฌ๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”, AWS DynamoDB ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ธฐ์— ์•ž์„œ DynamoDB์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. DynamoDB DynamoDB๋Š” Amazon Web Services์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜ธ์ŠคํŒ… NoSQL DB์ž…๋‹ˆ๋‹ค. ์Šค์ผ€์ผ์ด ์ปค์ง€๋”๋ผ๋„ reliable performance a managed experience, crypto libraries ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— SSH๋กœ ์—ฐ๊ฒฐํ•  ํ•„์š”๊ฐ€ ์—†์Œ a small, ์‹ฌํ”Œํ•œ API allowing for ์‹ฌํ”Œํ•œ key-value access as well as more advanced query patterns. DynamoDB Features NOSQL ๋ฐ์ดํ„ฐ..

Devops/AWS 2023.04.03

[React] array data ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ์— border bottom line css ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๋ฆฌ์•กํŠธ์—์„œ array ๋ฐ์ดํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹ ์š”์†Œ์— border bottom line ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. How to solve the problem 1. map ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค. const arrayLength = array.length; 2. map ํ•จ์ˆ˜์—์„œ ํ˜„์žฌ ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋ฐ›์•„ ์˜ต๋‹ˆ๋‹ค. array.map((item, index) => { //... }) 3. ์ธ๋ฑ์Šค ๊ฐ’์ด ๋ฐฐ์—ด ๊ธธ์ด๋ณด๋‹ค 1 ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” border bottom์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค array.map((item, index) => { const isLastItem = index === arrayLength - 1; return ( {item}..

Framework/React 2023.03.31

[Kotlin] Text '..' could not be parsed: Unable to obtain LocalDate from TemporalAccessor ์˜ค๋ฅ˜ ์›์ธ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ฝ”ํ‹€๋ฆฐ ์ŠคํŠธ๋ง์„ ์ฝ”ํ‹€๋ฆฐ ๋‚ ์งœ๋กœ ๋ณ€ํ™˜ํ•˜๋˜ ๋„์ค‘ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. import java.math.BigDecimal import java.math.RoundingMode import java.time.LocalDate import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.* fun main(args: Array) { val input = "2301" val formatter = DateTimeFormatter.ofPattern("yyMM", Locale.KOREA) val date = LocalDate.parse(input, formatter).minusYears..

Programming/Kotlin 2023.03.30

[CSS] ๊ธด ๋‹จ์–ด ์ฒ˜๋ฆฌ ์‹œ ์ค„๋ฐ”๊ฟˆ ๊ธฐ์ค€ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• (๋‹จ์–ด ๊ธฐ์ค€ / ํ•œ ๊ธ€์ž ๊ธฐ์ค€)

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” CSS์—์„œ ๊ธด๋‹จ์–ด ์ฒ˜๋ฆฌ ์‹œ ์ค„๋ฐ”๊ฟˆ ๋‹จ์–ด ๊ธฐ์ค€์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. How to solve the problem ์•„๋ž˜์˜ html์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. {item.desc} ์ฒ˜์Œ์— ์ œ๊ฐ€ ์ ์šฉํ•œ CSS๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹จ์–ด ๋’ค์— elispsis ์ฒ˜๋ฆฌ๋Š” ๋˜์—ˆ์ง€๋งŒ, ์ค„๋ฐ”๊ฟˆ ์ฒ˜๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. > p { margin-bottom: 8rem; font-size: 10rem; line-height: 1.3; overflow: hidden; white-space: normal; text-overflow: ellipsis; display: -webkit-box; } ๋”ฐ๋ผ์„œ ์ €๋Š” word-break๋ผ๋Š” ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ break-all ๋กœ ์ง€์ •ํ•ด์คฌ์Šต๋‹ˆ..

Programming/CSS 2023.03.30

[React] typescript useRef ์‚ฌ์šฉ์‹œ undefined / null ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์›์ธ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” react ์—์„œ useRef ์‚ฌ์šฉ์‹œ undefined / null ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์›์ธ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ œ๊ฐ€ useRef๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. clientHeight๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ ์œ„ํ•ด useRef๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ div tag์— ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. const divRef = useRef(null); const [handlePosition, setHandlePosition] = useState('300vh'); useEffect(() => { setHandlePosition(`${(divRef.current.clientHeight * 3) / 300}px`); }, []); return ( {/* some content */} ); ํ•˜์ง€..

Framework/React 2023.03.29

[React] ๋ฆฌ์•กํŠธ apexcharts x์ถ•(xaxis) ํŠน์ • ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๋ฆฌ์•กํŠธ apexcharts x์ถ• ๊ฐ’์„ ํŠน์ • ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. How to solve the problem ์ œ ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋ฒฝ 5์‹œ๋ผ๋Š” ํŠน์ • ๊ฐ’์œผ๋กœ x์ถ•์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €๋Š” apxechart xaxis์˜ min ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ์ œ๊ฐ€ ์›ํ•˜๋Š” ์‹œ๊ฐ„์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. x์ถ• ๊ฐ’์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅผํ…Œ๋‹ˆ ๋…„๋„/๋‹ฌ/์ผ ๋“ฑ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ปค์Šคํ…€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. xaxis: { min: new Date(new Date().setHours(5, 0, 0, 0)).getTime(), } ์•„๋ž˜๋Š” ์ „์ฒด ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. var options = { chart: { type: 'line' }, series: [{ name: ..

Framework/React 2023.03.28

[React] ๋ฆฌ์•กํŠธ ํˆดํŒ (Tooltip) ๊ตฌํ˜„ํ•˜๊ธฐ / ์™ธ๋ถ€์˜์—ญ ํด๋ฆญ ์‹œ ํˆดํŒ ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ๋ฆฌ์•กํŠธ์—์„œ ํˆดํŒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•, ํˆดํŒ ์™ธ๋ถ€ ์˜์—ญ ํด๋ฆญ ์‹œ ํˆดํŒ์„ ์ˆจ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Let's look at detail ์•„๋ž˜์™€ ๊ฐ™์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. 3๊ฐœ์˜ ํˆดํŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๊ณ , ํˆดํŒ ์ปดํฌ๋„ŒํŠธ์—๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํˆดํŒ ์„ค๋ช…์„ props๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. const SomeComponent: NextPage = props => { return ( ๋‰ด์Šค ์‡ผํ•‘ ์ง€๋„ ); } export default SomeComponent; ํˆดํŒ ์ปดํฌ๋„ŒํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ํˆดํŒ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค, ์„ ํƒ๋œ ํˆดํŒ์ด ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ ํˆดํŒ์ด ์„ ํƒ๋˜์–ด๋„, ๋™์‹œ์— ํˆดํŒ desc๊ฐ€ ํ‘œ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์™ธ๋ถ€ ์˜์—ญ์„ ํด๋ฆญ ํ• ๋•Œ ์—ฌ..

Framework/React 2023.03.21

[React] ๋ฆฌ์•กํŠธ apexcharts ์ปค์Šคํ…€ ํˆดํŒ (custom tooltip) ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•, ํˆดํŒ์— ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ์™€ ๊ฐ’ ํ‘œ์‹œํ•˜๊ธฐ

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” ๋ฆฌ์•กํŠธ์—์„œ apexcharts ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ํˆดํŒ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. How to solve the problem apexcharts ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์—, ์•„๋ž˜์˜ series ๋ฐ์ดํ„ฐ์™€ chart option์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. const series: any = [ { name: 'EBAY', data: [ ['2023-03-20T07:00:22.625Z', '123124.82'], ['2023-03-20T06:00:20.103Z', '52353.83'], ['2023-03-20T05:00:16.960Z', '98943.91'], ['2023-03-20T04:00:15.051Z', '796756.65'], ['2023-03-20T0..

Framework/React 2023.03.20

[TypeScript] cannot read properties of undefined ์—๋Ÿฌ ์›์ธ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ๋„์ค‘ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. Why? ํ•ด๋‹น properties์˜ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. How to solve the problem ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ๋ฐ์š”, ์ €๋Š” ๊ทธ ์ค‘์—์„œ๋„ Optional Chaining ์—ฐ์‚ฐ์ž (๋ฌผ์Œํ‘œ ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ์‚ฌ์šฉ ์˜ˆ์ œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. return ( {item?.name} ) ์ด๋ ‡๊ฒŒ Optional Chaining ์—ฐ์‚ฐ์ž (๋ฌผ์Œํ‘œ ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์œ ํšจํ•œ ๊ฐ’์ด ์—†์„ ๋•Œ๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฐ’์ด ์žˆ์„ ๋•Œ๋Š” Optional Chaining ์—ฐ์‚ฐ์ž ์ดํ›„ ๋‚ด์šฉ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[JavaScript] Moment.js ์˜ค์ „/์˜คํ›„ ํ‘œ๊ธฐ ์œ„์น˜ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•

Intro ์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Moment.js ์—์„œ ์˜ค์ „/์˜คํ›„ ํ‘œ๊ธฐ์˜ ์œ„์น˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ DB์—์„œ ๋ฐ›์•„์˜จ datetime ์‹œ๊ฐ„์„ 23.03.15 ์˜คํ›„ 10:30 ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ momentjs ์—๋Š” ๋‹ค์Œ์˜ ์˜ˆ์‹œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ format์„ ์ปค์Šคํ…€ํ•˜์—ฌ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. How to solve the problem ์ €๋Š” ํ•ด๋‹น ํ‘œ๊ธฐ๋ฒ•์„ ์ „์—ญ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณตํ†ต ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค. datetime ์‹œ๊ฐ„๊ณผ, format ์˜ 2๊ฐ€์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , moment๋ฅผ ํ™œ์šฉํ•˜์—ฌ format์„ ์ ์šฉ์‹œ์ผœ์คฌ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ DB์˜ datetime ํƒ€์ž…์ด string์ด๊ณ , YY.MM.DD hh:mm ํ˜•ํƒœ์˜€์Šต๋‹ˆ๋‹ค. ์ด..

๋ฐ˜์‘ํ˜•