binchoo / spring-boot-210523

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 정독하기
0 stars 0 forks source link

챕터2. 스프링 부트 테스트 코드 작성 #2

Open binchoo opened 3 years ago

binchoo commented 3 years ago

TDD 습관을 들이기 내용 텍스트 응답 테스팅 롬복 라이브러리 DTO, json 응답 테스팅

[Gradle 참고용 자료] https://freelec.co.kr/lecture/%EB%AC%B8%EB%B2%95%EA%B3%BC-%EA%B5%AC%EC%A1%B0%EC%97%90%EC%84%9C-%ED%99%9C%EC%9A%A9%EA%B9%8C%EC%A7%80-%EB%B9%8C%EB%93%9C%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B2%83-gradle/

binchoo commented 3 years ago

hello 테스트 성공함.

image

binchoo commented 3 years ago

롬복 추가 완료.

image

binchoo commented 3 years ago

http://127.0.0.1:8080/hello/dto?name=123&amount=1234

DTO가 Json으로 반환됨을 확인하였다.

image

binchoo commented 3 years ago

[느낀 점] 학부 시절엔 인공지능과 웹 서비스의 개발 언어를 일치 시키려고 Python Django를 사용했었다. 교수님은 Spring과 디자인 철학에 전문가셨고, 우리가 가져온 Django 프레임워크에 대해 많은 질문을 던지셨다 (그의 아들도).

Django를 처음 보곤 그들이 짚고 가려는 맥점은 크게 2가지였다.

  1. 함수형 선언으로만 컨트롤러를 작성하는가? (=views.py)
  2. 의존성 주입을 어떻게 하는가?

즉, 재사용 가능한 코드를 작성하는 프레임워크인지 의문인 거다.

Spring 관점을 보다가 장고가 지칭하는 모델/뷰/템플릿 아키텍처를 보면 views.py의 이름은 면서 역할은 컨트롤러네? 같이 초장부터 삐걱 댈 수 있다.

아무튼, 두 가지 의문에 내 얕은 지식으로 찾은 답은.

  1. 클래스를 사용할 수 있다. 여기서 파생된 의문: 클래스가 언제 인스턴스가 되며, 의존을 주입 받는 시점은 언제인가? 매번 URL 호출마다 객체를 생성하는 허튼짓을 막기 위해 어떤 방법이 제공되는가?
  2. 지식이 얕아서 모른다. 의존성 주입에 대한 심오한 방법론이 있지 않을까 싶다. 여차하면 파이썬 데코레이터 (고차함수+어노테이션)으로 재사용 가능한 코드를 작성할 수 있었을지도?

현재 2장까지 맛을 보며 느낀 점을 적는다. 앞서 일화를 꺼낸 이유는, 그들이 제시한 의문들이 Java Spring이 달달한 슈가로 해결하고 있음을 알았기 때문이다. 많은 내용이 어노테이션을 통해 알아서 처리되고 있다. Django로 첫 예제를 구축했을 때 만큼 삽질이 거의 없었다.

어노테이션이란 스펙에 대하여 나는 일단 아니꼽게 생각한다. C #define 전처리 마냥 언어의 한계를 극복해 자신만의 인터페이스를 만드는 것, 일종의 탈옥 수단으로 본다. Vanilla JS를 좋아하는 편. 롬복을 쓰기보다는 나중에 Kotlin으로 스프링을 쓰자고 생각 중.

하지만 어노테이션 덕분에 개발 UX의 큰 향상이 나오는 터라, 공부할 게 늘어 좋은 것이라고 받아들인다. 커널 프로그래밍도 #define 없었으면 죽어났을 거다. 어쨌든 언어의 스펙이니까 잘 머리에 흡수 해야지.

교수님과 아드님이 Spring을 애호한다는 점에서, 여기서 훌륭한 디자인 철학과, 웹 개발 배터리를 얻을 것임이 분명해 보인다. Effective Java 같이 Java Design Pattern 책들이 Spring을 참조하던 것도 기억난다. 연구실 방 두꺼운 책 한 권을 더 참고하면 더 많은 걸 얻겠지.

한 편, 세계적 추세에서 NodeJS, Django, Go 중 하나를 깊게 파야겠다. Spring 이후로 하나 골라보자.

binchoo commented 3 years ago

[Python에서 DI 컨테이너의 필요성?] 덕 타이핑, 인터프리팅 언어인 파이썬에서 DI 컨테이너 개념은 너무 큰 명세일지도 몰라. image

클라이언트가 필요한 의존성을 그저 "잘, 정확하게" 전달 받을 수 있다면 DI 패턴은 완성된 거 아닐까. 객체를 생성하는 5센트짜리 개념에 25불짜리 단어를 붙이고 있다는 말에 공감한다.