Skip to content

πŸš— μ‹ μ°¨ 홍보 ν”„λ‘œμ νŠΈ - Softeer λΆ€νŠΈμΊ ν”„

Notifications You must be signed in to change notification settings

thgee/NewCar

Β 
Β 

Repository files navigation

μ•„λ°˜λ–Ό N μ†Œκ°œ 이벀트

image


🎬 μ‹œμ—° μ˜μƒ


πŸš— ν”„λ‘œμ νŠΈ μ†Œκ°œ

  • μ‹ μ°¨ 홍보λ₯Ό μœ„ν•œ 이벀트 νŽ˜μ΄μ§€ μž…λ‹ˆλ‹€.
  • μ„ μ°©μˆœ, 좔첨 이벀트둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•˜μ—¬ μœ μ €κ°€ ν₯λ―Έλ₯Ό 가지도둝 μœ λ„ν–ˆμŠ΅λ‹ˆλ‹€.
  • 곡유 URL을 톡해 홍보 효과λ₯Ό κ·ΉλŒ€ν™” ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ› οΈ 기술 μŠ€νƒ


πŸ‘₯ νŒ€μ› ꡬ성

FE FE BE BE
μ΄νƒœν˜ λ°•λŒ€μ› μœ μ„±μš± 쑰도연

@thgee

@DaeWon9

@starwook

@ysndy

πŸ“– νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯


[좔첨 이벀트]

  • μ‹ κ·œ μœ μ €κ°€ λ‘œκ·ΈμΈν•  μ‹œ κΈ°λ³Έ 3회 λ½‘κΈ°κΆŒμ΄ μ§€κΈ‰λ˜λ©° 뽑기λ₯Ό μ§„ν–‰ν•˜λ©΄ 좔첨 μ΄λ²€νŠΈμ— μžλ™ 응λͺ¨ μ²˜λ¦¬λ©λ‹ˆλ‹€.
  • μƒμ„±λœ URL을 κ³΅μœ ν•˜μ—¬ μ‹ κ·œ μœ μ €κ°€ κ°€μž…ν•˜λ©΄ λ½‘κΈ°κΆŒμ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ΄λ²€νŠΈκ°€ λλ‚œ ν›„ κ΄€λ¦¬μžμ˜ 일괄 좔첨을 톡해 1λ“±λΆ€ν„° 5λ“±κΉŒμ§€μ˜ λ‹Ήμ²¨μžκ°€ μ„ μ •λ©λ‹ˆλ‹€.
  • λͺ¨λ“  μΉ΄ν…Œκ³ λ¦¬λ³„ 1개 μ΄μƒμ˜ 파츠λ₯Ό νšλ“ν•˜λ©΄ μ•„λ°˜λ–Ό N λ―Έλ‹ˆμ–΄μ²˜λ₯Ό μ¦μ •ν•˜λ©° 이 λ˜ν•œ κ΄€λ¦¬μžμ˜ μΆ”μ²¨μœΌλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.
좔첨 이벀트

[파츠 뽑기]

  • μΉ΄λ“œλ₯Ό ν΄λ¦­ν•΄μ„œ 파츠λ₯Ό 뽑을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 가지고 μžˆλŠ” λ½‘κΈ°κΆŒμ΄ μ†Œμ§„λ˜λ©΄ 더이상 뽑기λ₯Ό 진행할 수 μ—†μŠ΅λ‹ˆλ‹€.
파츠 뽑기

[파츠 μ»¬λ ‰μ…˜]

  • νŒŒμΈ λ½‘κΈ°μ—μ„œ νšλ“ν•œ νŒŒμΈ λ“€μ„ μž₯μ°©ν•˜μ—¬ μ•„λ°˜λ–Όλ₯Ό μ»€μŠ€ν…€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΉ΄λ“œμ— 마우슀λ₯Ό 올리면, μž₯착된 νŒŒμΈ λ“€μ„ ν•œλˆˆμ— 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
파츠 μ»¬λ ‰μ…˜

[κΈ°λŒ€ν‰/곡유]

  • μ•„λ°˜λ–Ό N에 λŒ€ν•œ κΈ°λŒ€ν‰μ„ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • κΈ°λŒ€ν‰μ€ 50자 μ΄λ‚΄λ‘œ μž‘μ„±ν•˜λ„λ‘ μ„€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ‚΄ μ»¬λ ‰μ…˜μ„ μžλž‘ 수 μžˆλŠ” 곡유링크λ₯Ό 볡사할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€λ₯Έ μ‚¬λžŒμ΄ 곡유링크둜 μ ‘μ†ν•˜κ²Œ 되면 λ‚΄κ°€ μž₯μ°©ν–ˆλ˜ νŒŒμΈ λ“€μ„ ꡬ경할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 곡유링크둜 μ ‘μ†ν•œ μœ μ €κ°€ λ‘œκ·ΈμΈμ„ ν•˜λ©΄ 링크λ₯Ό κ³΅μœ ν•œ μœ μ €μ˜ λ½‘κΈ°κΆŒμ΄ 1회 μ¦κ°€ν•©λ‹ˆλ‹€.
κΈ°λŒ€ν‰/곡유

[μ„ μ°©μˆœ 이벀트]

  • μ˜€μ „ 10μ‹œκ°€ 되면 ν€΄μ¦ˆκ°€ κ³΅κ°œλ©λ‹ˆλ‹€.
  • 정닡을 ν‹€λ¦¬κ²Œ 되면 μ•„λ°˜λ–Ό N μ†Œκ°œ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜μ—¬ 힌트λ₯Ό μ°Ύμ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ„ μ°©μˆœ 인원 μ•ˆμ— λ“€μ—ˆλ‹€λ©΄ 당첨 μƒν’ˆκ³Ό ν•¨κ»˜ μ „ν™”λ²ˆν˜Έλ₯Ό μž…λ ₯ν•  수 μžˆλŠ” νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
μ„ μ°©μˆœ 이벀트

πŸ“‚ 디렉토리 ꡬ쑰

