Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
156 changes: 0 additions & 156 deletions README.md

This file was deleted.

13 changes: 13 additions & 0 deletions week8/전예준/Demo1Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.demo1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Demo1Application {

public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
}

}
23 changes: 23 additions & 0 deletions week8/전예준/[8주차]전예준.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
### 사용자 조회 (GET) - 초기 상태
![스크린샷](https://github.com/user-attachments/assets/dd150769-2875-4034-84de-09fe57339eb8)

### 사용자 추가 (POST)
![스크린샷](https://github.com/user-attachments/assets/238c53e0-ebb1-4785-ac9e-efc648c9df85)

### 사용자 추가 결과 (GET)
![스크린샷](https://github.com/user-attachments/assets/981ab60e-4bcc-4be9-be97-47f8bedd5705)

### 사용자 수정 (PUT)
![스크린샷](https://github.com/user-attachments/assets/86a7c3a1-33cd-43de-b9b4-718349aa8820)

### 사용자 수정 결과 (GET)
![스크린샷](https://github.com/user-attachments/assets/84afa5db-d3fc-4ca6-8406-b701b9a458e3)

### 사용자 삭제 (DELETE)
![스크린샷](https://github.com/user-attachments/assets/63c6c87e-407f-41bd-812f-3c708e55974a)

### 사용자 삭제 결과 (GET)
![스크린샷](https://github.com/user-attachments/assets/22d55377-4e45-44fd-b2c9-2b6164687cfb)

### 데이터베이스
![스크린샷](https://github.com/user-attachments/assets/f4b75cff-9cc7-4b35-9041-f7994acad6ae)
12 changes: 12 additions & 0 deletions week8/전예준/application.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3307/cow-session
username: root
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
11 changes: 11 additions & 0 deletions week8/전예준/compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
services:
cow-session-docker-compse:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: cow-session
volumes:
- ./db/mysql/data:/var/lib/mysql
ports:
- "3307:3306"

23 changes: 23 additions & 0 deletions week8/전예준/controller/BoardController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.demo1.controller;

import com.example.demo1.dto.BoardDto;
import com.example.demo1.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController // JSON을 반환하는 컨트롤러임을 명시
@RequestMapping("/boards") // 해당 클래스의 모든 주소는 /boards로 시작
@RequiredArgsConstructor // 서비스 자동 연결 (생성자 주입)
public class BoardController {

private final BoardService boardService;

// 게시글 작성 API
// POST /boards?userId=1
// Body: {"title":"...", "content": "..." }
@PostMapping
public void createBoard(@RequestParam Long userId, @RequestBody BoardDto boardDto){
// 서비스에 Id와 게시글 전달
boardService.createBoard(userId, boardDto);
}
}
42 changes: 42 additions & 0 deletions week8/전예준/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.example.demo1.controller;

import com.example.demo1.dto.UserDto;
import com.example.demo1.repository.UserRepository;
import com.example.demo1.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController //클래스가 RESTful 웹 서비스의 컨트롤러임을 명시
@RequiredArgsConstructor//롬북을 이용한 생성자 주입 방식
// final로 선언된 필드에 대해 의존성을 자동으로 주입
@RequestMapping("/users")
public class UserController {
private final UserService userService;

//새 사용자 생성
@PostMapping
//JSON데이터를 자바의 DTO로 변환
public void createUser(@RequestBody UserDto userDto){
userService.addUser(userDto);
}

//전체 조회
@GetMapping
public List<UserDto> getUsers(){
return userService.getAllUsers(); //JSON반환
}

//회원 수정
@PutMapping("/{id}")
public void updateUser(@PathVariable Long id, @RequestBody UserDto userDto) {
userService.updateUser(id, userDto);
}

//회원 삭제
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) { //URL 경로에 있는 값(/{id})을 변수로 가져옴
userService.deleteUser(id);
}
}
19 changes: 19 additions & 0 deletions week8/전예준/dto/BoardDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.demo1.dto;

import lombok.*;

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BoardDto {

private Long id; // 게시글 번호
private String title; // 제목
private String content; // 내용

// 프론트엔드는 복잡한 User 객체 전체를 보낼 수 없음
// 대신 작성자의 식별자인 userId 숫자 값만 전송
// 이 DTO는 그 숫자를 받아 서비스 계층으로 전달하는 역할
private Long userId; // 작성자 ID (User 객체 아님)
}
17 changes: 17 additions & 0 deletions week8/전예준/dto/UserDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.demo1.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
private Long id;
private String name;
private String email;

}
33 changes: 33 additions & 0 deletions week8/전예준/entity/Board.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example.demo1.entity;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Board {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 데이터베이스가 알아서 ID 설정
private Long id;

@Column(nullable = false)
private String title;

@Column(nullable = false)
private String content;

// 1:N 관계 설정
// FetchType.LAZY: board.getUser()를 호출하기 전까지는 DB 조회를 미룸
// 유저 정보는 나중에 필요할 때 가져오기 때문에 성능 최적화
@ManyToOne(fetch = FetchType.LAZY)

// DB에 user_id라는 이름으로 외래키 컬럼 생성
@JoinColumn(name = "user_id")
// DB 테이블에는 user_id가 들어가지만, JPA 관점에서는 User 객체 자체를 필드로 참조
private User user;

}
Loading