DB 인코딩 타입 문제로 인해 변경하는 강의입니다.

 

 

강의 주소 : https://youtu.be/s1AxIA033jQ

package com.cos.blog.model;

import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

@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;
	
	@ColumnDefault("'user'") // 문자라는 것을 알려주기 위해 싱글쿼테이션을 넣는다.
	private String role; // Enum을 쓰는게 좋다. // admin, user, manager
	
	@CreationTimestamp // 시간이 자동 입력
	private Timestamp createDate;
}

 

Enum 타입은 데이터를 도메인으로 설정 할 수 있습니다.

 

jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.format_sql: true

ddl-auto : create -> 생성하고자 하는 테이블이 기존에 있어도 새로 만듭니다( 추후에는 update로 변경해야합니다.)

use-new-id-generator-mappings : JPA가 사용하는 기본 넘버링 전략을 선택 할 수 있습니다.

 

아래 두 속성값은 spring boot를 실행시 콘솔에 쿼리를 보여주며, 깔끔하게 정리하여 보여준다는 의미입니다.

show-sql: true
    properties:
      hibernate.format_sql: true

physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

: Entity 생성시 기입 된 내용대로 컬럼을 생성해 줍니다.

private String myEmail; // myEmail

 

physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

: Entity 생성시 언더스코어로 컬럼을 생성해 줍니다.

private String myEmail; // my_email

 

위에 대한 자세한 설명은 아래의 주소를 참고해주세요.

https://getinthere.tistory.com/20

 

스프링부트 with JPA 블로그 6강 - yaml 설정

1. yaml 이란 이 분이 설명을 너무 잘해두셔서 ㄷㄷ https://www.inflearn.com/questions/16184 yaml파일 이란 무엇인가요 - 인프런 질문 - yaml파일 이란 무엇인가요 안녕하세요 강사님 너무 질문이 많아서 죄송.

getinthere.tistory.com

 

 

강의 주소 : https://youtu.be/6ynr-XAI-rk

1. yaml이란?

    - 정리가 잘 된 주소 참조합니다.

https://www.inflearn.com/questions/16184

 

yaml파일 이란 무엇인가요 - 인프런 | 질문 & 답변

안녕하세요 강사님 너무 질문이 많아서 죄송합니다. yaml파일 이라는 단어를 요 근래 많이 듣고 있는데 정확인 무슨 파일인가요 검색해 보지도 않고 무조건 질문을 드리는것 같아서 죄송하지만

www.inflearn.com

 

server:
  port: 8000
  servlet:
    context-path: /blog

port는 8000이며, context-paht는 /blog입니다.

 

RestController 어노테이션은 문자 그대로를 return하는 반면,

Controller 어노테이션을 이용하게되면, file을 return하게 됩니다.

@Controller
public class TempControllerTest {

	// http://localhost:8000/blog/temp/home
	@GetMapping("/temp/home")
	public String tempHome() {
		System.out.println("tempHome()");
		// 파일리턴 기본경로 : src/main/resources/static
		// 리턴명 : /home.html
		// 풀경로 : src/main/resources/static/home.html
		return "/home.html";
	}
}

스프링 부트의 경우는 JSP파일을 인식하지 못합니다.

그래서, JSP 템플릿 엔진을 pom.xml에 추가해줘야합니다.

<!-- JSP 템플릿 엔진 -->
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

또한 JSP파일은 정적 파일이 아니기 때문에, 위의 파일 리턴 기본 경로인 static 하위에 위치하여도 JSP파일은 읽히지 않습니다. 이유는 static하위에는 브라우저가 인식 할 수 있는 정적 파일만 있어야합니다.

	@GetMapping("/temp/jsp")
	public String tempJsp() {
		return "/test.jsp";
	}

이를 위해, src/main/webapp/WEB-INF/views라는 폴더를 생성하고,

application.yml에 아래와 같이 추가합니다.

spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

또한 해당 jsp를 호출할때 메소드에서의 호출 방법은 아래와 같습니다.

	@GetMapping("/temp/jsp")
	public String tempJsp() {
		// prefix : /WEB-INF/views/
		// suffix : .jsp
		// 풀네임 : /WEB-INF/views/test.jsp
		
		return "test";
	}

 

static 하위의 파일에 접근하던것과 다르게 prefix, suffix가 존재하여 return시에 return하고자하는 파일명만 집어 넣으면 됩니다.

 

 

 

강의 주소 : https://youtu.be/U9OnYKiSf4g

 

롬복 설치 과정은 아래 강의를 참조하겠습니다.

 

@Getter
@Setter
public class Member {

	private int id;
	private String username;
	private String password;
	private String email;
	
}
@Data
public class Member {

	private int id;
	private String username;
	private String password;
	private String email;
	
}

위 두개의 내용은 서로 같은 내용입니다.

@Getter, @Setter를 두개 다 쓰고 싶다면 @Data라는 어노테이션을 쓰면 됩니다.

 

@NoArgsConstructor : 빈 생성자를 추가하는 어노테이션입니다.

@AllArgsConstructor : 전체 생성자를 추가하는 어노테이션입니다.

@RequiredArgsConstructor : final이 붙은 변수에 대해 생성자를 추가하는 어노테이션입니다.

package com.cos.blog.test;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Member {
	private int id;
	private String username;
	private String password;
	private String email;
}

 

@Builder : 해당 어노테이션 선언시 객체를 선언할때 아래와 같은 방식으로 선언하여 사용 할 수 있습니다.

    - builder의 장점

      1. 생성자의 순서를 지키지 않아도 됩니다.

      2. 필드의 값이 무엇이었는지 생각하지 않아도 됩니다.

Member m = Member.builder().username("ssar").password("1234").email("ssar@nate.com").build();
package com.cos.blog.test;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class Member {
	private int id;
	private String username;
	private String password;
	private String email;
	
	@Builder
	public Member(int id, String username, String password, String email) {
		this.id = id;
		this.username = username;
		this.password = password;
		this.email = email;
	}
}
@GetMapping("/http/lombok")
public String lombokTest() {
    Member m = Member.builder().username("ssar").password("1234").email("ssar@nate.com").build();
    System.out.println(TAG+"getter:"+m.getUsername());
    m.setUsername("cos");
    System.out.println(TAG+"setter:"+m.getUsername());
    return "lombok test 완료";
}
HttpController : getter:ssar
HttpController : setter:cos

 

 

강의 주소 : https://youtu.be/U3Bq4C-NEDU

 

MAVEN : 프로젝트 관리 툴입니다.

프로젝트 시작시 pom.xml 파일을 읽어들여 .m2 폴더에 필요한 라이브러리들을 다운로드 받아 빌드까지 해줍니다.

 

 

강의 주소 : https://youtu.be/jtur8oAAXYg

+ Recent posts