스프링 부트 3 백엔드 개발자 되기(자바편) week1

Ethan·6일 전
0

1장 - 자바 백엔드 개발자가 알아두면 좋은 지식

서버와 클라이언트

클라이언트

서버로 요청하는 프로그램을 모두 일컬어 말하는 것!
ex) 웹 브라우저
서버로 요청 ? : 주소 입력 후 enter 눌러 정보 요청

서버

클라이언트의 요청을 받아 처리하는 주체

데이터베이스

여러 사람이 데이터를 한 군데에 모아놓고, 여러 사람이 사용할 목적으로 관리하는 데이터 저장소

MySQL, 오라클 등은 데이터베이스를 관리하기 위한 시스템의 이름이다
클라이언트에서 SQL로 데이터베이스 관리 시스템에 데이터 요청
-> 데이터베이스 관리 시스템은 데이터베이스에서 데이터 꺼내 응답!

RDB

가장 많이 사용하는 DB. (Relational Database -> 관계형 데이터베이스)
RDB아닌 데이터베이스 -> NoSQL, NewSQL 로 구분

데이터를 행/열로 이루어진 테이블로 관리
기본 키를 사용해 각 행을 식별한다
각 테이블 간 관계를 지을 수 있다
ex. 오라클, MySQL, SQL 서버

SQL

Structed Query Language

쿼리, 데이터 검색 하는 언어

NoSQL

Not Only SQL
RDB의 단점을 보완(데이터 저장/질의/수정/삭제 용이 BUT, 성능 올리는 게 쉽지 않다)

-> DB의 성능 높이기 : 스케일 업(장비 업그레이드), 스케일 아웃(머신 여러 대로 분리)

  • 스케일 아웃 : DB 분산. 트랜젝션 사용 시 성능이 떨어짐
    이런 단점을 해결해주는 게 NoSQL

아이피와 포트

아이피 : 인터넷에서 컴퓨터/기기들이 서로 식별, 통신하기 위한 주소

(아이피 알면 서버 찾기 가능!)

포트 : 그 서버에서 운용되고 있는 서비스를 구분하기 위한 번호

아이피가 백화점이면 포트는 백화점 내의 매장들

ex)
https://www.naver.com/

www.naver.com -> 아이피 쉽게 알아보기 위한 이름표
https:// -> 서버의 443번 포트 사용을 위한 입력

실행한 Spring boot 서버의 포트 : 8080 (default)

라이브러리와 프레임워크

라이브러리

애플리케이션 개발에 필요한 기능인 클래스, 함수 등 모아놓은 코드의 모음

프레임워크

소프트웨어 개발을 수월하게 하기 위한 SW 개발 환경

정해진 틀 내에서 개발해야 한다는 단점이 있지만 개발 효율이 굉장히 높다는 장점이 있다.

라이브러리 : 개발 과정에서 필요한 기능 구현
프레임워크 : 애플리케이션 개발 시 전체적 구조 잡는 데 사용

자바 애너테이션

JDK 1.5 버전부터 사용 가능

@Override : 선언된 메서드가 오버라이드 됨
@Deprecated : 더 이상 사용되지 않음
@SuppressWarnings : 컴파일 경고를 무시함

2장 - 스프링 부트3 시작하기

스프링의 등장

엔터프라이즈 애플리케이션 : 대규모의 복잡한 데이터를 관리하는 애플리케이션
-> 서버 성능과 안정성, 보안이 매우 중요
=> 스프링 프레임워크의 등장 (서버 성능, 안정성, 보안을 매우 높은 수준으로 제공)

스프링 부트

스프링 : 설명이 매우 복잡 -> 스프링 부트 : 단점 보완해서 등장

스프링, 스프링 부트의 차이점

구성의 차이

스프링 : 애플리케이션 개발에 필요한 환경을 수동으로 구성/정의
스프링 부트 : 스프링 코어, 스프링 WVC의 모든 기능 자동으로 로드

내장 WAS의 유무

스프링 부트는 WAS를 자체적으로 가지고 있음
WAS : 간단히 웹 어플리케이션 실행하기 위한 장치

제어의 역전과 의존성 주입 ⭐

스프링은 모든 기능의 기반 -> 제어의 역전(IoC), 의존성 주입(DI)에 두고 있음

IoC

Inversion of Control

제어의 역전
다른 객체를 직접 생성/제어가 아니라, 외부에서 관리하는 객체를 가져와 사용하는 것

DI

Dependency Injection

의존성 주입

pubic class A{
	//A에서 B를 주입받음
    @Autowired
    B b;
}

위의 코드에서, @Autowired라는 애너테이션은 스프링 컨테이너에 있는 빈이라는 걸 주입하는 역할을 함 (객체 주입!!)

빈 : 스프링 컨테이너에서 관리하는 객체

즉, 자바에서는 class A에서 B의 객체 사용하고 싶을 때 직접 생성했지만,
스프링의 경우, 스프링 컨테이너에서 객체를 주입받아 사용하는 것

빈과 스프링 컨테이너

스프링 컨테이너?

빈을 생성, 관리함
빈의 생명주기를 관리
개발자가 직접@Autowired와 같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원하기도 함

스프링 컨테이너가 생성/관리하는 객체 (스프링의 객체)

위의 코드에서의 B
클래스에 @Component 애너테이션 붙이면 클래스가 빈으로 등록됨 -> 스프링 컨테이너가 관리하게 됨 (빈 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리)

@Component
public class MyBean{
}

관점 지향 프로그래밍(AOP : Aspect Oriented Programming)

관심을 핵심 관점, 부가 관점으로 나눠 관심 기준으로 모듈화하는 것

이식 가능한 서비스 추상화

PSA (Portable Sevice Abstraction)

스프링에서 제공하는 다양한 기술들을 추상화 -> 개발자가 쉽게 사용하는 인터페이스

클라이언트 매핑과 클래스, 메서드의 매핑 위한 애너테이션

스프링에서 DB에 접근 하는 기술 : JPA/MyBatis/JDBC 등 -> 일관된 방식으로 DB에 접근하도록 인터페이스를 지원함
WAS : 코드를 그대로 두고 WAS를 톰켓이 아닌 언더토우/네티 같은 다른 곳에서 실행해도 기존 코드 그대로 사용 가능

한 줄 정리

Spring 프레임워크는 IoC/DI 통해 객체 간 의존 관계 설정
AOP 통해 핵심 관점과 부가 로직을 분리해 개발
PSA 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용

스프링 부트 3 둘러보기

웹 브라우저에서 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 파일에 담겨 있음

스프링 부트 3와 자바 버전

자바 17 이상 사용 -> 자바 17 주요 변화 알아보자!

텍스트 블록

""" 로 감싼 텍스트 사용해 여러 줄 텍스트 표현 가능!

formatted() 메서드

값 파싱 위한 메서드

레코드

데이터 전달 목적으로 하는 객체를 더 빠르고 간편하게 만드는 기능
-> 상속 불가. 파라미터에 정의한 필드는 private final로 정의됨.
-> getter 자동 생성(애너테이션/메서드로 게터 정의 불필요)

패턴 매칭

타입 확인 위해 사용하던 instanceof 키워드를 좀 더 쉽게 사용할 수 있게 해줌

자료형에 맞는 case 처리

switch-case문으로 자료형에 맞게 case 처리 가능

Servlet, JPA의 네임 스페이스가 Jakarta로 대체

패키지 네임스페이스가 javax. -> jakarta. 로 변경됨

GraalVM 기반의 스프링 네이티브 공식 지원

시작 시간, 메모리 오버 헤드 줄일 GraalVM 기반의 스프링 네이티브를 공식 지원(가동시간/메모리 적게 소모)

profile
코딩하는 알파카

0개의 댓글