[엄진영의 코딩스쿨]에서 강의하는 "자바 프로젝트 실습" 교육 과정의 소스를 보관하는 저장소이다. 자바 프로그래밍 기술을 단계별로 익힐 수 있도록 프로젝트를 버전으로 구분해 놓았다. 각 버전 별로 자바의 주요 기술을 어떻게 활용하는 지 그 방법을 배울 수 있다. 또한 버전을 따라 공부하다 보면 과거에서 최근까지 애플리케이션 아키텍처가 어떻게 변화해 왔는지 간접적으로 경험할 수 있다. 이는 오래전에 구축된 시스템에서 최근에 구축된 시스템까지 유지보수 해야하는 개발자에게 특히 도움이 될 것이다.
- 자바 기본 문법을 공부중인 분
- 서블릿/JSP를 학습하였거나 학습하려는 분
- C/C++, Python 등 다른 프로그래밍 언어를 알고 있는 데, 자바 프로그래밍을 빠르게 배우고 싶은 분
- 자바 기본 문법을 공부하였는데 어떻게 응용해야 할 지 모르겠는 분
- 다양한 오픈 소스를 자바 애플리케이션에 개발에 적용하는 방법을 배우고 싶은 분
- 스프링 프레임워크 기반 프로젝트에 참여중이거나 참여할 예정인 분
- 자바 웹 애플리케이션 프로젝트의 유지보수를 맡고 있거나 맡을 예정인 분
이 교육과정을 통해 다음을 배울 수 있다.
- 자바 언어에서 제공하는 각종 문법의 목적을 이해하고 활용하는 방법
- 애플리케이션 개발에 디자인 패턴을 적용하는 방법
- 스프링 프레임워크, 마이바티스 등 오픈 소스 프레임워크를 프로젝트에 적용하는 방법
- 웹 애플리케이션의 아키텍처의 발전 과정을 이해
- OpenJDK 11 설치 및 환경 설정
- Eclipse 2018-09 설치 및 환경 설정
- Visual Studio Code 설치 및 환경 설정
- Scoop(Win)/Homebrew(macOS) 패키지 관리자 설치
- Gradle 빌드 도구 설치
- Git 형상관리 도구 설치
- MariaDB 데이터베이스 설치
- github.com 사이트에 가입하기
- github.com 의 저장소를 로컬(개발 PC)로 복제하기
- github.com 에 개인 저장소 만들기
- github.com 의 개인 저장소를 로컬로 복제하기
그레이들을 이용하여 프로젝트 디렉토리를 구성하는 방법아파치 메이븐프로젝트의 디렉토리 구조를 이해하기그레이들로 빌드하고 실행하는 방법
그레이들을 이용하여이클립스호환 프로젝트로 전환하는 방법이클립스워크스페이스로 프로젝트를 가져오는 방법이클립스에서 빌드하고 실행하는 방법
- .gitignore 파일을 편집하는 방법
- github.com 의 저장소에 프로젝트를 공유하는 방법
- 값을 콘솔로 출력하는 방법
- 키보드로부터 값을 입력 받는 방법
- 값을 저장하기 위해 변수를 이용하는 방법
- 배열을 활용하여 여러 개의 데이터를 저장하는 방법
- 반복문과 조건문을 사용하여 실행 흐름을 제어하는 방법
- 클래스를 활용하여 여러 개의 데이터를 한 단위로 묶는 방법
- 클래스와 인스턴스의 관계를 이해하기
- 인스턴스와 레퍼런스의 관계를 이해하기
- 변수, 상수, 연산자, 조건문, 반복문, 블록, 배열 등 프로그래밍 기본 문법의 종합 활용법
- 메서드를 활용하여 코드를 기능 단위로 분리하는 방법
- 리팩토링: 메서드 추출(Extract Method)
- 클래스를 이용하여 관련 메서드를 묶어 관리하는 방법
- 패키지를 이용하여 관련 클래스를 분류하는 방법
- 클래스 변수와 메서드의 한계를 이해하기
- 인스턴스 변수와 메서드를 사용하는 방법
- 인스턴스 변수를 사용할 때의 이점
- 인스턴스 메서드를 사용하는 이유
- 인스턴스를 사용하기 전에 필요한 값을 준비하는 방법
- 생성자의 용도 이해
- 메서드를 활용하여 인스턴스 값을 다루는 연산자를 정의하는 방법
- 캡슐화와 셋터/겟터의 의미
- 데이터 처리 코드를 캡슐화하는 방법
- 캡슐화를 통해 얻을 수 이점 이해하기
- 데이터 처리 클래스를 일반화하여 재사용성을 높이는 방법
- 다형적 변수의 활용해야 하는 이유
- 형변환이 필요한 이유
- Object 타입의 한계를 극복하는 제네릭 활용법
- 수업/회원/게시판에 대해 CRUD 완성하기
- Linked List 자료구조를 구현하는 방법
- Linked List 의 구동원리 이해하기
- ArrayList와 LinkedList의 장단점 비교하기
- 중첩 클래스의 활용
- Stack 자료구조를 구현하는 방법
- Stack 의 구동원리 이해하기
- Stack 의 활용 사례
- 상속의 활용
- Queue 자료구조를 구현하는 방법
- Queue 의 구동원리 이해하기
- Queue 의 활용 사례
- 상속의 활용
- 인터페이스를 이용하여 사용 규칙을 정의하는 방법
- 인터페이스의 용도와 이점을 이해하기
- 목록을 다루는 자료구조와 상관없이 일관된 방법으로 데이터를 꺼내는 방법
Iterator디자인 패턴의 용도와 이점을 이해하기- 익명 중첩 클래스의 활용
- 자바에서 제공하는 자료구조 구현체를 활용하는 방법
Command디자인 패턴으로 메서드를 객체화하는 설계 방법Command디자인 패턴의 용도와 이점을 이해하기
- 예외 처리 문법을 사용하는 방법
- 예외 처리 문법의 존재 의미와 이점
- 애플리케이션을 종료한 후에도 계속 데이터를 유지할 방법
- 파일 입출력 API를 활용하여 데이터를 읽고 쓰는 방법
- 파일 입출력 API에 적용된
Decorator디자인 패턴의 특징과 이점
- 바이너리 입출력 스트림 클래스를 사용하여 객체의 필드 값을 바이너리 형식으로 읽고 쓰는 방법
- DataInputStream/DataOutputStream을 사용하는 방법
- 직렬화 하는 방법과 역직렬화 하는 방법
java.io.Serializable인터페이스와serialVersionUID스태틱 변수
- 특정 상태에서 수행되는 코드를 캡슐화하여 분리하는 방법
Observer디자인 패턴의 용도와 이점을 이해하기
- 데이터 관리를 별도의 프로그램으로 분리하기
- 네트워크 API 사용법
- 클라이언트/서버 애플리케이션 아키텍처의 이해
Stateful통신 방식의 특징과 장단점 이해하기- 상속의 일반화(generalization) 기법과 추상 클래스 활용법
Stateless통신 방식으로 전환하기Stateless통신 방식의 특징과 장단점 이해하기
Thread를 활용하여 멀티 스레드 프로그래밍하는 방법- 중첩 클래스의 활용
- 스레드 생성과 수거 비용을 줄이는 방법
- 자바에서 제공하는 클래스를 이용하여 스레드풀을 만들고 사용하기
Object pool디자인 패턴의 용도와 이점 이해하기
- 오픈 소스 DBMS
MariaDB에 데이터베이스와 사용자 추가하는 방법 - 테이블 생성과 예제 데이터 입력하기
- JDBC API를 활용하여 DBMS에 데이터를 입력, 조회, 변경, 삭제하는 방법
- JDBC 프로그래밍 코드를 클래스로 캡슐화하기
- 애플리케이션 기능 변경 후 사용자 PC에 프로그램을 재설치 하지 않고 배포하는 방법
- 애플리케이션 서버 아키텍처를 이해하기
- 여러 개의 DB 변경 작업을 한 작업 단위로 묶는 방법
commit과rollback의 의미
- 여러 스레드가 동시에 같은 DB 커넥션을 사용할 때 발생하는 문제
- DB 커넥션 생성기 활용하여 각각의 SQL 작업을 별개의 DB 커넥션으로 실행하기
- 작업 간에 DB 커넥션을 공유하기 위해 스레드 로컬 변수를 사용하는 방법
- 트랜잭션 관리와 DB 커넥션 객체의 관계
- 트랜잭션 관리자 만들기
Proxy디자인 패턴을 활용하여Connection의 대행자 만들기
- 커넥션풀의 동작 원리와 사용해야 하는 이유
- SQL 삽입 공격과 그 방어법
- Statement와 PreparedStatement 특징 비교
- MyBatis SQL 맵퍼 프레임워크의 특징과 사용법
- MyBatis의 다양한 기능을 사용하는 방법
- 자바에서 제공하는 Proxy 생성기를 활용하여 DAO 구현체를 만드는 방법
MyBatis의SqlSession객체를 이용하여 DAO 구현체를 만드는 방법
- IoC 컨테이너의 개념과 구동 원리
- 리플랙션 API를 활용하여 객체를 생성하는 방법
- 애노테이션을 활용하여 객체에 특별한 주석을 붙이는 방법
- 애노테이션을 정의하고, 사용하고, 추출하는 방법
- 메서드에 애노테이션을 활용하는 방법
- 클래스 문법 활용하기
- 오픈 소스 Spring IoC 컨테이너를 설정하고 사용하는 방법
- MyBatis를 Spring IoC 컨테이너와 연동하는 방법