packages
    β”œβ”€β”€ admin
    β”‚Β Β  β”œβ”€β”€ public
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ fonts
    β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pretendard
    β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pyeongChang
    β”‚Β Β  β”‚Β Β  β”‚Β Β  └── pyeongChangPeace
    β”‚Β Β  β”‚Β Β  └── images
    β”‚Β Β  β”‚Β Β      β”œβ”€β”€ favicon
    β”‚Β Β  β”‚Β Β      β”œβ”€β”€ gnb
    β”‚Β Β  β”‚Β Β      └── modal
    β”‚Β Β  └── src
    β”‚Β Β      β”œβ”€β”€ apis
    β”‚Β Β      β”‚Β Β  β”œβ”€β”€ auth
    β”‚Β Β      β”‚Β Β  β”œβ”€β”€ expectation
    β”‚Β Β      β”‚Β Β  β”œβ”€β”€ orderEvent
    β”‚Β Β      β”‚Β Β  └── partsEvent
    β”‚Β Β      β”œβ”€β”€ common
    β”‚Β Β      β”‚Β Β  β”œβ”€β”€ components
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Button
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ GlobalNavigationBar
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β  └── GlobalNavs
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ModalContainer
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β  └── modal
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ AlertModal
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ ConfirmModal
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ GoolgleLoginModal
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ ImageModal
    β”‚Β Β      β”‚Β Β  β”‚Β Β  β”‚Β Β      └── PendingModal
    β”‚Β Β      β”‚Β Β  β”‚Β Β  └── Space
    β”‚Β Β      β”‚Β Β  └── utils
    β”‚Β Β      β”œβ”€β”€ components
    β”‚Β Β      β”‚Β Β  └── partsEvent
    β”‚Β Β      β”‚Β Β      β”œβ”€β”€ ExpectationDataGrid
    β”‚Β Β      β”‚Β Β      β”œβ”€β”€ MainEventDrawForm
    β”‚Β Β      β”‚Β Β      β”œβ”€β”€ MiniatureEventDrawForm
    β”‚Β Β      β”‚Β Β      β”œβ”€β”€ ParticipantDataGrid
    β”‚Β Β      β”‚Β Β      β”œβ”€β”€ RewardInfo
    β”‚Β Β      β”‚Β Β      └── WinnerDataGrid
    β”‚Β Β      β”œβ”€β”€ constants
    β”‚Β Β      └── pages
    β”‚Β Β          β”œβ”€β”€ Error
    β”‚Β Β          β”œβ”€β”€ orderEvent
    β”‚Β Β          β”‚Β Β  β”œβ”€β”€ OrderEventGeneration
    β”‚Β Β          β”‚Β Β  β”œβ”€β”€ OrderEventManagement
    β”‚Β Β          β”‚Β Β  └── OrderEventWinnerManagement
    β”‚Β Β          └── partsEvent
    β”‚Β Β              β”œβ”€β”€ PartsEventDraw
    β”‚Β Β              β”œβ”€β”€ PartsEventGeneration
    β”‚Β Β              β”œβ”€β”€ PartsEventParticipantManagement
    β”‚Β Β              └── PartsEventWinnerManagement
    β”œβ”€β”€ core
    β”‚Β Β  └── src
    β”‚Β Β      β”œβ”€β”€ apis
    β”‚Β Β      β”‚Β Β  └── login
    β”‚Β Β      β”œβ”€β”€ contexts
    β”‚Β Β      β”œβ”€β”€ hooks
    β”‚Β Β      β”œβ”€β”€ providers
    β”‚Β Β      β”œβ”€β”€ theme
    β”‚Β Β      β”œβ”€β”€ types
    β”‚Β Β      β”‚Β Β  β”œβ”€β”€ orderEvent
    β”‚Β Β      β”‚Β Β  └── partsEvent
    β”‚Β Β      └── utils
    └── service
        β”œβ”€β”€ public
        β”‚Β Β  β”œβ”€β”€ fonts
        β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pretendard
        β”‚Β Β  β”‚Β Β  β”œβ”€β”€ pyeongChang
        β”‚Β Β  β”‚Β Β  └── pyeongChangPeace
        β”‚Β Β  β”œβ”€β”€ icons
        β”‚Β Β  └── images
        β”‚Β Β      β”œβ”€β”€ common
        β”‚Β Β      β”œβ”€β”€ demo
        β”‚Β Β      β”œβ”€β”€ favicon
        β”‚Β Β      β”œβ”€β”€ gnb
        β”‚Β Β      β”œβ”€β”€ main
        β”‚Β Β      β”œβ”€β”€ modal
        β”‚Β Β      β”œβ”€β”€ newCar
        β”‚Β Β      β”œβ”€β”€ og
        β”‚Β Β      β”œβ”€β”€ parts
        β”‚Β Β      β”œβ”€β”€ partsCollection
        β”‚Β Β      β”œβ”€β”€ pickEvent
        β”‚Β Β      β”‚Β Β  β”œβ”€β”€ card
        β”‚Β Β      β”‚Β Β  β”œβ”€β”€ joinInfo
        β”‚Β Β      β”‚Β Β  └── prize
        β”‚Β Β      └── quiz
        └── src
            β”œβ”€β”€ apis
            β”‚Β Β  β”œβ”€β”€ expectation
            β”‚Β Β  β”œβ”€β”€ link
            β”‚Β Β  β”œβ”€β”€ lottery
            β”‚Β Β  β”œβ”€β”€ orderEvent
            β”‚Β Β  └── partsEvent
            β”œβ”€β”€ common
            β”‚Β Β  β”œβ”€β”€ components
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Button
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ CheckBox
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ClickInduceIcon
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ClipBoardButton
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Footer
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ GlobalNavigationBar
            β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ GlobalNavs
            β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── ExpirationTimer
            β”‚Β Β  β”‚Β Β  β”‚Β Β  └── MenuButton
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Marquee
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ModalContainer
            β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ content
            β”‚Β Β  β”‚Β Β  β”‚Β Β  └── modal
            β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ AlertModal
            β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ ConfirmModal
            β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ DescriptionModal
            β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ GoolgleLoginModal
            β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ NavigateModal
            β”‚Β Β  β”‚Β Β  β”‚Β Β      └── PendingModal
            β”‚Β Β  β”‚Β Β  └── ScrollToTop
            β”‚Β Β  β”œβ”€β”€ hooks
            β”‚Β Β  β”œβ”€β”€ responsive
            β”‚Β Β  β”œβ”€β”€ styles
            β”‚Β Β  └── utils
            β”œβ”€β”€ components
            β”‚Β Β  β”œβ”€β”€ main
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Banner
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ EventCard
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ EventPeriod
            β”‚Β Β  β”‚Β Β  β”‚Β Β  └── Timer
            β”‚Β Β  β”‚Β Β  └── Expectation
            β”‚Β Β  β”œβ”€β”€ nQuizEvent
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ NQuizReward
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ NQuizSection
            β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ NQuizAlternativeBody
            β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ NQuizHeader
            β”‚Β Β  β”‚Β Β  β”‚Β Β  └── NQuizInput
            β”‚Β Β  β”‚Β Β  └── NQuizTitle
            β”‚Β Β  β”œβ”€β”€ newCar
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ NewCarInfo
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ TracingCar
            β”‚Β Β  β”‚Β Β  └── util
            β”‚Β Β  β”œβ”€β”€ partsCollection
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ CustomCard
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ PartsTab
            β”‚Β Β  β”‚Β Β  β”‚Β Β  └── PartsCard
            β”‚Β Β  β”‚Β Β  └── PinContainer
            β”‚Β Β  β”‚Β Β      └── Pin
            β”‚Β Β  β”‚Β Β          └── WaveCircle
            β”‚Β Β  β”œβ”€β”€ partsPick
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ PartsCard
            β”‚Β Β  β”‚Β Β  └── PickTitle
            β”‚Β Β  β”œβ”€β”€ pickEvent
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ CardCarousel
            β”‚Β Β  β”‚Β Β  β”œβ”€β”€ JoinInfo
            β”‚Β Β  β”‚Β Β  └── PrizeContainer
            β”‚Β Β  β”‚Β Β      └── PrizeItem
            β”‚Β Β  └── share
            β”‚Β Β      └── PartsTab
            β”‚Β Β          └── PartsCard
            β”œβ”€β”€ constants
            └── pages
                β”œβ”€β”€ Error
                β”œβ”€β”€ Loading
                β”œβ”€β”€ LotteryApplyInfo
                β”œβ”€β”€ Main
                β”œβ”€β”€ NQuizEvent
                β”œβ”€β”€ NQuizEventWinnerApply
                β”œβ”€β”€ NewCar
                β”œβ”€β”€ PartsCollection
                β”œβ”€β”€ PartsPick
                β”œβ”€β”€ PickEvent
                └── Share


