들어가기에 앞서, 프로젝트 경험이 전무한 주니어 개발자들은 자신만의 게시판을 만들곤 합니다. 게시판을 만들기 전, 저는 기존에 경험한 프로젝트에서 사용했지만 제 것으로 만들지 못했던 AWS의 EC2, RDS와 Firebase의 FCM을 사용해보기 위해 게시판을 만들었습니다. 또한, 별도의 프론트의 구현이 없고 서버 사이드에서만 개발했습니다. 확인은 Swagger 또는 Postman으로 확인할 수 있고 데이터의 송-수신은 REST API를 활용했습니다. 참고용으로 봐주면 감사하겠슴미당!
의존성
build.gradle
plugins {
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:okhttp:4.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와의 통신을 위해서
사용
패키지 구조
메인 패키지인 me.jinmin.boardver2 아래에 각 도메인(여기선 엔티티)들을 설정 했으며, 각 도메인 패키지마다 필요한 패키지들을 구성했습니다.
특히, 아래와 같이 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.properties가 아닌 application.yml을 사용한 이유