Skip to content

seunpark06/-1.SpringBoot_BlogExam_book

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 

Repository files navigation

1. 서버와 클라이언트

클라이언트란?

  • 서버로 요청하는 프로그램을 모두 일컬어 말함
  • ex) 웹 브라우저

서버란?

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

2. 데이터베이스

RDB란?

  • Relation Database의 약자로, 관계형 데이터베이스라는 뜻
  • RDB가 아닌 데이터베이스를 NoSQL 또는 NewSQL로 구분함
  • 관계형 데이터베이스는 데이터를 행(row)과 열(column)로 이루어진 테이블로 관리하며, 기본 키(primary key)를 사용해 각 행을 식별함

SQL이란?

  • Structured Query Language의 약자로, 쿼리, 즉 데이터 검색을 하는 언어
  • ANSI 표준 SQL이 있고, 각 RDB별로 방언이 있음

NoSQL이란?

  • SQL을 안 쓴다는 의미로 사용되기도 하나, 최근에는 Not Only SQL의 의미로 많이 사용함
  • RDB는 데이터 저장, 질의, 수정, 삭제가 용이하나 성능을 올리는 게 쉽지 않음
  • 데이터베이스의 성능을 높이려면 머신의 성능을 좋게 하는 스케일 업 혹은 머신을 여러 대로 분리하는 스케일 아웃이라는 것이 필요
  • 스케일 업은 장비를 업그레이드 하면 되지만, 스케일 아웃은 데이터베이스를 분산하고, 이때 트랜잭션을 사용하면 성능이 떨어지게 됨
  • RDB의 이런 문제들을 해결하기 위해 NoSQL이 등장

3. IP와 포트

IP란?

  • 아이피는 인터넷에서 컴퓨터 또는 기기들이 서로를 식별하고 통신하기 위한 주소
  • 아이피를 알면 서버를 찾을 수 있음

포트란?

  • 그 서버에서 운용되고 있는 서비스를 구분하기 위한 번호
  • 서버를 이용하려면 아이피만 알아서는 안 되며, 포트 번호까지 알아야 함

4.라이브러리와 프레임워크

라이브러리란?

  • 라이브러리는 애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드의 모음
  • 개발자가 소프트웨어를 만들 때 필요에 따라 원하는 기능을 구현하기 위해 코드의 모음을 가져다 쓸 수 있는 일종의 도구 역할
  • 라이브러리는 독립적이므로 라이브러리끼리 영향을 크게 주지 않음

프레임워크란?

  • 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경
  • 프레임워크는 정해진 틀에서 개발해야 한다는 단점이 있지만 개발 효율은 높다는 장점이 있음

라이브러리 vs 프레임워크

  • 라이브러리와 프레임워크는 개발자가 소프트웨어를 개발하기 위해 사용하는 도구이지만 사용 목적에 따라 차이가 있음
  • 프레임워크는 애플리케이션을 개발할 때 전체적인 구조를 잡기 위해 사용하는 것이고, 라이브러리는 개발을 하는 과정에서 필요한 기능을 구현하기 위해 사용함

5. 애너테이션

애너테이션이란?

  • 자바 애너테이션은 자바로 작성한 코드에 추가하는 표식을 말함
  • @ 기호를 사용하며, 다양한 목적으로 사용하지만 보통은 메타데이터로 사용하는 경우가 많음
public class A extends B {
    @Override
    public void print(){
        System.out.println("Hello, World!");
    }
}

6. 스프링과 스프링부트

스프링의 등장

  • 스프링 프레임워크는 서버 성능, 안정성, 보안을 높은 수준으로 제공하는 도구
  • 스프링 프레임워크의 등장으로 개발자들은 기능 개발에 집중할 수 있게 됨 (비즈니스 로직)

스프링 부트

  • 스프링 부트는 스프링에 속한 도구
  • 스프링은 장점이 많은 개발 도구이지만, 설정이 매우 복잡하다는 단점이 있음
  • 스프링부트는 스프링 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구
  • 빠르게 스프링 프로젝트를 설정할 수 있고 의존성 세트라고 불리는 스타터를 사용해 간편하게 의존성을 사용하거나 관리 가능
  • 개발자가 조금 더 비즈니스 로직 개발에만 집중할 수 있도록 만들어주는 도구

