처음 들어갈 때, 나는 서버에 관해 아무것도 모르는 학생이었다.
해봤자, NodeJS JWT랑 CRUD해본정도였다.
들어가서 선배님들이랑 인사를 나누고, 자신의 역할을 정해야했다.
나는 백엔드에 대해 관심이 있고, 프론트엔드는 도저히 못할 것 같아서 백엔드를 선택했다.
나는 백엔드 프레임워크를 내가 원하는 NodeJS를 선택할 줄 알았다.
하지만, 아니었고 선배들이 흔히 사용하고 있는 SpringBoot를 배웠다.
SpringBoot를 처음 배워보는 입장에서 너무 혼잡했다.
물론 내가 디자인 패턴을 배우지 않고 해서 그런 것도 있겠지만,
처음보는 Controller, Service, Repository, DAO, DTO
이런 것들을 보았다. 나는 무슨 외계어인가 싶었다.;;
하지만, 나는 포기하지 않고, 직접 부딪혀 보면서 이게 무엇인지 하나하나 생각해보았다.
Controller는 데이터의 자그만 유효성 검사같은 것들을 하고,
Service는 비즈니스 로직등을 관리하고,
Repository는 JPA로 DB행들을 객체처럼 관리할 수 있었다.
DTO와 Entity의 차이도 알게되었다.
Entity는 DB랑 직접적으로 매핑되는 객체이기 때문에 다른 곳에서 건들 수 없어야한다.
이런 것들을 공부하면서, 조금씩 자신감이 생기게 되었고, 더 열심히, 더 파고 들었던 것 같다.
나는 모르는 게 있으면 무조건 물어봤다. 그냥 일반적인 코드 문제는 GPT나 구글한테 물어봐서 해결했고, 설계나 이런 부분들 그리고 선배가 Github코드를 풀어주셨는데 선배 코드를 분석해서 모르거나 내가 생각했을 때 비효율적인 것 같은것은 바로바로 물어봐서 궁금점을 해결했다. 그로 인해, 설계능력이나 코드를 읽는 능력이 많이 늘어난 것 같다.
이렇게 열심히 갈고 닦아서 SpringBoot로 커뮤니티의 기본적인 기능, 로그인, 회원가입, 댓글, 대댓글, 프로필사진 수정등을 만들었다. 그리고 운영자랑 신고, 밴 기능까지 다 만들었다.
이 다음 부터는 그 프로젝트에 관한 설명을 해보겠다.

Domain 별로 디렉터리를 찍었고, 조금 특이한 케이스만 더 보이게 해서 찍은 사진이다.
나는 이번 프로젝트를 DDD(Domain-Driven Design)을 사용해서 프로젝트의 디렉터리를 구성하였고, 이름도 알아보기 쉽게 구성했다.
그리고 현재는 SOLID 원칙을 준수하여, 코드 최적화까지 마친 상태이다.
더불어 Nginx와 Docker를 이용해서 GCP(Google Cloud Platform)에 배포까지 마친 상태이다.
아직 프론트엔드 에러가 많지만,
https://spacecommunity.vercel.app/
이 링크로 가면 볼 수 있다.
- SMTP서버를 이용한 이메일 인증 문자 시스템
- AWS S3를 이용한 프로필 이미지 시스템
- 문서 및 댓글, 대댓글 시스템
- Role을 이용한, 관리자 역할, 유저 역할 시스템
- UserDetails를 이용한 Ban처리 시스템
- 문서 공지 및 검색 시스템
- Spring Security 및 RefreshToken을 저장하기 위한 Redis, 프론트엔드들을 위해 만든 API명세서, Swagger
- Docker를 활용한 SpringBoot, mysql, redis 이미지화
- Docker-compose를 활용해서, 불필요한 Docker 병렬 실행을 최적화함
- GCP를 활용하여, VPC방화벽 설정 및 DockerHub에 올린 이미지 받기
- Nginx를 이용하여, 여러 was들을 포트포워딩하기 (Nginx도 Docker)
완전 노베이스부터 해보다 보니까 삽질을 한 적이 여러번 있었지만, 포기하지 않고 열심히 노력하여 만들어서 현재까지 백엔드 오류는 하나도 발견되지 않았다. 앞으로도 이런 프로그래머가 되고 싶고, 이런 프로젝트를 계속 해보고 싶다.
그리고 그냥 뭐든 한 번 해보는 것, 포기하지 않는 것이 중요하다는 것도 깨달았다.