Skip to content
@ICT-Dev-Route

ICT-Dev-Route

초보 개발자λ₯Ό μœ„ν•œ ν”Œλž«νΌ, DevRouteπŸ“š

1.Introduction

Goal

DevRouteλŠ” 초보 κ°œλ°œμžλ“€μ„ μœ„ν•΄ 직무별 λ‘œλ“œλ§΅κ³Ό 기술 μŠ€νƒμ„ μ‹œκ°ν™”ν•΄μ£ΌλŠ” ν”Œλž«νΌμž…λ‹ˆλ‹€. 이 ν”„λ‘œμ νŠΈλŠ” 초보 κ°œλ°œμžλ“€μ΄ λͺ©ν‘œλ₯Ό λͺ…ν™•ν•˜κ²Œ μ„Έμš°κ³  ν•„μš”ν•œ κΈ°μˆ μ„ λ‹¨κ³„λ³„λ‘œ 읡힐 수 μžˆλ„λ‘ 돕기 μœ„ν•΄ μ‹œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Feature

πŸš€κ°œλ°œ λ‘œλ“œλ§΅ 제곡
처음 μ‹œμž‘ν•˜λŠ” κ°œλ°œμžλ“€μ„ μœ„ν•œ 단계별 λ‘œλ“œλ§΅ 제곡, μ‰½κ²Œ 따라할 수 μžˆλŠ” κ°€μ΄λ“œ!

πŸ’Όμ±„μš©κ³΅κ³  톡합
μ—¬λŸ¬ μ±„μš©κ³΅κ³ λ₯Ό ν•œλˆˆμ—! μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ ν˜•νƒœλ‘œ μ •λ¦¬λœ 정보 제곡.

πŸ”κΈ°μˆ  μŠ€νƒ 뢄석
ν˜„μž¬ μ‹œμž₯μ—μ„œ 인기 μžˆλŠ” 기술 μŠ€νƒμ„ ν•œλˆˆμ— νŒŒμ•…, μ΄ˆλ³΄μžλ„ μ‰½κ²Œ 이해할 수 있게 ꡬ성.

πŸŽ“ν•™μŠ΅ 자료 μΆ”μ²œ
ν•„μš”ν•œ κΈ°μˆ μ„ ν•™μŠ΅ν•  수 μžˆλŠ” 유튜브 μ˜μƒκ³Ό 온라인 κ°•μ˜ μΆ”μ²œ.

2.Team

Front Back Back Back

@heewon1104

@Munhangyeol

@mete0rfish

@maark1106

3.Delopment Enviroment

  • Operating Systems: Windows 11, macOS
  • IDEs: IntelliJ, Visual Studio, AWS
  • Frameworks & Libraries: Spring Framework, React
  • Languages: Java, SQL, JavaScript
  • Version Control: GitHub
  • Collaboration Tools: Notion, Discord, Google Meet
  • Server & Database: AWS EC2, RDS, Docker
  • CI/CD Pipeline: GitHub Actions
  • Monitoring Tools: Prometheus, Grafana

4. Technologies and Branch Strategy

Technologies

imageimage

[ System Configuration ]

  • ν”„λ‘ νŠΈμ—”λ“œ: React ν”„λ ˆμž„μ›Œν¬λ‘œ JavaScript 기반의 λ°˜μ‘ν˜• μ›Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬μΆ•ν•˜μ—¬, UI/UXλ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ°±μ—”λ“œ: Javaλ₯Ό 기반으둜 ν•œ Spring Framework와 Spring Boot둜 κ²¬κ³ ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ„œλ²„ μ•„ν‚€ν…μ²˜λ₯Ό μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€: DB 엔진은 MySQL 8.4.0 버전을 μ΄μš©ν•©λ‹ˆλ‹€.
  1. μ›Ήκ³Ό μ„œλ²„μ™€ 톡신 μ‹œ, Jwt Token을 μ΄μš©ν•˜μ—¬ μœ μ €μ˜ 인증 및 인가가 μ§„ν–‰λ©λ‹ˆλ‹€.
  2. μ„œλ²„μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό μ‹œ JPA(ORM)을 κ΅¬ν˜„ν•œ Hibernateλ₯Ό μ΄μš©ν•˜λ©° MySQLκ³Ό μ—°λ™ν•˜μ—¬ 데이터λ₯Ό μ €μž₯ 및 μ΄μš©ν•©λ‹ˆλ‹€.
  3. APIλ₯Ό μ œκ³΅ν•˜λŠ” μ‚¬λžŒμΈκ³Ό 유튜브, μœ λ°λ―ΈλŠ” OpenAPIλ₯Ό 톡해 정보λ₯Ό μ–»μŠ΅λ‹ˆλ‹€.
  4. APIλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ” μž‘ν”Œλž˜λ‹›, μž‘μ½”λ¦¬μ•„, μΈν”„λŸ°μ€ Selenium을 톡해 ν”Œλž«νΌκ³Ό μƒν˜Έμž‘μš©ν•©λ‹ˆλ‹€.

