์์ฌ์ผ์ผ ๋ค์ด์ด๋ฆฌ ์๋น์ค api ์๋ฒ ๊ฐ๋ฐ
- ๊ฐ๋ฐ ๊ธฐ๊ฐ : 22.12.8 ~ 23.02.12
- Version
- Java 11
- Spring boot 2.5.3
- Mongodb 4.2
- ์ฃผ์ ๊ธฐ๋ฅ
- Spring security, JWT๋ฅผ ์ด์ฉํ ํ์ ์ธ์ฆ ๊ด๋ฆฌ
- ํ์, ์ผ๊ธฐ, ํ ํฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- Redis๋ฅผ ์ด์ฉํ Remote ์บ์ ์ ์ฉ
- Openfeign์ ์ด์ฉํ ์ธ๋ถ API ํธ์ถ
- OpenAPI๋ฅผ ์ด์ฉํ api ๋ฌธ์ํ ๋ฐ ํ ์คํธ
- Exception Handler๋ฅผ ์ด์ฉํ ํตํฉ ๋ฐ ๊ฐ๋ณ ์์ธ์ฒ๋ฆฌ
- Spring-boot-validation์ ์ด์ฉํ ๋ฐ์ดํฐ ๊ฒ์ฆ์ฒ๋ฆฌ
- JUnit์ ์ด์ฉํ ๋จ์ ํ ์คํธ
- Spring-boot-test-starter๋ฅผ ์ด์ฉํ ํตํฉ ํ ์คํธ
[development]
- Spring-boot
- spring-boot-starter-web
- spring-boot-starter-validation:3.0.1
- spring-boot-starter-security
- spring-boot-devtools
- spring-boot-maven-plugin
- spring-boot-starter-actuator
- spring-boot-starter-aop
- Spring-security
- spring-security-test
- Spring-cloud
- spring-cloud-openfeign:3.0.3
- Springdoc
- springdoc-openapi:1.6.14
- lombok
- Serialization
- jackson-databind
- jackson-modules-java8
- gson:2.10
- json-simple:1.1.1
- JWT
- jjwt-api:0.11.5
- jjwt-impl:0.11.5
- jjwt-jackson:0.11.5
- datasource
- spring-boot-starter-data-elasticsearch
- spring-boot-starter-data-mongodb
- spring-boot-starter-data-redis
- de.flapdoodle.embed.mongo
- embedded-redis:0.7.2
[test]
- Spring-boot-starter-test
- sonar-maven-plugin:3.4.0
- jacoco-maven-plugin:0.8.5
- junit
- mockito-inline
๐ฆjaksim31-backend-main
โฃ ๐.github // ๊นํ๋ธ ์ก์
์ํฌํ๋ก์ฐ
โ โ ๐workflows
โฃ ๐.mvn
โ โ ๐wrapper
โฃ ๐jaksim31-properties
โฃ ๐scripts
โฃ ๐src
โ โฃ ๐main
โ โ โ ๐java
โ โ โ โ ๐com
โ โ โ โ โ ๐sweep
โ โ โ โ โ โ ๐jaksim31
โ โ โ โ โ โ โฃ ๐adapter
โ โ โ โ โ โ โ โ ๐cache // ์บ์ Adapter ๋ฐ Serializer ํด๋์ค
โ โ โ โ โ โ โฃ ๐aop // aop ํด๋์ค
โ โ โ โ โ โ โฃ ๐auth // jwt ์ธ์ฆ ๊ด๋ จ ํด๋์ค
โ โ โ โ โ โ โฃ ๐config // ์ค์ ํด๋์ค
โ โ โ โ โ โ โ โ ๐cache // ์บ์ ์ค์ ํด๋์ค
โ โ โ โ โ โ โฃ ๐controller // ์ปจํธ๋กค๋ฌ ํด๋์ค
โ โ โ โ โ โ โ โ ๐feign // ์ธ๋ถ api์์ฒญ์ ์ํ ํด๋์ค
โ โ โ โ โ โ โ โ โ ๐config // api ์์ฒญ ๊ด๋ จ ์ค์ ํด๋์ค
โ โ โ โ โ โ โฃ ๐domain // ์ํฐํฐ & ๋ ํฌ์งํ ๋ฆฌ ํด๋์ค
โ โ โ โ โ โ โ โฃ ๐auth // ์ธ์ฆ ๊ด๋ จ
โ โ โ โ โ โ โ โฃ ๐diary // ๋ค์ด์ด๋ฆฌ ๊ด๋ จ
โ โ โ โ โ โ โ โฃ ๐members // ํ์์ ๋ณด ๊ด๋ จ
โ โ โ โ โ โ โ โ ๐token // ํ ํฐ ๊ด๋ จ
โ โ โ โ โ โ โฃ ๐dto // DTO ํด๋์ค
โ โ โ โ โ โ โ โฃ ๐diary // ๋ค์ด์ด๋ฆฌ ๊ด๋ จ
โ โ โ โ โ โ โ โ โฃ ๐extractkeyword // ํค์๋ ์ถ์ถ ๊ด๋ จ
โ โ โ โ โ โ โ โ โ ๐validator // ๋ค์ด์ด๋ฆฌ ๋ฐ์ดํฐ Validator
โ โ โ โ โ โ โ โฃ ๐login // ๋ก๊ทธ์ธ ๊ด๋ จ
โ โ โ โ โ โ โ โ โ ๐validator // ๋ก๊ทธ์ธ ๋ฐ์ดํฐ Validator
โ โ โ โ โ โ โ โฃ ๐member // ํ์ ๊ด๋ จ
โ โ โ โ โ โ โ โ โ ๐validator // ํ์ ๋ฐ์ดํฐ Validator
โ โ โ โ โ โ โ โ ๐tokakao // ์นด์นด์ค api ๊ด๋ จ
โ โ โ โ โ โ โฃ ๐enums // enum ๋ชจ์
โ โ โ โ โ โ โฃ ๐exception // exception ํด๋์ค
โ โ โ โ โ โ โ โ ๐handler // exception handler
โ โ โ โ โ โ โฃ ๐service // Service ํด๋์ค
โ โ โ โ โ โ โ โ ๐impl // Service ๊ตฌํ ํด๋์ค
โ โ โ โ โ โ โ ๐utils // ์ ํธ ํด๋์ค
โ โ ๐test
โ โ โ ๐java
โ โ โ โ ๐com
โ โ โ โ โ ๐sweep
โ โ โ โ โ โ ๐jaksim31
โ โ โ โ โ โ โฃ ๐auth // ํ ํฐ ๊ด๋ จ ํตํฉ ํ
์คํธ
โ โ โ โ โ โ โฃ ๐config // ํ
์คํธ ํ๊ฒฝ ์ค์
โ โ โ โ โ โ โฃ ๐controller // ์ปจํธ๋กค๋ฌ ๋จ์ ํ
์คํธ
โ โ โ โ โ โ โฃ ๐domain // ๋ ํฌ์งํฐ๋ฆฌ ๋จ์ ํ
์คํธ
โ โ โ โ โ โ โ โฃ ๐diary
โ โ โ โ โ โ โ โฃ ๐members
โ โ โ โ โ โ โ โ ๐token
โ โ โ โ โ โ โฃ ๐integration // ํตํฉํ
์คํธ
โ โ โ โ โ โ โฃ ๐service // ์๋น์ค ๋จ์ ํ
์คํธ
โ โ โ โ โ โ โ โ ๐impl
โ โ โ โ โ โ โ ๐util // ํ
์คํธ ์๊ฐ ์ธก์ ์ ์ํ ์ ํธ
โฃ ๐.gitignore
โฃ ๐.gitmodules // git submodule ์ ๋ณด
โฃ ๐Dockerfile
โฃ ๐LICENSE
โฃ ๐README.md
โฃ ๐docker-compose.yml
โฃ ๐lombok.config
โฃ ๐mvnw
โฃ ๐mvnw.cmd
โ ๐pom.xml
- local
./mvnw clean install -dspring.profiles.active=local -P local # ๋น๋
java -jar -Dspring.profiles.active=local -Duser.timezone=Asia/Seoul ./target/jaksim31-0.0.1.jar # ๊ตฌ๋
- production
./mvnw clean install -dspring.profiles.active=prod -P prod # ๋น๋
java -jar -Dspring.profiles.active=prod -Duser.timezone=Asia/Seoul ./target/jaksim31-0.0.1.jar # ๊ตฌ๋
-
์ปค์คํ ํ ๋ณด์ ์ค์ ์ ์ํด
SecurityFilterChain
Bean ์์ฑ -
OncePerRequestFilter
๋ฅผ ์์๋ฐ์ ์ปค์คํ filter ์์ฑ- ๋ชจ๋ ์์ฒญ์ ๋ํด filter๋ฅผ ๊ฑฐ์น๋๋ก ์ค์
- Spring validator ์ฌ์ฉํ์ฌ ๋ชจ๋ Request body์ ๋ํด ๊ฒ์ฆ ๋ก์ง ๊ตฌํ
-
์ ์ง๋ณด์ ๊ณ ๋ ค Exception Hanlder๋ฅผ ์ฌ์ฉํ์ฌ ํ ๊ณณ์์ ์์ธ์ฒ๋ฆฌ
-
์ ์ง๋ณด์ ๊ณ ๋ ค ์๋ต๋ฉ์ธ์ง, ์๋ต์ฝ๋, Http ์ํ์ฝ๋ ํตํฉ ๊ด๋ฆฌ
- Write/Update์ ๋นํด Read ์์ ์ด ๋ง์ด ๋ฐ์ํ ๊ฒ ๊ฐ์ ๋ฐ์ดํฐ์ ๋ํด ์บ์ฑ ์ ์ฉ, ๊ฐ ์บ์ ๋ฐ์ดํฐ์ Expire time ์ ์ฉ
- Write/Update/Delete์ ์์ ๋ฐ์ ์ ์บ์ ์ญ์ , Read ์์ ๋ฐ์ ์ ์บ์ ์กฐํ
-
ํ๊ฒฝ๋ณ ๋ ๋์ค ์ํคํ ์ฒ์ ๋ฐ๋ฅธ ์บ์ ์ค์ ๋ฉ์๋ ์์ฑ (Local -
Standalone
, Prod-Master/Slave
) -
Cache ์์ ์ ์ํ CacheAdapter ์์ฑ
- ์บ์ ๋ฐ์ดํฐ ๋ณ ์์ฑ
adapter/cache/DiaryPagingCacheAdapter.java
- put: ๋ฐ์ดํฐ ์ฝ์ ๋ฐ ๊ฐฑ์
- get: ๋ฐ์ดํฐ ์กฐํ
- delete: ๋ฐ์ดํฐ ์ญ์
- findAndDelete: ํด๋น key๋ฅผ ํฌํจํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ํ ์ญ์ (์์ ์๊ฐ ๊ณ ๋ คํ์ฌ 10๊ฐ์ฉ ๋์ด์ ์ค์บํ๋๋ก ์ค์ )
-
์๋น์ค ๋ก์ง์ ์บ์ ์ ์ฉ
- ํ์ํ ๊ธฐ๋ฅ์ ๋ฐ๋ผ Annotation ๋๋ RedisTemplate ์ฌ์ฉ
service/DiaryServiceImple.java ์ผ๋ถ ๋ฐ์ท
- spring.data.mongodb ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
- Spring-boot-elasticsearch ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
-
Elastic Search์ ์ฐ๋
config/ElasticSearchConfig.java
-
๊ฒ์ ์กฐ๊ฑด ์ค์ ๋ฐ elastic search ๊ฒ์ api ํธ์ถ
๊ฒ์์ด
,๋ ์ง
,๊ฐ์
์ ๋ํ ์กฐ๊ฑด ์ค์
domain/diary/DiarySearchQueryRepository.java