-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[20기_나혜인] Spring DB 모델링과 JPA 미션 제출합니다. #2
Merged
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
f35bee7
Initial commit
limbs713 84b2ea6
feat: HelloController 실습
hyeinNa bc59899
feat: TEST 실습
hyeinNa 56cb7b5
Update README.md
hyeinNa 53db364
Domain,Repository 작성
hyeinNa a2be8d8
브랜치 병합
hyeinNa c6f97ad
단위테스트
hyeinNa e4c719d
ãREADME 추가
hyeinNa File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
HELP.md | ||
.gradle | ||
build/ | ||
!gradle/wrapper/gradle-wrapper.jar | ||
!**/src/main/**/build/ | ||
!**/src/test/**/build/ | ||
application.yml | ||
|
||
### 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/ | ||
|
||
*# | ||
*.iml | ||
*.ipr | ||
*.iws | ||
*.jar | ||
*.sw? | ||
*~ | ||
.#* | ||
.*.md.html | ||
.DS_Store | ||
.attach_pid* | ||
.classpath | ||
.factorypath | ||
.gradle | ||
.metadata | ||
.project | ||
.recommenders | ||
.settings | ||
.springBeans | ||
.vscode | ||
/code | ||
MANIFEST.MF | ||
_site/ | ||
activemq-data | ||
bin | ||
build | ||
!/**/src/**/bin | ||
!/**/src/**/build | ||
build.log | ||
dependency-reduced-pom.xml | ||
dump.rdb | ||
interpolated*.xml | ||
lib/ | ||
manifest.yml | ||
out | ||
overridedb.* | ||
target | ||
.flattened-pom.xml | ||
secrets.yml | ||
.gradletasknamecache | ||
.sts4-cache | ||
|
||
.idea | ||
.env |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,151 @@ | ||
# spring-instagram-20th | ||
CEOS 20th BE study - instagram clone coding | ||
## 1. 데이터베이스 모델링 | ||
|
||
## pre. 요구사항 분석 | ||
|
||
**[인스타그램 서비스 분석]** | ||
|
||
### 1. 서비스 개요 | ||
|
||
인스타그램은 사용자들이 게시글을 작성하고, 댓글을 달며, 좋아요를 누르고, 메시지를 주고받을 수 있는 기능을 제공합니다. | ||
|
||
### 2. 기능 요구사항 | ||
|
||
### 2.1 게시글 기능 | ||
|
||
- **게시글 조회**: 사용자는 타인의 게시글을 조회할 수 있습니다. | ||
- **게시글 작성**: 사용자는 텍스트와 사진을 포함하여 게시글을 작성할 수 있습니다. | ||
- **게시글 수정 및 삭제**: 사용자는 자신이 작성한 게시글을 수정하거나 삭제할 수 있습니다. | ||
|
||
### 2.2 댓글 기능 | ||
|
||
- **댓글 작성**: 사용자는 게시글에 댓글을 작성할 수 있습니다. | ||
- **대댓글 기능**: 사용자는 댓글에 대한 대댓글을 작성할 수 있습니다. | ||
- **댓글 수정 및 삭제**: 사용자는 자신이 작성한 댓글 및 대댓글을 수정하거나 삭제할 수 있습니다. | ||
|
||
### 2.3 좋아요 기능 | ||
|
||
- **좋아요**: 사용자는 게시글에 좋아요를 누를 수 있습니다. | ||
- **좋아요 취소**: 사용자는 자신이 누른 좋아요를 취소할 수 있습니다. | ||
|
||
### 2.4 Direct Message (DM) 기능 | ||
|
||
- **DM 작성**: 사용자는 다른 사용자와 1:1로 메시지를 주고받을 수 있습니다. | ||
- **DM 삭제**: 사용자는 자신이 보낸 DM을 삭제할 수 있습니다. | ||
|
||
### 구현 계획 | ||
|
||
### Domain (Entity) 클래스 | ||
|
||
- 각 테이블에 대응하는 Entity 클래스를 정의하고, JPA 어노테이션을 통해 MySQL 데이터베이스와 매핑합니다. | ||
|
||
### Repository 계층 | ||
|
||
- **JpaRepository**를 확장한 Repository 인터페이스를 정의하여, 기본 CRUD 작업을 자동으로 수행합니다. | ||
|
||
### 서비스 계층 | ||
|
||
- 비즈니스 로직을 처리하며, Repository를 통해 데이터베이스와 상호작용합니다. | ||
|
||
### 컨트롤러 계층 | ||
|
||
- 사용자 요청을 처리하고, 클라이언트와 서버 간의 데이터 교환을 관리합니다. | ||
|
||
## 1) 개념적 설계 | ||
|
||
**1-1) 개체(entity)와 속성(attribute) 추출** | ||
|
||
**1. 사용자 (Users)** | ||
|
||
- **UserID** (PK) : 사용자 고유 식별자 | ||
- **Username** : 사용자 이름 | ||
- **Email** : 이메일 주소 | ||
- **Password** : 암호 | ||
- **ProfilePicture** : 프로필 사진 | ||
- **Bio** : 사용자 소개 | ||
|
||
**2. 게시글 (Post)** | ||
|
||
- **PostID** (PK) : 게시글 고유 식별자 | ||
- **UserID** (FK) : 게시글 작성자 | ||
- **Image** : 이미지 파일 | ||
- **Caption** : 게시글 내용 | ||
- **Timestamp** : 작성 시간 | ||
|
||
**3. 댓글 (Comment)** | ||
|
||
- **CommentID** (PK) : 댓글 고유 식별자 | ||
- **PostID** (FK) : 댓글이 달린 게시글 | ||
- **UserID** (FK) : 댓글 작성자 | ||
- **Text** : 댓글 내용 | ||
- **Timestamp** : 댓글 작성 시간 | ||
|
||
**4. 대댓글 (Reply)** | ||
|
||
- **ReplyID** (PK) : 대댓글 고유 식별자 | ||
- **CommentID** (FK) : 대댓글이 달린 댓글 | ||
- **UserID** (FK) : 대댓글 작성자 | ||
- **Text** : 대댓글 내용 | ||
- **Timestamp** : 대댓글 작성 시간 | ||
|
||
**5. 좋아요 (Likes)** | ||
|
||
- **LikeID** (PK) : 좋아요 고유 식별자 | ||
- **PostID** (FK) : 좋아요가 달린 게시글 | ||
- **UserID** (FK) : 좋아요를 누른 사용자 | ||
- **Timestamp** : 좋아요 시간 | ||
|
||
**6. 다이렉트 메시지 (DirectMessage)** | ||
|
||
- **MessageID** (PK) : 메시지 고유 식별자 | ||
- **SenderID** (FK) : 메시지 발신자 | ||
- **ReceiverID** (FK) : 메시지 수신자 | ||
- **Text** : 메시지 내용 | ||
- **Timestamp** : 메시지 전송 시간 | ||
|
||
## 2) 논리적 설계 | ||
|
||
릴레이션(스키마) | ||
|
||
개체 → 릴레이션 이름 | ||
|
||
속성 → 릴레이션의 속성 | ||
|
||
![erd](https://github.com/user-attachments/assets/49eea983-2974-45d1-aa0c-f19a31790f66) | ||
|
||
## 3) 물리적 설계 | ||
|
||
**SQL문 작성 예시** | ||
|
||
-- 사용자 테이블 | ||
CREATE TABLE User ( | ||
UserID INT PRIMARY KEY AUTO_INCREMENT, | ||
Username VARCHAR(50) NOT NULL, | ||
Email VARCHAR(100) NOT NULL UNIQUE, | ||
Password VARCHAR(100) NOT NULL, | ||
ProfilePicture VARCHAR(255), | ||
); | ||
|
||
-- 게시글 테이블 | ||
CREATE TABLE Post ( | ||
PostID INT PRIMARY KEY AUTO_INCREMENT, | ||
UserID INT, | ||
Image VARCHAR(255), | ||
Caption TEXT, | ||
Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, | ||
FOREIGN KEY (UserID) REFERENCES User(UserID) | ||
); | ||
|
||
|
||
테이블이름 user로 했더니 단위테스트에서 오류계속발생.. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. User는 대부분의 db에서 keyword로 사용하고 있어서 에러가 발생하는 거 같아요 |
||
|
||
다른 분들은 잘되는것같길래 안바꾸고 해봤는데 계속 안돼서 users로 테이블 이름 변경하니 성공. . | ||
|
||
|
||
![image (2)](https://github.com/user-attachments/assets/ace93beb-c781-4ab6-a3d2-c5a2ad068f8c) | ||
|
||
# REPOSITORY 단위테스트 | ||
|
||
- `given` : 테스트 실행을 준비하는 단계 | ||
- `when` : 테스트를 진행하는 단계 | ||
- `then` : 테스트 결과를 검증하는 단계 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/*plugins { | ||
id 'java' | ||
id 'org.springframework.boot' version '3.3.3' | ||
id 'io.spring.dependency-management' version '1.1.6' | ||
}*/ | ||
plugins { | ||
id 'org.springframework.boot' version '3.1.2' // 스프링 부트 버전 | ||
id 'io.spring.dependency-management' version '1.1.0' | ||
id 'java' | ||
} | ||
group = 'com.ceos20' | ||
version = '0.0.1-SNAPSHOT' | ||
|
||
java { | ||
toolchain { | ||
languageVersion = JavaLanguageVersion.of(17) | ||
} | ||
} | ||
|
||
repositories { | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
implementation 'org.springframework.boot:spring-boot-starter-web' | ||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
testImplementation 'org.assertj:assertj-core:3.20.2' | ||
|
||
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' | ||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' | ||
|
||
compileOnly 'org.projectlombok:lombok' | ||
annotationProcessor 'org.projectlombok:lombok' | ||
|
||
runtimeOnly 'com.h2database:h2' | ||
runtimeOnly 'com.mysql:mysql-connector-j' | ||
} | ||
|
||
tasks.named('test') { | ||
useJUnitPlatform() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.8-bin.zip | ||
networkTimeout=10000 | ||
validateDistributionUrl=true | ||
zipStoreBase=GRADLE_USER_HOME | ||
zipStorePath=wrapper/dists |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
application.yml
파일 업로드되지 않도록.gitignore
에 추가해두신게 적용이 안된 것 같아요! 저도 같은 문제가 있었는데이렇게 하시면 반영되더라구요! 참고하시면 좋을 것 같습니당
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
배포 시엔 이런 실수를 하지 않게 주의해야겠네요 해결방법까지 공유해주셔서 너무 감사합니다!! 다음에 적용해봐야겠어요☺️