블로그
전체 42025. 03. 27.
0
인프런 워밍업클럽 4주차 발자국
학습 내용 요약Stub - 상태 검증. 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체Mock - 행위 검증. 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체Spy - stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체. 일부는 실제 객체처럼 동작시키고 일부만 stubbing할 수 있다.@BeforeEach - 각 테스트 입장에서 봤을 때, 아예 몰라도 테스트 내용을 이해하는 데에 문제가 없는가? 수정해도 모든 테스트에 영향을 주지 않는가? 이 조건들을 만족하면 사용하자일주일 동안의 회고테스트 코드를 작성하며 Mock과 Stub에 대해서 정확한 개념을 알지 못한 채로 사용하고 있었는데, 개념을 잘 정립할 수 있었다. 이번 주 강의를 들으며 가장 기억에 남는 것은 테스트 환경 통합하는 내용이었다. 테스트를 진행하면서 스프링 서버를 띄우는 것도 리소스를 소모하는 것인데, 간과하고 있었다. 환경 통합을 해서 테스트를 진행해봐야겠다. 미션 해결 회고자신의 말로 개념을 정리하는 미션이었는데, 미션을 하면서 다시 한번 리마인드 할 수 있어서 좋았다. 그리고 간단하게 테스트를 배치하는 미션은 @BeforeEach에 대해 더 자세히 생각해볼 수 있었다.인프런 강의 [Readable Code : 읽기 좋은 코드를 작성하는 사고법]을 보고 작성했습니다.https://inf.run/yTUP4
인프런워밍업클럽
2025. 03. 23.
0
인프런 워밍업클럽 3주차 발자국
학습 내용 요약Persistence LayerData Access의 역할비즈니스 가공 로직이 포함되면 안 된다. Data에 대한 CRUD에만 집중한 레이어 Business Layer비즈니스 로직을 구현하는 역할Persistence Layer와의 상호작용을 통해 비즈니스 로직을 전개시킨다.트랜젝션을 보장해야 한다. Presentation Layer외부 세계의 요청을 가장 먼저 받는 계층파라미터에 대한 최소한의 검증을 수행한다.일주일 동안의 회고본격적으로 레이어드 아키텍처에 관한 테스트코드에 대한 강의를 듣는 한 주였다. 코드를 따라서 치면서 강의를 들어서 시간이 거의 2배가 걸렸지만, 기존에 많이 작성해보지 않았던 Controller, Repository 단에 대한 테스트를 경험할 수 있어서 아주 좋았다.미션 해결 회고클린코드에서 리팩토링을 진행했던 코드에 대한 테스트코드를 작성하는 미션이었다. 그래도 테스트코드를 작성했던 경험이 있어서 그런지 이전의 리팩토링 미션보다는 조금 더 수월하게 진행했던 것 같다. 이전에는 @SpringBootTest, @DataJpaTest에 대해서 차이를 잘 알지 못한 채로 테스트코드를 작성했었는데, 차이를 인지한 채로 작성하니까 더 분명하게 테스트를 작성할 수 있었다.인프런 강의 [Readable Code : 읽기 좋은 코드를 작성하는 사고법]을 보고 작성했습니다.https://www.inflearn.com/course/readable-code-%EC%9D%BD%EA%B8%B0%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%82%AC%EA%B3%A0%EB%B2%95/dashboard
인프런워밍업클럽
2025. 03. 16.
0
인프런 워밍업클럽 2주차 발자국
학습 내용 요약1. 객체 지향 적용하기1) 상속과 조합 - 조합을 사용하자. 상속은 수정이 어렵다.2) value object - 도메인의 어떤 개념을 추상화하여 표현한 값 객체불변성, 동등성, 유효성 검증을 보장해야한다.entity는 식별자가 존재한다는 점이 차이점이다.3) 일급 컬렉션 - 컬렉션을 포장하면서 컬렉션만을 유일한 필드로 가지는 객체4) Enum은 상수의 집합이며 상수와 관련된 로직을 담을 수 있는 공간2. 코드 다듬기1) 주석은 우리가 가진 모든 표현 방법을 총동원해 코드에 의도를 녹여내고 나서 그럼에도 전달해야할 정보가 남았을 때 사용하자2) 메서드는 public 메서드 → private 메서드 순으로 나열하는게 좋다.상태변경 → 판별 → 조회 메서드 순으로 나열!3) 패키지 나누기 - 패키지는 문맥으로써의 정보를 제공할 수 있다. 일주일 동안의 회고강의를 들으면서 노션에 내용을 정리했다.정해진 진도표에 따라서 강의를 듣지 못해서 미션도 제대로 수행하지 못했고 강의가 많이 밀렸다..미션 해결 회고혼자서 리팩토링을 하려고 보니, 어디서부터 어떻게 시작해야할지 모르겠고 너무 막막했다. 일단 이번 주에 강의를 다 듣지 못해서 완성도가 낮은 상태로 일단 제출을 했다. 그리고 value object, 일급 컬렉션 등에 대한 내용이 어렵다고 느껴져서 강의를 듣고 실습을 해본 후에 다시 혼자 리팩토링을 하는 연습을 해봐야겠다는 생각이 들었다. 인프런 강의 [Readable Code : 읽기 좋은 코드를 작성하는 사고법]을 보고 작성했습니다.https://www.inflearn.com/course/readable-code-%EC%9D%BD%EA%B8%B0%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%82%AC%EA%B3%A0%EB%B2%95/dashboard
인프런워밍업클럽
2025. 03. 09.
0
인프런 워밍업클럽 1주차 발자국
학습 내용 요약1. 추상과 구체 추상 - 중요한 정보는 가려내어 남기고 덜 중요한 정보는 생략하여 버린다.적절한 추상화 - 해당 도메인의 문맥 안에서 중요한 핵심 개념만 남겨서 표현하는 것하나의 세계 안에서는 추상화 레벨이 동등해야 한다. 2. 논리, 사고의 흐름1) Early return - else 사용 지양2) 사고의 depth 줄이기 - 중첩 분기문, 중첩 반복문 줄이기, 사용할 변수 가깝게 선언하기3) 부정어는 지양한다. 부정어구로 메서드명 구성4) 예외 처리 - NullPointException 방지하기. return null 자제하기 3. 객체 지향 패러다임새로운 객체를 만들 때 주의할 점1) 1개의 관심사로 책임이 정의되었는지 확인하기2) 생성자, 정적 패토리 메서드에서 유효성 검증 가능3) setter 사용 자제4) getter도 처음엔 생성하지 말고 정말 필요할 때 생성하기 → 객체에 메시지 보내기5) 필드의 수는 적을수록 좋다 4. SOLID1) SRP(Single Responsibility Principle) 단일 책임 원칙 하나의 클래스는 단 한 가지의 변경 이유만으르 가져야 한다.2) OCP(Open-Closed Principle) 개방-폐쇄 원칙확장에는 열려있고 수정에는 닫혀 있어야 한다.3) LSP(Liskov Substitution Principle) - 리스코프 치환 원칙상속 구조에서 부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 치환할 수 있어야 한다.4) ISP(Interface Segregation Principle) - 인터페이스 분리 원칙클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안 된다.5) DIP(Dependency Inversion Principle) - 의존성 역전 원칙상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 일주일 동안의 회고강의를 들으면서 노션에 내용을 정리했다. 정해진 진도표에 따라서 강의를 듣지 못했다. 그 주에 정해진 진도를 지키도록 노력해야겠다. 미션 해결 회고public boolean validateOrder(Order order) { if (order.doesNotHaveItems()) { log.info("주문 항목이 없습니다."); return false; } if (order.doesNotHaveCustomerInfo()) { log.info("사용자 정보가 없습니다."); return false; } if (order.isZeroOrNegativeTotalPrice()) { log.info("올바르지 않은 총 가격입니다."); return false; } return true; }가장 먼저 Early return을 위해 else 문을 줄였다. getter가 없다는 가정 하에 order.getItems().size()를 메서드로 처리하여 객체에게 메시지를 보내는 형태로 변경했다. 그리고 부정(!)을 없애고 메서드로 처리했다.논리, 사고 흐름 강의에서처럼 메서드명만 봐도 어떤 작업을 하는지 알아챌 수 있도록 변경했다. 인프런 강의 [Readable Code : 읽기 좋은 코드를 작성하는 사고법]을 보고 작성했습니다.https://www.inflearn.com/course/readable-code-%EC%9D%BD%EA%B8%B0%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%82%AC%EA%B3%A0%EB%B2%95/dashboard
인프런워밍업클럽