블로그
전체 42025. 03. 27.
0
워밍업 클럽 3기 BE 클린코드 (4주차 발자국) - 아니 이게 그런거였어?
아니 이게 그런거였어?테스트코드를 작성했었던 이전에는 GPT에게 가득 의존했다. @SpringBootTest의 통합환경에서 테스트를 작성하는데 아무것도 모르고 @Mock도 집어넣고... 그냥 대충 돌아가기만 하면 됐다~로 만족했었는데 이번 강의에서 어노테이션들의 존재 이유와 동작원리에 대해 이해하면서 작성할 수 있게 되었다. 이전에는 왜 찾아볼 생각도 안했었을까? 아마 찾을 시간도 없이 테스트코드를 바쁘게 작성하려고 했던 것이 원인이었겠지... 강의에서 배웠던 점앞서 말했던 여러 테스트용 어노테이션 뿐만 아니라, 테스트 코드를 작성하는 데에 자잘한 팁들을 얻어갔다.이전에 코드의 중복성을 제거하기위해 최대한 @BeforeEach에 코드를 넣어야지! 라고 생각했었었는데, 우빈님이 정확히 그부분을 짚어주셔서 뜨끔했었다. 뭐... 그건 과거니까.. 이제는 테스트 환경 혹은 테스트 사이의 독립성을 보장하는 것도 생각하면서 테스트를 작성할 수 있게 되지 않을까 생각한다.또한 "테스트도 비용이다." 라는 우빈님의 말도 생각난다. 이전에는 통합테스트를 여러번 돌릴 때 계속해서 스프링 서버가 띄워지게되면서 이전에 250개정도 되는 테스트를 돌릴때 대략 2분정도 걸려서 아 최적화를 해보고 싶은데 어떻게하지..? 라는 생각을 했었다.근데 우빈님이 하나의 스프링 서버 실행으로 여러 통합테스트를 같이 돌리는 기술(?)을 보여주셨는데 왜 그때 당시에 최적화하려고 노력하지 않았을까 하는 생각이 들었다. 생각보다 단순한 해결책일 수 있었는데.. 이외에도 평소에 궁금했던 private 메서드의 테스트 필요성에 대해서도 평소에 굉장히 궁금했었는데 우빈님의 말을듣고 마음이 편안해졌다. 또한 이전에 Clean Code를 배우고 오니, "private 메서드를 테스트 한다고 느끼면 책임을 분리해야 하는 시기가 온것이다." 라는 말에 크게 공감할 수 있었다.이 외에도 Spring Rest Docs라는 것도 배우고, 뜻 깊은 시간이었다. 고생하셨습니다!!
테스트
2025. 03. 22.
0
워밍업 클럽 3기 BE 클린코드 (3주차 발자국) - 테스트코드 작성했으면 됐지..
테스트코드 작성했으면 됐지..기존에도 테스트코드를 많이 짜왔었다. 하지만 이전에 작성했던 테스트코드는 주먹구구식이었음을 이번에 아주 크게 깨닫게 되었다. 어떻게든 테스트코드를 빨리 작성해야겠다는 압박감 때문이었나.. 테스트코드가 깨지면 바로 GPT에게 물어봐서 해결하기 일쑤였다.그중 가장 크게 충격을 먹었었던 부분은 테스트코드의 @Transactional이 끼치는 영향. 이 부분이었다. 실제 프로덕션 코드에는 @Transactional이 붙어있지 않고, 만일 테스트코드에 롤백의 편의성만을 위해 @Transactional을 붙인다면 테스트 환경이 완전히 불일치 해버리는 상황이 나올 수도 있었겠다라는 생각이 들면서 과연 내가 테스트를 잘 작성하고 있었을까? 하는 의문이 들었다. 어떻게든 테스트코드의 초록불을 보기 위해 노력했지만, 여태까지 나는 실제 프로덕션에 나가는 코드의 실제 동작을 고려하지 않고 테스트 코드를 작성했다는 점을 크게 반성했다.강의에서 배웠던 점아무래도 이번 강의에서 배웠던 점들은 사실 이론적인 것 (Presentation & Business & Persistence layer 층별 테스트 방법)은 기존에 좀 사용했었던 터라, 그것 보다는 라이브코딩을 직접 보고 따라 치면서, 실제 프로덕션 코드를 만들고 테스트하는 그 과정에 대해 많이 집중했었다. TDD를 적용해 나가는 그 방식에 대해 많이 배우고 체득할 수 있었다. 또한 앞서 말했던 것처럼 테스트코드의 @Transactional의 신중한 사용..!! 이부분이 정말정말 큰 배움이었다.
2025. 03. 16.
0
워밍업 클럽 3기 BE 클린코드 (2주차 발자국) - 값진 경험을 하다
값진 경험을 하다대학교 때부터, 취준시절, 그리고 실무를 하고 있는 현재까지 단 한번도 객체지향적인 사고 방식으로 리팩토링을 하겠다고 마음먹었던 적은 없었다. 하지만 이번주에 처음으로 객체지향을 적용시키는 경험을 하였고, 이는 굉장히 값진 경험이었다. 배웠던 내용을 요약하자면.. 지난주 커리큘럼은 이론 위주였다면, 이번 주 커리큘럼에서 배울 수 있었던 것은 미션을 통한 리팩토링 실전 경험이었다. 리팩토링/클린코드에 필요한 자잘한 팁 (주석, 패키지 분리 등등..) 도 배울 수 있었지만 미션에서 얻었던 지식 적용 경험(?) 이 나에게는 가장 큰 수확이었다. 미션과정에서 느꼈던 감정은 아래에 정리해보도록 하겠다.미션 과정에서 느꼈던 점3일정도 미션 내용을 수행하기 위해 노력했기에 그만큼 얻었던 점들이 많았던 것 같다.특히 중복 로직 제거, 일급 컬렉션 적용, 추상화의 수준을 맞추는 메서드 추출 경험은 나 자신에게 칭찬할만한 경험이라고 생각했다. 실제로 지식공유자이신 박우빈님과 일치된 생각으로 비슷하게 리팩토링이 이루어졌다는 것을 확인했을 때, 참 뿌듯했다. 또한, 일급 컬렉션이라는 개념 자체를 이번 강의에서 처음 알게 되었는데 이를 실제 리팩토링 과정에 적용해보면서 필요 이유를 직접적으로 느끼게 되면서 실무에도 적용해보는 순간을 기대하는 중이다.하지만, 부족했던 점도 도드라졌다. 특히 SRP/OCP부분이다. 나름대로 객체의 역할을 분리하기 위해 노력했는데 생각보다 이를 적용한 포인트는 한,두군데 밖에 되지 않았다. 고작 csv 파일을 parsing하기 위한 CsvParser 객체를 둔 점..? 그정도인데, 내가 생각했던 것 보다 기존 코드에서 객체의 역할을 분리할 곳이 훨씬 많았다는 점에서 좀 아쉬웠다. 뭔가 기존 코드를 바라보는 습관때문이었던 것 같다. 한번도 객체지향적으로 리팩토링해보려고 하지 않았으니, 이러한 시야가 트이지 않았던 점이 문제가 아닐까 싶다. 그래서 지금부터라도 그런 시야를 키워보기로 했다! 그리고 지식고유자님이 StudyCafePass라는 인터페이스를 두고 SeatPass와 LockerPass를 구현한 점에서 신선한 충격을 느꼈다. 아, 이래서 인터페이스를 쓰는거구나 라는 확실한 감이 생겨서 비록 실질적으로 내가 구현한 내용은 아니지만, 왠지 모르게 나도 다음엔 이렇게 해볼 수 있을 것 같다. 라는 자신감을 가졌다! 좋은 경험을 할 수 있었던 한주였다.다음주부터 테스트코드를 작성해볼 텐데, 기존에 내가 테스트코드에 대해 가지고 있던 상식들이 또 어떻게 부숴질지 기대하는 중이다.
백엔드
・
리팩토링
・
클린코드
2025. 03. 09.
0
워밍업 클럽 3기 BE 클린코드 (1주차 발자국) - 객체지향에 무릎 꿇지 않기
객체지향에 무릎 꿇지 않기"나는 SOLID원칙에 대해 암기만 했을 뿐, 개발을 하면서 이를 적용하려고 노력해본적 있는가?"박우빈 지식공유자님의 SOLID원칙, 그리고 객체지향 스타일을 적용시켜 리팩토링하는 과정을 보면서 감탄만 나왔을 뿐이다.취준시절부터 취업이후에도 꾸준히 객체지향 언어를 사용하면서, 단 한번도 객체를 객체답게 사용해본적이 없는 것 같다는 약간의 후회..? 안타까움이 밀려왔다. 아직, Day7 의 미션을 시작하진 않고 어떤 내용인지 보기만 했는데, 객체지향,클린코드를 지향하며 바꿔나갈 생각에 막막하기도 하지만, 한편으로는 두근거린다. 배웠던 내용들을 잘 적용시키기 위해 노력해봐야겠다.내가 취준시절, 추상화에대해 정리했던 노션 내용을 뒤져보니 "객체들의 공통점을 추출하여 정의하는 것 (교통수단 - 자동차, 자전거)"라고 정의되어 있었다. 지금 생각해보면 참으로 와닿지 않는다. 하지만 우빈님의 말은 참으로 와닿았다."사물의 특징을 가려내어 포착하는 것"언뜻 보면 비슷하지만, 나에게는 굉장히 다르게 다가왔다.내가 바라보는 추상화는 컴퓨터 세계속에서만 적용되는 느낌이라면, 우빈님이 바라보는 추상화는 마치 살아 숨쉬는 세계속에 적용되는 느낌이랄까?한주간 배웠던 내용은 이런 느낌의 연장선이었다. 섹션 2에서는 추상화를 정의하는 방식에 대해 신선함을 느꼈다면,섹션 3에서는 어떻게 해야 개발자들이 코드에 대해 편하게 이해할 수 있을지에 대해 정리할 수 있었고,섹션 4에서는 SOLID 원칙에 대해 실질적으로 적용하는 과정을 느끼면서 나 또한 SOLID 원칙을 나 스스로 정의해볼 수 있게 되었다. Day2미션은 크게 고민할 거리는 없어서 넘어가고, Day4는 다음과 같이 정의해보았다.섹션 5에서는 객체지향을 적용하는 TIP들에 대해 익혔던 느낌이다.다음주에도 열심히!
백엔드
・
클린코드
・
객체지향