[ CI/CD ]

  1. GitHub에 Push ν›„ Mergeκ°€ 되면 Github Actions의 CI/CD νŒŒμ΄ν”„λΌμΈμ„ μ΄μš©ν•©λ‹ˆλ‹€.
  2. Github에 νŒŒμΌμ„ 톡해 λΉŒλ“œ ν›„, Docker 이미지λ₯Ό λΉŒλ“œν•˜κ³  Docker Hub에 이λ₯Ό Push ν•©λ‹ˆλ‹€.
  3. Github ActionsλŠ” μ„œλ²„κ°€ 배포된 EC2에 SSH μ ‘μ†ν•˜μ—¬ Docker Hub둜 λΆ€ν„° 이미지λ₯Ό Pull ν›„, μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

[ AWS ]

  1. μ„œλ²„λŠ” EC2 μ»¨ν…Œμ΄λ„ˆμ—μ„œ μž‘λ™λ˜κ³ , ν΄λΌμ΄μ–ΈνŠΈλŠ” S3 기반의 CloudFront μ„œλΉ„μŠ€λ₯Ό 톡해 μž‘λ™λ©λ‹ˆλ‹€.
  2. λ³΄μ•ˆμ„ μœ„ν•œ HTTPS μ μš©μ„ μœ„ν•΄ SSL은 ACM을 μ΄μš©ν•˜κ³ , Route 53을 톡해 도메인과 μ—°κ²° ν›„, EC2와 S3에 각각 μ—°κ²°ν•©λ‹ˆλ‹€.
  3. μ„œλ²„μ˜ HTTPS μ‚¬μš©μ„ κ°•μ œν•˜κΈ° μœ„ν•΄ EC2λŠ” λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό 톡해 HTTP/80 접속 μ‹œ, HTTPS/443으둜 λ¦¬λ‹€μ΄λ ‰νŠΈ λ˜λ„λ‘ μ§€μ •ν•©λ‹ˆλ‹€.
  4. ν΄λΌμ΄μ–ΈνŠΈμ˜ HTTPS μ‚¬μš©μ„ κ°•μ œν•˜κΈ° μœ„ν•΄ CloudFront의 섀정을 HTTPS둜 λ¦¬λ‹€μ΄λ ‰νŠΈ λ˜λ„λ‘ μ§€μ •ν•©λ‹ˆλ‹€.

Branch Strategy

κΉ”λ”ν•œ 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ GitHub Flow 브랜치 μ „λž΅μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. 각 κΈ°λŠ₯μ΄λ‚˜ μˆ˜μ • 사항은 λ³„λ„μ˜ λΈŒλžœμΉ˜μ—μ„œ 개발되며, Pull Requestλ₯Ό 톡해 메인 λΈŒλžœμΉ˜μ— λ³‘ν•©λ©λ‹ˆλ‹€. 일관성을 μœ„ν•΄ PR ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜μ—¬ μ£Όμš” λ³€κ²½ 사항을 λͺ…ν™•νžˆ ν•˜κ³ , νŒ€μ›λ“€μ΄ 효율적으둜 μ½”λ“œ 리뷰λ₯Ό μ§„ν–‰ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€. 이 방식은 μ½”λ“œ ν’ˆμ§ˆμ„ μœ μ§€ν•˜κ³  ν˜‘λ ₯적인 κ°œλ°œμ„ μ΄‰μ§„ν•©λ‹ˆλ‹€.

5.Main Logic

둜그인 및 νšŒμ›κ°€μž…

메인 νŽ˜μ΄μ§€

직ꡰ별 개발자 μ„€λͺ…

개발자 λ‘œλ“œλ§΅

κΈ°μ—… 정보 검색

μ±„μš© 곡고

개발 κ΄€λ ¨ μΆ”μ²œ μ˜μƒ

