Table of Contents
Toggle한글주소변환하기
오늘은 공공DB를 개인키를 이용해서 사용하는 한글주소를 영문으로바꾸는 프로젝트를 다시 시작합니다. 우리가 공공 데이터베이스(공공DB) API를 사용하는 데는 여러 가지 이점이 있습니다. 특히 대한민국 공공DB API는 다양한 공공 데이터에 접근할 수 있도록 하여 여러 분야에서 유용하게 활용될 수 있기 때문입니다.

1단계: 프로젝트 설정
1.1 프로젝트 생성
먼저, 스프링 부트 프로젝트를 생성합니다. 이를 위해 Maven을 사용합니다. 프로젝트 구조는 다음과 같습니다:
css
zip_search
├── src
│ ├── main
│ │ ├── java
│ │ │ └── space
│ │ │ └── bum
│ │ │ └── zip_search
│ │ │ ├── ZipSearchApplication.java
│ │ │ ├── controller
│ │ │ │ └── SearchController.java
│ │ │ ├── service
│ │ │ │ └── ZipcodeService.java
│ │ │ └── model
│ │ │ └── Address.java
│ │ └── resources
│ │ ├── application.yml
│ │ └── templates
│ │ └── searchform.html
│ └── test
│ └── java
│ └── space
│ └── bum
│ └── zip_search
│ └── ZipSearchApplicationTests.java
└── pom.xml
1.2 pom.xml
설정
pom.xml
파일을 설정합니다. 이 파일은 프로젝트의 종속성을 관리합니다.
xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.4</version>
<relativePath/>
</parent>
<groupId>space.bum.spring_boot</groupId>
<artifactId>zip_search</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zip_search</name>
<description>오픈API 이용 우편번호 검색</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2단계: 애플리케이션 시작 클래스
ZipSearchApplication.java
파일을 작성합니다. 이 파일은 스프링 부트 애플리케이션의 시작 지점입니다.
2.1 ZipSearchApplication.java
java
package space.bum.zip_search;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ZipSearchApplication {
public static void main(String[] args) {
SpringApplication.run(ZipSearchApplication.class, args);
}
}
3단계: 컨트롤러 작성
컨트롤러는 사용자의 요청을 처리하고 적절한 뷰를 반환합니다.
3.1 SearchController.java
java
package space.bum.zip_search.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import space.bum.zip_search.service.ZipcodeService;
@Controller
public class SearchController {
@Autowired
private ZipcodeService zipcodeService;
@GetMapping(“/”)
public String index() {
return “searchform”;
}
@GetMapping(“/search”)
public String search(@RequestParam(“zipcode”) String zipcode, Model model) {
model.addAttribute(“addresses”, zipcodeService.searchAddresses(zipcode));
return “searchform”;
}
@GetMapping(“/convert”)
public String convert(@RequestParam(“address”) String address, Model model) {
model.addAttribute(“englishAddress”, zipcodeService.convertToEnglish(address));
return “searchform”;
}
}
4단계: 서비스 작성
서비스는 비즈니스 로직을 처리합니다.
4.1 ZipcodeService.java
java
package space.bum.zip_search.service;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Service
public class ZipcodeService {
private final RestTemplate restTemplate = new RestTemplate();
public List<String> searchAddresses(String zipcode) {
// 실제 API 엔드포인트로 변경하세요
String endpoint = “https://api.zipcode.example.com/search?zipcode=” + zipcode;
// 실제 API 호출 및 응답 파싱
// 예제는 간단히 주소 목록을 반환하는 것으로 가정합니다.
return List.of(“경기도 성남시 분당구”, “경기도 수원시 영통구”); // 실제 API 응답으로 대체
}
public String convertToEnglish(String address) {
// 실제 인코딩 API 엔드포인트로 변경하세요
String endpoint = “https://api.encoding.example.com?key=YOUR_ENCODING_API_KEY&text=” + address;
// 실제 API 호출 및 응답 파싱
// 예제는 간단히 인코딩된 주소를 반환하는 것으로 가정합니다.
return “Gyeonggi-do, Seongnam-si, Bundang-gu”; // 실제 API 응답으로 대체
}
}

5단계: HTML 템플릿 작성
HTML 템플릿은 사용자의 입력을 받고 결과를 표시합니다.
5.1 searchform.html
html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>주소 변환</title>
</head>
<body>
<h1>한글 주소를 영문으로 변환하기</h1>
<form action="/search" method="get">
<input type="text" name="zipcode" placeholder="우편번호를 입력하세요">
<button type="submit">검색</button>
</form>
<div>
<h2>검색 결과</h2>
<ul>
<li th:each="address : ${addresses}">
<form action="/convert" method="get">
<input type="hidden" name="address" th:value="${address}">
<span th:text="${address}"></span>
<button type="submit">영문으로 변환</button>
</form>
</li>
</ul>
</div>
<div>
<h2>영문 주소</h2>
<p th:text="${englishAddress}"></p>
</div>
</body>
</html>
6단계: 애플리케이션 설정
application.yml
파일을 설정합니다. 이 파일은 애플리케이션의 설정 정보를 포함합니다.
6.1 `application“`yaml
spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html
mode: HTML5
encoding: UTF-8
content-type: text/html
shell
### 프로젝트 실행 방법
이제 모든 설정이 완료되었습니다. 프로젝트를 실행하는 방법을 단계별로 설명하겠습니다.
#### 1. 프로젝트 빌드
프로젝트 디렉터리에서 다음 명령어를 사용하여 Maven을 통해 프로젝트를 빌드합니다.
“`bash
mvn clean install
2. 애플리케이션 실행
다음 명령어를 사용하여 스프링 부트 애플리케이션을 실행합니다.
bash
mvn spring-boot:run
3. 웹 브라우저에서 테스트
웹 브라우저를 열고 다음 URL로 접속합니다.
arduino
http://localhost:8080
한글 주소를 입력하고 “검색” 버튼을 클릭하면, 관련 주소 목록이 표시됩니다. 원하는 주소를 선택하고 “영문으로 변환” 버튼을 클릭하면 해당 주소의 영문 변환 결과가 표시됩니다.
추가 설명
- RestTemplate:
ZipcodeService
클래스에서 외부 API 호출을 위해 사용합니다. 실제 API 엔드포인트와 API 키를 설정하여 주소 검색 및 변환 기능을 구현합니다. - Thymeleaf:
searchform.html
파일은 타임리프 템플릿 엔진을 사용하여 HTML을 렌더링합니다. 서버에서 받은 데이터를 동적으로 표시할 수 있습니다. - Spring Boot:
ZipSearchApplication
클래스는 스프링 부트 애플리케이션의 시작 지점입니다.@SpringBootApplication
애너테이션은 스프링 부트의 자동 구성 기능을 활성화합니다. - Controller:
SearchController
클래스는 사용자의 요청을 처리하고 적절한 뷰를 반환합니다.@GetMapping
애너테이션을 사용하여 HTTP GET 요청을 처리합니다.
결론
이 프로젝트는 한글 주소를 영어 주소로 변환하는 간단한 웹 애플리케이션입니다. 스프링 부트와 타임리프를 사용하여 RESTful API 호출 및 데이터 처리를 구현하였습니다. 초보자도 쉽게 이해할 수 있도록 단계별로 설명하였으며, 실제 API 호출 부분은 실제 엔드포인트와 API 키를 사용하여 설정해야 합니다.
프로젝트를 실행하고 테스트하면서 추가적인 도움이 필요하거나 문제가 발생하면 언제든지 말씀해 주세요.