본문 바로가기
후기 & 회고

1주 1스프린트 20회차 회고

by 0xe82de 2023. 4. 23.
반응형

이번 스프린트는 모니터 스프린트다. 6개의 에픽을 진행했다.

순번 구분 에픽 시작 스프린트 에픽 완료 여부
1 웹사이트 1일 ?개 알고리즘 문제 풀기 1회차  
2 스터디 백엔드 스터디 1회차  
3 만들면서 배우는 클린 아키텍처 20회차  
4 인프런 제대로 파는 HTML CSS - by 얄코 20회차  
5 프로젝트 URL 단축 서비스 프로젝트 (four days) 16회차  
6 Real MySQL 8.0 1권 복습 20회차  

 

반응형

 

1. 1일 ?개 알고리즘 문제 풀기

총 8문제를 풀었다. 백준 문제와 프로그래머스 문제를 섞어서 풀었다. 특별히 기억에 남는 문제는 없다.

 

2. 백엔드 스터디 & 3. 만들면서 배우는 클린 아키텍처

 

만들면서 배우는 클린 아키텍처 - YES24

우리 모두는 낮은 개발 비용으로 유연하고 적응이 쉬운 소프트웨어 아키텍처를 구축하고자 한다. 그러나 불합리한 기한과 쉬워보이는 지름길은 이러한 아키텍처를 구축하는 것을 매우 어렵게

www.yes24.com

이번 스프린트에서는 '만들면서 배우는 클린 아키텍처'를 6장까지 읽고 스터디를 진행했다. 지난 스프린트에는 모임을 진행하지 않았는데, 이번 스프린트부터 모임을 진행했다.

 

6장까지 읽고 가장 기억에 남는 것은 DIP의 중요성, Port의 개념, 유효성 검증이었다.

 

DIP

DIP는 의존 역전 원칙으로 SOLID 원칙 중 하나다. 이 원칙은 "고수준 모듈이 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에 의존해야 한다"라는 규칙을 제시한다. 즉, 내가 어떤 객체를 사용할 것인데 해당 객체의 상위 타입이 있다면 상위 타입을 사용해야 한다는 뜻이다. 위 책에서는 이 원칙을 활용해 도메인 계층을 웹, 데이터베이스 계층과 분리하는 것을 확인할 수 있다.

 

아래는 예전에 정리한 SOLID 원칙과 IoC, DIP, DI 글이다.

 

[Software Engineering] SOLID 원칙

