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
41 changes: 41 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
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/

# Gradle 캐시 폴더 및 macOS 시스템 파일 제외
.gradle/
.DS_Store
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,34 +71,34 @@ pw : {별도제공}
- DB 및 ORM 관련 라이브러리(Hibernate, Jdbc 등)는 자유롭게 사용하셔도 됩니다.

## 구현 필요 내용 상세
### 필수: API 디자인
### 필수: API 디자인
- API는 사용자 와의 계약입니다.
- 배포 된 OPEN API 서비스를 변경한다는 건 쉽지 않은 작업입니다.
- 따라서 확장성 있고, 서비스 전체적으로 일관성 있는 API 및 파라미터 설계에 처음부터 많은 노력이 필요합니다.
- 변경이 불가피하게 필요 할 경우를 대비하여 API 버저닝이 고려된 API를 설계해 주시기 바랍니다.
- 가능하다면 API 설계에 대한 철학을 **댓글** 에 작성해 주시기 바랍니다. 또한 작성 된 철학을 어떻게 녹여냈는지 코드와 함께 설명하기 바랍니다.

### 필수: API 응답 값
### 필수: API 응답 값
- 호출되는 API와 마찬가지로 배포되어 리얼 서비스가 시작 된 경우 API의 응답 값도 역시도 변경하기가 쉽지 않습니다.
- 따라서 처음부터 일관성 있는 공통 응답 포맷에 대한 설계가 중요합니다.
- 성공 및 실패 모두에 대한 일관성 있는 응답 값을 설계해 주시기 바랍니다.
- 특정 응답 값을 설계한 이유를 코드에 주석으로 달아 주시기 바랍니다.

### 필수: 유효성 검사
### 필수: 유효성 검사
- 고객이 어떤 값을 요청에 포함시킬지 모릅니다.
- 우리의 API는 고객이 직접 호출을 하게 됩니다. 호출하는 과정에서 어떤 실수를 했는지 상세히 작성해서 알려줘야 고객의 생산성을 해치지 않습니다.
- 유효성 검사를 통해 고객에게 어떻게 호출해야 하는지 직간접적으로 안내할 수 있도록 합니다.

### 옵션: Test Code
### 옵션: Test Code
- API 동작을 사용자의 관점에서 검증하는 단위 테스트, 통합 테스트를 작성해보세요.
- Spring Boot Test, JUnit, MockMVC, RestAssured 등 원하는 라이브러리를 사용해도 좋습니다.
- 필수 파라미터 누락, 유효성 검사, API 키 누락 등 다양한 케이스를 테스트해주세요.

### 옵션: 응답 형식
### 옵션: 응답 형식
- 사용자에게 다앙햔 응답 포맷 옵션을 제공해 주는 것이 중요 할 수 있습니다.
- API 호출 시, 확장자(예: `.json`, `.xml`)나 request parameter(예: `format=json`, `format=xml`)로 원하는 응답 방식을 제공해주면 좋습니다.

### 옵션: API Throttling
### 옵션: API Throttling
- 사용자가 너무 많은 요청을 보내게 되면 API 서버 전체가 불안정해질 수 있습니다.
- 따라서 대부분의 오픈 API 서버는 1초에 N건, 혹은 1분에 N건 등 요청을 제한하는 Quota를 설정 할 수 있습니다.
- "특정 API 키"에 대한 호출을 10초에 10건으로 제한하는 Quota 기능을 구현해 주시기 바랍니다. (*여기서는 위에 제시된 API Key)
Expand All @@ -110,7 +110,7 @@ pw : {별도제공}
- 다양한 에러 상황(400, 403, 404, 500 등)을 구분하고 로그로 남길 수 있도록 설계해주세요.
- log rotation 정책을 설정하고, 그 기준과 이유를 간단히 **PR 내 댓글**에 남겨주세요.

### 옵션: 배포 후 녹화 및 **댓글**에 적용
### 옵션: 배포 후 녹화 및 **댓글**에 적용
- 코드 작성 완료 후 배포해주세요
- 어떤 방식으로 배포했는지 **PR 내 댓글**에 상세히 작성해주세요.
- 배포하면서 신경쓴 점이 있다면 해당 부분도 함께 기술해주세요
Expand Down
48 changes: 48 additions & 0 deletions be-dev/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.2'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
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-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.4'
implementation 'org.springframework:spring-context'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test' // Spring Boot 기본 테스트
testImplementation 'org.mockito:mockito-core' // Mockito 기본
testImplementation 'org.mockito:mockito-junit-jupiter' // JUnit 5용 Mockito
testImplementation 'org.springframework.security:spring-security-test' // Spring Security 테스트 지원
testImplementation 'org.springframework.boot:spring-boot-starter-webflux' // `MockMvc` 테스트 지원

testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}
Binary file added be-dev/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions be-dev/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.12-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading