[Spring] 스프링부트 3 백엔드 개발자 되기
용어 정리
- ORM
jpa - 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
sql이 아닌 자바 언어로 데이터베이스를 조작함
jpa는 인터페이스이므로 실제 스프링 부트에서 사용하려면 ORM 프레임워크를 추가로 선택해야함
실무에서는 대표적으로 하이버네이트를 많이 사용함
- 인증
단순 ID/PW 입력 방식, OAuth2를 활용한 구글 로그인, JWT를 활용한 토큰 인증 방식
- AWS 배포
개발을 마친 후 배포 단계에서 AWS의 일래스틱 빈스토크를 활용하여 블로그를 배포함
EC2, 오토 스케일링 그룹, 로드밸런서, RDS와 같은 AWS의 구성 설명부터 스프링 부트 환경을 제대로 이용하여 AWS에 배포하는 방법
- CI/CD
개발자가 개발을 마치고 애플리케이션을 빌드하고, 테스트하고, 원격 저장소에 코드를 업데이트하고, 이를 배포하는 등 전 과정을 자동화하는 과정을 말함
대부분의 실무 환경에서는 CI/CD를 진행함. 여기서는 깃허브액션을 활용하여 CI/CD를 진행
기본 지식
- 서버와 클라이언트
클라이언트 - 서버로 요청하는 프로그램 ex)웹브라우저
주소를 입력하고 enter : "서버에 요청한다"
서버 - 클라이언트의 요청을 받아 처리하는 주체
클라이언트가 데이터 요청시 데이터를, 서버내에서 처리만 요청시, 해당 요청만 처리
- 데이터베이스
데이터베이스 - 여러 사람이 데이터를 한 군데에 모아놓고 여러 사람이 사용할 목적으로 관리하는 데이터 저장소
MySQL, oracle, postgreSQL 등 : 데이터베이스 관리 시스템 (DBMS)
RDB(relational database) - 행과 열로 이루어진 테이블로 관리, 기본 키를 사용해 각 행 식별
SQL(structured query language) - 쿼리, 데이터 검색을 하는 언어
NoSQL(no SQL or not only SQL)
- 관계형데이터베이스 - 데이터 저장, 질의, 수정, 삭제가 용이 // 성능 향상 어려움 => NoSQL의 등장
- 데이터베이스 성능 향상 <- 머신의 성능을 높이는 스케일 업, 머신을 분리하는 스케일 아웃 필요
- 아이피와 포트
아이피 - 인터넷에서 컴퓨터 또는 기기들이 서로를 식별하고 통신하기 위한 주소
*아이피를 알면 서버를 찾을 수 있음
*서버를 이용하려면 아이피, 포트 알아야함
서버를 찾기 위한 번호 -아이피
그 서버에 운용되고 있는 서비스를 구분하기 위한 번호-포트
- 라이브러리와 프레임워크
라이브러리 - 애플리케이션 개발에 필요한 기능인 클래스,함수를 모아놓은 코드의 모음
프레임워크 - 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경
- 백엔드 개발자의 업무 *서버 측 애플리케이션을 개발
과제할당 - 과제분석 - 개발 - 테스트 - QA - 배포 - 유지보수
스프링 컨셉
- 제어의 역전과 의존성 주입
스프링 - 제어의 역전(IoC) + 의존성 주입(DI) 기반
-IoC(Inversion of Control)
다른 객체를 직접 생성하거나 제어하는 것이 아닌 외부에서 관리하는 객체를 가져와 사용하는 것
public class A{
//b= new B();
private B b;
}
-DI(Dependency Injection)
어떤 클래스가 다른 클래스에 의존하는 것 , IoC를 구현하기 위해 사용하는 방법
public class A{
@Autowired
B b;
}
*스프링 컨테이너에서 객체를 주입받아 사용함
- 빈과 스프링 컨테이너
-스프링 컨테이너
빈을 생성하고 관리함, 애너테이션을 통해 빈을 주입받을 수 있게 DI지원
-빈
스프링 컨테이너가 생성하고 관리하는 객체
- 관점 지향 프로그래밍 AOP
AOP(aspect oriented programming)
부가 로직과 핵심 관점을 분리함
- 이식 가능한 서비스 추상화
PSA(portable service abstraciton)
스프링에서 제공하는 다양한 기술을 추상화해 개발자가 쉽게 사용하도록 하는 인터페이스
= 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것