웹 서비스의 기본 구조와 HTTP 통신 원리를 이해하고 RESTful API 설계 방법을 학습하며, 리눅스 명령어들을 통해 커널과 쉘, 런타임 개념을 숙지합니다. 마지막으로 HTML/JS 와 Spring Boot 를 연동한 예시 프로젝트로 프론트엔드와 백엔드의 통신 방식을 직접 보고 이해합니다.
로컬에 직접 프론트엔드와 백엔드 컴파일 및 빌드와 WS/WAS 배포를 진행해보며 CI/CD 절차에 대해 이해하고, Nginx 통해 로드밸런싱과 무중단 배포 기법을 직접 설정해보면서 실제 서비스 환경에서 애플리케이션을 안정적으로 배포하는 방법에 대해 익힙니다. 마지막으로 도메인 구매에서 등록까지 DNS 절차를 이해하여 실무에서 도메인 관리가 가능하도록 배웁니다.
보안의 가장 기초가 되는 사내망(Private Network) 격리와 인바운드와 아웃바운드 설정을 통한 외부와 조건부 접근 허용 방법을 익힙니다. AWS 실습을 직접해보면서 네트워크 아키텍쳐 설계에 대한 이해를 가져갑니다.
몇가지 실제 현업에서 사용한 비지니스 시나리오들을 제공하여, 학생들 직접 복잡한 비지니스 시나리오를 기반으로 ERD 를 설계해보도록 합니다. 설계한 ERD 검증을 위해 DDL 쿼리로 테이블을 만들고, 비지니스 시나리오에 따라 DML 쿼리를 통해 직접 데이터를 적재해봅니다. 앞선 ERD 설계를 통해 자연스럽게 정규화에 대해서도 이해합니다.
앞선 주차들에서 배운 내용들을 토대로 비지니스 시나리오가 주어졌을때 그에 적합한 RESTful API 들을 Spring Boot 를 통해 직접 만들어보고, 코드리뷰를 통해 유지보수성이 높은 자바 개발이란 무엇일지 고민해보면서 자연스럽게 디자인 패턴과 SOLID 원칙에 대해 체득합니다.
ERD 설계에서 정규화를 통해 만든 연관관계가 자바의 객체에서 어떻게 표현되는지 JPA(ORM) 실습을 통해 단방향과 양방향 관계에 대해 이해하고, N+1 문제에 대해 인지합니다. 쿼리 메서드를 통해 간편하게 데이터베이스에 접근하는 방식도 익혀보고, JPQL 혹은 SQL 그리고 QueryDSL 를 통해 복잡한 쿼리들을 수행하는 방법간의 장단점도 익혀서 현업에서 목적에 맞게 방법을 골라쓸 수 있도록 합니다.
구동하는 환경에 따라 다른 데이터베이스 접근을 위해서 다중 프로파일을 설정하는 방법을 배웁니다. 그리고 열심히 개발한 백엔드 API 를 프론트엔드 개발자가 올바르게 사용할 수 있도록 Swagger 를 통해 API 스펙을 제공하는 방법과 OpenAPI Generator 를 통해 프론트엔드에서 별다른 노력없이 API 호출이 가능하도록하여, 명확한 API 스펙 정의하는것의 중요성을 파악합니다. 마지막으로는 프론트엔드에서 잘못된 요청을 했을때 왜 API 결과를 반환할 수 없는 올바른 HTTP 상태코드를 반환할 수 있도록 예외 처리에 대해 익힙니다.
보안에서 수없이 활용되는 대칭키와 비대칭키에 대해 간단히 이해하고 이들을 기반으로하는 HTTPS 개념과 SCP/SSH 에 대해 학습합니다. 웹 개발자라면 한번쯤은 겪어봤을만한 CORS 정책과 예외규칙을 추가하는법 그리고 이것이 방지하기위한 CSRF 문제란 무엇인지 이해합니다. 마지막으로 인증과 인가 절차가 정확히 어떻게 이뤄지는지 익히고 세션과 토큰기반으로 예제 프로젝트에서 로그인을 구현해봅니다.