이번 프로젝트에서 내가 가장 해보고싶었던(?) 부분이 개발 환경 세팅이다.
실무에서는 선임분들이 개발 환경 세팅을 완료한 후 기능 개발만 할 수 있도록 환경을 구축해줘서 사실 그 프로젝트가 어떤 환경으로 구축되어있는지 잘 몰랐다. 그리고 사실 회사에서는 전에 진행했던 다른 프로젝트의 구조를 그대로 가져오는 경우가 많아서,, 새로 환경을 세팅하는 경우는 드물었다.
물론 이 부분에 대해서는 프로젝트를 파보면서 혼자 공부를 해봤어야 했지만,, 미리 세팅되어 있는 것을 보면서 공부하는 것은 머리에 잘 남지 않아서 이건 진짜 직접 만들어보면서 공부 해야겠다라는 생각이 들었다!!
이 글에서는 개발 환경을 구성하면서 기술 스택을 선정하게된 이유에 대해 먼저 적어보겠다.
많이 쓰니까 그냥 쓴다는 것보다는 왜 이 스택을 사용하는지 알고 쓰는 것이 중요하다고 생각하기 때문에 기술 스택을 사용했을 때의 장점과 선택 이유를 정리해보았다.
💻 1. Backend
Spring Boot + Java
→ 내가 가장 익숙한 언어가 Java이기 때문
Spring Boot
- 빠른 개발 환경 구축과 자동 설정 지원
- 복잡한 설정 작업을 자동화하여 더 쉽게 애플리케이션 개발 가능
- 자동 설정(Auto-configuration), 의존성 관리 제공
Java
- 안정성, 풍부한 생태계
- 객체지향 언어로 유지보수 용이
- 무엇보다 내가 가장 익숙..
Spring Security 6
→ 사용자 인증과 인가를 체계적으로 관리 + 보안
- Spring Boot와의 seamless한 통합으로 개발 생산성 향상
- 보안 관련 복잡한 설정을 프레임워크에서 제공하여 안전한 애플리케이션 개발 가능
Spring Security는 사용할지 말지 고민을 많이 했다.
이유는 사용하기 어렵기 때문 .. 인증 흐름, 필터 체인 구조, OAuth2 등 공부할 것이 아주 많다 -
근데 이왕 개발해보기로 한 거 다 해보자는 마음으로 사용해보기로 했다!
JWT (JSON Web Token) + Redis
→ 무상태 인증(Stateless Authentication) 구조를 만들기 위해
JWT
- 서버에 세션 정보를 저장하지 않는 무상태 인증 방식
- 모바일 친화적 _ 모바일 앱에서는 세션 기반보다 토큰 기반 인증이 적합
- 여러 서버 간 사용자 정보 공유 용이
Redis
- JWT 블랙리스트 처리 및 리프레시 토큰 관리를 위해 선택
- 메모리 기반 저장소로 빠른 읽기/쓰기 성능
- 로그아웃된 Access Token을 블랙리스트로 관리하거나 리프레시 토큰을 저장하는 등, 인증 관련 데이터 처리에 적합
Access Token(JWT)은 클라이언트에서 보관하고, Redis에는 로그아웃된 Access Token 블랙리스트 또는 리프레시 토큰을 관리할 예정
JPA (Java Persistence API)
→ 기존에는 MyBatis만 사용해왔는데, 이번 기회에 JPA 학습을 위해..
- 개발 생산성 : 객체-관계 매핑을 통해 SQL 작성 부담을 줄일 수 있음
- 기본 CRUD 자동화 : 반복적인 데이터베이스 작업을 자동으로 처리
- 객체 지향적 접근으로 코드 가독성과 유지보수성 향상
JPA는 사용하면 할수록 공부할 것이 많아진다고 들었는데 .. 열공해볼게요
📱 2. Frontend
React Native
→ 크로스 플랫폼 개발: iOS/Android 동시 개발 가능
RN을 쓰는 이유는 딱 하나,, 크로스 플랫폼 개발을 위해서이다.
다른 크로스 플랫폼 언어들도 많지만 RN이 이미 사용해본 언어였고, 활용할 수 있는 라이브러리가 꽤 많아서 개발할 때 편할 것이라고 생각했다.
🗄️ 3. Database
MySQL
→ 이유는 딱히 없다. 내가 가장 익숙하고, 무료이기 때문~
- 오랜 기간 검증된 안정적인 관계형 DBMS
- Spring Boot + JPA와의 호환성 우수
4. 아키텍쳐
전체 구조 : Client - Server
- Client: React Native 앱
- Server: Spring Boot (Backend API)
- Database: MySQL
Backend 아키텍처: Monolithic + 3-Tier 구조
- Monolithic: 단일 배포 애플리케이션으로 구성
- 3-Tier 패턴 (Spring Boot 내부)
→ controller - Service - Repository
API 설계: RESTful API
- HTTP 메서드(GET/POST/PUT/DELETE) 기반의 표준화된 API 설계 가능
- 프론트엔드와 백엔드의 역할 분담이 명확해져 유지보수성 향상
- 다양한 플랫폼(모바일, 웹)으로 확장 용이
- 사실 얘도 가장 익숙함
가장 단순한 Monolithic 구조로 진행 .. 사실 아직 아키텍처에 대한 깊은 이해가 부족해서 일단 가장 기본적인 구조로 시작
나중에 서비스가 커지면 MSA도 고려해볼 예정이지만, 지금은 학습과 빠른 개발에 집중하기 위해 단순한 모놀로식으로 진행!!
5. 개발 도구
Backend IDE: IntelliJ IDEA
사실 IntelliJ는 아직 안써봤는데 Java의 IDE는 IntelliJ가 제일 좋다는 말을 하도 많이 들어서 이번 프로젝트를 통해 사용해보기로 했다.
Frontend IDE: VSCode
별 이유 없이 가장 가볍고 익스텐션이 많아 사용하기 편한 IDE로 선정
원래는 백엔드까지 VScode로 사용했었는데 이번에는 백엔드와 프론트를 나눠서 진행해보려고 한다.
아직 모든 기술에 대해 완전히 이해하지 못했지만, 각 기술을 왜 선택했는지는 명확히 하고 시작하면 나중에 봤을 때 더 이해가 쉽겠죠,,?
다음 포스팅에서는 Spring boot 개발 환경 구축에 대해 다뤄보겠다!
💬 개발 관련 피드백은 언제나 환영합니다. 씨몬!
'Side Project' 카테고리의 다른 글
[네컷로그] 3. 사이드 프로젝트 개발 환경 세팅(2) : Spring Boot 프로젝트 세팅 (3) | 2025.07.17 |
---|---|
[네컷로그] 1. 사이드 프로젝트 기획 및 설계(ERD, API명세서, 기능명세서) (0) | 2025.07.15 |
[네컷로그] 0. 사이드 프로젝트 개발 시작 (4) | 2025.07.10 |