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
37 changes: 37 additions & 0 deletions week3/seungbeom/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/
43 changes: 43 additions & 0 deletions week3/seungbeom/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## Spring Study 3주차
### 학습 목표
- 간단한 회원 생성, 조회 기능을 수행하는 API서버를 만들고 Spring의 전반적인 활용방법과 데이터베이스 연결 방법을 배운다.

### 실습 과정 중 발생한 오류들!
***
- H2 데이터베이스 설정 시 jdbc url을 지정해놓고 연결을 누르면 다음과 같은 오류가 발생.
![스크린샷 2024-09-18 205542](https://github.com/user-attachments/assets/4b5b32d9-50eb-4488-a959-d7128139e2bc)
- 자동으로 mv.db파일이 생기면서 연결이 가능해야 하지만 불가능했음.
- 결국 지정 경로에 직접 파일 생성 후 재연결
![스크린샷 2024-09-18 205948](https://github.com/user-attachments/assets/48c50a97-bd61-4414-b8c4-74b339295fed)
- 성공!!
- 그리고 h2 데이터베이스를 실행하지 않고 스프링 프로젝트를 실행 시 데이터베이스를 연결하지 못했다는 에러를 볼 수 있으므로
실행 전 h2 데이터베이스를 사전에 실행해 놓은 상태인지 확인!

### 실습을 진행하면서 들었던 궁금증들!
***
#### 1. 왜 Spring 에서는 프로젝트의 계층을 3가지(Controller, Service, Repository)로 나누어 개발하고 관리하는 것일까?
- 책임 분리를 통한 유지보수성을 높이기 위함!
- Controller는 요청과 응답에, Service는 비즈니스 로직에, Repository는 데이터베이스와의 상호작용에 집중하여 독립성을 올리고 결집도를 낮춘다.
- 책임 분리를 통해 각 계층의 부담을 줄이고 역할에 필요한 코드만을 간결하게 유지
#### 2. 컨트롤러에서 데이터를 외부로 전달하고 받을 때 DTO형식을 사용하는 이유는 뭘까?
- 엔티티 자체만으로는 서비스 내 모든 로직들을 감당하기 어렵다.
- 각 요청에 맞는 데이터 양식들(PK값만 보내기, PK와 이름 OR 전체 데이터까지)을 모두 엔티티에 반영하면 복잡성이 증가하고 유지보수성이 떨어진다.
- 엔티티를 그대로 노출하게 되면 엔티티가 변경되었을 때 API 스펙 역시 변경되기 때문에 혼란이 발생할 수 있다.
#### 3. 웹 서비스 내에서 발생한 예외 처리는 어느 계층이 담당해야 할까?
- 일반적으로 Service 계층과 Controller 계층이 나누어 처리한다.
- Service 계층에서는 서비스 자체적으로 다루는 비즈니스 로직에서 발생하는 예외와 데이터베이스 처리 과정 중 발생한 예외를 예외 메서지와 상태 코드를
Controller 계층으로 전달한다.
- Controller 계층에서는 Service 계층으로부터 넘겨받은 예외 정보를 바탕으로 적절한 HTTP 상태코드와 메세지를 클라이언트에게 전달한다.

### API 테스트 화면
***
#### 1. 멤버 생성([POST] /members)
![스크린샷 2024-09-18 211240](https://github.com/user-attachments/assets/0f7249cb-70b4-4925-9160-eb96dc44e156)
#### 2. 전체 멤버 조회([GET] /members)
![스크린샷 2024-09-18 211352](https://github.com/user-attachments/assets/dad226f4-054b-4ff9-82e5-4efe974f58c7)
#### 2-1. 전체 멤버 조회 실패(데이터베이스에 멤버가 존재하지 않는 경우)
![스크린샷 2024-09-18 211729](https://github.com/user-attachments/assets/12609e4c-a4fc-4b24-8b54-9a89db6cf76f)
#### 3. 멤버 단건 조회([GET] /members/{memberId})
![스크린샷 2024-09-18 211456](https://github.com/user-attachments/assets/eb118f1b-f3e6-4be0-b7e8-ec7b1f8a1359)
#### 3-1. 멤버 단건 조회 실패(없는 멤버의 pk를 쿼리 스트링으로 넘겼을 때)
![스크린샷 2024-09-18 211633](https://github.com/user-attachments/assets/a7aa19b7-cc98-4bde-b1d9-6b672fd5923e)
38 changes: 38 additions & 0 deletions week3/seungbeom/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
}

group = 'Spring-Study'
version = '0.0.1-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}
Binary file added week3/seungbeom/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions week3/seungbeom/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
252 changes: 252 additions & 0 deletions week3/seungbeom/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading