inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

인프런 워밍업 클럽 2기 - 백엔드 프로젝트 (Spring, Kotlin) 1주차 발자국

river_bori
0

일주일간 학습한 내용 요약

웹 개발 기본과 프로젝트 준비

웹 서비스를 구성하는 요소

클라이언트(브라우저, 서버컴 중 요청쪽 등) - 서버(응답주체, CRUD작업, 서버컴퓨터 집합인 클러스터를 구성) - DB(DBMS)

DBMS 서버의 IP주소는 인터넷 세팅을 할때 등록해서 컴퓨터에 알려줘야 한다.

웹 프레임워크와 Spring

웹 프레임워크: 동적 웹 서비스 개발을 편리하게 만들어주는 도구

프레임워크 vs 라이브러리 -> 제어의 주도권 차이

프레임워크: DIY 가구 키트 - 사용자가 틀 안에서 주어진 것을 활용하여 원하는 것을 만드는 것

라이브러리: 공구 상자 - 사용자가 주도권을 가지고 원하는 것을 만듦

Spring Framework: Java기반의 웹 프레임워크, 웹 서버 개발의 상당 부분을 편리하게 모듈화 해놓음

View: 사용자와 상호작용

Controller: 요청받아 작업을 수행

Model: 데이터 담는다. View는 데이터를 꺼내고, Controller는 데이터를 넣는다.

 디자인 패턴? 경험적으로 특정 문제 상황을 해결하기에 최적이라고 생각되는 설계, 방법론.

코드의 가독성, 유지보수성, 결합도, 응집도 등을 고민 하며 최적화된 코드를 작성하는 자세가 중요

MVC의 컨트롤러와 분리

Controller(Presentation) - Service(Business) - Repository(Data Access) 각 레이어 별 역할 분리
컨트롤러: 사용자와 상호작용
서비스: 주요 로직 처리
레파지토리: DB와의 상호작용

스프링Bean: 스프링에서 관리하는 인스턴스

어플리케이션 동작에 필요한 클래스들을 개발자가 직접 만들지 않고 스프링이 만들어서 관리하도록 위임한다. "제어의 역전 IoC(Inversion of Control)" 제어의 주체가 개발자가 아닌 프레임 워크가 되었다.

스프링부트에서는 어노테이션으로 간단하게 스프링 빈을 정의해서 스프링이 그 인스턴스를 만들게 할 수 있다. (컨트롤러,서비스,레파지토리,컴포넌트 등의 어노테이션)

스프링 실행 - 컴포넌트 스캔 - 클래스들을 하나하나 살피면서 어노테이션이 있으면 Bean으로 만듦(인스턴스를 만들어 빈으로 등록)

의존성 주입(DI)는 역제어(IoC)의 한 형태
레퍼지토리를 서비스에 넣어주고, 서비스를 컨트롤러에 넣어주고..의존성 주입


"주입"은 의존성(서비스)를 사용하려는 객체(클라이언트)로 전달하는 것.
어떤 서비스를 호출하려는 클라이언트는 그 서비스가 어떻게 구성되었는지 알지 못해야 한다.
의존성 주입의 의도는 객체의 생성과 사용의 관심을 분리하는 것. 이는 가독성과 코드 재사용을 높혀줌.
클래스는 더 이상 객체 생성에 대한 책임이 없음.
라이언트의 생성에 대한 의존성을 클라이언트의 행위로부터 분리
"매개변수 전달"과 동일하게 동작한다. 주입으로써 "파라미터 전달"은 클라이언트를 세부 사항과 분리하기 위해 수행되고 있는 부가적인 의미를 전달

의존성 주입은 네 가지 역할을 담당하는 객체 및 인터페이스를 전제로 한다.

비유하자면,

사용될 수 있는 모든 객체는 서비스로 여겨진다. 다른 객체를 사용하는 모든 객체는 클라이언트 여겨진다.

[위키백과]


  1. 생성자(costructor) 주입

  2. 수정자(setter) 주입

  3. 필드(Field) 주입

추가 공부 필요 - 이해가 안됨

