본문 바로가기

분류 전체보기192

[Spring] RestClient, MockRestServiceServer로 단위 테스트하기 애플리케이션에 토스 결제 기능을 추가했다. (참고: 토스페이 결제 연동하기)현재 작성한 애플리케이션은 토스 결제 결과에 따라 로직이 다르게 수행된다.ex. 결제에 성공 -> 예약 성공 / 결제 실패 -> 예약 실패, 사용자 정의 예외 발생 코드를 작성했으니 (TDD 방식을 사용한다면 코드를 작성하기 전) 테스트 코드를 작성해보려고 했다. 그런데 이 과정에서 많은 에러가 발생했고, 코드도 여러번 갈아 엎었다. 😭 관련 자료들을 찾아봤을 때 MockRestServiceServer와 RestTemplate를 사용한 테스트는 많이 있었는데, RestClient를 사용한 테스트 정보는 찾기가 어려웠다.그나마 찾아봤던 내용이 깃헙에 있는 내용인데, 이 방식은 여러개의 RestClient를 생성하지 못한다는 문제가.. 2024. 6. 2.
[우아한테크코스] Lv. 2 - 6주차 회고: 여유 찾기 이번주는 이상하게 여유로웠던 일주일이었다.분명 해야할 미션들도 있고,  난이도도 있어서 고민해야하는 부분도 많았다.그런데 왜 여유로웠지? 생각해보니 내 마음가짐이 달라졌기 때문이다. 비교하지 않기학창시절부터 우리는 끊임없는 경쟁속에서 지내왔다. 좋은 성적을 받아야했고, 좋은 대학, 그리고 좋은 직업을 갖기 위해 끊임없이 노력했다. 그러기 위해서는 남들보다 많이 알아야했고 남들보다 빨라야했다. 그리고 그런 자세가 나에게 이미 너무 당연하게 배어있었다.그래서일까, 크루들이 미션을 완료하고 제출하면 슬랙의 '코드리뷰' 채널에 [XX님이 리뷰를 요청했습니다.] 라는 글이 올라오는데, 이 글을 볼 때 마다 '나도 빨리 해야겠다. 내가 너무 느린가?' 하는 고민을 하기도 했다. 괜히 조급해졌고 나 또한 최대한 빨리.. 2024. 5. 27.
[Spring, JUnit5] 테스트 격리: DB 초기화 (InitializingBean, BeforeEachCallback) 테스트를 진행할 때, 테스트간에 영향을 주어서는 안된다.예를 들어, 삽입 테스트 이후 조회 테스트가 실행되더라도 이전 삽입 테스트 결과에 영향을 받지 않아야한다.그래서 우테코에서 처음 제공되었던 테스트 코드에는 @DirtiesContext가 설정되어있었다.(@DirtiesContext는 간단히 말하면 테스트마다 컨텍스트를 새로 로드하는 설정이다. 그래서 상대적으로 많은 시간이 소요된다.) 테스트 코드가 늘어날수록 테스트에 소요되는 시간이 늘어났고, 그 몇 초 조차 기다리기 싫어진 나는 @Sql을 사용해 테스트 데이터를 초기화하는 방법을 적용했었다.아래와 같은 방식으로 적용 가능한데, 해당 테스트 클래스를 실행할 때 reset_test_data.sql을 실행하겠다는 의미이다. 실행되는 옵션으로 BEFORE.. 2024. 5. 25.
[우아한테크코스] Lv. 2 - 5주차 회고: 아이스 브레이킹의 중요성 레벨 2 새로운 미션이 시작된 기간이었다.이번 미션의 페어는 같은 조 조원이라서 좀 더 편하게 진행할 수 있었다. 아이스브레이킹, 스몰토크페어 활동을 시작하기 전, 페어가 스몰토크를 제안했다.이때까지 페어프로그래밍을 하기 전에는, 각자 상황이나 컨디션 공유 등 가볍게 아이스브레이킹을 했었다. 그런데 이번처럼 본격적으로(?) 이야기를 나누자고했던 분은 처음이라 신기하기도하고 좋기도했다.분위기도 환기할겸 근처 카페에서 이런저런 얘기를 나눴다. 어떻게 우테코에 오게되었는지, 어떤 일을 했었는지(이번 페어와 나 둘 다 일을 해본 경험이 있어서 서로 공감하면서 나눌 수 있는 얘기들이 많았다.), 앞으로의 계획은 어떤지, 지금 어떤 고민들을 하고있는지 등 정말 많은 얘기를 했다.그런 일상 얘기 뿐만아니라 프로그래밍.. 2024. 5. 20.
[JPA] @Embedded, @Embeddable 개념과 사용법 이번 미션에서는 기존에 JDBC를 통해 관리하던 테이블을 JPA로 전환하는 작업을 진행했다. 그 과정에서 '객체'를 필드로 갖는 엔티티를 테이블에 저장할 때,데이터를 어떻게 테이블에 넣을 수 있을지 고민했었는데, 그 과정을 기록해보려고한다. * JPA 자체에 대한 내용은 생략했다. 필요하면 아래 게시글을 참고하기를 바란다.JPA(Java Persistence API)엔티티간 연관관계 매핑Spring Data JPA(데이터 액세스 계층 구현) 내용을 정리하면서 과정을 좀 더 간단히 나타내기 위해 실제 코드가 아닌 예시 코드를 별도로 작성하였다. 1. Member 클래스 정의회원 정보를 담고 있는 Member 객체가 있다고 가정하자.회원의 고유 식별자, 이름, 이메일, 비밀번호, 주소를 필드로 갖는다.@En.. 2024. 5. 16.
[우아한테크코스] Lv. 2 - 4주차 회고: 학습 방법 찾기 레벨2 기간의 거의 절반이 지났다.처음 레벨2를 시작할때, 스프링이라는 야생에 던져진(?)듯한 느낌을 받기도했는데지금 생각해보니 그 또한 잘 설계된 과정이었다.나만의 학습법 찾기이번 레벨 OT에서도 이야기했던 부분인데,개발자라면 자신만의 학습 방법을 찾는 것 또한 중요하다고한다.새로운 기술은 계속해서 나오고, 변화 속도 또한 빠르다.그 속에서 뒤쳐지지않고 계속 나아가려면 스스로 학습하는 방법을 알아야한다.지금은 그 연습을 하고있다.책 읽기, 강의 듣기, 공식문서 보기, 주변 사람들과 토론하기 등 학습할 수 있는 방법은 무궁무진하다.그래서 나도 요즘은 하나씩 시도를 해보고있다.예전에는 무조건 구글링만 했었다면,이제는 관련된 공식문서를 먼저 찾아본다.공식문서만으로 이해가 어렵다면 관련 포스팅을 찾아보기도 하.. 2024. 5. 13.