서버로 요청하는 프로그램을 모두 일컬어 말하는 것!
ex) 웹 브라우저
서버로 요청 ? : 주소 입력 후 enter 눌러 정보 요청
클라이언트의 요청을 받아 처리하는 주체
여러 사람이 데이터를 한 군데에 모아놓고, 여러 사람이 사용할 목적으로 관리하는 데이터 저장소
MySQL, 오라클 등은 데이터베이스를 관리하기 위한 시스템의 이름이다
클라이언트에서 SQL로 데이터베이스 관리 시스템에 데이터 요청
-> 데이터베이스 관리 시스템은 데이터베이스에서 데이터 꺼내 응답!
가장 많이 사용하는 DB. (Relational Database -> 관계형 데이터베이스)
RDB아닌 데이터베이스 -> NoSQL, NewSQL 로 구분
데이터를 행/열로 이루어진 테이블로 관리
기본 키를 사용해 각 행을 식별한다
각 테이블 간 관계를 지을 수 있다
ex. 오라클, MySQL, SQL 서버
Structed Query Language
쿼리, 데이터 검색 하는 언어
Not Only SQL
RDB의 단점을 보완(데이터 저장/질의/수정/삭제 용이 BUT, 성능 올리는 게 쉽지 않다)
-> DB의 성능 높이기 : 스케일 업(장비 업그레이드), 스케일 아웃(머신 여러 대로 분리)
(아이피 알면 서버 찾기 가능!)
아이피가 백화점이면 포트는 백화점 내의 매장들
www.naver.com -> 아이피 쉽게 알아보기 위한 이름표
https:// -> 서버의 443번 포트 사용을 위한 입력
실행한 Spring boot 서버의 포트 : 8080 (default)
애플리케이션 개발에 필요한 기능인 클래스, 함수 등 모아놓은 코드의 모음
소프트웨어 개발을 수월하게 하기 위한 SW 개발 환경
정해진 틀 내에서 개발해야 한다는 단점이 있지만 개발 효율이 굉장히 높다는 장점이 있다.
라이브러리 : 개발 과정에서 필요한 기능 구현
프레임워크 : 애플리케이션 개발 시 전체적 구조 잡는 데 사용
JDK 1.5 버전부터 사용 가능
@Override : 선언된 메서드가 오버라이드 됨
@Deprecated : 더 이상 사용되지 않음
@SuppressWarnings : 컴파일 경고를 무시함
엔터프라이즈 애플리케이션 : 대규모의 복잡한 데이터를 관리하는 애플리케이션
-> 서버 성능과 안정성, 보안이 매우 중요
=> 스프링 프레임워크의 등장 (서버 성능, 안정성, 보안을 매우 높은 수준으로 제공)
스프링 : 설명이 매우 복잡 -> 스프링 부트 : 단점 보완해서 등장
스프링 : 애플리케이션 개발에 필요한 환경을 수동으로 구성/정의
스프링 부트 : 스프링 코어, 스프링 WVC의 모든 기능 자동으로 로드
스프링 부트는 WAS를 자체적으로 가지고 있음
WAS : 간단히 웹 어플리케이션 실행하기 위한 장치
스프링은 모든 기능의 기반 -> 제어의 역전(IoC), 의존성 주입(DI)에 두고 있음
Inversion of Control
제어의 역전
다른 객체를 직접 생성/제어가 아니라, 외부에서 관리하는 객체를 가져와 사용하는 것
Dependency Injection
의존성 주입
pubic class A{
//A에서 B를 주입받음
@Autowired
B b;
}
위의 코드에서, @Autowired라는 애너테이션은 스프링 컨테이너에 있는 빈이라는 걸 주입하는 역할을 함 (객체 주입!!)
빈 : 스프링 컨테이너에서 관리하는 객체
즉, 자바에서는 class A에서 B의 객체 사용하고 싶을 때 직접 생성했지만,
스프링의 경우, 스프링 컨테이너에서 객체를 주입받아 사용하는 것
빈을 생성, 관리함
빈의 생명주기를 관리
개발자가 직접@Autowired와 같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원하기도 함
스프링 컨테이너가 생성/관리하는 객체 (스프링의 객체)
위의 코드에서의 B
클래스에 @Component 애너테이션 붙이면 클래스가 빈으로 등록됨 -> 스프링 컨테이너가 관리하게 됨 (빈 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리)
@Component
public class MyBean{
}
관심을 핵심 관점, 부가 관점으로 나눠 관심 기준으로 모듈화하는 것
PSA (Portable Sevice Abstraction)
스프링에서 제공하는 다양한 기술들을 추상화 -> 개발자가 쉽게 사용하는 인터페이스
클라이언트 매핑과 클래스, 메서드의 매핑 위한 애너테이션
스프링에서 DB에 접근 하는 기술 : JPA/MyBatis/JDBC 등 -> 일관된 방식으로 DB에 접근하도록 인터페이스를 지원함
WAS : 코드를 그대로 두고 WAS를 톰켓이 아닌 언더토우/네티 같은 다른 곳에서 실행해도 기존 코드 그대로 사용 가능
Spring 프레임워크는 IoC/DI 통해 객체 간 의존 관계 설정
AOP 통해 핵심 관점과 부가 로직을 분리해 개발
PSA 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용
웹 브라우저에서 http://localhost:8080/test로 접속
클라이언트에서 보낸 /test GET 요청 보면 됨
의존성이 모여 있는그룹
spring-boot-starter-{작업유형} 이라는 명명규칙이 있음
JDBC 관련 스타터 : spring-boot-starter-jdbc
자주 사용하는 스타터 모음
스타터 설명
1. spring-boot-starter-web Spring MVC 사용 -> RESTful 웹 서비스 개발 시 필요한 의존성 모음
2. spring-boot-starter-test 스프링 애플리케이션을 테스트하기 위해 필요한 의존성 모음
3.spring-boot-starter-validation 유효성 검사 위해 필요한 의존성 모음
4. spring-boot-starter-actuator 모니터링을 위해 애플리케이션에서 제공하는 다양한 정보를 제공하기 쉽게 하는 의존성 모음
5. spring-boot-starter-data-jpa ORM 사용하기 위한 인터페이스의 모음인 JPA를 더 쉽게 사용하기 위한 의존성 모음
스프링 부트 : 애플리케이션이 최소 설정으로 실행되게 여러 부분을 자동으로 구성함 -> 개발 하다가, 내가 구성하지 않았는데 Spring에서 어떻게 자동 구성했는지 확인할 상황이 옴
스프링 부트는 server를 시작할 때 구성 파일 읽어와서 설정함 (자동 설정)
-> META-INF 에 있는 spring.factories 파일에 담겨 있음
자바 17 이상 사용 -> 자바 17 주요 변화 알아보자!
""" 로 감싼 텍스트 사용해 여러 줄 텍스트 표현 가능!
값 파싱 위한 메서드
데이터 전달 목적으로 하는 객체를 더 빠르고 간편하게 만드는 기능
-> 상속 불가. 파라미터에 정의한 필드는 private final로 정의됨.
-> getter 자동 생성(애너테이션/메서드로 게터 정의 불필요)
타입 확인 위해 사용하던 instanceof 키워드를 좀 더 쉽게 사용할 수 있게 해줌
switch-case문으로 자료형에 맞게 case 처리 가능
패키지 네임스페이스가 javax. -> jakarta. 로 변경됨
시작 시간, 메모리 오버 헤드 줄일 GraalVM 기반의 스프링 네이티브를 공식 지원(가동시간/메모리 적게 소모)