πŸ“œ μ΄μŠˆκ΄€λ¦¬ 및 λ¬Έμ„œ


πŸ”§ μ„ΈλΆ€ κΈ°μˆ μŠ€νƒκ³Ό μ±„νƒν•œ 이유

  • λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œ 각 νŒ¨ν‚€μ§€λ§ˆλ‹€ λͺ¨λ“ˆμ΄ μ€‘λ³΅μœΌλ‘œ μ„€μΉ˜λ˜μ–΄ λ°œμƒν•˜λŠ” λ‚­λΉ„λ₯Ό 막기 μœ„ν•΄ λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • μ½”λ“œ 쀑볡을 쀄이고, κ³΅ν†΅λœ λ‘œμ§μ΄λ‚˜ μΌκ΄€λœ μ½”λ“œ μŠ€νƒ€μΌμ„ 각 νŒ¨ν‚€μ§€μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • service와 admin을 λΆ„λ¦¬ν•˜μ—¬ 각 νŒ¨ν‚€μ§€μ— λŒ€ν•œ λ²ˆλ“€μ‚¬μ΄μ¦ˆλ₯Ό μ€„μ΄λŠ” λ™μ‹œμ— admin에 λŒ€ν•œ λ³΄μ•ˆμ€ κ°•ν™”λ˜λŠ” 효과λ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.

