백엔드
-
[테스트 격리] 일관된 테스트 격리를 적용하는 트러블 슈팅백엔드/Spring 2023. 8. 6. 01:56
제 팀은 각 테스트 종류마다 테스트 격리를 아래와 같이 진행했습니다. 1. 인수 테스트 : BeforeEachCallback을 사용한 DatabaseCleaner 2. 서비스 테스트 : @Transactional 3. 리포지토리 테스트 : DatabaseCleaner 4. 도메인 테스트 : 없음 여기까지만 보면 바로 문제를 파악하신 분들도 있겠네요 😅 1. 테스트 코드가 실패하다 아무런 문제 없이 프로젝트를 진행하고 있던 어느 날, 느슨해진 테스트 코드 작성에 긴장감을 불어넣는 상황이 발생했습니다. 로그인 기능을 구현하는 브랜치에서 테스트를 돌리는데, 서비스 테스트 1개가 실패하는 것...!! 처음에는 서비스 메서드 자체에 문제가 있는 줄 알았습니다. 하지만 생각해보니 만약 메서드 로직이 잘못 됐으면 테..
-
[Spring] 테스트 코드 수행 시간 최적화하기백엔드/Spring 2023. 5. 8. 22:50
결론 AS-IS: 40여개의 테스트 수행시간 - 13초 ~ 14초 TO-BE: 80여개의 테스트 수행시간 - 2초 1. @SpringBootTest, @WebMvcTest, @JdbcTest 위 세가지는 테스트에서 사용할 수 있는 어노테이션입니다. 각 어노테이션은 생성되는 빈의 수에 따른 차이가 존재합니다. @SpringBootTest는 실제 서버 실행시 필요한 빈을 모두 생성합니다. @WebMvcTest는 웹 환경에 필요한 빈만 생성합니다. @JdbcTest는 Jdbc 환경에 필요한 빈만 생성합니다. 이렇기 때문에 테스트하는 목적에 따라 어노테이션을 잘 활용해서 적용할 수 있습니다. 위 세가지 어노테이션 말고도 다양한 테스트 어노테이션이 있으니 잘 적용하면 시간을 살짝 단축시킬 수 있습니다. [예시] ..
-
[Spring] Dispatcher Servlet에서 핸들러가 저장하고, 매핑되는 과정백엔드/Spring 2023. 4. 21. 23:49
프로그램이 실행되면 어떻게 핸들러가 만들어지고, HTTP 요청을 하면 어떻게 매핑이 되는 것일까? 1. 서론 한 크루가 컨트롤러 클래스를 @Bean으로 등록해서 사용하려니까 오류가 발생했었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Configuration public class SpringConfig { private final DataSource dataSource; @Autowired public SpringConfig(final DataSource dataSource) { this.dataSource = dataSource; } @Bean public RacingGameController racingGameContro..
-
@Transaction를 적용하면 어떻게 하나의 Connection을 사용할까?백엔드/Spring 2023. 4. 14. 00:11
자동차 경주 웹 미션을 하는데 페어가 JdbcTemplate update를 여러 번 호출하면 @Transaction 을 적용해도 Connection이 여러번 열리고 닫히는지 궁금해했다. 그래서 JdbcTemplate update 내부 코드를 보니까 update를 할 때마다 Connection이 한 번 열리고 닫히는 것 같아보였다. 그래서 집에 돌아와 @Transaction을 적용하면 어떻게 달라지는지 내부 코드를 보고 정리를 해보았다. 먼저 JdbcTemplate의 update 코드를 확인해보자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 @Override public int update(final PreparedStatementC..
-
[Spring] 스프링 기본백엔드/Spring 2023. 4. 11. 09:00
1. DI (Dependency Injection) 객체 간의 의존성을 외부에서 주입하는 방식 - 장점: 낮은 결합도를 가지고, 더 쉽게 테스트할 수 있음 - 낮은 결합도를 가지면 장점: 개방 폐쇄 원칙의 장점을 가짐 (코드 재사용, 확장에 용이해짐) 2. Spring Bean 스프링에서 관리하는 객체로 IoC 컨테이너에 의해 생성되고, 관리되어짐 Bean을 등록하는 방법은 @Configuration과 @Bean을 사용하거나, @Component를 사용할 수 있음 3. IoC 컨테이너 IoC 컨테이너는 객체의 생명주기를 관리하는 곳임 이건 프로그래밍에서 쓰이는 컨테이너와 뜻이 같지만, 스프링에서 IoC가 추가된 이유는 개발자가 직접 객체의 생명주기를 관리하지 않고, 프레임워크가 대신 수행하기 때문임 Io..
-
우테코 레벨 1이 끝나고 다시 보는 SOLID백엔드/객체지향 | 디자인패턴 2023. 4. 6. 00:55
https://hello70825.tistory.com/530 [SOLID] 객체지향 설계 원칙 우아한테크코스 프리코스를 할 때, 인터넷에서 뒤적뒤적 거리면서 공부를 했었지만 간단한 코드와 글만 봐서는 이해가 되지 않았었다. 그런데 지금 객체지향 책을 읽어보니 이해가 되어서 나중 hello70825.tistory.com 우테코 프리코스가 끝나고, 본 과정을 시작하기 직전에 SOLID에 대한 글을 포스팅 했었다. 하지만 이때에는 실제 코드로 적용을 하면 어떻게 될지 제대로 가늠이 안갔는데, 레벨 1을 진행하면서 어느정도는 알게 되었다고 말할 수 있다. TDD를 하면서 SRP가 무엇인지 제대로 알게 되었고, 체스 미션에서 다중 if문을 제거하면서 OCP가 얼마나 중요한지 알게 되었다. 이외에도 다른 원칙들이..
-
[Java] @BeforeAll과 static block의 차이백엔드/Java 2023. 3. 1. 09:00
책에서 메모리 구조를 공부하다가 갑자기 테스트 어노테이션을 찾아보라는 말이 나왔다. @BeforeClass를 찾아보라고 했는데, JUnit4가 @BeforeClass이고, JUnit5는 @BeforeAll을 사용한다. @BeforeAll @Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @API(status = STABLE, since = "5.0") public @interface BeforeAll { } - 어노테이션이나 메서드에 @BeforeEach를 붙일 수 있다. - 런타임(프로그램 종료 전까지)동안 어노테이션이 남아있다. - JavaDoc을 생성할 때..
-
[우아한테크코스 5기] 3주차 후기백엔드/우아한테크코스 5기 2023. 2. 27. 10:23
기간: 2023/02/20 (월) ~ 2023/02/26 (일) 자바 메모리 관리에 대해 블로그 포스팅을 하려다가 여기에 쏟는 시간이 생각보다 너무 오래 걸리고, 이렇게까지 글을 올려야하나라는 생각이 들어서 거의 후기글만 올릴 것 같다. 지금 공부에 다음달엔 데이터엔지니어쪽 공부도 추가로 하기로 결정했다. 블로그 포스팅하는 시간이 줄었으니까 나름 시간이 생기지 않을까라는 생각이 든다. 캡틴 포비와 이야기를 나누었다. 책에 T 메모리라는 키워드가 계속 나와서 JVM의 Runtime Data Area와 뭐가 다른지 검색하고 있었는데, 포비와 인사를 한 뒤 포비가 메모리에서의 힙과 스택의 차이점을 말해보라고 하였다. JVM에 대해서도 아직 공부하기 전이라 자료구조 스택에 대해 말을 했는데, 다시 물어보아서 이..