<aside>
<img src="/icons/sign-in_gray.svg" alt="/icons/sign-in_gray.svg" width="40px" /> 다시 한 번, 합류를 축하드립니다🎉
</aside>
- 채용 1순위 개발자로 가는 3개월의 여정에 합류하신 여러분 반갑습니다 !
- 사전 OT에서 안내드린 내용을 꼭 숙지하고 계셔야, 몰라서 발생하는 불이익을 방지할 수 있습니다.
- 특히 더블입실은 완료하고 오셨죠?
- 혹시 놓치신 분들은 슬랙 공지방 [ 출석&개강발제 안내 ] 확인 필수 !
- 매일 최소 6시간을 채워야 정상 출석이 가능합니다.
- ex.
10:10
입실 → 16:10
이후 퇴실
<aside>
<img src="/icons/groups_gray.svg" alt="/icons/groups_gray.svg" width="40px" /> 개강 발제에 앞서, 끝까지 함께 갈 Spring 심화 트랙의 운영진 분들을 소개합니다.
</aside>
- 튜터님 소개
:
- 담임매니저 소개
: 원성준 매니저님 → 임현정 매니저님
튜터 정보
- 질문이 있다면?
- 기술관련 → 튜터님 (ZEP / 슬랙 질문방)
- 행정관련 → 내배캠 행정봇 & 내배캠 119 (ex.공가처리, 장비대여, 등)
- 운영관련 → 담임매니저님
<aside>
<img src="/icons/volume-high_gray.svg" alt="/icons/volume-high_gray.svg" width="40px" /> 이제 본격적인 학습이 시작됩니다.
</aside>
- 오늘은 학습챕터인 Chapter 1의 첫 날 !
https://docs.google.com/spreadsheets/d/1gs8cCU98fZ2rEBJ5dO7S6QsQOhT9fR6Wn5ZqQTBx64I/edit?usp=sharing
- 본인 페이스에 맞춰 수강하시되, 전반적으로 시간표의 진도를 따라갈 수 있도록 해주세요.
<aside>
<img src="/icons/save_gray.svg" alt="/icons/save_gray.svg" width="40px" /> 지급 강의 안내
</aside>
<aside>
<img src="/icons/checkmark_gray.svg" alt="/icons/checkmark_gray.svg" width="40px" />
Chater 1. 학습 가이드
</aside>
학습 목적
-
Java, Spring
- Spring의 실제 웹 애플리케이션 개발에 필수적인 Java언어와 프레임워크 기초 지식은 필수입니다. MVC 프레임워크를 사용하여 웹 애플리케이션을 구조화하고, JDBC를 통해 데이터베이스와 연동하여 데이터 처리 및 관리 할 수 있습니다.
- CRUD 프로젝트 구현
- IoC와 DI 기초 이해
- 영속성 컨텍스트와 JPA 이해
-
MSA
- 복잡한 시스템을 보다 효율적으로 관리하고 확장하기 위해서는 MSA 가 필수적입니다. MSA를 이해한다면 대규모 시스템을 더 유연하게 설계할 수 있습니다.
- Spring Cloud는 MSA 구현하는데 필요한 다양한 도구와 라이브러리를 제공하는 프레임워크입니다.
-
인메모리 저장소 및 캐싱 전략
- 일반적인 관계형 데이터베이스는 데이터를 읽고 쓰는 시간이 느립니다. 그래서 웹 서비스에 필요한 기능들을 만들 때 비효율적인 상황이 존재합니다. 이럴 때 활용하는 게 인메모리 저장소 입니다.
-
프로젝트 관리 심화
- 실제 서비스를 구축하고 관리하는 것은 신경 쓸 것이 많습니다. 도커와 도커 컴포즈를 활용하여 프로젝트를 관리한다면 이러한 관리 포인트를 줄일 수 있습니다.
- 프로젝트를 효과적으로 관리하고 배포 하려면 어떻게 해야 할까요? 이를위해 현업에서는 여러 CI/CD 툴을 사용하고 있답니다.
학습 목표
- Java, Spring
- [ ] Spring MVC 프레임워크를 사용하여 웹 애플리케이션을 설계할 수 있다.
- [ ] JDBC를 통해 데이터베이스와 연동하여 데이터를 처리할 수 있다.
- [ ] Create, Read, Update, Delete 기능을 통해 데이터베이스 조작을 할 수 있다.
- [ ] IoC와 DI 개념을 이해하고 활용해 객체의 생명주기를 관리하고, 의존성 주입을 통해 코드의 유연성과 재사용성을 높일 수 있다.
- [ ] JPA를 사용하여 데이터베이스와 객체 간의 매핑을 효율적으로 처리할 수 있다.
- [ ] 영속성 컨텍스트를 통해 객체의 상태를 관리할 수 있다.
- [ ] 데이터 변동 기록을 자동으로 관리할 수 있다.
- MSA
- [ ] Eureka를 통해 각 마이크로 서비스의 위치를 동적으로 찾아 서비스간의 통신을 할 수있다.
- [ ] Ribbon(FeignClient)를 통해 클라이언트 사이드 로드 밸런서를 제공하여 서비스간의 트래픽을 효율적으로 분산할 수 있다.
- [ ] Reslilence4j를 통해 서킷 브레이커 패턴을 구현하여, 서비스 장애시 문제를 격리하고 시스템의 안정성을 높일 수 있는 장애처리를 할 수 있다.
- [ ] Spring Cloud Gateway를 통해 클라이언트의 요청을 적절한 마이크로 서비스로 라우팅하고, 로그인 처리등의 기능을 필터를 통해 구현하여 보안을 구성 할 수 있다.
- [ ] Spring Cloud Config를 통해 중앙에서 설정 파일을 관리하고, 각 마이크로 서비스가 설정을 동적으로 로드하게 할 수 있다.
- [ ] Zipkin을 통해 분산 추적 데이터를 확인하여 실제 서비스 간의 호출을 추적하고, 문제 발생 시 원인을 보다 쉽게 분석 할 수 있다.
- 인메모리 저장소 및 캐싱 전략
- [ ] 간단하게 Redis를 구성하여 사용해볼 수 있다.
- [ ] Spring Boot에서 원하는 형태로 Redis와 데이터를 주고받을 수 있다.
- [ ] Session Clustering이 무엇인지 설명할 수 있으며, Redis를 활용해 Session Clustering을 구현할 수 있다.
- [ ] Redis의 Sorted Set을 활용해 리더보드 기능을 만들 수 있다.
- [ ] 캐싱의 개념을 설명하고, 캐싱 젼략 중 Cache-Aside, Write-Through, Write-Behind를 설명할 수 있다.
- 프로젝트 관리 심화
- [ ] 도커를 사용하여 DockerHub의 이미지를 사용하여 컨테이너를 만들 수 있다.
- [ ] Spring Boot 프로젝트에서 Redis를 활용해 메서드의 결과를 캐싱할 수 있다.
- [ ] 도커 컴포즈를 사용하여 여러 컨테이너를 동시에 관리 할 수 잇다.
- [ ] gitLab을 사용하여 프로젝트를 관리하고 AWS ECR, ECS를 사용하여 프로젝트를 배포 할 수 있다.
학습 후 활용 방안
- Java, Spring
- 프로젝트 만들어보기
- 프로젝트를 시작 부터 배포까지 실습해 봅니다.
- MVC 패턴에 대해 이해하고 RESTful 웹 서비스과 API를 설계하고 구현합니다.
- 강의와 기초 코드 없이 명세만 가지고 스스로 프로젝트 빌드까지 완성해보세요.
- 원하는 API 명세를 직접 짜보고, DB 연결도 해보세요. 쿼리와 JPA로 엔티티 매핑을 할 수 있어요.
- 자신만의 기획이나 API를 직접 구현해보는 것으로 활용 능력으로 숙달 시킬 수 있습니다.
- MSA
- 설계도 만들어보기
- 스프링 클라우드는 안정적인 MSA 환경을 구성하기 위해 많은 기능들을 지원합니다.
- 이러한 기능들을 포함하여, 여러분이 만들고 싶은 프로젝트를 선정하고 설계도를 그려보세요.
- 설계도가 완벽하지 않아도 좋습니다. 여러분이 만든 설계도는 여러분의 시스템을 전체적으로 알려주는 중요한 자원이 될것 입니다.
- 또한 설계도를 통해 다른 개발자와 소통을 한다면 보다 쉽게 이해시킬 수 있을 것입니다.
- 구성에 부족한 부분을 찾기에도 편하겠죠~!
- MSA 로 프로젝트 만들어 보기
- MSA 프로젝트를 설계하고 구성한 다는 것은 쉽지 않은 일입니다. 여러분은 강의를 통해 어떠한 스프링 클라우드에는 어떠한 기능들이 있으며 MSA를 구성하기 위해서는 어떠한 것들이 필요한지 느끼게 되었을 것입니다.
- 이를 통해 여러분은 모놀리틱 아키텍쳐를 통해 개발을 하더라도 앞으로는 MSA로의 전환을 염두해 가면서 개발을 진행할 것입니다.
- 여러분의 서비스를 모놀리틱 아키텍처로 구성해보고 서비스를 판단하여 MSA로 전환해보세요.
- 서비스의 부하가 생길 만한 곳, 또는 서비스에서 격리되어 구현되어야 할 곳을 나누어 개발해보세요.
- 인메모리 저장소 및 캐싱 전략
- 관계형 데이터베이스로 만들기 어려웠던 기능 만들어보기
- Redis는 데이터를 읽고 쓰는 속도가 일반적인 데이터베이스보다 빠르며, 다양한 자료구조를 제공합니다. 이를 이용하면 관계형 데이터베이스와 SQL로는 만들기 어려웠던 기능들을 좀더 쉽고 효율적으로 동작하도록 구현할 수 있습니다. 장바구니, 리더보드, 중복 사용자 제외 조회수 등 데이터가 자주 변경되는 기능을 만들어 보세요!
- 세션 클러스터링으로 분산 환경 대비하기
- 서비스의 가용성을 위해서 애플리케이션을 Scale Out하면 세션을 활용한 기능에 문제가 생길 수 있습니다. 인메모리 데이터베이스를 사용함으로서 여러 애플리케이션 인스턴스 끼리 세션을 공유해보세요!
- 프로젝트에 캐싱 적용해보기
- 사용자가 자주 사용하는 데이터는 생각보다 다양하지 않습니다. 이런 데이터를 캐싱해두면 실제 데이터를 조회하는데 필요한 시간을 비약적으로 줄여줄 수 있습니다!
- 프로젝트 관리 심화
- 로컬에 프로젝트에 필요한 서비스 환경 구축하기
- 애플리케이션 개발에 사용하는 DB, Queue등 다양한 서비스를 도커를 사용하여 빠르게 구축 할 수 있습니다. 로컬에 PostgreSQL 컨테이너를 생성하고 Spring boot등의 여러가지 프레임 워크를 사용하여 접속해보세요
- 컨테이너의 볼륨을 로컬에 바인딩하여 저장해 보세요, DB 의 주요 폴더를 바인딩 하면 컨테이너가 다운되어도 정보를 유지 할 수 있습니다. 만약 다른 PC 에서 같은 데이터로 환경을 구축 하고 싶다면 바인딩 된 볼륨을 복사하여 컨테이너를 실행하면 되겠죠
- 여러분이 만들 애플리케이션을 CI/CD를 통해 자동 배포해보세요.
- 이제 여러분의 저장소에 변경 사항을 PUSH 할 때마다 프로젝트가 자동으로 빌드 될것입니다.
- CI/CD 파이프라인을 통해 test스테이지를 만들고 테스트환경이 통과 했을때만 애플리케이션이 빌드 될 수 있도록 해보세요.