본문 바로가기

Backend9

테스트 코드, 대체 어떻게 쓰는걸까? 흐름을 따라가보자. 개요애플리케이션을 개발하다보면 "내 코드가 정말 제대로 동작하고 있을까?"라는 의문이 들기 마련이다. 또한 시간이 지난 뒤에 코드를 리팩토링하거나 수정할 때, 기존 기능이 깨지지 않았는지도 확인해야한다.그래서 테스트 코드는 단순한 선택이 아니라, 신뢰할 수 있는 소프트웨어를 만드는데 필수 요소라고 생각한다. 이번 글에서는 진행하고 있는 독서 모임 플랫폼 프로젝트의 Club 도메인을 예시로, 코틀린에서 테스트 코드를 어떻게 작성하는지 정리해보았다. 1. 테스트의 목적 정상 동작 검증: 내가 작성한 코드가 예상대로 동작하는지 확인실패 시그널: 기능이 변경되거나 고장났을 때 빠르게 감지리팩토링 안전망: 내부 구현을 바꿔도 외부 동작이 같으면 안심하고 리팩토링 가능 2. 테스트의 기본 구성 (Given - Wh.. 2025. 5. 28.
코틀린 OOP 핵심 총정리 – class, data, object, enum, interface까지 개요이번 글에서는 코틀린의 객체지향 프로그래밍(OOP) 개념을 자바와 비교해서 정리해보려한다. 특히 자바에 익숙한 입장에서 코틀린의 클래스 선언, 생성자, 상속, 인터페이스, 싱글턴 객체, enum, data class 등의 구조를 학습해보자. 1. 클래스 선언 - 기본 구조와 생성자자바에서는 클래스를 선언하고, 필드를 만들고, 생성자를 통해 초기화를 진행하는 방식이 일반적이다.자바public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; }} 코틀린class Person(val nam.. 2025. 5. 15.
자바와 코틀린 기초 비교 - 변수부터 Null 안정성까지 개요 이번 스터디의 주제로 새롭게 진행할 토이 프로젝트의 언어를 코틀린으로 정하게 되었다.자바에 익숙한 나는, 자바와 비교하면서 코틀린을 학습하면 더 빠르게 이해할 수 있을 것이라 판단했다.그래서 이번 글에서는 코틀린의 기초 문법에서 변수 선언, 함수, 문자열 처리, 조건문, null 처리를 중심으로 자바와 코틀린을 비교하며 정리해보려한다. 1. 변수 선언 - val 과 varval 과 var 를 보자마자 가장 먼저 떠오른건, 자바의 var 키워드와 자바스크립트의 val 였다. 자바는 원시 타입(int, double..)과 참조 타입(Integer, Double)을 구분하지만, 코틀린에서는 모든 것이 객체처럼 동작한다. 또한 타입 추론을 지원하기 때문에 코드가 더 간결하다는 장점이 있다. JavaKo.. 2025. 5. 14.
Spring Boot에서 일관된 API 응답을 위한 예외 처리 전략 개요API를 개발하면서 처음엔 ResponseEntity를 사용해서 응답을 세밀하게 제어할 수 있다는 점이 유용하다고 생각했다. 그런데 데이터를 반환할 때와 없을 때 응답 포맷이 달라지면서 클라이언트가 이를 일관되게 처리 하기 어렵다는 문제를 겪게 되었다. 그래서 찾아보니 공통 응답 포맷을 도입해서 모든 API가 같은 구조로 응답을 반환하도록 할 수 있다는걸 알았다. 그런데 공통 응답 포맷을 도입하고 나니, 예외가 발생했을 떄의 처리도 일관되게 관리할 필요가 있다는 생각이 들었다. 예를 들어, 특정 데이터를 찾을 수 없을 때 마다 각 API에서 예외를 처리하는 방식이 달라지면 유지보수에 어려움이 생긴다. 그래서 글로벌 예외 처리 방식을 도입하여, 모든 예외를 한 곳에서 처리하고, 예외 발생 시에도 일관된.. 2025. 3. 27.
MyBatis에서 setter가 없어도 데이터 매핑이 되는 이유 💭 개요 마이바티스에서 조회 결과를 객체에 담으려고 했는데 기본 생성자가 없다면서 오류가 발생 했다. 왜 마이바티스에서 기본 생성자는 꼭 필요하며, setter가 없는데 어떻게 데이터를 매핑 하는 걸까? 💡 진행 1. MyBatis 에서 기본 생성자는 왜 꼭 필요한가? MyBatis는 쿼리 실행 후, SQL 결과를 객체에 매핑할 때 해당 객체를 리플렉션을 통해 인스턴스화 한다. 이 때 기본 생성자가 있어야만 객체를 인스턴스화 할 수 있다.기본 생성자가 없다면, 객체를 생성할 수 없기 때문에 쿼리 결과 데이터를 객체에 매핑할 수 없다.따라서, 기본 생성자는 MyBatis에서 객체를 생성할 때 필수적이다. 기본 생성자가 없다면 MyBatis가 객체를 생성하는데 실패하고, 그 결과 데이터를 매핑할 수 없.. 2024. 12. 19.
MyBatis에서 쿼리 결과와 객체 바인딩 이해하기 💭 개요현재 회사에서는 DB와의 연동을 위해 MyBatis를 사용하고 있다. 그런데 쿼리의 결과와 객체가 어떻게 바인딩 되는지 궁금증이 생겼다.이 과정을 더 깊게 이해하기 위해, 간단한 테스트 코드를 작성해보며 실습해보았다. 💡 진행테스트 객체 public class Task { private Long id; private String text; private int priority; private boolean done;}매퍼 인터페이스@MapperScanpublic interface TaskMapper { List selectAllTask(); List selectAllTaskWithAlias();}Mapper.xml SELECT .. 2024. 12. 16.