Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 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
61 changes: 47 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,57 @@

7기 BE 블로그 프로젝트 레포지토리입니다.

---

## 📌 1주차 목표

---

## API 요구사항 ⭐

---

## 👥 팀 구성

---

## ⚠️ 미션 요구사항

미션 진행 방법을 꼭 읽고 진행해주세요!!
- 과거 자료라서 레포지토리 이름이 다릅니다! 7th-BE-Blog로 이해하시면 됩니다
- [미션 진행 방법](https://www.notion.so/46dbd9440a4f4d5e97228011dff70f5a?pvs=21)
- [참고 레포지토리](https://github.com/Leets-Official/6th-BE-Blog) -> 전 기수 repo입니다. 브랜치, pr 작성법, 리뷰 방법 참고하세요!

## 📌 1주차 목표
- Spring Boot 프로젝트를 직접 생성하고 실행해본다.
- Controller와 Service를 분리하여 서버 구조를 이해한다.
- GET / POST 방식의 차이를 간단한 API를 통해 경험한다.
- JSON 형태의 응답을 직접 만들어본다.

### 과제 요구사항
1. 프로젝트 구조 구성
아래 조건을 만족하도록 프로젝트를 구성합니다.
- Controller 레이어와 Service 레이어를 분리합니다.
- 각 레이어는 역할에 맞게 작성합니다.
- 패키지 구조는 자유롭게 구성하되, 역할 구분이 드러나야 합니다.

2. 헬스체크 API 구현
서버가 정상적으로 동작하는지 확인할 수 있는 헬스체크 API를 구현합니다.
- `GET` Method를 사용합니다.
- 서버가 정상 동작 중임을 확인할 수 있는 문자열을 반환합니다.

3. 문자열 2개 반환 API 구현
문자열을 입력받으면, 같은 문자열을 2개 반환하는 API를 구현합니다.
- `POST` Method를 사용합니다.
- 요청으로 문자열을 전달받습니다.
- 응답은 반드시 JSON 형식이어야 합니다.
- 응답 JSON은 아래 구조를 따라야 합니다.

### 제출 시 확인할 것
- 프로젝트가 정상 실행되는가
- `GET /health` 요청 시 정상 응답이 오는가
- `POST /string/repeat` 요청 시 JSON 응답이 요구사항과 동일한가
- Controller와 Service가 분리되어 있는가

### 권장 추가 구현
필수는 아니지만 아래 항목도 함께 해보면 좋습니다.

- 요청/응답 DTO 분리하기
- 잘못된 요청에 대한 예외 처리 고민해보기
- 응답 메시지를 직접 변경해보기
- API 경로를 본인이 이해하기 쉬운 구조로 설계해보기

## 👥 팀 구성

| 1조 | 2조 | 3조 | 4조 | 5조 |
|-------|-------|-------|-------|-------|
| 강예손 | 김지훈 | 이교형 | 김다인 | 송유경 |
| 나명준 | 한하람 | 조연준 | 김동빈 | 임성현 |
| 이건희 | 남유정 | 시재욱 | 임현성 | 정대교 |
| 이은표 | 변승현 | 최유찬 | 이예서 | 성현준 |
13 changes: 13 additions & 0 deletions blog/.claude/plans/squishy-watching-rainbow.md
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우선 cluade와 같은 LLM을 사용하여 진행하고 익숙해지는 것은 너무 좋습니다.

다만, claude의 문서 중에서 어떤걸 공유하고, 어떤걸 공유하지 말지에 대한 걸 고민해보는 걸 추천드립니다! 아래의 저의 생각을 간단하게 공유 드릴테니, 보시기전에 "문서를 어떻게 분류할까"라는 생각을 해보시면 좋을 것 같아요.

개인적인 생각

제가 생각할 때에 문서는 다음과 같은 두 종류를 가집니다.

  • SLM: 단기 기억
  • LTM: 장기 기억

단기 기억이란 특정 문제를 해결하기 위한 문서(흔히 티켓 혹은 테스크)들을 이야기 하며 해당 작업이 끝나면 소비되어 사라져도 무방한 문서들을 이야기 합니다.

장기 기억이란 README 문서나, 아키텍쳐 문서 등 프로젝트 진행에 전반에 걸쳐서 지속적으로 관리되어야 할 문서를 이야기합니다.

즉, 작업 중에는 단기 기억이 생성되어 진행되고
작업이 끝나면 장기 기억을 업데이트 하여 공유하는

그런 방식으로 팀 문서가 관리되어야 한다고 생각하고 있어요.

그래서 위 같은 생각으로 이번 실습 프로젝트에서 .claude/ ignore 처리해주시면 어떨까 싶어요.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰 반영헀습니다!
VSC만 쓰다 IntelliJ 오랜만에 사용해보는데 아직 손에 안 익어서 어렵네요..

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Spring Boot 빌드 실패 수정 계획

## Context
Spring Boot 애플리케이션 실행 시 `Port 8080 was already in use` 에러로 인해 빌드가 실패합니다. 다른 프로세스가 이미 8080 포트를 점유하고 있는 상태입니다.

## 해결 단계

1. `lsof -i :8080`으로 8080 포트를 점유 중인 프로세스 확인
2. 해당 프로세스 종료 (`kill` 명령)
3. `./gradlew bootRun`으로 정상 기동 확인

## 수정 파일
- 없음 (코드 변경 불필요, 프로세스 종료만 필요)
3 changes: 3 additions & 0 deletions blog/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/gradlew text eol=lf
*.bat text eol=crlf
*.jar binary
37 changes: 37 additions & 0 deletions blog/.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/
41 changes: 41 additions & 0 deletions blog/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.12'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
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-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

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