길다면 길고, 짧다면 짧은 인턴십기간이 끝났다. 오늘은 인턴십 기간 동안 배운것과 느낀점을 정리해 보려고 한다.
회사 소개와 기술 스택 관련은 이전글 참조
기업 협업 1주차 회고
나는 기존 3개의 프로젝트를 Node.js와 Express를 이용한 백엔드 시스템을 구축하는게 프로젝트의 주요 과제 였다.
시스템은 Layered Pattern으로 구축했고, DB는 MySQL과 TypeORM을 이용했는데, ORM문법을 사용하지 않고 rawQuery문을 사용했다.
Layered Pattern 이란 백엔드 API를 구현할 때 자주 쓰이는 아키텍쳐 패턴으로 역할에 따라 3개의 독립된 Layer를 이용해 코드를 작성 한다.
Layered Pattern은 Presentation layer
, Business layer
, Persistence layer
총 3개의 레이어로 구성되어 있으며, 서로 맞닿아 있는 레이어에만 의존하고, 각각의 역할이 명확하게 분리되어 있다.
├── app.js
├── controllers
│ ├── index.js
│ └── userController.js
├── models
│ ├── index.js
│ └── userDao.js
├── routes
│ ├── index.js
│ └── userRouter.js
├── server.js
├── services
│ ├── index.js
│ └── userService.js
기업협업 동안 Java와 Spring boot를 이용한 관리자 페이지 API를 구축하는 과제를 맡았다.
시스템은 MVC 패턴으로 구축했고, DB는 MySQL과 MyBatis를 이용했다. Spring은 보통 JPA를 이용해 프로젝트를 많이 진행하는데 이번 프로젝트는 Mybatis를 이용한 rawQuery문으로 진행했다.
MVC 패턴이란 Model / View / Controller 3개의 독립된 모듈을 통해 코드를 작성한다는 점에서 앞선 Layered Pattern과 유사하다.
이번 기업 협업을 진행하며, Java를 모르던 내가 API를 작성할 수 있었던 건, Spring boot의 MVC Pattern과 Layered Pattern 전체적인 흐름이 비슷해 Java와 Javascript의 언어적 특성의 차이만 공부하여 작업을 진행해, 우려와 달리 수월하게 진행할 수 있었다.
├── controller
│ ├── PartnerController.java
├── dao
│ ├── PartnerMapper.java
├── domain
├── BaseInfo.java
├── brand
│ └── enums
│ └── UrlType.java
├── dto
├── PartnerDto.java
├── service
│ ├── PartnerService.java
│ ├── PartnerServiceImpl.java
DTO는 MVC패턴의 레이어간 데이터 교환을 하기 위해 사용하는 객체로 순수하게 데이터만 가지고 있으며, 기타 로직을 가지지 않는 객체다.
Spring boot를 사용하면서 처음 어려웠던 게 DTO였다. Express를 사용할 때에는 DTO를 사용하지 않았는데, Spring boot는 DTO에 데이터를 담지 않으면, 레이어 끼리 데이터 전송이 되지 않는다.
필요한 데이터를 DTO에 정의를 해줘야 하는데, 이게 익숙치 않아 초반에 혼란을 겪었다.
Enum은 Enumeration의 약자로 열거, 목록, 일람표 라는 뜻을 갖고 있다.
Enum은 상수 그룹을 나타내는 특수한 class로 생성시 class나 interface와 같은 키워드를 사용하지 않고 enum 키워드를 사용하고, 쉼표로 값을 구분하며, 값은 대문자 여야 한다.
enum의 활용법으로는 DB에 데이터를 저장 할 때는 1~4 과 같은 숫자 데이터를 입력하고, 데이터를 출력 할 때 enum을 통해 데이터를 출력하면 해당 데이터를 변경해 내가 원하는 데이터를 보여 줄 수 있다.
이를 통해 DB의 데이터 비교를 더욱 원할하게 할 수 있고, 출력 데이터를 변경하는 일이 생기는 경우, DB내부의 데이터를 수정하는게 아닌 enum 값을 바꿈으로써 유지보수에도 좋아진다.
이번 기업 협업은 실제 IT기업에서의 업무 프로세스를 체험해 볼 수 있는 귀중한 기회였다.
처음 쓰는 기술, 언어와 같은 blocker를 만났지만, 포기하지 않고 하니 활로가 보였고 더욱 열심히 했다.
기존의 Node.js / Express 조합을 사용하면서 느낀 초기 세팅의 부족과 내가 원하는 대로 구역을 나눠 개발을 한다는게 소규모 프로젝트를 할 경우 장점으로 느껴지지만, 회사 처럼 규모가 커질 경우 제한 사항이 없어 팀원간에 마찰이 생길 수 도 있겠다 생각이 들었었다.
하지만 Java / Spring boot 조합을 사용하면서 초기 세팅의 충실함과 DTO / Enum 등을 통한 코드의 가독성 증가 등을 통해 다른 사람의 코드를 보다 쉽게 파악할 수 있어 더욱 대규모 프로젝트에 알맞아 보였다.
다른 언어, 다른 프레임워크로 개발을 진행해 보았다는게 내게 큰 의미로 다가왔다. 그래서 다음 프로젝트는 기존의 Express 프레임워크가 아닌 nest.js 프레임워크를 이용해 프로젝트를 진행해 보려고 한다.
nest.js는 spring과 유사한 시스템을 가지고 있으며 typescript를 같이 사용함으로써 java와 비슷한 환경을 가질것 으로 보인다.
앞으로 더욱 많은 기술과 언어를 배우며 뛰어난 개발자가 될 것이다.
업무를 하면서 새로운 언어에도 적응해야했는데 그 부분을 잘 헤쳐나가신거 같네요! 소중한 후기 잘 읽고 갑니다🎈