4월 30일 어느 덧 백엔드 부트캠프를 시작한지 2개월이 지났다.
1개월 간 프로젝트 & 학습한 내용
4월엔 두 번의 프로젝트가 있었다. 첫 번째 미니 프로젝트는 프론트엔드를 중심으로 하는 프로젝트였고, 두 번째 프로젝트는 Spring boot를 사용한 백엔드가 중심인 프로젝트였다. 두 프로젝트의 느낀 점과 아쉬운 점은 이전 주간 회고에서 작성하였으니 Pass.
학습한 내용은 크게
- React
- Spring FrameWork
- MSA
- 약간의 자료구조와 알고리즘
정도 되는 것 같다.
React의 특징
Single Page Application
useState를 사용하면 현재 상태를 불러올 때 상관없는 다른 부분들도 새로 불러오기에 자원의 낭비가 있다.
이 문제를 해결하기 위해 Recoil을 사용했다.
Spring의 특징
- IOC: 제어의 역전
- 사용자가 아닌 특별한 객체가 제어 권한을 위임받아 각 객체와 흐름을 제어하는 것
- DI: 의존성 주입
- 외부에서 객체 간의 관계를 결정
- 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입시켜주는 방식
- AOP: 관점 지향 프로그래밍
- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어보고 그 관점을 기준으로 각각 모듈화 하겠다는 의미
- MVC 패턴: Model - View - Controller
- Model: 데이터 처리를 담당하는 부분으로 View와 Controller의 어떠한 정보도 가지고 있어서는 안된다.
- View: Interface를 담당하며 사용자에게 보여지는 부분으로 Model이 가지고 있는 정보를 저장해서는 안되고, Model, Controller의 구성 요소를 알아서는 안된다.
- Controller: View에 받은 요청을 가공하여 Model에게 전달하는 부분으로 Model과 View의 정보에 대해 알고 있어야 한다.
Http Method
GET: 리소스를 조회하는 메소드
POST: 새로운 리소스를 생성하는 메소드
그 외 DELETE, PUT 등 다른 메소드는 모두 GET과 POST에서 파생되어 나온 것이라고 한다.
Spring boot
MyBatis를 사용해서 CRUD를 실행시키는 코드를 작성해봤다.
JPA는 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스의 모음이다.
JPA에는 EntityManager라는 것이 있는데 JDBC Template을 사용해서 데이터베이스를 가져오는 것럼 JPA는 EntityManager를 가지고 데이터베이스의 데이터를 가져올 수 있다.
find() / flush() 같은 연산을 통해 직접 영속성 컨텍스트를 비워주는 작업을 해주어야하지만 Spring Data JPA를 사용한다면 메소드 이름을 작성하는 것만으로도 쉽게 쿼리문을 만들어준다.
JPA는 실제로 두 번째 미니 프로젝트를 할 때 다뤄보았는데 Docs도 잘 나와있어서 상황에 맞게 메소드명을 작성해준다면 굉장히 편하게 쿼리문을 접할 수 있었다.
MSA
마이크로서비스 아키텍처로 DDD가 발전한 것이라 볼 수 있다.
DDD는 Domain Driven Design으로 도메인 모델을 중심으로 소프트웨어를 개발하는 방식을 강조하고 도메인의 개념과 규칙을 반영한다. 쉽게 말해, 비즈니스 요구사항에 따라 서비스를 정의하고 이를 구현하여 비즈니스 로직을 분리하고 관리하는 것이라고 생각하면 된다. DDD는 서비스는 분리되어 있지만 DB는 하나라서 DB에 장애가 생긴다면 모든 서비스를 이용할 수 없게된다. 그래서 MSA는 각각의 서비스마다 독자적인 DB를 가지고 있다.
MSA의 장점
- 독립적인 개발 및 배포
- 확장성이 좋다.
- 유연성: 언어 제약이 없다. DB의 제약이 없기 때문에 DB에 맞는 언어를 사용하면 된다.
- 장애 격리: 하나의 장애가 서비스 전체에 영향을 미치지 않아 안정성이 높다.
MSA 단점
- 서비스가 분해되어 있어 유지보수가 어렵다.
- API 설계도 이해도가 높아야한다.
- 데이터 관리에 신경을 써야한다.
- 트랜잭션 설계가 안된다.
- 모니터링이 힘들다.
Gateway와 Eureka
Gateway: MSA에서 클라이언트의 요청을 적절한 서비스로 라우팅해주는 역할을 한다.
Eureka: MSA에서 서비스는 동적으로 변할 수 있는데 이러한 서비스들의 위치와 상태 정보를 관리하는 역할을 한다.
Client -> Gateway -> Eureka -> Service -> DB
정렬
- 선택 정렬: 리스트에서 최솟값을 찾아 맨 앞으로 이동시키는 과정을 반복하며 정렬하는 알고리즘
- 삽입 정렬: 리스트를 정렬된 부분과 정렬되지 않은 부분으로 나누고 정렬되지 않은 부분의 원소를 정렬된 부분에 삽입하는 방식으로 동작하는 알고리즘
- 퀵 정렬: 분할 정복 알고리즘의 한 종류로, 리스트를 기준 원소를 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 나누고 이를 재귀적으로 정렬하는 알고리즘
- 버블 정렬: 인접한 두 원소를 비교하여 필요에 따라 교환하며 리스트를 정렬하는 알고리즘
전반적인 느낀 점
저번 달에 비해 수업과 내용적인 부분에서 어려움을 많이 느꼈다. 아무래도 저번 달에는 자바 / 리눅스 / 웹 프로그래밍의 기초 등 학교에서도 다뤘던 내용들에 대해 복습하는 느낌으로 수업을 들었는데 이번에는 학교에서도 다뤄보지 못한 내용들에 배워 정말 노베이스인 상태로 수업을 듣고 있어서 저번 달보다 어려움을 느끼는 중이다. 하지만 프로젝트를 하면서 모르는 부분에 대해서 자연스럽게 알게되고 물어보고 알려주며 확실히 많은 성장이 이뤄진 듯 하다. 이번 달 프로젝트를 통해 또 느낀 점은 강사님께서는 딱 필요한 시점에 도움을 주고 우리의 성장을 위해서 우리가 스스로 해야할 땐 힌트만 주실 뿐 도움을 주시지 않는다. 우리의 성장이 어느 부분에서 이뤄지는지 아시는 듯 했다. 매니저님은 체력적으로 지친 나를 계속해서 관심을 가져주시고 응원해주셔서 힘이 된다고 느낀 한 달이었다.
Keep
저번 한 달동안은 거의 모든 날 내내 캠퍼스에 남아 있었던 것 같다. 하지만 이것이 집에 가면 풀어지고 늘어지는 내 스스로를 너무나도 내가 잘 알기에 학원에 남아 추가 공부를 하고 가는 것이 바람직하다고 생각해 선택한 일이었다. 이번 달 또한 특별한 날이 아니라면 캠퍼스에 남아서 당일 복습과 추가 공부를 하고 프로젝트를 진행할 것 같다.
Problem
물론 캠퍼스에 남아 공부하는 것은 내가 선택한 일이지만 조금 안일했다고 생각한다. 9시 반까지 남아있는 것은 체력적으로 문제가 되지 않았지만 프로젝트와 정보처리기사 시험이 겹치는 바람에 이후에도 집에서는 쉬지 못하고 계속해서 공부를 진행했고, 이것이 나에게는 오히려 독이 되기도 했다. 체력적으로 지쳐 아침에 일어나는 것이 힘들었고 그로 인해 지각도 있었다. 블로그 회고를 꾸준히 쓰는 것은 성실함을 보여주는 증거인데 출결이 좋지 않다면 모순적인 상황인 것이다! 5월엔 체력적으로 관리를 잘 해서 출석도 잘 챙기고 싶다.
Try
가장 먼저 개인적인 내용이지만 운동을 시작해보려 한다. 초반에는 힘들겠지만 적응이 된다면 운동으로 인해 체력적으로 보강도 되고 체력 관리하기에 좀 더 수월할 것 같다.
5월부터 달력을 넘겨보니 길다면 긴 시간이겠지만 수료까지 사실 얼마 남지 않은 것 같다. 지금도 수업 시간에 코딩 실습을 하거나 프로젝트 기간에는 시간이 빨리 가는데 이제 6월 말부터는 바로 최종 프로젝트에 들어가기 때문에 시간이 빨리 갈 것 같다. 그래서 또 하나의 목표는 슬슬 정확한 진로와 자기소개서에 대해 한 번 고민해보는 것이 좋을 것 같다.
회고에 있어 프로젝트 주간이 있는 회고에는 내가 프로젝트에서 어떤 부분을 맡았고, 어떤 어려움이 있었고 어떻게 해결했는지에 대해 좀 더 세세하게 작성해보는 습관을 들이고 싶다. 이미 두 번의 프로젝트가 지났지만 자세하게 적지 않아서 매니저님 말씀처럼 나중에 같은 어려움을 겪을 때 열어보기엔 도움이 되지 못할 것 같다. 좀 더 세세하게 적고, 나의 어려움을 극복하는데 도움이 되는 자료로 남기고 싶다.
'playdata 회고 > 월간 회고' 카테고리의 다른 글
| 플레이데이터 백엔드 개발 5기 6개월 차 회고 (1) | 2024.08.25 |
|---|---|
| 플레이데이터 백엔드 개발 5기 5개월 차 회고 (1) | 2024.08.05 |
| 플레이데이터 백엔드 개발 5기 4개월 차 회고 (1) | 2024.07.04 |
| 플레이데이터 백엔드 개발 5기 3개월 차 회고 (2) | 2024.06.01 |
| 플레이데이터 백엔드 개발 5기 1개월 차 회고 (2) | 2024.03.31 |