SOLID 원칙은 객체지향 설계 원칙으로 다섯 가지의 원칙을 가집니다. 아래의 다섯 가지 원칙을 준수함으로써 소프트웨어를 객체지향적으로 설계하고 구현할 수 있습니다. 단일 책임 원칙 (Single Re

0xe82de.tistory.com

 

[Software Engineering] IoC, DIP, DI

IoC, DIP, DI에 대해 알아봅니다. 본문을 요약하자면 다음과 같습니다. 객체를 사용할 때 IoC 달성을 위해 외부에서 생성자를 통해 객체를 DI한다. 이때 DIP 달성을 위해 주입받을 객체의 타입은 추상

0xe82de.tistory.com

 

Port

책에서는 헥사고날 아키텍처에서 도메인 계층과 외부를 분리하기 위해 Port를 사용한다. 이 Port는 도메인 계층으로 들어올 때와 도메인 계층으로부터 나갈 때로 분리된다. 이 Port 들에 DIP 원칙을 적용하여 계층 간 통신을 안전하게 하고 도메인 계층이 외부를 의존하지 않도록 하는 것이다.

출처 : https://reflectoring.io/spring-hexagonal/

 

유효성 검증

비즈니스 로직을 수행하기 전에 유효성을 검증할 필요가 있다. 회원가입 기능에서 나이를 입력받는다면 해당 나이가 양수인지, 서비스의 정책(15세 이상 가입할 수 있다는 등의 정책)에 맞는지 등의 규칙으로 데이터를 확인해야 한다.

 

나는 그동안 엔티티 규칙 검증을 제외한 모든 유효성 검증을 컨트롤러의 매개변수에 수행했었다(Java에서 지원하는 Validation 기능을 활용해 데이터를 검증했다). 이렇게 할 경우 동일한 도메인 메서드를 사용하는 모든 컨트롤러에 동일한 검증 로직을 추가해야 하는 문제가 있다.

 

책에서는 이러한 검증을 도메인 계층으로 들어가는 Port에서 하라고 제시한다. 이렇게 하면 위에서 언급한 문제를 해결할 수 있다. 도메인 계층으로 들어가는 Port 객체를 생성할 때 생성자에서 유효성 검증을 하도록 하면 된다(도메인 계층의 객체에 대한 규칙은 해당 객체에게 맡긴다).

 

4. 제대로 파는 HTML CSS - by 얄코

 

제대로 파는 HTML CSS - by 얄코 - 인프런 | 강의

코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 HTML & CSS 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런

www.inflearn.com

이번 스프린트부터 HTML CSS 강의를 수강하기 시작했다. 현재 토이 프로젝트를 진행하면서 앵귤러로 화면을 만들고 있는데, 이 강의를 수강하면 도움이 될 듯하다. 강의 시간이 좀 길어서 망설였는데, 조금씩 듣기로 했다.

 

이번 스프린트에서는 섹션 1까지 들었는데, 기본적인 HTML에 대한 내용이었다. 후반부에 HTML, CSS의 심화 내용과 작은 프로젝트를 만드는 듯한데, 완강하면 앵귤러로 개발하는 데 도움이 될 것이다!

 

5. URL 단축 서비스 프로젝트 (four days)

이번 스프린트에서는 두 가지 작업을 진행했다. 그리고 토요일에 백기선님이 유튜브 라이브를 하셔서 코드 리뷰를 받았다.

 

[web] URL 단축 컴포넌트 개발

 

#2 URL 단축 컴포넌트 추가 by 0xe82de · Pull Request #5 · four-days/web

 

github.com

매우 작은 컴포넌트를 만들었다(아직 디자인과 서버 호출 로직 작성이 안 되었지만..).

 

정말 작은 컴포넌트였지만 만들면서 어려웠는데, 앵귤러 프레임워크에 대한 이해도가 아직 낮았기 때문인 듯하다. 기본적인 컴포넌트, 서비스의 사용법과 의존성 주입 방법은 익혔는데, 그 외에 다른 프레임워크 기능을 잘 다루지 못하는 것을 체감했다. 예를 들면 서버 API를 호출하기 위해 HTTP 모듈을 사용해야 했는데, 이 것과 관련해 Observable의 이해도가 낮았고 사용법을 잘 몰랐다. 다음 스프린트 때 학습해서 완성을 해야한다.

 

* 디자인은 4번 에픽 강의를 수강하면서 조금씩 하려고 한다.

 

[core server] DTO 클래스 레코드 타입으로 변경

 

#23 DTO 클래스를 레코드 타입으로 변경 by 0xe82de · Pull Request #24 · four-days/core-server

 

github.com

자바 14에서 record 타입이 추가되었다. class가 아닌 record를 활용하면 사용할 필드를 작성만 해도 getter와 constructor를 사용할 수 있다.

 

위 사진에서 왼쪽이 record이고, 오른쪽은 기존에 롬복을 활용해 사용했던 class다. static 필드가 필요한 경우 record 내부에 작성하면 된다. 또한 객체 생성 시 검증해야 할 로직이 있다면 별도로 생성자를 작성하면 된다.

 

이번에는 DTO에만 적용을 해봤는데, 사용을 해보면서 엔티티나 서비스, 컨트롤러 등에도 적용을 할 수 있을지 고민을 해봐야겠다.

 

코드 리뷰

 

백기선

백기선(a.k.a, Whiteship)의 프로그래밍

www.youtube.com

토요일에 백기선님이 유튜브 라이브를 하셔서 토이 프로젝트 core server 코드를 리뷰 받았다. 백기선님을 포함해 라이브를 보고 계시는 분들의 피드백은 다음과 같았다. 토이 프로젝트에 최대한 반영해야겠다.

  • 테스트 코드 작성 시 @DisplayName을 한글로 사용하는 것이 가독성이 좋다.
  • 테스트 코드에서 통합 테스트(데이터베이스 연동, 스프링 실행, 외부 API 실행 등)의 비중은 모든 서비스들이 다를 것이다.
  • 테스트 코드에서 "모킹이나 스텁을 활용해 통합 테스트를 하지 않고 단위 테스트를 해 테스트 속도를 높이는 것"보다 "외부 환경과 연동해 통합 테스트를 진행해서 문제를 조기에 발견하는 것"이 나을 수 있다.
  • PK는 웬만하면 아무 의미가 없는 Surrogate Key를 사용해 혹시 모를 변화에 대비하는 것이 좋겠다.
  • HTTP 파일에 주석으로 어떤 케이스인지 설명하면 좋겠다.
  • '데이터 중심 애플리케이션 설계' 책을 읽어보고 대용량 데이터를 처리할 수 있도록 서비스를 만들어보면 좋겠다.

 

6. Real MySQL 8.0 1권 복습

이번 스프린트부터 Real MySQL 8.0 1권을 다시 읽기 시작했다. 4장부터 읽기 시작했고, 이번 스프린트에서는 4.1, 4.3, 4.4장을 읽었다. 4.2장은 다음 스프린트에서 읽을 예정이다.

 

간단한 내용이지만 쿼리 실행 구조를 정리해 봤다. 책 후반부에 나오는 내용들도 블로그에 정리하려 한다.

 

쿼리 실행 구조

Reference Real MySQL 8.0 (1권) - YES24 『Real MySQL 8.0』은 『Real MySQL』을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0의 GTID와 InnoDB 클러스터 기능들과 소프트웨어 업계 트렌드를 반영한 GIS 및 전문 검

0xe82de.tistory.com

 


어느새 1주 1스프린트를 20회차까지 진행했다. 20주 동안 진행한 것인데.. 시간이 참 빠른 것 같다.

반응형

'후기 & 회고' 카테고리의 다른 글

1주 1스프린트 21회차 회고  (0) 2023.04.30
1주 1스프린트 19회차 회고  (0) 2023.04.15
1주 1스프린트 18회차 회고  (0) 2023.04.08
1주 1스프린트 17회차 회고  (0) 2023.04.01
1주 1스프린트 16회차 회고  (0) 2023.03.25

댓글