코틀린 백엔드 프로젝트 2기 - 1주차

1주차에서 학습한 내용의 범위는 섹션2 ~ 섹션3 6 까지의 내용이다.

 

섹션 2 에서 학습한 내용은 Spring웹 프레임워크, HTTP, REST API, DBMS, JPA 에 관한 부분이다.

 

Spring

웹 프레임워크로서 동적 웹 개발을 도와주는 도구이다 백엔드에서 사용되는 다양한 종류의 프레임워크가 있는데 그 중 자바 진영에서 가장 많은 발전을 해왔고 가장 유명한 프레임워크가 바로 spring 프레임워크이다.

스프링 프레임워크는 MVC 패턴을 주로 사용하는데

사용자의 데이터를 모델에 담기 위해 작업을 하는 controller

사용자의 데이터를 담아두는 model

담긴 데이터를 꺼내와 사용자에게 보여주는 view

이 3가지를 MVC 라고 한다.

스프링은 controller - service - repository의 레이어드 아키텍쳐를 기반으로 개발을 한다.

컨트롤러는 클라이언트로부터 전달받은 데이터를 검증하는 인터페이스로 서비스 레이어를 호출한다.

서비스 레이어는 프로젝트 목적에 맞는 비즈니스 로직을 처리하는 레이어이며 리포지토리를 호출하여 여러가지 삽입, 조회, 수정, 삭제를 실행한다.

리포지토리는 데이터베이스에 접근하여 서비스로직이 호출한 기능을 수행한다.

 

HTTP

네트워크를 통해 통신할때 지켜지는 통신 규약으로 다양한 요청 메서드를 통해서 API 호출을 할 수 있다. GET, POST, PUT, PATCH, DELETE의 메서드를 사용하며 각 메서드는 REST API의 행위로서 사용이 됩니다.

 

REST API

HTTP 통신을 하는 어플리케이션간의 규칙이며 강제성을 띄지는 않지만 핵심적인 내용으로 URL을 통한 자원의 표현, HTTP 메서드를 통해 행위를 표현하며 HATEOS를 준수하여 클라이언트의 행위 가이드가 되어줍니다.

 

DB

여러 사용자가 공유하기 위한 목적으로 사용되는 통합, 관리데이터의 집합으로 DBMS를 통해서 데이터들을 관리할 수 있습니다. 가장 널리 쓰이는 관계형데이터베이스를 통해 강의를 진행할 예정이며 관계형 데이터베이스는 테이블을 통해 저장을 합니다.

 

JPA

Java Persistence API의 약자로 자바 ORM 기술의 표준 인터페이스입니다. 자바 또는 코틀린으로 생성된 객체를 데이터베이스의 테이블로 매핑하여 사용해주고 그 필드들을 컬럼으로 매핑해줍니다.

ORM 기술을 사용하여 개발자가 직접 쿼리를 작성하지 않게 해줍니다. ORM기술은 특정 데이터베이스에 종속적이지 않은 사용이 가능하며 다양한 DBMS로 변환이 가능하고 데이터를 객체 중심적으로 볼 수 있어 유지보수에 유리합니다.

단점으로 복잡한 쿼리를 작성하는 상황에서의 한계점, 성능 최적화가 이루어 지지 않은 점, 그리고 초기 학습 곡선이 크다는 점입니다.

ORM은 많은 개념과 설정이 필요하기 때문에 학습에 많은 시간이 소요됩니다

 

영속성 컨텍스트

JPA에서 엔티티를 관리하는 임시 메모리의 개념이다.

특징

  • 1차 캐시

    • 영속성 컨텍스트는 DB에서 조회한 엔티티를 1차캐시에 저장합니다.

    • 동일한 트랜잭션의 동일한 쿼리일경우 1차캐시의 엔티티를 반환합니다. 이로인해 성능을 향상시킵다

  • 더티체킹(변경감지)

    • 영속성 컨텍스트에 저장(스냅샷), 트랜잭션 진행 중 엔티티의 필드 변화 시 현재 상태와 저장된 스냅샷을 비교

    • 변경이 감지되면 트랜잭션이 종료되기전 해당 필드에 update 쿼리를 실행하고 커밋 시점에 해당 쿼리를 DB에 전송

  • 지연로딩(쓰기지연, Lazy Loading)

    • 실제로 필요한 시점까지 데이터를 조회하지 않고 대기하는 방식

    • 해당 엔티티가 실제로 사용될 때 DB에서 가져오는 방법

      • 멤버 객체 내부에 소속이라는 객체가 존재한다고 가정

      • 맴버를 조회할 때는 소속 객체를 로드하지 않음

      • 맴버의 소속을 조회하는 시점이 되어야만 로드를 함

  • 동일성 보장

    • 같은 트랜잭션 안에서 같은 엔티티에 대하여 동일한 객체를 보장한다.

      • 1차 캐시와 연관이 있는것 같음, 동일 엔티티를 여러번 조회하여도 동일한 객체를 반환함

 

1주차의 섹션 3 학습내용은 6강까지의 강의를 수강하였습니다.

https://start.spring.io 사이트를 통해서 프로젝트를 생성하였고 git, github를 이용하여 프로젝트 진행 사항을 관리할 수 있게 세팅하였습니다.

프로젝트의 클래스들을 생성하면서 각 클래스 엔티티에 @Id, @GeneratedValue, @ olumn 등 데이터베이스에서 인지할 수 있는 어노테이션들을 학습하였고

추상클래스에는 @MappedSuperClass 어노테이션을 선언하여 클래스를 상속받는 클래스들의 필드를 테이블의 컬럼으로 사용할 수 있게 해주었습니다.

댓글을 작성해보세요.

채널톡 아이콘