블로그
전체 42025. 03. 30.
0
[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 4주차 발자국
학습 내용Test Double 이란?테스트 중인 시스템의 일부분이 완전히 준비되지 않았거나 테스트하기 어려운 상황에서 그 대안으로 사용될 수 있는 가짜 컴포넌트를 Dummy : 아무 것도 하지 않는 깡통 객체Fake : 단순한 형태로 동일한 기능은 수행하다, 프로덕션에서 쓰기에는 부족한 객체Stub : 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체Spy : Stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체Mock : 행위에 대한 기대를 명세하고, 그에따라 동작하도록 만들어진 객체더 나은 테스트를 작성하기 위한 방법테스트간의 독립성을 보장하자.한 문단에, 하나의 주제만 가지고 테스트를 작성하자회고이번 주에는 readable 코드에서 리팩토링한 코드에 테스트를 작성하는 과제가 있었다.테스트 코드를 작성하면서 이 코드는 꼭 테스트를 작성해야하나 라는 생각이 드는 테스트 코드가 있었고, 이 코드는 테스트 코드 작성하기가 너무 어려운데? 라고 생각되는 코드가 있었다.우선 테스트가 가능한 부분에 대해서는 작성하긴 하였지만, 리팩토링을 통하여 더 많이 작성할 수 있을것 같다는 생각이 들었지만 하지 않았던게 아쉬웠던것 같았다.
백엔드
・
백엔드
2025. 03. 30.
0
[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 3주차 발자국
학습 내용Presentation Layer TestPresentation Layer는 클라이언트와 가장 맞닿아 있는 레이어이고, Controller에 해당한다.비지니스 로직을 포함하지 않고, 유저의 요청을 비지니스 레이어로 전달하고 결과를 반환하는 역할을 한다.요청에 대한 파라미터들이 의도한대로 받아오는지 테스트한다.비지니스 로직에 관련된 부분은 최대한 배재한다.특정 상황에 따른 요청의 응답이 의도대로 동작하는지 테스트한다 Business Layer Test서버 애플리케이션의 비지니스 로직을 가지고 있는 레이어이다.비지니스 로직의 의도한대로 동작하는지 테스트한다.해피 케이스와 예외 케이스 모두 작성한다.Persistence Layer 데이터의 영구 저장과 관리를 당담하는 부분일반적으로 데이터베이스와의 상호작용을 처리한다 해당한다.데이터베이스에 연결되어 원하는 데이터가 잘 삽입, 조회 되는지 테스트한다.
2025. 03. 30.
0
[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 2주차 발자국
학습 내용주석의 양면성주석을 작성할 때, 자주 변하는 정보는 최대한 지양해서 작성한다정책이 변하거나 코드가 변경되었다면, 주석도 잊지 않고 함께 업데이트 해야한다.패키지 나누기패키지는 문맥으로써의 정보를 제공할 수 있다.패키지를 쪼개지 않으면 관리가 어렵다패키지를 너무 잘게 쪼개도 관리가 힘들다대규모 패키지 변경은 팀원과의 합의를 이룬 시점에서하자오버 엔지니어링불필요한 추상화 x 완벽한 코드는 없다!!!!테스트 코드테스트 코드를 작성하는 이유사람이 수동으로 테스트하는 것은 실수할 위험이 크다.테스트를 자동화 함으로써 시간과 실수 위험을 줄인다.테스트 작성법테스트 세분화하기해피 케이스/ 예외 케이스 나눠서 작성테스트 하나에는 한가지만 검증하기경계값 테스트하기 : 10 이상인지 검증하는 코드가 있으면 10, 11 검증하여 해피/ 예외 케이스 확인하기TDD 테스트 방법통과하는 최소한의 테스트 작성 (그린)실패하는 테스트 작성 (레드)리팩토링하여 성공하기위 과정을 반복회고이번주에는 스터디 카페 코드를 리팩토링하는 과제가 있었다.다른 사람들의 코드를 참고하고 내가 생각하는 리팩토링 후 코드를 비교하면서 공부하였는데 확실히 사람마다 생각이 많이 다른 것을 느꼈고, 코드 리뷰를 보고 내 코드에서 저런것이 부족 하였구나. 저런 부분은 잘 한것 같다를 생각하게 되었다.이번주에는 시간이 없어서 리팩토링을 더 해보지는 못하였지만 시간이 될 때 리팩토링을 다시 진행해 보아야겠다.
2025. 03. 30.
0
[인프런 워밍업 클럽 BE 3기] 백엔드 프로젝트 - 1주차 발자국
1주차 발자취참여 계기사이드 프로젝트나 회사 프로젝트를 진행하다 보면, 몇 달 전에 작성한 내 코드를 보면서 ’이게 무슨 의미지?’라고 생각하는 일이 점점 많아졌다.더 이상 이렇게는 안 되겠다는 생각에 클린코드와 리팩토링에 관한 책을 읽고 나름대로 적용해 보았다. 하지만 내가 제대로 적용한 건지, 아니면 공부한 방식이 잘못된 건지에 대한 의문이 들던 중 워밍업 클럽을 알게 되었다.워밍업 클럽에 참여하면 강사님의 개선되는 코드뿐 아니라 과제와 다른 사람들의 코드도 볼 수 있어, 읽기 좋은 코드를 작성하는 데 많은 도움이 될 것 같아 참여하게 되었다.학습내용추상클린코드를 하는 이유?가독성을 높인다.가독성 상승 -> 코드가 잘 읽힌다 -> 이해하기가 쉽다 -> 유지보수하기 쉽다 -> 시간과 자원이 절약된다. 추상사물을 정확하게 이해하기위해서 중요한 정보는 가려내어 남기고, 덜 주요한 정보는 생략하여 버리는 것 추상화복잡한 데이터와 복잡한 로직을 단순화하여 이해하기 쉽도록 돕는다적절한 추성화: 도메인의 문맥 안에서 핵심 개념만 남겨서 표현하는 것추상화의 가장 대표적인 행위 = 이름 짓기논리 사고의 흐름인지적 경제성최소한의 인지만 가져가 최대의 효율을 내보자사고의 depth 줄이기사용할 변수는 가깝게 선언하기부정어를 대하는 자세부정어구를 쓰지 않아도 되는 상황인지 체크부정의의미를 담은 다른 단어가 존재하는지 고민 or 부정어구로 메서드명 구성해피 케이스와 예외 처리예외가 발생할 가능성 낮추기어떤 값의 검증이 필요한 부분은 주로 외부 세계와의 접점의도한 예외와 예상하지 못한 예외를 구분하기객체지향객체지향이란?관심사를 분리해여 객체로 만들어 높은 응집도와 낮은 결합도의 프로그램을 만드는 것객체지향 SOLIDSRP(Single Responsibility Principle): 단일 책임 원칙하나의 클래스는 하나의 책임을 가져야한다.주문이라는 클래스가 존재할 때 주문 클래스는 주문만 처리해야하고, 결제, 포인트와 같은 다른 책임을 시행하지 않아야한다.OCP(Open Closed Priciple): 개방 폐쇄 원칙확장에는 열려있고, 수정에서는 닫혀있다.수정이 많이 필요한 구현체를 의존하지 않고, 변하지 않는 추상에 의존해야한다.LSP(Listov Substitution Priciple): 리스코프 치환 원칙하위 타입 객체는 상위 타입 객체에서 가능한 행위를 수행한다.상위 타입의 객체에 구현된 기능이 상속받은 하위 타입의 객체에서 의도하지 않은 동작을 하지 말아야한다.ISP(Interface Segregation Principle): 인터페이스 분리 원칙자신이 사용하는 메소드에만 의존interface를 잘게 분리하여, 구현체에서 인터페이스 메서드를 사용하지 않도록 한다.DIP(Dependency Inversion Principle): 의존 역전 원칙변하기 쉬운 것 (구체적인 것) 보다는 변하기 어려운 것 (추상적인 것)에 의존상위 클래스는 하위 구현체에 의존하지 않고, 인터페이스에 의존하여 구현체를 쉽게 변경할 수 있게 해야한다.객체지향 적용하기상속과 조합상속보다 조합을 사용하자부모와 자식의 결합도가 높다조합과 인터페이스를 활용하는 것이 유연한 구조Value Object도메인의 어떤 개념을 추상화혀여 표현한 값 객체값으로 취급하기 위해서, 불변성, 동등성, 유효성 검증 등을 보장해야 한다. VO / EntityEntity는 식별자가 존재한다. 식별자가 아닌 필드의 값이 달라도, 식별자가 같으면 동등한 객체로 취급한다.VO는 식별자 없이, 내부의 모든 값이 다 같아야 동등한 객체로 취급한다.일급 컬렉션일급시민다른 요소에게 사용 가능한 모든 연산을 지원하는 요소일급 컬렉션컬렉션을 포장하면서, 컬렉션만을 유일하게 필드로 기지는 객체컬렉션을 추상화하며 의미를 담을 수 있고, 가공 로직의 보금자리가 생긴다getter로 컬렉션을 반환할 일이 생긴다면, 외부 조작을 피하기 위해, 새로운 컬렉션으로 만들어서 반환해주자.EnumEnum은 상수의 집합이며, 상수와 관련된 로직을 담을 수 있는 공간이다.특정 도메인 개념에 대해서 그 종류와 기능을 명시적으로 표현해줄 수 있다.만약 변경이 정말 잦은 개념은 Enum보다 DB로 관리하는 것이 나을 수 있다.회고메소드 들을 관심사에 따라 분리하여 이름을 짓고 객체로 만들어 관리하는 방법을 배웠다.내가 영어를 잘하지 못하여서 메서드를 지을 때 마다 이름들이 제각기 일 때가 있었는데 좋은 컨벤션을 본것 같다.그리고 메서드 이름을 더 잘 짓기위해서 영어공부를 해야할 것 같다.
백엔드
・
워밍업클럽