inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[Inf-WUP] 1주차 발자국

KUMU
0

웹 서비스를 구성하는 요소

클라이언트

서버

데이터베이스

웹 서비스 실행 과정

  1. DNS 서버(전화번호부와 같은 역할. 주소를 다 갖고 있음)에서 도메인 전송

  2. DNS 서버가 도메인에 해당하는 IP 주소 찾아 알려줌

  3. 해당 IP로 요청. 일반적으로 HTTP 통신. 이때 서버가 작업 처리를 위한 필요 데이터를 함께 전달

  4. 작업 처리 (DB 삽입, 조회, 수정, 삭제 등)

  5. DB는 서버가 요청한 결과 반환

    1. 조회 : 조회된 데이터 전달

    2. 삽입, 수정, 삭제 : 작업의 성공 여부 응답

  6. 서버는 클라이언트에게 작업 수행 결과 응답. 웹 브라우저가 화면으로 표현할 수 있는 HTML 포맷의 데이터 전달, 사전에 클라이언트와 협의된 규격의 데이터 전달

 


웹 프레임워크와 Spring

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

백엔드

프론트엔드

프레임워크 vs 라이브러리; '제어의 주도권'

 

Spring Framework; Java 기반의 웹 프레임워크

MVC 패턴(Model-View-Controller)

레이어드 아키텍처(Controller-Service-Repository)

Spring Bean과 의존성 주입(Dependency Injection)

@Service
class PresentationService(
    private val presentationRepository: PresentationRepository
){ //생략 }
@Service
class PresentationService{
    private val presentationRepository: PresentationRepository

    constructor(presentationRepository: PresentationRepository) {
        this.presentationRepository = presentationRepository
    }
    //생략
}
@Service
class PresentationService{
    private lateinit var presentationRepository: PresentationRepository

    //서비스 인스턴스, 레포지토리 인스턴스를 다 만들어 둠
    //이후 실행 시 Autowired 인스턴스 찾아서 행동함
    @Autowired
    fun sePresentationRepository(presentationRepository: PresentationRepository) {
        this.presentationRepository = presentationRepository
    }
    //생략
}
@Service
class PresentationService{
    @Autowired
    private lateinit var presentationRepository: PresentationRepository
    
    //생략
}

HTTP와 REST API

HTTP; HyperText Transfer Protocol 네트워크로 통신하는 두 컴포넌트 간의 통신 규약

HTTP 요청/응답

HTTP 요청 메서드

HTTP 상태 코드; 응답에서 요청의 처리 결과를 표현하는 코드

REST API; HTTP 통신으로 동작하는 어플리케이션 기능을 정의하는 컨벤션

※강제성이 없으며 클라이언트와 서버 간에 합의만 있다면 PST 메서드의 처리 결과가 삭제될 수도 있음. URL도 개발자 재량임

REST API 핵심

REST API 예시

가능한 REST를 준수하되, 팀 컨벤션 개설 필요

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

Path Variable(=경로 변수)


데이터베이스; 데이터의 집합

DBMS(DataBase Management System)

관계형 데이터베이스

대표적인 관계형 데이터베이스

비관계형 데이터베이스(NoSQL)

대표적인 비관계형 데이터베이스

ORM(Object Relational Mapping); 객체 관계 매핑

ORM의 장점

ORM의 단점

트랜잭션

정의

영속성 컨텍스트

정의


실습

Intellij Github 연동

  1. 프로젝트 생성

  2. Terminal 창에서 아래 명령어 입력

git init
  1. View -> Tool Window -> Commit

     

  2. commit 창에서 Changes 선택 후 Ctrl+Alt+L

  3. Github에서 레포지토리 생성

  4. View -> Git -> Manage Remotes

  5. 레포지토리 URL 추가

  6. View -> Tool Window -> Git

  7. main 브랜치 push

어노테이션

@Entity : Entity 어노테이션을 달아줘야 JPA에서 테이블과 매핑되는 엔티티 클래스라는 것을 알 수 있음

@GeneratedValue(strategy = GenerationType.IDENTITY) : PK 생성 전략을 정해줌

@Column(name = "column_name") 이 필드가 어떤 이름을 가진 컬럼과 매핑되는지 개발자가 직접 지정

@Column(nullable = false, updatable = false) : 값이 null일 수 없고 이 필드의 처음 생성된 값이 변경된다면 오류 발생됨

@MappedSuperclass : 이 클래스를 상속 받는 클래스가 안에 있는 필드들을 해당 엔티티에 있는 테이블의 컬럼과 매핑

@CreatedDate : JPA Entity가 생성된 시간 자동으로 세팅

@LastModifiedDate : 마지막으로 수정된 일시는 언제인지

@OneToMany : 현재 클래스와 타겟 엔티티가 1:n 관계

@Enumerated(value = EnumType.STRING) : 자료형이 enum클래스일때 사용하는 어노테이션

fun findAllByIsActive(isActive: Boolean): List<ClassName> : JPA에서 알아서 쿼리 생성함

미션 회고

우선, ERD를 처음부터 직접 설계하는 것은 처음이라 내 서비스에서 꼭 필요한 데이터가 무엇인지부터 추린 다음 해결하였다.

가이드에 있는 ERD Cloud를 이용하였는데 데이터베이스 ERD 설계에 대한 내용을 다시 되짚어보는 기회가 되었다.

2주차 미션과 강의를 미리 수행하며 1주차 미션을 보니 ERD 설계에서 수정해야할 부분이 눈에 보였다. 강의를 따라가며 차근차근 수정해나가야겠다.

백엔드 워밍업클럽 백엔드

답변 0