본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
Kakao 주소검색 api 살펴보기
- 개발 가이드 | Kakao Developers 문서 (주소 검색 api)
- 외부 api 사용하기 전에 반드시 아래 내용을 검증
- https://developers.kakao.com/terms/latest/ko/site-policies#quota (API 호출제한 반드시 확인)
- REST API 테스트 도구 활용하여 API 테스트
- https://developers.kakao.com/ 카카오 로그인 및 내 어플리케이션 생성
- 앱 키 → Rest API 키 정보 확인 (노출되지 않도록 주의)
Kakao주소검색 api 호출 해보기
- 개발 전 curl 또는 postman으로 api를 직접 호출해보고 결과를 확인해보기
curl -v -X GET "<https://dapi.kakao.com/v2/local/search/address.json>" \\
-H "Authorization: KakaoAK ${REST_API_KEY}" \\
--data-urlencode "query=전북 삼성동 100"
{
"documents": [
{
"address": {
"address_name": "전북 익산시 부송동 100",
"b_code": "4514013400",
"h_code": "4514069000",
"main_address_no": "100",
"mountain_yn": "N",
"region_1depth_name": "전북",
"region_2depth_name": "익산시",
"region_3depth_h_name": "삼성동",
"region_3depth_name": "부송동",
"sub_address_no": "",
"x": "126.99597495347",
"y": "35.9766482774579"
},
"address_name": "전북 익산시 부송동 100",
"address_type": "REGION_ADDR",
"road_address": null,
"x": "126.99597495347",
"y": "35.9766482774579"
},
{
"address": {
"address_name": "전북 익산시 임상동 100",
"b_code": "4514013200",
"h_code": "4514069000",
"main_address_no": "100",
"mountain_yn": "N",
"region_1depth_name": "전북",
"region_2depth_name": "익산시",
"region_3depth_h_name": "삼성동",
"region_3depth_name": "임상동",
"sub_address_no": "",
"x": "126.980268573424",
"y": "35.9816612949055"
},
"address_name": "전북 익산시 임상동 100",
"address_type": "REGION_ADDR",
"road_address": null,
"x": "126.980268573424",
"y": "35.9816612949055"
},
{
"address": {
"address_name": "전북 익산시 정족동 100",
"b_code": "4514013100",
"h_code": "4514069000",
"main_address_no": "100",
"mountain_yn": "N",
"region_1depth_name": "전북",
"region_2depth_name": "익산시",
"region_3depth_h_name": "삼성동",
"region_3depth_name": "정족동",
"sub_address_no": "",
"x": "127.002020445866",
"y": "35.9829740190924"
},
"address_name": "전북 익산시 정족동 100",
"address_type": "REGION_ADDR",
"road_address": null,
"x": "127.002020445866",
"y": "35.9829740190924"
}
],
"meta": {
"is_end": true,
"pageable_count": 3,
"total_count": 3
}
}
테스트 코드의 중요성
- 테스트 코드는 기능에 대한 불확실성을 감소시킬 수 있으며, 개발자가 만든 기능을 안전하게 보호해준다. ex) A라는 기능을 추가로 개발하여 오픈했더니 기존에 잘 사용하던 B라는 기능이 문제 발생
- 테스트 코드 작성은 개발 단계 초기에 문제 발견에 도움을 주기 때문에, 개발 시간을 단축 ex) 충분한 테스트 코드 없이 빠르게 배포 → 배포 후 문제 발생 → 원인 파악, 다시 테스트 및 코드 수정
Spock 프레임워크란?
- Spock란 Groovy 언어를 이용하여 테스트 코드를 작성할 수 있는 프레임워크이며 JUnit과 비교하여 코드를 더 간결하게 작성 가능
- Groovy 언어는 동적 타입 프로그래밍언어로 JVM 위에서 동작하며 Java 문법과 유사
- 테스트 메소드 이름을 문자열로 작성할 수 있으며 given, when, then 코드 블록을 명확히 구분
- Junit의 경우 주석으로 블록을 구분했었고, 메소드 이름 또한 제약사항이 많이 존재
Spock 프레임워크 테스트 코드 작성 순서
- 테스트 클래스는 Groovy 클래스로 생성하고, Specification 클래스를 상속 받는다
- feature(테스트 메서드는) def를 이용하여 함수로 선언하며, 하나 이상 블록이 존재해야 함
- given 블록: 테스트에 필요한 값을 준비한다
- when 블록: 테스트할 코드를 실행한다
- then 블록: when과 함께 사용하며 예외 및 결과 값을 검증한다
- expect 블록: then과 같으며 when을 필요로 하지 않기 때문에 간단한 테스트 및 where와 같이 사용된다
- where 블록: 데이터가 다르고 로직이 동일한 경우 동일한 테스트에 대한 중복 코드 제거 가능
Spock 프레임워크 주요 기능
- JUnit에서 제공하는 주요 요소들은 모두 Spock에서 제공하고 있다
class ExampleSpecification extends Specification {
def setupSpec() {
// run before the first feature method
}
def setup() {
// run before every feature method
}
def cleanup() {
// run after every feature method
}
def cleanupSpec() {
// run after the last feature method
}
}
public class DivideUtils {
public static int divide(int input, int divide){
if(divide==0){
throw new ArithmeticException("0으로 나눌 수 없다.");
}
return input/divide;
}
}
class MainTest extends Specification{
def "음수가 들어오면 예외가 발생하는지 확인해보자"(){
given:
int input=5
when:
DivideUtils.divide(input,0)
then:
def e=thrown(ArithmeticException.class)
e.message=="0으로 나눌 수 없다."
}
}
Spock 프레임워크 장점
- where은 | 로 구분한 Data Table로 생성이 가능하며 파라미터, 결과값을 보기 좋게 구분 가능
def "convertAddressToGeospatialData according to multiple parameters"(){
expect:
result==addressConverterService.convertAddressToGeospatialData(address).isPresent()
where:
address | result
"서울 특별시 성북구 종암동" | true
"서울 성북구 종암동 91" | true
"서울 성북구 종암동" | true
"서울 성북구 종암동 잘못된 주소" | false
"광진구 구의동 251-45" | true
"광진구 구의동 251-455555" | false
"" | false
}
Spock 프레임워크 설정
- Spock 사용하기 위해 IDE Spock 플러그인 및 의존성 추가
plugins{
id 'groovy' //groovy 지원
id 'java'
}
testImplementation 'org.spockframework:spock-core:2.1-groovy-3.0'
testImplementation 'org.spockframework:spock-spring:2.1-groovy-3.0'
// Spring과 같이 사용하기 위해
//런타임에 클래스 기반 mock을 만들기 위해서 필요
testImplementation 'net.bytebuddy:byte-buddy:1.9.3'
- groovy 디렉토리 생성 및 spock 테스트 코드 생성
'패스트캠퍼스 강의' 카테고리의 다른 글
[30일] 50일 포트폴리오 챌린지 (0) | 2023.09.06 |
---|---|
[29일차] 50일 포트폴리오 챌린지 (0) | 2023.09.05 |
[27일차] 50일 포트폴리오 챌린지 (0) | 2023.09.03 |
[26일차] 50일 포트폴리오 챌린지 (0) | 2023.09.02 |
[25일차] 50일 포트폴리오 챌린지 (0) | 2023.09.01 |