Spring Boot & JPA Part1

남재상·2025년 3월 6일
post-thumbnail

Spring Boot & JPA to CodingApple

코딩애플 강의를 통해 배운 Spring Boot & JPA를 정리한 글입니다.

📅 작성일

2025년 3월 06일


📌 목차

  1. 소개
  2. part1-1 : Spring Boot 왜 쓰는데
  3. part1-2 : 개발환경 셋팅 / Spring Boot 3 프로젝트 생성
  4. part1-3 : 자바 기본 문법 1 (변수, 함수, if, for)
  5. part1-4 : 자바 기본 문법 2 (class, constructor)
  6. part1-5 : 웹서버와 웹페이지 만들기 (Controller)
  7. part1-6 : 상품목록 페이지 만들기 (Thymeleaf)
  8. part1-7 : MySQL Database 호스팅 받기
  9. part1-8 : 서버에서 Database 연결 & JPA 설치
  10. part1-9 : 테이블 만들기 (Entity)
  11. part1-10 : DB 데이터 출력하려면
  12. part1-11 : HTML에 서버데이터 넣으려면
  13. part1-12 : public private protected static (access modifiers)
  14. 참고 자료

📝 소개

Part 1 : Part 1


part1-1

🔹 쓰는이유

  • 빠른 비동기처리 서버를 만들고 싶으면 Node.js가 편하고
  • AI 서비스에 붙일 서버가 필요하면 Python이 편하고
  • 그냥 리액트가 좋으면 Next.js 쓰면 되고
  • 성능과 동시성 좋아하면 Erlang류, Rust, Go 이런걸 쓰면 되는데
  • 근데 밥벌어먹으려면 어쩌겠습니까 한국에서 가장 많이 쓰는 Spring Boot 해야 취업길이 조금이라도 더 넓습니다.

part1-2

🔹 다운로드, 생성

  • 인텔리제이 다운받기
  • 프로젝트 생성
    • Project : Gradle - Groovy
    • Language : Java
    • Spring Boot : 소괄호없는거
    • Project Meatdata : Group(회사), Artifact(프로젝트명), packaging(Jar), Java(17)
    • Dependencies : Spring Web, Spring Boot DevTools 적용

🔹 세팅

  • file/projectStruct 에서 jdk버전 확인 (내가 생성한것보다 높은거로)
  • file/settings/buildTools/gradle 에서 Build and run using, Run tests using 를 intellij IDEA로 바꿔준다
  • file/settings/java compiler 에서 Additional command line parameters에 -parameters 입력

🔹 파일설명, 실행

  • ShopApplication : 서버실행하는곳
  • resources : html css js 이미지등 보관하는곳
  • application.properties : 환경설정
  • gradle : 코드 바꾸기, 라이브러리 관리, 테스트 등을 해준다
# Run
ShopApplication

# 웹 실행 (8080이기본)
http://localhost:8080/

part1-3

🔹 자바 기본문법


part1-4

🔹 class 기본문법

public class ShopApplication {

	public static void main(String[] args) {
		SpringApplication.run(ShopApplication.class, args);
		Friend friend = new Friend("nam",12);
		System.out.println(friend.name + ' ' +  friend.age);
	}

}

class  Friend {
    // field, attribute
	String name ="kim";
	int age = 20;

    // constructor
	Friend(String name, int age){
		this.name = name;
		this.age = age;
	}

    // method
	void hello() {
		System.out.println("ㅎㅇ");
	}
}

part1-5

🔹 문자를 return

  • @Controller를 붙이면 알아서 main함수에서 실행이됨
  • @ResponseBody를 붙이면 문자 그대로 보내주세요 라는 뜻
// 문자를 return
public class BasicController {
    @GetMapping("/")
    @ResponseBody
    String hello() {
        return "안녕하세요";
    }
}

🔹 html을 return

  • resource/static 폴더에 html파일 생성
  • html의 경로는 static을기준
// html을 return
public class BasicController {
    @GetMapping("/")
    String hello() {
        return "index.html";
    }
}

part1-6

🔹 Thymeleaf

  • build.gradle 파일에서 설치
  • dependencies에 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'입력
  • html파일은 templates에 넣는다
@Controller
public class ItemController {
    @GetMapping("/list")
    String list (Model model) {
        model.addAttribute("전달할데이터이름", "데이터");
        return "list.html";
    }
}
<!-- 전달받은 데이터를 적용 -->
<div>
  <h4 th:text="${name}"></h4>
</div>

part1-7

🔹 azure로 호스팅


part1-8

🔹 DB연결

# gradle
runtimeOnly 'com.mysql:mysql-connector-j'  # mysql접속을 도와줌
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' # ORM라이브러리
# application properties
spring.datasource.url=jdbc:mysql://localhost:3306/shop
spring.datasource.username=root
spring.datasource.password=ska980630@
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.hibernate.ddl-auto=update

part1-9

🔹 테이블 만들기

  • orm 라이브러리가 있는경우
// Item
public class Item {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;
    @Column(nullable = false, unique = true)
    @Column(columnDefinition = "Text")
    @Column(length = 1000)
    public String title;
    public Integer price;
}

part1-10

🔹 Lombok

  • 필요한 코드를 자동으로 생성해줘서 자바 코드 양을 매우 줄여주는 간단한 라이브러리
# gradle
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

# setting
annotation processors
Enable annotation processing 체크

plugin lombok 다운

🔹 DB데이터 입출력

  • interface 파일생성
//interface
public interface ItemRepository extends JpaRepository<Item, Long> {

}

//Controller
@Controller
@RequiredArgsConstructor
public class ItemController {
    private final ItemRepository itemRepository;

    @GetMapping("/list")
    String list (Model model) {
        List<Item> result = itemRepository.findAll();
        System.out.println(result.get(0));
        model.addAttribute("name", "홍길동");
        return "list.html";
    }
}

part1-11

🔹 타임리프

  • 반복문 사용 및 적용
<div class="card" th:each="items : ${items}">
  <img src="https://placehold.co/300" />
  <div>
    <h4 th:text="${items.title}">바지</h4>
    <p th:text="${items.price}">7억</p>
  </div>
</div>

🔹 @ToString

  • 롬복을 통해 데이터를 뽑아준다
Entity파일에서 @ToString 선언해준다
Controller파일에서 System.out.println(result.toString()); 선언

part1-12

🔹 아무것도 안붙임

  • package-private이라함
  • 같은 폴더의 클래스에서만 사용가능

🔹 public

  • 모든 곳에서 가져다쓸 수 있다는 뜻

🔹 private

  • 다른 클래스에서 사용 불가

🔹 protected

  • 아무것도 안붙인 것과 같음
  • 상속한 클래스는 맘대로 사용가능

🔹 getter, setter

  • private된 변수를 뽑아내고 수정하기 위해 만드는 함수
private String title = 'test'

// getter
public String getTitle() {
  return title;
}

// setter
public void setTitle(String title) {
  this.title = title;
}

or
@Getter
@Setter
public class Item {
  private String title = 'test'
}

📚 참고 자료

profile
작은 코드 하나에도 책임을 담는 개발자입니다!

0개의 댓글