© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💻
[코딩] 리팩토링 Related to Project (Property)
하드코딩된것 상수로 변경하기 (코드리뷰 사항)
Repository 인터페이스 변경
으로 인해 기존 Repository 코드들 깨짐
BeforeAll과 AfterAll 작동 안함?? 문제
Q
UUID 별로인데 Long으로 바꾸면 안되나? UUID를 해야하는 이유가 꼭 있을까?
테스트에서 yaml 속성 가져오기 Spring Boot 프로젝트에서 application.yml
과 secret.yml
, 2개의 프로퍼티를 적용하려면 아래와 같이 SpringApplicationBuilder를 이용해 해결할 수 있었습니다.
하지만 테스트 코드에서는 프로퍼티를 어떻게 가져와야 할 지 고민하던 중 @SpringBootTest 에 properties속성이 있는것을 발견했고 위의 사용법과 동일하게 사용할 수 있습니다. @DataJpaTest , @WebMvcTest 에도 properties 속성이 존재하는 걸로 보아 슬라이싱 테스트들에도 동일하게 적용할 수 있을 것으로 보입니다.
GET /api/v1/vouchers
바우처 전체 조회
POST /api/v1/voucher
바우처 추가
GET /api/v1/voucher/{id}
바우처 상세 조회
POST /api/v1/voucher/query
바우처 조건별 조회
DELETE /api/v1/voucher/{id}
바우처 삭제
## SpringBoot Basic Weekly Mission
###📝 요구사항(Week 2)
**🔹(기본)바우처 관리 애플리케이션**
- [-][1]**단위테스트 작성**
- [v][2]**UserRepository 구현 (with JdbcTemplate)**
- [v][3]**VoucherRepository 구현 (DB) 관리**
**🔸(심화)바우처 지갑 만들기**
- [v][4]**고객 바우처 할당 기능**
- [v][5]**고객 바우처 조회 기능**
- [v][6]**고객 바우처 제거 기능**
- [v][7]**특정 바우처를 보유한 고객 조회 기능**
@SpringBootApplication
public class Application {
private static final String PROPERTIES =
"spring.config.location="
+"classpath:/application.yml"
+",classpath:/secret.yml";
public static void main(String[] args) {
new SpringApplicationBuilder(RecruitJogboWeb.class)
.properties(PROPERTIES)
.run(args);
}
}
@SpringBootTest(properties = "spring.config.location=" +
"classpath:/application.yml" +
",classpath:/secret.yml"
)
GET http://localhost:8080/api/v1/vouchers
Accept: application/xml
<list>
<com.example.voucherproject.voucher.model.Voucher>
<id>fc001d5f-e17b-4a2a-a08e-fde0ee5b922d</id>
<type>FIXED</type>
<amount>1000</amount>
<createdAt>2022-04-24T19:48:11.311</createdAt>
</com.example.voucherproject.voucher.model.Voucher>
<com.example.voucherproject.voucher.model.Voucher>
<id>773e8c02-ec0c-4a2f-886d-799bf8c1a85a</id>
<type>FIXED</type>
<amount>42</amount>
<createdAt>2022-04-28T20:23:52.229</createdAt>
</com.example.voucherproject.voucher.model.Voucher>
</list>
GET http://localhost:8080/api/v1/vouchers
Accept: application/json
[
{
"id": "fc001d5f-e17b-4a2a-a08e-fde0ee5b922d",
"type": "FIXED",
"amount": 1000,
"createdAt": "2022-04-24T19:48:11.311",
"updatedAt": null
},
{
"id": "773e8c02-ec0c-4a2f-886d-799bf8c1a85a",
"type": "FIXED",
"amount": 42,
"createdAt": "2022-04-28T20:23:52.229",
"updatedAt": null
}
]
POST http://localhost:8080/api/v1/voucher
Accept: application/json
Content-Type: application/json
{
"type": "PERCENT",
"amount": 5
}
{
"id": "22fe64d4-3ec9-48ea-b76a-87789bc08a84",
"type": "PERCENT",
"amount": 5,
"createdAt": "2022-04-29T08:50:14.266",
"updatedAt": "2022-04-29T08:50:14.266"
}
POST http://localhost:8080/api/v1/voucher
Accept: application/xml
Content-Type: application/json
{
"type": "PERCENT",
"amount": 7
}
<com.example.voucherproject.voucher.model.Voucher>
<id>302a6066-e1dc-46f2-a558-4c81175825ca</id>
<type>PERCENT</type>
<amount>7</amount>
<createdAt>2022-04-29T08:50:55.456</createdAt>
<updatedAt>2022-04-29T08:50:55.456</updatedAt>
</com.example.voucherproject.voucher.model.Voucher>
GET http://localhost:8080/api/v1/voucher/302a6066-e1dc-46f2-a558-4c81175825ca
Accept: application/json
{
"id": "302a6066-e1dc-46f2-a558-4c81175825ca",
"type": "PERCENT",
"amount": 7,
"createdAt": "2022-04-29T08:50:55.456",
"updatedAt": null
}
POST http://localhost:8080/api/v1/voucher/query
Accept: application/json
Content-Type: application/json
{
"type": "FIXED",
"from": "2022-04-11"
}
[
{
"id": "30554b40-3276-403f-8c04-b897cc3b8319",
"type": "FIXED",
"amount": 1222,
"createdAt": "2022-04-28T15:46:27.485",
"updatedAt": null
},
{
"id": "4272f4d2-2002-4017-8909-94e611eb0053",
"type": "FIXED",
"amount": 50,
"createdAt": "2022-04-28T17:31:08.017",
"updatedAt": null
},
{
"id": "4841a132-d73b-4086-b863-28d5f58be330",
"type": "FIXED",
"amount": 1209,
"createdAt": "2022-04-28T17:52:55.163",
"updatedAt": null
},
{
"id": "6f673a61-c438-4c2d-a71d-3b9faceedf08",
"type": "FIXED",
"amount": 222,
"createdAt": "2022-04-28T13:52:30.581",
"updatedAt": null
},
{
"id": "773e8c02-ec0c-4a2f-886d-799bf8c1a85a",
"type": "FIXED",
"amount": 42,
"createdAt": "2022-04-28T20:23:52.229",
"updatedAt": null
},
{
"id": "fc001d5f-e17b-4a2a-a08e-fde0ee5b922d",
"type": "FIXED",
"amount": 1000,
"createdAt": "2022-04-24T19:48:11.311",
"updatedAt": null
}
DELETE http://localhost:8080/api/v1/voucher/ee0b4ffa-433e-4ab9-ac72-08c6811d0cea
HTTP/1.1 200
Content-Length: 0
Date: Fri, 29 Apr 2022 00:19:27 GMT
Keep-Alive: timeout=60
Connection: keep-alive
<Response body is empty>