- 1500λ§ λ°λ €μΈλ€μ μν νλ«νΌμ λλ€.
- νμ¬ μμΉλ₯Ό κΈ°λ°μΌλ‘ λ§€μΉ λ©μ΄νΈλ₯Ό μ°Ύμ μ μμ΅λλ€.
- μ§λμ λ§μ»€λ₯Ό μ°κ³ μΉκ΅¬ μΆκ°μ λ§€μΉ μμ€ν μ΄ ν΅μ¬ κΈ°λ₯μ λλ€.
- κ°λ° κΈ°κ° : 2024.08.08 ~ 08.29
| ν©μ§ν | μ λ―Όμ€ | λ¨μ±μ° | μμλͺ | μ΄κ΄ν¬ |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| @JINHYEOKKK | @Tizesin | @chaeneeee | @ Lifesheep1 | @gwanghui97 |
- CI/CD νμ΄ν λΌμΈμ ꡬμΆνμ¬ IntelliJμμ main λΈλμΉμ pushλ₯Ό νλ©΄ μλμΌλ‘ ν΅ν©λκ³ λ°°ν¬λλλ‘ μ€μ νμμ΅λλ€. AWS EC2μ Dockerμ Docker Composeλ₯Ό νμ©νμ¬ λ°°ν¬λ₯Ό νμκ³ , S3μ React μ½λλ₯Ό λ°°ν¬νκ³ μ¬μ§ μ λ‘λ κΈ°λ₯μ ꡬννμμ΅λλ€.
- κ°λ°λꡬ: Intellij IDEA
- μΈμ΄: Java 11 Open JDK
- λΉλλꡬ: Gradle
- κ°λ°
- Spring Framework: 5.3
- Spring Boot: 2.7.0
- Spring Data
- Spring Data JPA
- Spring Data Redis
- Spring Security
- JPA
- λ°μ΄ν°λ² μ΄μ€
- MySQL: 8.0.25
- Redis
- ERD
- ERDCloud
- νλ‘ νΈ κ°λ° νκ²½ λ° μΈμ΄
- μΈμ΄:
- HTML
- CSS
- JavaScript
- λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬:
- React
- React Query
- React Bootstrap 5
- Axios
- μΈμ΄:
- νμκ΄λ¦¬ λ° μ΄μκ΄λ¦¬
- GitHub
- κΈ°ν
- Slack
Github Kanban
- Githubμ Project κΈ°λ₯ μ€ Kanban 보λλ₯Ό νμ©νμ¬ νλ‘μ νΈλ₯Ό κ΄λ¦¬νμ΅λλ€.
- Todo, InProgress, Done μ μ΄λ‘ μμ μ ꡬλΆν΄ νμ¬ μμ μν©μ μ€μκ°μΌλ‘ νμΈν μ μλλ‘ νμ΅λλ€.
| λλ© νμ΄μ§ | νμκ°μ |
|---|---|
![]() |
![]() |
| λ‘κ·ΈμΈ μ€ν¨ λ° μ±κ³΅ | λ§μ΄νμ΄μ§ |
|---|---|
![]() |
![]() |
| κ²μκΈ μμ± | λκΈ μμ± |
|---|---|
![]() |
![]() |
| μλ κ²μν | λ§μ»€ 그리기 |
|---|---|
![]() |
![]() |
| λ§€μΉ μμ²νκΈ° | λ§€μΉ μμ² μλ½νκΈ° |
|---|---|
![]() |
![]() |
| μΉκ΅¬ μμ²νκΈ° | μΉκ΅¬ μμ² μλ½νκΈ° |
|---|---|
![]() |
![]() |
- μ¬μ©μ μꡬλΆμμ μ€κ³
- κΈ°λ₯μ λ°λ₯Έ μ¬μ©μμ μꡬ μ¬νκ³Ό μ ν μ¬ν λΆλ₯
- κ° κΈ°λ₯μ λν μ°μ μμ μ λ ¬
- API λͺ
μΈμ μ€κ³
- κΈ°λ₯λ³ method, URI, Request/Response μμΈ μ€κ³
- ERD μ€κ³
- νμ, μΉκ΅¬, λ°λ €λλ¬Ό ν μ΄λΈ μ€κ³ λ° κ΄κ³ μ€μ
- νμ CRUD λ° Validation ꡬν
- JavaMailSenderλ₯Ό μ΄μ©ν μ΄λ©μΌ μΈμ¦ ꡬν
- JWTμ Redisλ₯Ό νμ©ν μΈμ¦ μμ€ν
ꡬν
- λ‘κ·ΈμΈ μ JWT ν ν° λ°κΈ λ° Redis μ μ₯
- λ‘κ·Έμμ μ Redisμμ ν ν° μμ
- μΉκ΅¬ μμ², μλ½, κ±°μ λ± Statusμ λ°λ₯Έ CRUD ꡬν
- λ°λ €λλ¬Ό μ 보 CRUD ꡬν
- μΉκ΅¬ κ΄λ¦¬ νμ΄μ§ ꡬν
- κ²μν νμ΄μ§ CSS μ μ©
- Backend: Spring Boot, JPA, Redis
- Frontend: React
- Database: MySQL
- κΈ°ν: JWT, JavaMailSender
- νμ μΈμ¦ λ° κ΄λ¦¬
- μΉκ΅¬ κ΄κ³ κ΄λ¦¬
- λ°λ €λλ¬Ό μ 보 κ΄λ¦¬
- μ΄λ©μΌ μΈμ¦
- ν ν° κΈ°λ° μΈμ¦ μμ€ν
- μ¬μ©μ μꡬλΆμμ μ€κ³
- κΈ°λ₯μ λ°λ₯Έ μ¬μ©μμ μꡬ μ¬νκ³Ό μ ν μ¬νμ λΆλ₯
- κ° κΈ°λ₯μ λν μ°μ μμ μ λ ¬
- κ° μꡬμ λ°λ₯Έ ν μ΄λΈ λ΄ Status κ΄λ¦¬
- κΈ°λ₯ λ³ method λ° uri μ€κ³
- κΈ°λ₯ λ³ Request Header & Body μ€κ³
- κΈ°λ₯ λ³ Response Status Code & Header & Body μ€κ³
- λΉμ κ·νλ₯Ό ν΅ν λ°μ΄ν° κ²μ μλ ν₯μ
- μ±κΈν μ΄λΈ μ λ΅μ μ΄μ©νμ¬ κ²μν ERD μ€κ³
- ν μ΄λΈ μ°κ΄κ΄κ³ μ€κ³
-
exception
- μ¬μ©μ μꡬ μμΈμ²λ¦¬ λ° λ°ν μ½λ μμ± νκ²½ ꡬμ±
-
PageNation νκ²½ ꡬμ±
- μ λ€λ¦μ ν΅ν PageNationDto μ€κ³
-
Auditable
- Entityμ μ μ©ν 곡ν΅μ¬ν μΆμν SuperClass μ€κ³
-
JWT ν ν°
- λ‘κ·ΈμΈ μ μ¬μ©μ μ 보 Base64SecretKeyλ‘ Encoding
- api μμ² Headerμμ AccessTokenκ° Decodingμ ν΅ν μ¬μ©μ μΈμ¦μ μ°¨ ꡬν
-
μ¬μ©μ κΆν
- μ¬μ©μμ κ³μ μ λ°λΌ Admin / User κΆν λΆμ¬
-
CustomEvent
- 컀μ€ν μ΄λ²€νΈλ₯Ό μ μ©νκΈ° μν μ μ© νΈλ¦¬κ±° μ€κ³
-
EventListenerService
- μ΄λ²€νΈ 리μ€λλ₯Ό μ΄μ©νμ¬ κ° λΉμ¦λμ€ λ‘μ§κ°μ κ²°ν©λ νν₯
- Test Code μ€κ³μ μ 리ν νκ²½ ꡬμΆ
-
λ§€μΉ
- μ¬μ©μμ λ§€μΉ μ 보 λ° Status CRUD μ€κ³
-
λ§€μΉ λκΈ°μ΄
- μ¬μ©μμ λ§€μΉ μλ½ λ° κ±°μ μ λ°λ₯Έ Status CRUD μ€κ³
- Hibernate μ΅μ νλ₯Ό μν JPQL μ μ©
- λ°μ΄ν° μ ν©μ±μ μν ReentrantLock κΈ°λ₯ ꡬν
- μ€μΌμ€λ¬
- λ°μ΄ν° μ ν©μ±μ μν μ£ΌκΈ°μ μΌλ‘ λΉμ κ·ν λ°μ΄ν°λ² μ΄μ€ μ ν©μ± κ²μ¦ μ§ν
- λΉλκΈ° μ€μΌμ€λ¬ ꡬμΆ
- λΉλκΈ° λ©ν°μ°λ λ Config μ€κ³λ₯Ό ν΅ν κ³Όλν λ©λͺ¨λ¦¬ μ¬μ© λ°©μ§
- λμμΈ λ° μ λλ©μ΄μ
- λλ©νμ΄μ§ λμμΈ μ€κ³ λ° μ μ©
- Full-Page-Scroll μ μ©
- λν κ²μκΈ Slide Card Board λμμΈ μ€κ³ λ° μ λλ©μ΄μ μ μ©
- λ§€μΉ
- axiosλ₯Ό ν΅ν λ§€μΉ μ 보 CRUD μμ² κ΅¬ν
- boot-strapμ μ΄μ©ν modal λμμΈ μ€κ³
- λΆλͺ¨/μμ μ»΄ν¬λνΈκ° λμμ CSS λ³κ²½μ μν props μ€κ³
- μ μν λ μ΄μμ μ μ©
- ο»Ώμ¬μ©μ μꡬμ¬ν λΆμ λ° κΈ°λ₯ μ°μ μμ μ€μ :
- ο»Ώμ¬μ©μ μꡬμ¬ν λΆμμλ₯Ό μμ±νμ¬ κΈ°λ₯λ³ μꡬμ¬νκ³Ό μ νμ¬νμ λͺ νν ꡬλΆ
- ο»Ώκ° κΈ°λ₯μ μ€μλμ ꡬν μ°μ μμλ₯Ό 체κ³μ μΌλ‘ μ λ ¬νμ¬ νλ‘μ νΈ μΌμ μ΅μ ν
- API λͺ
μΈμ μ€κ³
- ο»Ώκ° κΈ°λ₯μ λ§λ λ©μλ(Method) λ° URIλ₯Ό μ€κ³νμ¬ λͺ νν API ꡬ쑰 μ μ
- ο»ΏRequest Header λ° Body, Response Status Code, Header, Bodyμ λν μΈλΆ μ€κ³λ₯Ό ν΅ν΄ ν΅μ μμ μ± λ° λ°μ΄ν°μ μ‘μ μΌκ΄μ± ν보
- ERD μ€κ³
- ο»Ώμ±κΈ ν μ΄λΈ μ λ΅(Single Table Strategy)μ μ΄μ©νμ¬ κ²μν ꡬ쑰μ ERD(Entity-Relationship Diagram)λ₯Ό μ€κ³
- ο»Ώμ±κΈ ν μ΄λΈ μ λ΅μ νμ©ν κ²μν μΉ΄ν κ³ λ¦¬ μ€κ³ λ° κ΅¬ν
- ο»Ώκ²μκΈ μμ±, μμ , μμ κΈ°λ₯μ μ€κ³ λ° κ΅¬ν
- ο»ΏλκΈ λ° λλκΈ κΈ°λ₯μ μ€κ³νκ³ , κ³μΈ΅ ꡬ쑰λ₯Ό ν΅ν΄ ꡬν
- ο»Ώμ’μμ κΈ°λ₯ μ€κ³ λ° κ΅¬μΆ
- ο»Ώμ‘°νμ κΈ°λ₯μ μ€κ³ λ° κ΅¬μΆ
- CI/CD λ° λ°°ν¬
-
κΈ°λ³Έμ μΈ CI/CD νκ²½ ꡬμΆ
- Github Actionsλ₯Ό ν΅ν CI/CD νκ²½ ꡬμΆ
-
λΉλ μ λ―Όκ° μ 보 μ²λ¦¬ κ³Όμ
- νλ‘μ νΈ λ΄μ μΈμ¦μ λλ ν€νμΌ λ±μ΄ κ³΅κ° λ ν¬μ§ν 리μ μ¬λΌκ°μ§ μλλ‘ μ μΈνκ³ , νλ‘μ νΈ λΉλ κ³Όμ μ νμν μΈμ¦μ λλ ν€νμΌ λ±μ΄ CI/CD κ³Όμ μμμ λμ μΌλ‘ μμ±λμ΄ λΉλμ ν¬ν¨λλλ‘ μ€μ
-
Docker Composeλ₯Ό ν΅ν λ€μ€ 컨ν μ΄λ κ΄λ¦¬
- Spring, Mysql, Redisλ₯Ό 컨ν μ΄λ κΈ°λ°μΌλ‘ κ΄λ¦¬
-
- AWS
-
AWS EC2
- AWS EC2μ Dockerλ₯Ό νμ©ν Spring, Mysql, Redis μλ² λ°°ν¬
-
AWS S3
- AWS S3μ νλ‘ νΈμλ μλ² λ°°ν¬
-
λλ©μΈ
- ꡬμ ν λλ©μΈ μ£Όμμ μ°κ²°νμ¬ λ°°ν¬
-
- νμ κ°μ , κ²μκΈ λ±λ‘ μμ AWS S3μ μ΄λ―Έμ§ λ±λ‘ κΈ°λ₯ ꡬν
-
Page ꡬν
- λλ© νμ΄μ§ ꡬν
- λ‘κ·ΈμΈ, νμκ°μ νμ΄μ§ ꡬν
- μμ κ΄κ³ ν μ΄λΈμ λ§κ² κ²μν νμ΄μ§ ꡬν
-
React Query
- μΊμ±μ ν¨μ¨μ μΌλ‘ κ΄λ¦¬
- λ°±κ·ΈλΌμ΄λμμ μ€λλ λ°μ΄ν°λ₯Ό μ λ°μ΄νΈ νλλ‘ μ€μ
- νμ΄μ§μ²λ¦¬, μ§μ° λ‘λ© λ°μ΄ν° μ±λ₯ μ΅μ ν
-
Custom Hook
- Custom Hookμ κ°λ°νμ¬ μ μ μν κ΄λ¦¬
- μλ‘κ³ μΉ¨ μμ μνκ° μ μ§
-
ν ν° κΈ°λ° λ‘κ·ΈμΈ κ΅¬ν
- νμ κ°μ μ ν μ¬μ©μλ§ λ‘κ·ΈμΈμ΄ λλ κΈ°λ₯ ꡬν
- λ‘κ·ΈμΈμ νλ©΄ λλ© νμ΄μ§λ‘ redirect λκ³ νμ κ°μ μ μ λ ₯ν λ³λͺ λ ΈμΆ
- λ²μ μ λ§κ² νλ‘μ νΈ μ΄κΈ° μ€μ
- gitignoreμ λ―Όκ°ν μ 보 μ μΈ
togedog-μꡬμ¬ν μ μμ
μ΄λ² νλ‘μ νΈλ μ²μμΌλ‘ νμ νμ¬ μΉ κ°λ°μ ν΄λ³Έ μμ€ν κ²½νμ΄μμ΅λλ€. μ²μ λ§λ νμλ€κ³Όμ μν΅μ΄ μ λ§ μ λμκ³ , μ견 μΆ©λμ΄ μμ΄λ μλ‘μ μ μ₯μ μ΄ν΄νλ©° μ νμ΄λκ° μ μμμ΅λλ€. λ€λ§, μ€κ³ λ¨κ³μμ ERD, API λͺ μΈμ, νλ©΄ λͺ©μ μμ±μ΄ λΆμ‘±ν΄ λ§μ μμ μ΄ νμνλ μ μ΄ μμ¬μ μ΅λλ€. νΉν λ°±μλμ νλ‘ νΈμλ κ°μ API μ°κ³μμ μμ μ΄ μ¦μμ Έμ 머리μνκ³ νλ μκ°μ΄ λ§μμ΅λλ€. μμΌλ‘λ νμλ€κ³Ό λ§€μΌ νμλ₯Ό ν΅ν΄ μν©μ μ κ²νκ³ , μ λ κ² κ°μΌλ©΄ λΉ λ₯΄κ² ν¬κΈ°νκ³ , κ·Έ μλμ§λ‘ μμ±λ λμ κ²°κ³Όλ¬Όμ μμλΆλ κ² λ λ«κ² λ€λ μκ°μ΄ λ€μμ΅λλ€.
λΉμ·ν μ€λ ₯λμ μ¬λλ€κ³Ό νμ νμ¬ μ§ννλ νλ‘μ νΈλΌ κ±±μ κ³Ό μ€λ μ΄ λ§μλ κ² κ°μ΅λλ€. λ€νν λͺ¨λ λνλ μ ν΅νκ³ νμ μ κΈμ μ μΈ μμΈλ₯Ό κ°μ§κ³ κ³μ μ νΈλ¬λΈ μμ΄ μ§νλμμ΅λλ€. νμ λ΄μμ μ²μμΌλ‘ μ§ννλ νλ‘μ νΈμκΈ°μ μ€μΌμ€ κ΄λ¦¬κ° λ―Έν‘ν λΆλΆμ΄ μμ΄, νλ°λΆμ λ€μ 체λ ₯μ μΌλ‘ 무리λ₯Ό νλ©° μ§ννκ² λμμ΅λλ€. μ°¨ν μ§νλ νλ‘μ νΈμμλ μ¬λ¬ μν©μ κ³ λ €νμ¬ μ€μΌμ€ κ΄λ¦¬ λ° μ€κ³μ 컨λμ κ΄λ¦¬λ₯Ό μ² μ ν ν΄μΌκ² λ€κ³ μκ°νμ΅λλ€.
첫 νλ‘μ νΈλ₯Ό νλ₯ν νμλ€κ³Ό ν¨κ»ν μ μμ΄ μ λ§ μ’μμ΅λλ€. Gitκ³Ό GitHub μ¬μ©λ², νμ νλ‘μΈμ€, κΈ°λ₯μ μΈ λΆλΆ λ± λͺ°λλ κ²λ€μ λ§μ΄ λ°°μΈ μ μμλ μ μ΅ν μκ°μ΄μκ³ λ¬Έμνμ μ€μμ±λ κΉ¨λ¬μμ΅λλ€. μμ¬μ λ μ μ λ°±μλ μμ£Όλ‘ κ°λ°μ μ§νν΄μ νλ‘ νΈμλλ₯Ό νμ§ λͺ»ν΄ μμ¬μ μκ³ λ€μ νλ‘μ νΈ λλ λ°±μλμ νλ‘ νΈμλλ κ°μ΄ μ§ννκ³ μΆμ΅λλ€. μ΄λ² ν νλ‘μ νΈλ₯Ό ν΅ν΄ μ κ° μμ§ λͺ»νλ κΈ°μ μ€νμ΄ λ§λ€λ κ²μ λκΌκ³ , κ·Έλ§νΌ λ°°μΈ κ²λ λ§λ€λ κ²μ κΉ¨λ¬μμ΅λλ€. λ§μ§λ§μΌλ‘, νλͺ©ν λΆμκΈ°μμ νμ ν μ μμ΄μ μ’μκ³ , λͺ¨λ₯΄λ λΆλΆμ΄ μμ λ μΉμ ν μλ €μ€ μ°λ¦¬ νμλ€μκ² μ§μ¬μΌλ‘ κ°μ¬λ립λλ€.
μ λλ‘ λ νμ μ κ²½νν΄λ³Έ κ² κ°μ΅λλ€. κΈ°μ‘΄μ νλ νλ‘μ νΈμλ λ€λ₯΄κ² μꡬμ¬ν λΆμ, API λͺ μΈμλ₯Ό κΌΌκΌΌν μμ±νλ©° μ΅λν μ€λ¬΄μ κ°κΉκ² λ¬Έμν νλ €κ³ λ Έλ ₯νμ΅λλ€. νλ€ λλ λ§μμ§λ§, μ±μ₯νλλ° μλμ§κ° λλ νμλ€μ λ§λμ μ’μ κ²½νμ΄μμ΅λλ€. νλ€μμ§λ§ μ¬λ―Έμμκ³ ν΄λ³΄κ³ μΆμλ νλ‘μ νΈ μν€ν μ² μ€κ³μ CI/CD, React Queryλ₯Ό μ¬μ©νμ¬ μ΅μ κΈ°μ μ μ΅νμ λ§μ μ±μ₯μ νλ€κ³ μκ°ν©λλ€.


















