본문 바로가기

Backend2

[JAVA] 좋은 객체 지향 설계의 5가지 원칙 (SOLID) 0. 나는 정말 알고 있었을까?그동안 인터페이스를 사용하고, 공부하면서 SOLID 라는 단어는 많이 들었다.강의를 들을 때는 이해한 것 같았지만, 막상 스스로에게 이렇게 질문해 보면 답이 막혔다. “그래서 SOLID가 왜 필요한 건데?” 이 글은 그 질문에 답하기 위해 정리한 기록이다.1. 내가 이해한 SOLID 1) SRP – 단일 책임 원칙 (Single Responsibility Principle) 처음에는 “클래스는 한 가지 일만 해야 한다”라고 이해했다. 지금 이해한 SRP는 이것이다. 클래스는 변경의 이유가 하나여야 한다. 예를 들어 MemberService가 회원 가입뿐 아니라 할인 정책 계산까지 담당한다고 가정해보자.회원 정책이 바뀌어도 수정할인 정책이 바뀌어도 수정이 순간 클래스는 .. 2026. 2. 11.
@Transactional: 테스트 코드와 서비스 코드의 동작 차이 회원가입 테스트 코드를 작성하고 실행하는 강의를 보면서 공부하다가 강사님이 @Transactional 어노테이션을 주석처리하고 테스트를 돌린 것을 못 보고 "왜 나는 테스트 결과를 DB에서 확인할 수 없지?"라고 당황했다. 원인은 테스트 클래스 위에 붙여놓은 @Transactional 때문이었다.@SpringBootTest@Transactional // "트랜젝션 처리를 해야 하니깐 붙여야지"라고 아무 생각 없이 사용했는데, 알고 보니 스프링은 테스트 환경에서 @Transactional을 다르게 취급하고 있었다. 서비스 계층에서는 로직이 성공적으로 끝나면 DB에 커밋하고 예외가 터지면 롤백하지만,테스트 계층에서는 테스트가 성공하든 실패하든 무조건 롤백한다.즉, 테스트가 끝나자마자 스프링에서 테스트에서.. 2026. 2. 1.