생성자 주입 방식을 권장

HTTP와 REST API

HTTP: 네트워크로 통신하는 두 컴포넌트 간 통신규약

HTTP 요청/응답

HTTP 요청메서드

HTTP 상태 코드

--> 응답코드는 서버 개발자가 정한다.

Http는 규약이지만 자유도가 높은 규약이다.

REST API: URL도 개발자가 정하기 나름이지만, 일종의 표준처럼 사용하는 아키텍처(기억 장치의 주소 방식)로 REST API를 사용한다.
* 아키텍처: 기능 면에서 본 컴퓨터의 구성 방식. 기억 장치의 주소 방식, 입출력 장치의 채널 구조 따위

REST API의 핵심

클라이언트에서 서버로 데이터 전달 방법

코딩 컨벤션: 코딩을 하는 프로그래머 사이의 규칙 규약, 읽고 관리하기 쉬운 코드 작성을 위한 코딩 스타일 규약

데이터베이스란

DBMS: 데이터를 체계적으로 관리하기 위한 프로그램

관계형 DB(RDBMS): 행과 열로 이루어진 표의 형태

비관계형 DB: 관계형DB를 제외한 모든 종류의 DB(키-값형, 문서형 등)

 

JPA란

JAP: Java Persistence API, 자바 ORM 기술의 표준 인터페이스, Java의 객체관계형DB의 테이블로 또는 그 반대로 변환해주는 기능/맵핑을 해주는 라이브러리

ORM: Object Relational Mapping, 객체 관계 매핑, 객체지향 프로그래밍의 인스턴스관계형DB를 매핑해주는 기술

ORM의 장점

ORM의 단점

트랜잭션: 데이터베이스의 개념, 여러 DB 작업을 하나로 묶는 논리적 단위(계좌이체 예시)

영속성 컨텍스트: 어플리케이션의 로직과 DB 사이에 있는 임시 메모리 또는 버퍼 공간

영속성 컨텍스트 처리과정

  1. 데이터 조회시 1차 캐시라는 곳에서 해당 데이터가 있는지 먼저 확인 -> 데이터 없으면 DB로 조회쿼리 날림

  2. 1차 캐시(엔티티1)에 조회한 데이터를 저장 -> 엔티티1 상태를 스냅샷 저장

  3. 그 후 또 같은 엔티티 조회시 DB까지 쿼리가 날라가지 않고 1차 캐시에 있는 데이터를 그대로 가져감(쿼리 날리는 과정이 생략)

영속성 컨텍스트 더티체킹(변경감지)

  1. 데이터 처음 조회 시 처음 상태를 스냅샷 저장 후 영속성 컨텍스트가 종료될 때 현재 있는 엔티티1와 엔티티1스냅샷을 비교

  2. 두개가 다를 경우 업데이트가 있다고 JPA가 판단하고 알아서 쿼리를 작성해 DB에 전송함.

영속성 컨텍스트 쓰기 지원

  1. 한 트랜잭션 안에서 for문을 가지고 1~100까지 데이터를 insert할 때,

  2. for문 반복이 수행될 때마다 DB로 insert 쿼리를 전송하지 않고, 영속성 컨텍스트에 저장할 데이터를 넣어 뒀다가 트랜잭션 종료될 시점에 한번에 모든 쿼리를 날림

  3. 때문에 JPA로 insert를 날린 시점과 log에서 insert, update 쿼리가 찍히는 시점이 차이가 날 수 있다.

영속성 컨텍스트 플러시(Flush)

패키지 구조

[패키지 구조]

패키지: 연관된 자바파일들을 묶어주는 디렉토리(폴더)

각 패키지의 하위 패키지 => 다양한 방법론 중 하나의 구조다.

테이블 설계(명세)

메인페이지(=index page) 사용 테이블

Resume 페이지 사용 테이블

Projects 페이지 사용 테이블

기타

개발 환경 구성

윈도우 사용자는 이 강의를 스킵하고 강의자료로 진행

백엔드 SpringBoot Kotlin Web

답변 0