λ¬Έμ˜μ‚¬ν•­

6. Directory Structure

Backend

.
└── devroute
    β”œβ”€β”€ api
    β”‚Β Β  β”œβ”€β”€ suggestion
    β”‚Β Β  └── visitorcount
    β”œβ”€β”€ bookmark
    β”‚Β Β  β”œβ”€β”€ domain
    β”‚Β Β  β”œβ”€β”€ exception
    β”‚Β Β  └── json
    β”œβ”€β”€ company
    β”‚Β Β  β”œβ”€β”€ controller
    β”‚Β Β  β”œβ”€β”€ domain
    β”‚Β Β  β”œβ”€β”€ dto
    β”‚Β Β  β”œβ”€β”€ repository
    β”‚Β Β  └── service
    β”œβ”€β”€ crawling
    β”‚Β Β  └── dto
    β”œβ”€β”€ dataloader
    β”œβ”€β”€ global
    β”‚Β Β  β”œβ”€β”€ aop
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ crawl
    β”‚Β Β  β”‚Β Β  └── timetrace
    β”‚Β Β  β”œβ”€β”€ auth
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ filter
    β”‚Β Β  β”‚Β Β  └── jwt
    β”‚Β Β  β”œβ”€β”€ config
    β”‚Β Β  └── exception
    β”œβ”€β”€ recruitment
    β”‚Β Β  β”œβ”€β”€ controller
    β”‚Β Β  β”œβ”€β”€ domain
    β”‚Β Β  β”œβ”€β”€ dto
    β”‚Β Β  β”œβ”€β”€ enums
    β”‚Β Β  β”œβ”€β”€ repository
    β”‚Β Β  β”œβ”€β”€ service
    β”‚Β Β  └── utils
    β”œβ”€β”€ roadmap
    β”‚Β Β  β”œβ”€β”€ description
    β”‚Β Β  β”œβ”€β”€ domain
    β”‚Β Β  β”œβ”€β”€ dto
    β”‚Β Β  β”œβ”€β”€ enums
    β”‚Β Β  └── repository
    β”œβ”€β”€ user
    β”‚Β Β  β”œβ”€β”€ domain
    β”‚Β Β  β”œβ”€β”€ dto
    β”‚Β Β  β”œβ”€β”€ enums
    β”‚Β Β  └── service
    └── video
        β”œβ”€β”€ Repository
        β”œβ”€β”€ constans
        β”œβ”€β”€ domain
        β”œβ”€β”€ dto
        β”‚Β Β  β”œβ”€β”€ infrean
        β”‚Β Β  β”œβ”€β”€ udemy
        β”‚Β Β  └── youtube
        β”œβ”€β”€ enums
        β”œβ”€β”€ exception
        β”œβ”€β”€ fetcher
        └── service

8. Trouble Shooting

Backend

  1. μ˜μƒ μΆ”μ²œ νŽ˜μ΄μ§€μ—μ„œ μ˜μƒμ΄ 보이지 μ•Šκ±°λ‚˜, κ°œλ°œν™˜κ²½μ˜ 더미 데이터가 ν•¨κ»˜ λ³΄μ΄λŠ” 문제λ₯Ό ν•΄κ²°.( #117: μ˜μƒ μΆ”μ²œμ„ λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€μ˜ 였λ₯˜ 작기)

    • 개발 및 운영 ν™˜κ²½ 뢄리
      • κΈ°μ‘΄μ—λŠ” application.propertiesμ—μ„œ μˆ˜λ™μœΌλ‘œ ν”„λ‘œνŒŒμΌμ„ μ„€μ •ν•˜μ—¬ RDS에 데이터가 쀑볡 μ €μž₯λ˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
      • 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ application-dev.properties와 application-prod.properties 파일둜 ν™˜κ²½μ„ λΆ„λ¦¬ν•˜μ—¬, 각 ν™˜κ²½μ— λ§žλŠ” 섀정이 μžλ™μœΌλ‘œ μ μš©λ˜λ„λ‘ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.
  2. CI/CD μ‹œ CPU μ‚¬μš©λ₯  및 λ©”λͺ¨λ¦¬ μ‚¬μš© 문제λ₯Ό ν•΄κ²°.(#125:CPUμ‚¬μš©λ₯  μ œμ–΄)

    • CI/CD κ°œμ„ μ„ ν†΅ν•œ CPU λΆ€ν•˜ μ™„ν™”
      • Docker λΉŒλ“œ μ‹œ 캐싱을 μ μš©ν•΄ λΉŒλ“œ μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ³ , DockerHubμ—μ„œ 이미지λ₯Ό Pullν•œ ν›„ CPU μ‚¬μš©λ₯  μ œμ–΄λ₯Ό 톡해 CI/CD κ³Όμ •μ—μ„œμ˜ λΆ€ν•˜λ₯Ό μ€„μ˜€μŠ΅λ‹ˆλ‹€.
    ν•­λͺ© κΈ°μ‘΄ 방식 λ³€κ²½ ν›„ μ„€μ •
    CI/CD μ‹œκ°„ 단좕 캐싱 미적용, κΈ΄ λΉŒλ“œ μ‹œκ°„ 캐싱 λ„μž…μœΌλ‘œ CI/CD μ‹œκ°„ 55.37% κ°œμ„ 
    CPU μ‚¬μš©λ₯  μ΅œλŒ€ 97% 도달 κ°œμ„  ν›„ μ•½ 53.6% κ°μ†Œ
  3. Selenium의 높은 λŒ€κΈ° CPU μ μœ μœ¨μ„ 24% κ°μ†Œ. (크둀링 μ΅œμ ν™”)

    • Prometheusλ₯Ό ν†΅ν•œ λͺ¨λ‹ˆν„°λ§ μ§€ν‘œλ₯Ό 톡해 크둀링 μ§„ν–‰ ν›„ μž₯기적으둜 CPU 점유율이 μƒμŠΉν•˜λŠ” 것을 발견
    • 초기 섀정을 톡해 Selenium Driverκ°€ ν™œμ„±ν™”λœ μƒνƒœμ—μ„œ CPUλ₯Ό μ§€μ†μ μœΌλ‘œ 점유
    • Spring AOP을 톡해 크둀링이 μ§„ν–‰λœ 둜직 μˆ˜ν–‰ ν›„ μžλ™μœΌλ‘œ quit()을 μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •
    ν•­λͺ© κΈ°μ‘΄ 방식 λ³€κ²½ ν›„ μ„€μ •
    Live Thread Count (ν˜„μž¬ μ‹€ν–‰ 쀑인 λͺ¨λ“  μŠ€λ ˆλ“œμ˜ 수) 31 Threads 27 Threads (-4)
    Daemon Thread Count (λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰ 쀑인 μŠ€λ ˆλ“œμ˜ 수) 26 Threads 22 Threads (-4)
  4. λ°μ΄ν„°λ² μ΄μŠ€ Indexλ₯Ό ν™œμš©ν•΄μ„œ λΉ„λ””μ˜€ 데이터 μ‘°νšŒμ‹œ λ°œμƒν•˜λŠ” μ„±λŠ₯을 96.49% κ°œμ„ 

    • ν™ˆνŽ˜μ΄μ§€ ν™”λ©΄μ—μ„œ λΉ„λ””μ˜€ μ‘°νšŒμ‹œμ˜ order byλ₯Ό μˆ˜ν–‰ ν›„ μ‘°νšŒν•˜λŠ” μ—°μ‚°μ‹œ, κΈ°μ‘΄μ—λŠ” Table full scan을 ν™œμš©ν•΄μ„œ μ‘°νšŒν•˜λ―€λ‘œ 느렸음
    • 이λ₯Ό 인덱싱을 ν™œμš©ν•΄μ„œ 10000개의 데이터 κΈ°μ€€ 0.009398secμ—μ„œ 0.00033sec둜 96.49% μ„±λŠ₯ κ°œμ„  (인덱슀λ₯Ό ν™œμš©ν•œ μ‘°νšŒμ„±λŠ₯ μ΅œμ ν™”)

9. Presentation

Google Slids

Popular repositories Loading

  1. Dev-Route-BE Dev-Route-BE Public

    ✨초보 개발자λ₯Ό μœ„ν•œ ν•™μŠ΅ ν”Œλž«νΌ, 데브루트. κΈ°μˆ μŠ€νƒ ν•™μŠ΅μ„ μœ„ν•œ λ‘œλ“œλ§΅ λΆ€ν„° μ±„μš©κ³΅κ³  데이터λ₯Ό ν†΅ν•œ μ£Όμš” κΈ°μˆ μŠ€νƒ 및 κΈ°μ—… 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

    Java 4 3

  2. Dev-Route-FE Dev-Route-FE Public

    JavaScript

  3. .github .github Public

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…