Firebase Preview

  • CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œ production ν™˜κ²½ 이전에 preview ν™˜κ²½μ„ κ΅¬μΆ•ν•˜μ—¬ 변경사항을 κ²€ν† ν•  수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • 동적 링크둜 μƒμ„±λ˜λŠ” Preview ν™˜κ²½μ„ 톡해 효율적인 A/B ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

Emotion

  • μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ μŠ€νƒ€μΌμ„ μΊ‘μŠν™”ν•˜κ³ , λ™μ μœΌλ‘œ μŠ€νƒ€μΌμ„ μ μš©ν•˜κΈ° μœ„ν•΄ CSS-in-JS 방식을 μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€.

  • Styled-component 보닀 emotion이 더 μœ μ—°ν•˜κ³ , λ²ˆλ“€μ‚¬μ΄μ¦ˆκ°€ μž‘λ‹€κ³  νŒλ‹¨ν•˜μ—¬ emotion을 μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€. (styled-component vs emotion)

React-query

  • 이벀트 νŽ˜μ΄μ§€ νŠΉμ„±μƒ λŒ€κ·œλͺ¨ νŠΈλž˜ν”½μ΄ μ˜ˆμƒλ˜μ–΄ μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ 캐싱 κΈ°λŠ₯을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

  • useSuspenseQueryλ₯Ό μ‚¬μš©ν•˜μ—¬ API 호좜 쀑에도 suspense μ»΄ν¬λ„ŒνŠΈκ°€ μ •μƒμ μœΌλ‘œ μž‘λ™ν•  수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

Framer-motion

  • λ³΅μž‘ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ§Žμ€ ν”„λ‘œμ νŠΈμ—μ„œ λΆ€λ“œλŸ¬μš΄ μ• λ‹ˆλ©”μ΄μ…˜ κ΅¬ν˜„μ„ μœ„ν•΄ λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ’­ ν”„λ‘œμ νŠΈ μ£Όμš” κ³ λ € 사항, μ•Œκ²Œ 된 점

λͺ¨λ…Έλ ˆν¬ ν™˜κ²½μ—μ„œμ˜ CI/CD ꡬ좕

  • Github Action을 μ‚¬μš©ν•˜μ—¬ PR μž‘μ„±μ‹œ 동적 링크둜 μƒμ„±λ˜λŠ” Preview 배포가, MainλΈŒλ ŒμΉ˜μ— Mergeμ‹œ Production배포가 μžλ™ν™”λ˜λ„λ‘ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

  • λͺ¨λ…Έλ ˆν¬μ—μ„œ 일반적인 λͺ¨λ†€λ¦¬μ‹ ꡬ쑰처럼 CI/CD ꡬ좕 μ‹œ λ ˆν¬μ§€ν† λ¦¬ λ‚΄μ˜ λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ λΉŒλ“œλ˜κΈ° λ•Œλ¬Έμ— λ³€κ²½λ˜μ§€ μ•Šμ€ νŒ¨ν‚€μ§€λ“€λ„ λΉŒλ“œλ˜μ–΄ λ¦¬μ†ŒμŠ€κ°€ 낭비될 μš°λ €κ°€ μ‘΄μž¬ν–ˆμŠ΅λ‹ˆλ‹€.

  • 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ CI/CD νŒŒμ΄ν”„λΌμΈμ— μ•„λž˜μ˜ λ‘œμ§μ„ μΆ”κ°€ν•˜μ—¬ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

    • ν˜„μž¬ νŒ¨ν‚€μ§€μ˜ λ§ˆμ§€λ§‰ 컀밋해쉬가 Main브렌치의 λ§ˆμ§€λ§‰ 컀밋해쉬와 같은지 νŒλ³„ν•©λ‹ˆλ‹€.
    • 두 컀밋해쉬가 κ°™λ‹€λ©΄ ν•΄λ‹Ή νŒ¨ν‚€μ§€λŠ” 변경사항이 μ—†λ‹€κ³  νŒλ‹¨ν•˜κ³  λΉŒλ“œλ˜μ§€ μ•Šλ„λ‘ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
  • μΆ”κ°€μ μœΌλ‘œ PR μž‘μ„± μ‹œ λ³€κ²½λœ νŒ¨ν‚€μ§€κ°€ 무엇인지 Github Bot이 λŒ“κΈ€λ‘œ μž‘μ„±ν•˜λ„λ‘ ν•˜μ—¬ νŒ€μ›μ΄ μ–΄λŠ νŒ¨ν‚€μ§€λ₯Ό μˆ˜μ •ν–ˆλŠ”μ§€ λ°”λ‘œ μ•Œμ•„λ³Ό 수 μžˆλ„λ‘ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.


