Skip to content
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

[김기찬] 이너서클 BE 온보딩 #18

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft
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 .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/
40 changes: 40 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.6'
}

group = 'com.chanki'
version = '0.0.1-SNAPSHOT'

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

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
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()
}
52 changes: 52 additions & 0 deletions docs/requirements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
**구글 설문**
### 설문
설문의 이름과 설문에 대한 간단한 Description 존재
![Pasted image 20240721155115](https://github.com/user-attachments/assets/f93ee602-16b7-4fc4-8c39-ab7772fa8587)


제목, 소개, 생성일 정도의 데이터만 관리 예정.

### 설문 받을 항목
설문 항목은 무한대로 늘어날 수 있으며, 필수 / 선택의 경우에 대한 선택 가능
설문 항목의 경우 질문 내용이 있고, 여러가지 타입의 질문에 대한 답변 내용을 생성 가능함.

![Pasted image 20240721155125](https://github.com/user-attachments/assets/d99c45b5-4d09-4439-8815-60f3444de1d2)


### 요구사항

설문의 경우, 설문조사 생성, 수정, 응답 제출, 응답 조회의 기능이 있어야 한다.
설문은 [설문조사 이름, 설문조사 설명, 설문 받을 항목] 세가지 항목을 포함
설문 받을 항목은 [항목 이름, 항목 설명, 항목 입력 형태, 항목 필수 여부] 네가지 항목 필요.
항목 입력 형태 [단답형, 장문형, 단일 선택 리스트, 다중 선택 리스트] 로 이루어짐

항목 입력 형태
- 하기 네 가지 타입으로 정의.
- 단답형(TEXT), 장문형(LONGTEXT), 단일 선택 리스트(RADIO), 다중선택리스트(CHECKBOX)

``` Java
public enum FormItemType {
TEXT, LONGTEXT, RADIO, CHECKBOX
}
```

설문조사 생성
- 설문조사 생성 시 설문 받을 항목의 형태에 따른 밸리데이션(형태에 따른 하위 항목에 대한 유효성, 선택리스트의 경우 해당 리스트가 포함 되었는지?), 기타 칼럼 길이에 대한 밸리데이션 정도 필요할 것.
- 하위 항목에 대한 유효성 검사
- 롱텍스트(500자 제한), 텍스트(500자 제한(?)), 단일,다중 선택지의 경우 선택지의 유무 체크 정도 진행.

설문조사 수정
- 설문조사 이름, 설명, 설문 받을 항목
- 설문조사의 이름, 설명 등에 대한 버저닝은 미 진행 예정, 설문조사 이름, 설명등은 과거 기록이 사라짐.
- 생성시와 같은 조건의 밸리데이션
- 수정 API 발생할 때 마다, 수정된 모든 항목을 검사하여 변경 여부를 체크하기가 어려울 것으로 생각.
- 먼저 업데이트 시 매번 항목에 대한 버저닝을 업데이트 한 항목을 추가로 생성.
- 상기 로직은 단 한 개의 항목의 하위 항목이 변경 되어도 모든 항목에 대한 내용이 추가 복제되어 신규 버전으로 추가되는 것으로, 추후 결과 값을 통계 내거나 데이터를 추가 할 시 데이터의 수의 추가

설문조사 응답 제출
- 항목 밸리데이션
- 응답 중 수정중인 사람은, 과거 버전과 현재 버전의 응답이 혼재.
- But 수정되었다고 기존 것이 안들어 가면 다 작성 한 설문값을 날리게 됨.

설문조사 응답 조회
- 설문조사 식별자 필요(설문 ID? 정도로 생각)
31 changes: 31 additions & 0 deletions docs/retrospect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
## TODO
DTO Validation 라이브러리 찾아보기

DTO 내에서 모델을 가져다 쓰는 부분은 제거, 코드 재사용 성을 위해 DTO? 를 대신할 수 있는 방법을 찾아보자.

이대로 가면 DTO가 수백개가 되겠다!!

자바의 폴더 구조 Common Case 조사해보자

JPA학습.
Optional Keyword 확인

Response 형태를 data, status 형태로만 단순히 일치할 수 있게 수정해보자.

기능 구현 후 개선 해보자!

식별 관계가 JPA 랑 좀 안맞나?

ONE TO MANY 단방향 매핑의 단점 조사
- 엔티티가 관리하는 외래키가 다른 테이블에 있음
- 불필요한 업데이트 발생(맨 처음 작성한 코드에서도 업데이트 문이 여러번 나가는 것을 확인람)

OnetoMany로 변경 후, formId 가 중복된다는 에러가 발생

엔티티 내에 부모 테이블이 생기면서 생기는 문제로 보임

객체간의 관계는 예로, 사람이 주문을 한다고 생각하는게 아닌 주문이 사람에 의해 만들어진다고 생각.

식별관계로 만드니 응답의 경우, 필요없는 칼럼이 하나 더 생겼음

DTO Spring Valid.
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions 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.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading