백엔드 커리큘럼

👉

멘티분 경험에 맞춰 커리큘럼을 맞춰 진행합니다. 😄

0-1. 공통 기술 스택

🔧

백엔드 개발에 필요한 기본 기술 스택을 소개합니다. 이 기술들은 모든 프로젝트의 기반이 되며, 견고한 기초를 쌓는 데 중요합니다.

  • 언어: Java or Kotlin
    Java는 안정성과 보안성이 뛰어나며, 대규모 프로젝트에서 많이 사용됩니다. Kotlin은 간결함과 현대적인 기능을 제공하며, Java와의 상호 운용성이 우수합니다. Kotlin의 문법을 학습하고 Java와의 차이점을 이해합니다.

  • 프레임워크: Spring
    Spring은 DI(Dependency Injection), AOP(Aspect-Oriented Programming) 등을 제공하며, 다양한 기능을 통해 대규모 프로젝트에서 사용되는 강력한 프레임워크입니다.

  • DB: MySQL
    관계형 데이터베이스 시스템인 MySQL을 사용하여 데이터베이스 설계, 관리, 최적화 기법을 학습합니다.

  • ORM: JPA (Java Persistence API)
    JPA를 사용하여 객체와 관계형 데이터베이스 간의 매핑을 학습하고, JPQL(Java Persistence Query Language) 및 영속성 컨텍스트를 이해합니다.

0-2. 취업준비

📑

매주 과제와 미션이 주어질텐데 단순히 학습으로 끝나는 게 아니라 실제로 자소서, 면접에 어떻게 활용하면 좋을 지 스토리를 같이 만들어 드립니다. 😉

  • 스토리텔링과 자기소개서 작성
    프로젝트 경험을 바탕으로 자기소개서와 포트폴리오를 구성하여, 자신의 강점을 효과적으로 전달하는 방법을 익힙니다.

  • 면접 대비 기술 질문 준비
    자주 등장하는 기술 면접 질문을 연습하고, 프로젝트에서의 문제 해결 사례를 통해 면접관에게 깊은 인상을 남기는 방법을 배웁니다.

  • 모의 면접 및 피드백 세션
    모의 면접을 통해 실전 감각을 기르고, 피드백을 통해 개선할 점을 찾아보는 시간을 갖습니다.

1. 프로젝트: 결제 서버 개발

💳

결제 기능을 담당하는 서버를 개발합니다. 서비스 회사에서는 어떤 부분에 주의하며 어떻게 운영을 위한 장치들이 있는지 함께 배우게 됩니다.

프로젝트 킥오프 및 기초 학습

🏗️

프로젝트에서 가장 많이 사용되는 MVC 구조의 프로젝트 경험을 쌓습니다.

  • MVC 패턴 이해와 적용
    MVC(Model-View-Controller) 패턴을 사용하여 백엔드 구조를 설계합니다. 각 레이어의 역할과 책임을 이해하고 프로젝트에 적용합니다.

  • 멀티 모듈 프로젝트 구성
    멀티 모듈이란 개념에 대해 학습하고 실제로 프로젝트에 멀티 모듈로 프로젝트를 구성해 봅니다.

예외 처리 및 에러 코드 정의

⚠️

서비스를 운영하다 보면 언제나 예외는 발생할 수 있습니다. 안정적인 서비스 운영을 위한 예외 처리 전략을 학습하고, 적절한 에러 코드를 정의합니다.

  • 예외 처리 전략 학습
    서비스 운영 중 발생할 수 있는 예외를 처리하는 방법을 배우고, 상황에 맞는 예외 처리 전략을 수립합니다.

  • ErrorCode 정의 및 적용
    서비스에 적합한 ErrorCode를 정의하여 클라이언트와의 명확한 커뮤니케이션을 가능하게 합니다.

CI/CD 파이프라인 구축

🚀

매번 개발자가 수동으로 코드를 배포하는 건 굉장히 귀찮은 작업입니다. 😂 그러므로 CI/CD라는 개념에 대해 학습하고 AWS 서비스를 사용하여 실제로 Github Action을 사용해 CI/CD 배포를 경험해 봅니다.

  • CI/CD 개념 이해 및 도구 학습
    CI/CD(Continuous Integration/Continuous Deployment)의 기본 개념을 학습하고, Jenkins, GitHub Actions와 같은 도구를 사용하여 자동화 파이프라인을 구축합니다.

  • AWS 서비스를 활용한 CI/CD 구현
    AWS 환경에서의 CI/CD를 설정하고, GitHub Actions를 사용해 배포를 자동화합니다. 클라우드 기반의 배포 프로세스를 이해합니다.

프로젝트 고도화 및 로깅

🔍

Spring의 기능을 사용하여 프로젝트를 고도화해 보는 경험을 쌓습니다. 또한 운영의 꽃인 Log를 위한 Logback 설정을 함께 합니다.

  • Spring Annotation 정의 및 AOP 적용
    필요한 Annotation을 정의해 보고 그 Annotation과 스프링의 AOP(Aspect-Oriented Programming) 기능을 함께 사용합니다. 코드의 재사용성과 유지보수성을 높입니다.

  • Logback을 활용한 로깅 설정
    Logback을 사용하여 로그를 설정하고, 운영 환경에서 필요한 로그 전략을 수립합니다. 로그를 통한 문제 추적과 분석 방법을 학습합니다.

