ย ๋ด๊ฐ ๊ธฐ์ฌํ ๋ถ๋ถ
โข
OAuth2๋ฅผ ์ด์ฉํ์ฌ Google, Naver, Kakao, GitHub ์์
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํ
โข
OpenAI API๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์์ฑํ ์ผ๊ธฐ๋ฅผ ํ๋กฌํํธ๋ฅผ ์์ฑํ๋๋กํ์ฌ ์ผ๊ธฐ ๋ถ์์ํด์ ์ ์๋ก ๋์ถ ์ํค๋ ๊ธฐ๋ฅ ๊ตฌํ
โข
JWT๋ฅผ ํ์ฉํ ์ธ์ฆ ์ ์ฐจ๋ฅผ ๊ตฌ์ถํ๊ณ , Redis์ ํ ํฐ์ ์ ์ฅํ์ฌ ๋ณด์์ฑ์ ๊ฐํ
โข
GitHub์ ํตํ ํ์ ๊ด๋ฆฌ๋ฅผ ์ํํ๋ฉฐ, Git Flow ์ ๋ต, ์ปค๋ฐ ๋ฐ PR ์ปจ๋ฒค์
, ์ฝ๋ ์ปจ๋ฒค์
์ ๋์
ํ์ฌ ์ฝ๋์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์ค๋ฅ๋ฅผ ๋ฐฉ์ง
โข
์ฌ์ฉ์๋ค์ด ์ด๋ ํ๋ซํผ์์ ์ ์ํ ์ ์๊ฒ ํ๊ธฐ ์ํด React Native์ Expo๋ฅผ ํ์ฉํ์ฌ WebApp์ ๊ฐ๋ฐ
โข
์ํํ ์์
์ ๊ณํํ๊ณ ๋ชฉํ ์ค์ ํ๊ธฐ ์ํด Sprint ๋์
ํ์ฌ 1์ฃผ ๋จ์๋ก Sprint ์์
์ ์งํ
ํค๋
๋ก๊ทธ์ธ ํ ๋ค์ด์ด๋ฆฌ
๋ก๊ทธ์ธ ํ์ด์ง
๋ก๊ทธ์ธ ํ ๋ง์ดํ์ด์ง
๋ง์ดํ์ด์ง โ๋ด ๋ค์ด์ด๋ฆฌโ ํต๊ณ ํ๋ฉด
ย ์ฌ์ฉ ๊ธฐ์
โข
DataBase
โฆ
MariaDB / Redis
โข
BackEnd
โฆ
Java / Spring Boot / Spring Data JPA / Spring Security / JWT / Google Storage
โข
API
โฆ
Kakao Login / Google Login / OpenAI / Swagger / OpenWeatherMap
โข
Software Architecture Pattern
โฆ
Monolithic Architecture
โข
FrontEnd
โฆ
HTML / CSS / JavaScript / Vue.js / VueX / React Native
โข
DevOps
โฆ
Docker / Jenkins / Kubernetes / AWS EC2
โข
Collaboration
โฆ
GitHub / Slack / Notion / Figma / Miro
System Architecture
MoodHolic System Architecture
ํธ๋ฌ๋ธ ์ํ 1
๋ฌธ์ ๋ฐฐ๊ฒฝ
Spring Boot ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ OpenAPI ์์ฒญ ์ค, ํด๋ผ์ด์ธํธ๊ฐ ํน์ ๋ฌธ์๊ฐ ํฌํจ๋ URL์ ์์ฒญํ์ ๋ java.lang.IllegalArgumentException: Invalid character found in the request target ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด๋ Tomcat ์๋ฒ์ ๊ธฐ๋ณธ ์ค์ ์์ ํน์ ํน์ ๋ฌธ์๊ฐ ํ์ฉ๋์ง ์์ ๋ฐ์ํ ๋ฌธ์ ์์ต๋๋ค. ์ฒ์์๋ application.yml์์ UTF-8 ์ธ์ฝ๋ฉ์ ๊ฐ์ ๋ก ์ ์ฉํ๋ ค ํ์ผ๋, ์ด ๋ฐฉ๋ฒ์ ๋ฌธ์ ํด๊ฒฐ์ ์คํจํ์ต๋๋ค. ํน์ ๋ฌธ์๊ฐ ํฌํจ๋ URL์ Tomcat ์๋ฒ์ ๊ธฐ๋ณธ ์ค์ ๊ณผ ์ถฉ๋ํ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฌธ์ ํด๊ฒฐ์ ์ํด, Tomcat ์๋ฒ์ ์ค์ ์ ์ปค์คํฐ๋ง์ด์งํ์ฌ ํน์ ํน์ ๋ฌธ์๋ฅผ ํ์ฉํ๋๋ก ์กฐ์ ํ์ต๋๋ค. TomcatServletWebServerFactory ํด๋์ค๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๊ณ , relaxedQueryChars ์ต์
์ ์ถ๊ฐํ์ฌ <, >, [, ], ^, `, {, |, } ๋ฑ์ ํน์ ๋ฌธ์๋ฅผ ํ์ฉํ๋๋ก ์ค์ ํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
Tomcat ์๋ฒ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฉํ์ง ์๋ ๋ฌธ์๋ค์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ์์ต๋๋ค.
์ด ์ค์ ์ดํ, ํน์ ๋ฌธ์๊ฐ ํฌํจ๋ URL ์์ฒญ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์์๊ณ , ๋ ์ด์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค. ํน์ URL ์์ฒญ์ ์ฒ๋ฆฌ๋ฅผ ๋ฐฉํดํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ผ๋ฉฐ, ์์ฒญ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ฒ ๋์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
์๋ฒ ์ค์ ์ ์ค์์ฑ๊ณผ ๋ง์ถคํ ์ค์ ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์์ ์ฑ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. ๋ํ, ๋จ์ํ ์ค์ ๋ณ๊ฒฝ์ผ๋ก ๋ณต์กํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค.
application.yml์์ ๊ฐ์ ๋ก ์ธ์ฝ๋ฉ
Config ํจํค์ง์ TomcatWebCustomCofig Class ์ถ๊ฐํ์ฌ ํ์ฉ ํน์๋ฌธ์ ์ค์
ํธ๋ฌ๋ธ ์ํ 2
๋ฌธ์ ๋ฐฐ๊ฒฝ
Spring Boot ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ API ์๋ต์ ํ๊ธ ๋ฌธ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋์ง ์๊ณ , ๋ฌผ์ํ(???)๋ก ๋์ฒด๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ Spring ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ ์ค์ ์ด ISO-8859-1๋ก ๋์ด ์์ด, ํ๊ธ๊ณผ ๊ฐ์ ๋ค๊ตญ์ด ๋ฌธ์๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ๊ฒ์์ ๋น๋กฏ๋ ๋ฌธ์ ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Spring์ WebMvcConfigurer๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ StringHttpMessageConverter๋ฅผ UTF-8 ์ธ์ฝ๋ฉ์ผ๋ก ์ค์ ํ์ต๋๋ค. ์ด๊ฒ์ ํตํด ์๋ต ๋ฉ์์ง๊ฐ ํ๊ธ๋ก ์ ๋๋ก ์ธ์ฝ๋ฉ๋์ด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ๋ ์ ์๊ฒ ํ์ต๋๋ค. UTF-8 ์ธ์ฝ๋ฉ์ด ์ฐ์ ์ ์ฉ๋์ด ํ๊ธ ์ธ์ฝ๋ฉ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๊ธฐ ์ํด StringHttpMessageConverter๋ฅผ ์ปจ๋ฒํฐ ๋ชฉ๋ก์ ๊ฐ์ฅ ์์ ๋์ด ๋ค๋ฅธ ์ปจ๋ฒํฐ๋ณด๋ค ๋จผ์ ์คํ๋๋๋ก ์ค์ ํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
์ด ์ค์ ์ ํตํด ํ๊ธ ์ธ์ฝ๋ฉ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๊ณ , API ์๋ต์์ ํ๊ธ ๋ฌธ์๊ฐ ์จ์ ํ ํ์๋์์ต๋๋ค. ์ด์ ์๋ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ฌผ์ํ(???)๋ก ๋ณด์๋ ํ๊ธ ๋ฉ์์ง๋ค์ด ์ ํํ ์ ๋ฌ๋์์ผ๋ฉฐ, ๋ํ, ์ด๋ฌํ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์์ ์ป์ ๊ฒฝํ์ ํตํด ๋ค๋ฅธ ์ธ์ด ํ๊ฒฝ์์๋ ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ๋ณด๋ค ์ ์ํ๊ณ ํจ๊ณผ์ ์ผ๋ก ๋์ํ ์ ์๋ ์ญ๋์ ๊ฐ์ถ๊ฒ ๋์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฌธ์ ์ธ์ฝ๋ฉ ์ค์ ์ ์ค์์ฑ์ ๊น์ด ์ดํดํ๊ฒ ๋์์ต๋๋ค. ํนํ ๋ค๊ตญ์ด ์ง์์ด ํ์ํ ํ๊ฒฝ์์๋ ์ธ์ฝ๋ฉ ์ค์ ์ ์ธ๋ฐํ๊ฒ ๊ด๋ฆฌํด์ผ๋ง ์๊ธฐ์น ์์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ์ ์ ๋ฐฐ์ ์ต๋๋ค. ๋ํ, ๊ธฐ๋ณธ ์ค์ ์ ์์กดํ๊ธฐ๋ณด๋ค๋ ์ํฉ์ ๋ง๊ฒ ์ปค์คํฐ๋ง์ด์งํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
Config ํจํค์ง์ WebConfig Class ์ถ๊ฐํ์ฌ StringHttpMessageConverter๋ฅผ ์ปจ๋ฒํฐ ๋งจ์์ ๋์ด ์ฐ์ ์คํ
๐ซกย ํ๊ณ
โํ ์ ์๋ค๊ณ ๋ฏฟ์ผ๋ฉด ๊ฐ๋ฅํ๋ค๋ ์ ๋
"
ํ๋ก์ ํธ์์ ์ ๋ Oauth 2.0, OpenAI API, Redis, React Native์ ๊ฐ์ ๋ค์ํ ๊ธฐ์ ์ ์ ํ๊ณ , ์ค์ ๋ก ์ ์ฉํด๋ณด๋ฉด์ ๋ง์ ์ฑ์ฅ์ ์ด๋ค์ต๋๋ค. โํ ์ ์๋ค๊ณ ์๊ฐํ๋ฉด ํ ๊ฒ์ด๊ณ , ์๋๋ฉด ๋๊ฒ ํ๋คโ๋ ์ฒ ํ์ ํตํด ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ๊ธฐ์ ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํด ๋๊ฐ์ต๋๋ค. ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ๋ฟ๋ง ์๋๋ผ ์ ๊ทน์ ์ธ ์์ธ๋ฅผ ๋ฐฐ์ฐ๋ฉฐ, ์์ผ๋ก๋ ๋์์์ด ๋ฐ์ ํ๊ณ ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด ๋
ธ๋ ฅํ ๊ฒ์
๋๋ค.