스프링부트의 특징

  • 톰캣, 제티, 언더토우 같은 웹 애플리케이션 서버(WAS)가 내장되어 있어 따로 설치하지 않아도 독립적으로 실행 가능
  • 빌드 구성을 단순화하는 스프링 부트 스타터 제공
  • XML 설정을 하지 않고 자바 코드로 모두 작성 가능
  • JAR를 이용해서 자바 옵션만으로도 배포가 가능
  • 애플리케이션의 모니터링 및 관리 도구인 스프링 액츄에이터(Spring actuator) 제공

스프링 vs 스프링부트

  1. 구성의 차이
  • 스프링은 애플리케이션 개발에 필요한 환경을 수동으로 구성하고 정의해야 함
  • 스프링부트는 스프링 코어와 스프링 MVC의 모든 기능을 자동으로 로드함
  1. 내장 WAS의 유무
  • 스프링부트는 WAS를 자체적으로 가지고 있음
  • 따라서 jar파일만 만들면 별도의 WAS 설정을 하지 않아도 애플리케이션 실행 가능
  • 스프링은 프로젝트를 띄우는 서버를 별도로 수동 설정해야 함

스프링 콘셉트

제어의 역전과 의존성 주입

IoC란?

  • IoC는 Inversion of Control을 줄인 표현
  • 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것을 말함
  • 스프링은 스프링 컨테이너가 객체를 관리, 제공하는 역할을 함

자바 코드를 작성해 객체를 생성하는 예

public class A {
    b = new B() // class A에서 new 키워드로 class B의 객체 생성
}

스프링 컨테이너가 객체를 관리하는 방식 예

public class A {
    private B b; //코드에서 객체를 생성하지 않고, 어디선가 받아온 객체를 b에 할당
}

DI란?

  • 제어의 역전을 구현하기 위해 사용하는 방법이 DI(Dependency Injection)
  • DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻

IoC/DI를 기초로 하는 스프링 코드 예

public class A {
    //A에서 B를 주입받음
    @Autowired
    B b;
}
  • @Autowired라는 애너테이션은 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할
  • 빈은 쉽게 말해 스프링 컨테이너에서 관리하는 객체를 말함
  • 이전 코드에서는 개발자가 직접 B 객체를 생성했지만 이번 코드는 어딘가에서 B b;라고 선언했을 뿐 직접 객체를 생성하지는 않고 객체를 주입받고 있음
  • 이렇게 작성해도 프로그램이 잘 동작하는 이유는 스프링 컨테이너라는 곳에서 객체를 주입

AOP란

  • 관점 지향 프로그래밍
  • 프로그래밍에 대한 관심을 핵심, 부가 관점으로 나눠서 모듈화하는 것

PAS란

  • 이식 가능한 서비스 추상화
  • 추상화된 서비스들을 일관된 방식으로 사용하게 함
  • 예) 애너테이션 (클래스, 메서드의 매핑), WAS

참고) 애너테이션

  • @SpringBootConfiguration
  • 스프링 부트 관련 설정을 나타내는 애너테이션
  • @ComponentScan
  • 사용자가 등록한 빈을 읽고 등록하는 애너테이션
  • @Repository : ORM 매핑
  • @Controller, @Restcontroller : 라우터 -> HTTP 요청과 메서드 연결
  • @ Service: 비즈니스 로직

7. 스프링부트 3 구조

  • 프레젠테이션, 비즈니스, 퍼시스턴스 계층이 서로 통신하며 프로그램을 구성함
  • 프레젠테이션 계층 : HTTP 요청을 받아서 비즈니스 계층으로 전송하는 역할 : 컨트롤러
  • 비즈니스 계층 : 비즈니스 로직 처리 : 서비스
  • 퍼시스턴스 계층 DB관련 로직: DAO, 리포지토리

8. 테스트 코드

  • 코드의 기능이 제대로 작동하는지 검증
  • 테스트를 준비하는 given, 실제로 테스트를 진행하는 when, 테스트 결과를 검증하는 then으로 구분됨
  • 단위 테스트를 할 때 사용하는 자바 테스트 프레임워크 JUnit
  • @BeforeAll -> @BeforeEach -> @Test -> @AfterEach -> @AfterAll 생명주기를 가지고 실행함
  • AssertJ는 JUnit과 함께 사용해 가독성을 높여주는 라이브러리

9. 데이터베이스

  • 데이터베이스를 관리하기 위한 소프트웨어 : DBMS
  • 테이블 형태로 이루어진 데이터 저장소 : RDBMS
  • ORM: 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published