ABOUT ME

9911dbfl@naver.com

Today
Yesterday
Total
  • [Spring Boot] Controller / Thymeleaf / Entity
    Spring | SpringBoot 2024. 8. 5. 21:37


     

    [ 웹페이지 만들기(Controller) ]

     

    - 서버

    유저가 데이터 요청하면 그 데이터 보내주는 프로그램(이거 해줘 그러면 진짜 그거 해주는 프로그램이 서버)

     

     

    - 서버기능 만들려면 Controller

    서버기능을 만들고 싶으면 아무 클래스에 @Controller 써놓고 시작!

    아무 클래스에 @Controller 붙이면 API들 안에 만들 수 있다

    @Controller
    public class BasicController {
        @GetMapping("/경로")
        @ReponseBody
        String hello(){
           return "유저에게 보내줄데이터";
        }
    }

     

     

     

    - html 보내기

    @Controller
    public class BasicController {
        
        @GetMapping("/")
        @ReponseBody
        String hello(){
          return "<h4>안녕하쇼</h4>";
        }
    }

    간단한 문자 말고 html을 보내고 싶으면 return 오른쪽에 html 적어도 됩니다.

    근데 보통은 보내고 싶은 html이 매우 긴 경우엔 별도의 파일 만들어서 html 집어넣어두고 그 파일을 전송할 수도 있습니다.

     

    html css js 파일들은 resources 폴더안의 static 폴더에 보관

     

     

    - html 파일을 보내주고 싶으면

    @Controller
    public class BasicController {
        
        @GetMapping("/")
        String hello(){
          return "index.html";
        }
    }

    유저에게 html 파일을 보내주고 싶으면 @ResponseBody 빼고 return 오른쪽에 "html파일경로" 적으면 됩니다.

    @ResponseBody 를 쓰면 return 오른쪽에 있는걸 유저에게 보내라는 뜻이고

    @ResponseBody 를 안쓰면 return 오른쪽에 있는 경로의 파일을 전송하라는 뜻이 됩니다.

    파일경로는 static 폴더가 기본!

     

     


     

    [ 상품목록 페이지 만들기 (Thymeleaf) ]

     

    - 매번 다른 html 목록 보여주고 싶을 때?

     항상 같은 내용의 html 페이지만 보내주는게 아닌 쇼핑몰처럼 맨날 다른 상품명이랑 가격을 보내야할때, 

    그러고 싶으면 템플릿 엔진이라는걸 사용합니다.

     

    템플릿 엔진은 서버의 데이터를 html에 집어넣어주는걸 도와주는 외부 라이브러리입니다.

    여러가지 템플릿 엔진들이 있는데 우리는 Thymeleaf 템플릿 엔진을 사용

     

     

    build.gradle 파일에 아래 코드 추가 

    dependencies {
       implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    }

     

     

    이제 html 파일을 templates 폴더 안에 만들어야 Thymeleaf 문법으로 html을 만들 수 있습니다.

    Thymeleaf 써도 기존 html 파일이랑 똑같이 작성하고 사용할 수 있는데

    html 곳곳에 Thymeleaf 문법으로 서버데이터를 집어넣을 수 있다는게 차이점

     

     

     

     

     

    - Thymeleaf로 서버데이터 html에 넣어 보내주려면?

     

    1. 서버 API 함수의 파라미터에 Model model 넣고

    2. API안에서 model.addAttribute("작명", 전송할데이터)

    3. html 태그에 th:text="${작명}"

     

     

     

     

    1. 서버 API 함수의 파라미터에 Model model 넣고

    2. model.addAttribute("작명", 전송할데이터) 쓰면 됩니다.

    그럼 앞으로 list.html에서 name이라고 사용하면 "홍길동"이 출력됩니다.

    @GetMapping("/list")
    String list(Model model) {
     model.addAttribute("name", "홍길동");
     return "list.html";
    }

     

     

     

     

    3. html 태그에 th:text="${작명}" 이라고 써야 서버에서 보낸 데이터 출력이 가능합니다.

    그래서 위 html을 유저에게 전송할 땐 앞으로 <h4>태그에 "홍길동"이 박혀서 전송됩니다.

    Thymeleaf 문법을 사용하고 싶으면 templates 폴더로 html 파일을 옮겨야 잘 동작

    (list.html)
    
    <h4 th:text="${name}">바지</h4>

     

     

     


     

     

     

    [ 테이블 만들기 (Entity) ]

     @Entity라는 애너테이션을 하나 집어넣으면 이 이름으로 테이블을 하나 생성

     

    String 넣으면 string 저장할 수 있고

    Integer 넣으면 int 저장할 수 있습니다.

    Long 넣으면 long 저장할 수 있습니다.

     

     

     

     

    - int와  Integer 차이? 

    int 써도 int 자료를 집어넣을 수 있는데 Integer 이런거 써도 int 자료를 집어넣을 수 있습니다.

    Integer같은 대문자 타입 쓰면

    - 정수에다가 사칙연산을 쉽게 하고 싶거나

     - "1" 이런 문자를 정수로 변환한다거나 

    - 실수같은 다른 타입으로 변환한다거나 

    그런걸 쉽게해주는 유용한 함수도 제공해줍니다.

    그래서 쓰는 것임 

     

    정확히는 int 자료를 담고 있는 object인데

    멋있는 말로 primitive type wrapper 라고 부릅니다.

    실은 그냥 JPA에서 강요하기 때문에 int 말고 Integer를 쓰기

     

     

     

     

    - Long?

    Integer나 int는 대충 +-20억,

    Long이나 long 타입은 대충 +-900경까지의 정수를 저장할 수 있습니다.

    그래서 상품이 20억개는 넘을 것 같아서 Long을 써봤습니다.

    나중에 Long 타입의 숫자를 표현하려면 100L 이런 식으로 숫자 뒤에 대문자 L을 붙여줘야합니다.

     

     

     

     

     

    - @GeneratedValue(strategy = GenerationType.IDENTITY) 

    @Entity
    public class Item {
      @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
      Integer id;
      String title;
      Integer price;
    }

     1, 2, 3, 4를 직접 하나하나 부여하기 귀찮으면 위처럼 @GeneratedValue 붙여두면

    상품을 하나 추가할 때마다 알아서 1씩 증가하는 정수가 입력됩니다.

     

     

    @Id는 primary key로 설정해주는 역할

    @GeneratedValue는 auto increment 기능

     

     

     

    - public 붙이기

    @Entity
    public class Item {
      @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
      public Integer id;
      public String title;
      public Integer price;
    }

    변수들을 만들면 왼쪽에 public이라고 써놔야

    나중에 object 뽑은 후에 object.title 이렇게 자유롭게 출력, 수정 가능 

    근데 public 붙이면 나중에 실수해서 버그가 생기고 그럴 수 있어서 private 집어넣는걸 좋아하는 분들이 많습니다.

     

    class 안에 있는 변수나 함수를 private으로 바꾸면

    나중에 class에서 뽑은 object에서 맘대로 변수 함수를 점찍어서 출력하고 변경하고 그럴 수 없게 됩니다.

     

    그럼 어떻게 나중에 수정하고 싶을 때는? 

    변수를 출력하고 수정해주는 getter 아니면 setter 함수를 만들어서 그 함수를 씁니다.

     

     

     

     

    - 제약조건 @Column으로 부여가능

    @Column(columnDefinition = "TEXT")

    String만 달랑 집어넣어두면 255자까지 저장이 가능한데

    매우 긴 문자를 저장하고 싶으면 MySQL같은 경우 text 타입같은게 있는데 그런거 쓰고 싶으면 여기다가 적으면 됌

     

     


     

    * 이글은 아래 강의를 참고해 작성했습니다. 

    https://codingapple.com/course/spring-boot-jpa/

     

    쉽게 배우는 Spring Boot & JPA - 코딩애플 온라인 강좌

      Next.js는 프론트엔드부터 서버까지 만들 수 있는 React기반 프레임워크입니다. 이것만 사용해도 풀스택 웹개발이 가능합니다.    Next.js 사용시 서버사이드 렌더링이 쉽기 때문에  React, Vue만 사

    codingapple.com

     

     

     

     

     

     

     

     

     

Designed by Tistory.