UX κ°œμ„ 

  • 1μ°¨ 데λͺ¨μ—μ„œ λ°œμƒν–ˆλ˜ UX κ΄€λ ¨ 뢀정적 ν”Όλ“œλ°±μ„ κΈ°λ‘ν•˜κ³  κ°œμ„ ν•˜μ—¬ 2μ°¨ 데λͺ¨λ•ŒλŠ” μ•½ 88% κ°μ†Œμ‹œμΌ°μŠ΅λ‹ˆλ‹€.

  • Preview 배포 ν™˜κ²½μ„ 톡해 A/B testλ₯Ό μ§„ν–‰ν•˜μ—¬ μ‚¬μš©μžμ˜ ν”Όλ“œλ°±μ„ 효율적으둜 λ°˜μ˜ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


λ°˜μ‘ν˜•, Cross browsing μ›Ή κ΅¬ν˜„

  • μ΄λ²€νŠΈνŽ˜μ΄μ§€μ˜ νŠΉμ„± 상 λͺ¨λ°”μΌλ‘œ μ ‘μ†ν•˜λŠ” μœ μ €κ°€ λ§Žμ„κ²ƒμ΄λΌκ³  νŒλ‹¨ν•˜μ—¬ λ°˜μ‘ν˜• 웹을 κ΅¬ν˜„ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

  • 각쒅 λΈŒλΌμš°μ €μ™€ λ””λ°”μ΄μŠ€λ§ˆλ‹€ 폰트, 이미지 λ“±μ˜ ν˜Έν™˜μ„± 이슈λ₯Ό EOT β‡’ WOFF, SVG β‡’ WEBP 처럼 λ²”μš©μ μΈ ν˜•μ‹μ„ μ±„νƒν•˜μ—¬ ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • Safari λΈŒλΌμš°μ €μ™€ IPhone ν™˜κ²½μ—μ„œ 3D μ• λ‹ˆλ©”μ΄μ…˜μ΄ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ΄μŠˆκ°€ λ°œμƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. Window 객체의 userAgent λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μœ μ €μ˜ ν™˜κ²½μ— 따라 2D μ• λ‹ˆλ©”μ΄μ…˜μœΌλ‘œ λŒ€μ²΄ν•˜μ—¬ ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • μ›Ή ν‘œμ€€μ„ μ€€μˆ˜ν•˜λ©° μž‘μ—…ν•˜λŠ” κ²ƒμ˜ μ€‘μš”μ„±μ„ κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€.


ν˜‘μ—…

  • Jira, Slack, githubλ₯Ό μ—°λ™ν•˜μ—¬ ν˜‘μ—…ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  • Jiraμ—μ„œ 이슈 생성 ν˜Ήμ€ Githubμ—μ„œ PR, merge μ‹œ Slack으둜 νŒ€μ›λ“€μ—κ²Œ μ•Œλ¦Όμ΄ μ „μ†‘λ˜λ„λ‘ ν•˜μ—¬ λΉ λ₯Έ ν”Όλ“œλ°±μ΄ κ°€λŠ₯ν•˜λ„λ‘ κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€.

  • 기획, λ””μžμΈ, κ°œλ°œνŒ€μ΄ λ‚˜λ‰˜μ–΄μ ΈμžˆλŠ” 싀무와 μœ μ‚¬ν•œ ν”„λ‘œμ νŠΈλ₯Ό 톡해 각 λΆ€μ„œκ°„ ν˜‘μ—…ν•˜λŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€.

About

πŸš— μ‹ μ°¨ 홍보 ν”„λ‘œμ νŠΈ - Softeer λΆ€νŠΈμΊ ν”„

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 99.2%
  • Other 0.8%