본문 바로가기
스프링부트 with JPA

스프링부트 with JPA 블로그 1(1~20강)

by yukuda 2024. 2. 22.
728x90

2강 STS 설치하기

UTF-8

0과 1을 표현할수 있는 박스

박스 2개면 4개의 경우의 수

00 01 10 11 → 00: A 01: B 10:C 11:D

(알파벳을 모두 나타내기 힘듬(알파벳 수 :26*2) → 박스 6개필요) 숫자도 필요함 기호도 필요함

약 8개의 박스가 필요함

256개의 경우의 수 → 아스키코드표

8bit ⇒ 1byte 하나의 문자를 표현할수 있는 최소단위

한글은 최소 2바이트 필요 중국어는 3바이트필요 나라마다 다름

그래서 전세계 표준 → utf-8 (3byte)

 

4강 Ioc 패키지 위치

 

9장 git의 3가지 영역

 

10장 http1.1

11강 stateless

stateless방식은 한번의 요청과 응답이 이루어지면 클라이언트와 서버와의 연결선이 끊어지는 것을 말한다. 이 방식은 주로 http에 사용되는 방식이며 이는 서버의 부하를 줄여준다.

 

12강 MIME타입이란

MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기위한 메커니즘입니다. 웹에서는 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도록 서버가 정확히 설정하는것이 중요합니다.

 

수 많은 종류의 문서가 있으므로 많은 MIME 타입들이 존재합니다.

 

문법

type/subtype

 

개별 타입

text/plain

text/html

image/jpeg

audio/mpeg

audio/*

...

 

15강 maven이란

Maven은 프로젝트에 필요한 라이브러리를 관리해준다. 우리는 단지 pom.xml 파일에 "기술"하기만 하면된다. EX) 1. gson이 필요해 2. OJdbc가 필요해 작동원리: 프로젝트가 시작될 때 Maven이 pom.xml을 읽어서 파일서버인 중앙저장소에서 우리가 기술한 라이브러리를 다운받는다. 라이브러리 파일은 .m2 > repository에 저장된다. Maven은 마지막에 다운받은 라이브러리를 빌드한다. 장점: 더이상 각각의 사이트에서 라이브러리를 다운받아 lib파일에서 직접 관리하지 않아도 된다.

  라이브러리들끼리의 의존성을 관리해준다.

 

16강 lombok세팅 및 사용해보기

@Builder 어노테이션의 장점: 1. 객체에 값을 넣을때 순서를 지키지 않아도 된다. 2. 객체 값 순서를 헷갈려서 객체의 값을 잘못 넣는 실수하는 것을 방지한다.

 

17강 yml설정하기

스프링부트는 application.yml 파일에 설정하면 된다. @RestController는 문자 그 자체를 return 하는 반면, @Controller는 해당 경로 이하에 있는 파일을 리턴하므로 슬러시(/)를 붙여야 한다. 스프링부트는 기본적으로 jsp 지원을 하지 않는다. jsp파일을 리턴해줘도 정상적으로 동작하지 않는다. 스프링부트에서 jsp를 인식하기 위한 사전설정은 다음과 같다. 1. pom.xml에 JSP 템플릿 엔진 dependency 추가 org.apache.tomcat.embed tomcat-embed-jasper 2. application.yml에 다음 코드를 추가한다. spring: mvc: view: prefix: /WEB-INF/views/ suffix: .jsp src/main/webapp/WEB-INF/views 디렉토리를 직접 만들어야 한다. 이때 뒤에 확장자명이 이미 설정파일에 추가되어 있으므로 파일이름만을 return한다. EX) return "temp"; JSP파일은 정적 파일이 아니므로 웹서버인 아파치가 처리하지 못한다. 톰캣이 대신 컴파일해서 웹브라우저에게 전달한다.

18강 User 테이블 생성

package com.cos.blog.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

import java.sql.Timestamp;

import javax.persistence.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 빌더 패턴!!
// ORM -> Jave(다른언어) Object -> 테이블로 매핑해주는 기술
@Entity // User 클래스가 MySQL에 테이블이 생성이 된다.
public class User {

	@Id //Primary key
	@GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB의 넘버링 전략을 따라간다
	private int id; // 시퀀스, auto_increment

	@Column(nullable = false, length =30)
	private String username;	// 아이디

	@Column(nullable = false, length =100) // 123456 => 해쉬 (비밀번호 암호화)
	private String password;

	@Column(nullable = false, length =50)
	private String email;   // myEmail, my_email

	@ColumnDefault("'user'")
	private String role; // Enum을 쓰는게 좋다. // admin, user, manager

	@CreationTimestamp // 시간이 자동 입력
	private Timestamp createDate;

}

20강 Board테이블 생성

package com.cos.blog.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
import java.sql.Timestamp;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
public class Board {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment
	private int id;

	@Column(nullable = false, length = 100)
	private String title;

	@Lob // 대용량 데이터
	private String content; // 섬머노트 라이브러리 <html>태그가 섞여서 디자인이 됨.

	@ColumnDefault("0")
	private int count; // 조회수

	@ManyToOne(fetch = FetchType.EAGER) // Board = Many, User = One
	@JoinColumn(name="userId") // userId라는 이름으로 조인이 된다.
	private User user; // DB는 오브젝트를 저장할 수 없다. FK, 자바는 오브젝트를 저장할 수 있다.

	@OneToMany(mappedBy = "board", fetch = FetchType.EAGER)  // mappedBy 연관관계의 주인이 아니다 (난 FK가 아니에요) DB에 칼럼을 만들지 마세요
	private List<Reply> reply;

	@CreationTimestamp // 데이터가 인서트 또는 업데이트될때 자동으로 현재시간이 들어감
	private Timestamp createDate;


}

출처

https://www.youtube.com/watch?v=6bhF5o4gAOs&list=PL93mKxaRDidECgjOBjPgI3Dyo8ka6Ilqm&index=1

https://getinthere.tistory.com/15

https://github.com/codingspecialist/Springboot-JPA-Blog.git