-
Actions
Automate any workflow
-
Packages
Host and manage packages
-
Security
Find and fix vulnerabilities
-
Codespaces
Instant dev environments
-
Copilot
Write better code with AI
-
Code review
Manage code changes
-
Issues
Plan and track work
-
Discussions
Collaborate outside of code
- Explore
- All features
- Documentation
- GitHub Skills
- Blog
-
- By Plan
- Enterprise
- Teams
- Compare all
- By Solution
- CI/CD & Automation
- DevOps
- DevSecOps
- Case Studies
- Customer Stories
- Resources
-
GitHub Sponsors
Fund open source developers
-
The ReadME Project
GitHub community articles
- Repositories
- Topics
- Trending
- Collections
-
- Pricing
들어가기에 앞서, 프로젝트 경험이 전무한 주니어 개발자들은 자신만의 게시판을 만들곤 합니다. 게시판을 만들기 전, 저는 기존에 경험한 프로젝트에서 사용했지만 제 것으로 만들지 못했던 AWS의 EC2, RDS와 Firebase의 FCM을 사용해보기 위해 게시판을 만들었습니다.
또한, 별도의 프론트의 구현이 없고 서버 사이드에서만 개발했습니다. 확인은 Swagger 또는 Postman으로 확인할 수 있고 데이터의 송-수신은 REST API를 활용했습니다.
참고용으로 봐주면 감사하겠슴미당!
의존성
- build.gradleplugins {
id 'org.springframework.boot' version '2.5.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'me.jinmin'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
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'
//swagger
implementation 'io.springfox:springfox-swagger2:2.9.2'
implementation 'io.springfox:springfox-swagger-ui:2.9.2'
//database
runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
//lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//firebase sdk
implementation 'com.google.firebase:firebase-admin:6.8.1'
//okhttp
implementation 'com.squareup.okhttp3:ok4.2.2'
//test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
- 스프링 부트 : 2.5.3
- 스프링 부트의 버전별로 호환이 되는 기술 들의 차이가 있기 때문에 최신의 버전보다는 가장 안정화된 버전을 사용하는 것이 좋습니다. 특히, Gradle도!
- 자바 : 11
- 자바 8과 11의 차이점 등에 대해 알면 좋습니다.
- 데이터 처리를 위해서 사용한 기술 : Spring data jpa
- web을 통해 스프링 기반의 서버 아키텍처를 구현할 수 있습니다.
- swagger : REST 웹 서비스의 여러 작업을 도와주는 오픈 소스 프레임워크
- 구현한 REST API 의 결과를 확인하기 위해 swagger를 주입했습니다.
- 데이터 베이스 : h2, MySQL
- H2는 로컬 환경에서 사용했으며, MySQL은 AWS의 RDS(MySQL)에서 환경에서 사용했습니다.
- 댓글 알림 기능을 구현하기 위해 FCM을 추가했습니다.
- okhttp는 REST API와의 통신을 위해서 사용
- 스프링 부트 : 2.5.3
패키지 구조
- 메인 패키지인 me.jinmin.boardver2 아래에 각 도메인(여기선 엔티티)들을 설정 했으며, 각 도메인 패키지마다 필요한 패키지들을 구성했습니다.
- 특히, 아래와 같이 api, exception, model, repository, service로 구성했습니다.
- 특히, 아래와 같이 api, exception, model, repository, service로 구성했습니다.
- 또한, resources 패키지에는 필요한 설정파일들을 구성했습니다.
- application의 자동 설정을 나눈 이유는 로컬 환경에서의 운영과 클라우드 환경에서의 운영을 따로 구현하기 위한 것입니다.
- application.yml ⇒ spring.profiles.include를 통해 application-XXX.yml을 실행할 수 있습니다.spring: profiles: include: cloud # local or cloud
- ec2, firebase는 후에 알아보자!
- application의 자동 설정을 나눈 이유는 로컬 환경에서의 운영과 클라우드 환경에서의 운영을 따로 구현하기 위한 것입니다.
- application.properties가 아닌 application.yml을 사용한 이유
- 계층화된 표현을 통한 가독성 향상
API 설계
User
POST | /users/signup | 회원가입 |
POST | /users/login | 로그인 |
GET | /users/{userId} | 단일 회원 조회 |
GET | /users | 전체 회원 조회 |
PUT | /users/update/{userId} | 회원 정보 수정 |
DELETE | /users/delete/{userId} | 회원 삭제 |
User - Board
POST | /boards/{userId}/write | 유저 게시물 등록 |
GET | /boards | 전체 게시물 조회 |
GET | /boards/{boardId} | 단일 게시물 조회 |
GET | /boards/category/{category} | 카테고리별 게시물 조회 |
PUT | /boards/update/{userId}/{boardId} | 게시물 수정 |
DELETE | /boards/delete/{userId}/{boardId} | 게시물 삭제 |
GET | /boards/user/{userId} | 유저가 쓴 게시물 전체 조회 |
POST | /comments/write/{userId}/{boardId} | 댓글 작성 |
GET | /comments/{boardId} | 게시물 전체 댓글 조회 |
PUT | /comments/update/{userId}/{boardId} | 댓글 수정 |
DELETE | /comments/delete/{userId}/{boardId} | 댓글 삭제 |
git 주소 : //github.com/JinMinChoi/Board_ver2