비동기 프로그래밍 및 프로파일 관리

때로는 효율을 위해서 비동기 프로그래밍이 필요합니다. 비동기 프로그래밍과 프로파일 관리 방법을 학습하여 성능을 최적화합니다.

  • 비동기 프로그래밍 학습
    Java의 CompletableFuture와 Spring의 비동기 처리 방법을 학습하여 성능을 향상시키는 방법을 익힙니다.

  • Multi Profile 설정
    로컬 개발과 운영을 위해 Profile을 분리해야 하므로 Multi Profile이란 개념에 대해서도 학습을 합니다. 환경에 따라 설정을 달리하여, 유연한 운영 환경을 구성합니다.

API 클라이언트와 이벤트 기반 설계

🔗

외부 서비스로 API 요청을 위해서 다양한 Client 중에서 Feign Client를 사용해 보는 시간을 갖습니다. 외부 API 클라이언트와 이벤트 기반 설계를 통해 서비스의 확장성을 높입니다.

  • Feign Client를 활용한 외부 API 통신
    다양한 HTTP 클라이언트 중 Feign Client를 사용하여 외부 API와 통신하는 방법을 배우고, 이를 프로젝트에 적용합니다.

  • Spring Event 학습 및 적용
    Spring Event 개념을 학습하면서 어떤 경우에 우리는 Event를 발행하면 좋을 지에 대해 알아보는 시간을 갖습니다. 이벤트 발행과 수신을 통해 비동기 처리와 시스템 확장성을 강화합니다.

2. 프로젝트: 알람 서버 개발

👉

알람 기능을 담당하는 서버 개발을 통해 MSA 설계에 대한 경험을 합니다. 또한 대규모 트래픽을 위해 사용되는 인프라를 학습합니다.

DDD와 헥사고날 아키텍처

🏗️

요즘 핫한 DDD + 헥사고날의 프로젝트 경험을 쌓는 시간을 갖습니다. 😃 도메인 주도 설계(DDD)와 헥사고날 아키텍처를 통해 백엔드 구조를 설계합니다.

  • DDD(Domain-Driven Design) 학습
    DDD의 기본 개념을 학습하고, 실제 프로젝트에 적용하여 도메인 모델을 설계합니다.

  • 헥사고날 아키텍처 이해 및 적용
    헥사고날 아키텍처를 통해 유연하고 확장 가능한 시스템을 설계합니다. 의존성 역전 원칙을 이해하고, 이를 기반으로 한 아키텍처를 구현합니다.

  • Kafka 기초 학습
    프로젝트에 필요한 기술 스택인 Kafka를 위한 학습을 미리 진행합니다. 대규모 데이터 스트리밍을 이해하고 준비합니다.

대규모 트래픽 아키텍처 및 Redis 적용

🌐

대규모 트래픽을 위한 아키텍처에 대해 본격적으로 알아보는 시간을 갖습니다. 대규모 트래픽을 처리하기 위한 아키텍처와 Redis 활용 방법을 학습합니다.

  • 대규모 트래픽 아키텍처 설계
    대규모 트래픽을 효율적으로 처리하기 위한 아키텍처를 설계하고, 필요한 인프라를 학습합니다.

  • Redis 학습 및 적용
    Redis를 사용하여 캐싱 및 데이터 저장소로 활용하는 방법을 배우고, 프로젝트에 적용합니다.

Kafka를 활용한 데이터 스트리밍

🔄

대규모 트래픽을 위한 기술 스택인 Kafka를 프로젝트에 적용해 보는 시간을 갖습니다. Kafka를 사용하여 데이터 스트리밍을 구현하고, 실시간 데이터 처리를 경험합니다.

  • Kafka 개념 이해 및 프로젝트 적용
    Kafka의 기본 개념을 이해하고, 이를 프로젝트에 적용하여 실시간 데이터 스트리밍을 구현합니다.

  • Kafka와 Spring의 통합
    Spring Kafka를 사용하여 Kafka와의 통합을 구현하고, 메시지 큐를 통한 데이터 처리를 경험합니다.

성능 테스트 및 부하 테스트

⚙️

서비스를 완성하고 나면 우리 서버가 얼마만큼의 TPS를 버텨낼 수 있을지 알아야 합니다. 서버의 성능을 측정하고, 부하 테스트를 통해 안정성을 검증합니다.

  • 성능 테스트 및 분석
    서버의 성능을 측정하고 분석하여, 병목 지점을 찾아 최적화하는 방법을 학습합니다.

  • 부하 테스트 도구 학습 및 적용
    JMeter 등 부하 테스트 도구를 사용하여 서버의 TPS(Transactions Per Second)를 측정하고, 서버의 한계를 이해합니다.

  • 최종 프로젝트 리뷰 및 개선
    프로젝트의 성과를 리뷰하고, 개선할 점을 찾아 프로젝트를 최종적으로 다듬습니다.

Next Pro 커리큘럼에 질문이 있으신가요?

아래 Kakao 오픈 채팅방을 이용해주세요. 여러분들의 질문에 친절히 답변해드립니다.

이메일 문의: next.pro.master@gmail.com