자바는 객체 지향 언어로, 백엔드 시스템의 논리를 구현하는 핵심 도구입니다.
소프트웨어를 '객체'들의 집합으로 보고, 이 객체들이 서로 상호작용하도록 설계하는 방식입니다.
캡슐화 (Encapsulation):
상속 (Inheritance):
다형성 (Polymorphism):
List<String> list = new ArrayList<>(); 또는 new LinkedList<>();)추상화 (Abstraction):
abstract 키워드(추상 클래스)나 interface(인터페이스)를 통해 구현합니다.현대 Java 개발에서 데이터를 효율적으로 다루기 위한 필수 기능입니다.
(매개변수) -> { 실행 코드 } 형태로 작성됩니다.list.stream().filter(s -> s.startsWith("A")).map(String::toUpperCase).collect(Collectors.toList());데이터 그룹을 저장하고 관리하는 표준화된 방식입니다.
List (인터페이스): 순서가 있고, 데이터 중복을 허용합니다.ArrayList: 내부적으로 '배열'을 사용합니다. 특정 인덱스의 데이터를 조회(get)할 때 빠릅니다. 하지만 중간에 데이터를 삽입/삭제할 때 느립니다.LinkedList: 내부적으로 '노드 연결'을 사용합니다. 중간에 데이터를 삽입/삭제할 때 빠릅니다. 하지만 특정 데이터를 조회할 때 느립니다.Set (인터페이스): 순서가 없고, 데이터 중복을 허용하지 않습니다.HashSet: HashMap을 기반으로 만들어져, 가장 빠른 성능(검색, 삽입)을 보입니다.Map (인터페이스): Key-Value 쌍으로 데이터를 저장합니다. Key는 중복될 수 없습니다.HashMap: Set과 마찬가지로 해싱(Hashing)을 사용하여 데이터를 저장하므로 검색/삽입 속도가 매우 빠릅니다. (Key의 hashCode(), equals()가 중요)자바 코드를 실행하는 '가상 머신'입니다. "Write Once, Run Anywhere (한 번 작성하면, 어디서든 실행된다)"를 가능하게 합니다.
new 키워드로 생성된 객체(인스턴스)가 저장되는 공간입니다. 모든 스레드가 공유합니다.Java를 이용한 웹 애플리케이션 개발을 쉽고 빠르며 강력하게 만들어주는 '프레임워크'입니다.
스프링의 가장 핵심적인 철학이자 기능입니다.
Car car = new KoreaTire(); 처럼 개발자가 직접 객체를 생성했지만, 이제는 스프링이 객체를 생성하고 관리합니다.@Autowired (필드 주입), 생성자 주입, Setter 주입 등이 있습니다. (생성자 주입이 가장 권장됩니다.)Car 클래스가 KoreaTire라는 구체적인 구현을 몰라도 Tire라는 인터페이스만 알면 되므로, 코드가 유연해지고 테스트하기 쉬워집니다.웹 애플리케이션을 만들 때 사용하는 'Model-View-Controller' 디자인 패턴 기반의 프레임워크입니다.
DispatcherServlet (중앙 관제소): 모든 요청을 가장 먼저 받아서 처리할 컨트롤러를 찾습니다.HandlerMapping: 요청된 URL에 매핑되는 @Controller를 찾아냅니다.@Controller (컨트롤러): 실제 비즈니스 로직을 처리하고, 데이터를 가공(Model)한 뒤, 어떤 화면(View 이름)을 보여줄지 DispatcherServlet에 반환합니다.ViewResolver: 컨트롤러가 반환한 View 이름을 기반으로 실제 View 파일을 찾습니다.View (응답): 데이터를 HTML(JSP, Thymeleaf)이나 JSON(Rest API) 형태로 렌더링하여 Client에게 최종 응답을 보냅니다.API를 설계하는 스타일 중 하나로, '자원(Resource)'을 'URI'로 표현하고 '행위(Verb)'를 'HTTP Method'로 정의하는 방식입니다.
/users/1 (1번 유저)GET (조회): /users/1 (1번 유저 정보 조회)POST (생성): /users (새로운 유저 생성)PUT / PATCH (수정): /users/1 (1번 유저 정보 수정)DELETE (삭제): /users/1 (1번 유저 삭제)DB 작업을 SQL 쿼리 없이 '자바 객체'로 처리할 수 있게 해주는 기술입니다.
@Entity: 이 자바 클래스가 DB 테이블과 매핑된다고 알려줍니다.Repository: JpaRepository 인터페이스를 상속받으면, save(), findById(), findAll(), delete() 등 기본적인 CRUD 쿼리를 메소드 호출만으로 실행할 수 있습니다.EAGER 대신 LAZY + BatchSize 설정 등으로 해결합니다.스프링 기반 애플리케이션의 '보안(인증, 인가)'을 담당하는 강력한 프레임워크입니다.
데이터를 체계적으로 저장, 관리, 검색하는 시스템입니다.
데이터를 정해진 스키마(구조)에 따라 '테이블' 형태로 저장하며, 테이블 간의 '관계'를 통해 데이터를 관리합니다. (예: MySQL, PostgreSQL)
여러 테이블에 흩어져 있는 데이터를 '관계'를 이용해 하나로 합쳐서 가져오는 SQL 명령어입니다.
INNER JOIN (내부 조인): 두 테이블에 모두 공통적으로 존재하는 데이터(교집합)만 가져옵니다.OUTER JOIN (외부 조인):LEFT JOIN: 왼쪽 테이블의 데이터는 모두 가져오고, 오른쪽 테이블은 매칭되는 데이터만 가져옵니다. (매칭 안 되면 NULL)RIGHT JOIN: 오른쪽 테이블의 데이터는 모두 가져오고, 왼쪽 테이블은 매칭되는 데이터만 가져옵니다.데이터베이스의 검색(SELECT) 속도를 획기적으로 향상시키는 자료 구조입니다. (책의 '찾아보기'와 동일)
WHERE 절이나 ORDER BY 절을 사용한 검색 시 매우 빠릅니다.INSERT, UPDATE, DELETE 시 인덱스 테이블도 함께 수정해야 하므로 쓰기 속도는 느려집니다.'전부 성공하거나, 전부 실패해야 하는' 쪼갤 수 없는 논리적인 작업 단위입니다. (예: 계좌 이체 - A 출금, B 입금)