한글주소변환하기

한글주소변환하기

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

공공DB접근
공공DB접근

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 응답으로 대체
}
}

개인api인증키
개인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

한글 주소를 입력하고 “검색” 버튼을 클릭하면, 관련 주소 목록이 표시됩니다. 원하는 주소를 선택하고 “영문으로 변환” 버튼을 클릭하면 해당 주소의 영문 변환 결과가 표시됩니다.

추가 설명

  1. RestTemplate: ZipcodeService 클래스에서 외부 API 호출을 위해 사용합니다. 실제 API 엔드포인트와 API 키를 설정하여 주소 검색 및 변환 기능을 구현합니다.
  2. Thymeleaf: searchform.html 파일은 타임리프 템플릿 엔진을 사용하여 HTML을 렌더링합니다. 서버에서 받은 데이터를 동적으로 표시할 수 있습니다.
  3. Spring Boot: ZipSearchApplication 클래스는 스프링 부트 애플리케이션의 시작 지점입니다. @SpringBootApplication 애너테이션은 스프링 부트의 자동 구성 기능을 활성화합니다.
  4. Controller: SearchController 클래스는 사용자의 요청을 처리하고 적절한 뷰를 반환합니다. @GetMapping 애너테이션을 사용하여 HTTP GET 요청을 처리합니다.

결론

이 프로젝트는 한글 주소를 영어 주소로 변환하는 간단한 웹 애플리케이션입니다. 스프링 부트와 타임리프를 사용하여 RESTful API 호출 및 데이터 처리를 구현하였습니다. 초보자도 쉽게 이해할 수 있도록 단계별로 설명하였으며, 실제 API 호출 부분은 실제 엔드포인트와 API 키를 사용하여 설정해야 합니다.

프로젝트를 실행하고 테스트하면서 추가적인 도움이 필요하거나 문제가 발생하면 언제든지 말씀해 주세요.

Leave a Comment