FastCampus X Yanolja TechSchool

ํŒจ์ŠคํŠธ์บ ํผ์ŠคX์•ผ๋†€์ž: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ถ€ํŠธ ์บ ํ”„ - Java ์‹ฌํ™” ๊ณผ์ œ 1

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2023. 8. 25.

ํŒจ์ŠคํŠธ์บ ํผ์ŠคX์•ผ๋†€์ž: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ถ€ํŠธ ์บ ํ”„ - Java ์‹ฌํ™” ๊ณผ์ œ 1

 

 

โœ”๏ธ๊ณผ์ œ1 : ์œ„์น˜๊ธฐ๋ฐ˜ ์žฅ์†Œ ๊ฒ€์ƒ‰ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

(Location Based Place Search Java Application Development)

์ด Java ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž…๋ ฅ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํŠน์ • ์œ„์น˜ ๋‚ด์˜ ์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ž์‹ ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ •์œ„์น˜์— ์žˆ๋Š” ์žฅ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Kakao ๋กœ์ปฌ REST API์ค‘ ํ‚ค์›Œ๋“œ๋กœ ์žฅ์†Œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ, ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์žฅ์†Œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ API๋ฅผ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


โœ”๏ธ์ž‘์—… ์˜ต์…˜

๋‹ค์Œ ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์„ธ์š”

  1. ํŠน์ • ์œ„์น˜(ํ‚ค์›Œ๋“œ) ์ฃผ๋ณ€์˜ ์ง€์ •๋œ ๋ฐ˜๊ฒฝ ๋‚ด์—์„œ ์ฃผ์œ ์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” Java ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
  2. ํŠน์ • ์œ„์น˜(ํ‚ค์›Œ๋“œ) ์ฃผ๋ณ€์˜ ์ง€์ •๋œ ๋ฐ˜๊ฒฝ ๋‚ด์—์„œ ์•ฝ๊ตญ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” Java ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

โœ”๏ธ๊ณผ์ œ ์ผ์ •

8์›” 21์ผ (์›”) ~ 8์›” 23์ผ (์ˆ˜) 23:59๊นŒ์ง€

 


โœ”๏ธ๋ฌธ์ œ ์„ค๋ช…

๋‹จ๊ณ„ 1: ์นด์นด์˜ค API ํ‚ค ํš๋“

  1. ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹œ์ž‘ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  REST API ํ‚ค๋ฅผ ๋ฉ”๋ชจํ•ด ๋‘ก๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 2: ๋กœ์ปฌ REST API ์‚ฌ์šฉ

  1. ๋กœ์ปฌ REST API ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ‚ค์›Œ๋“œ๋กœ ์žฅ์†Œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ์™€ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์žฅ์†Œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
  2. ์š”์ฒญ๊ณผ ์‘๋‹ต ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 3: Java ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„

  1. ํ‚ค๋ณด๋“œ๋กœ ํŠน์ • ์œ„์น˜ ํ‚ค์›Œ๋“œ์™€ ๊ฒ€์ƒ‰ ๋ฐ˜๊ฒฝ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  2. ์ž…๋ ฅํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ„๋„(latitude)์™€ ๊ฒฝ๋„(longitude)๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถ”์ถœํ•œ ์œ„์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅํ•œ ๋ฐ˜๊ฒฝ(radius) ๋‚ด์—์„œ ์ฃผ์œ ์†Œ๋‚˜ ์•ฝ๊ตญ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ(JSON)์—์„œ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  5. ์ƒ์œ„ 10๊ฐœ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ถ”์ถœ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  6. ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ์—์„œ ์žฅ์†Œ URL์„ ์ž…๋ ฅํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ํ•ด๋‹น kakaomap์ด ์ถœ๋ ฅ๋˜๋„๋ก ํ•œ๋‹ค.
  7. exit๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

โœ”๏ธ์˜ˆ์‹œ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ

์ž…๋ ฅ ํ™”๋ฉด

์œ„์น˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:  
๊ฒ€์ƒ‰ ๋ฐ˜๊ฒฝ์„ ์ž…๋ ฅํ•˜์„ธ์š”(1000:1km):
 

์ถœ๋ ฅ ํ™”๋ฉด

์ž…๋ ฅํ•œ ์œ„์น˜ ํ‚ค์›Œ๋“œ:  
๊ฒ€์ƒ‰ ๋ฐ˜๊ฒฝ:  

**์ฃผ์œ ์†Œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ**
- ์žฅ์†Œ URL(์ง€๋„ ์œ„์น˜):
- ์ƒํ˜ธ๋ช…:
- ์ฃผ์†Œ:
- ์ „ํ™”๋ฒˆํ˜ธ:
- ๊ฑฐ๋ฆฌ(km):

**์•ฝ๊ตญ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ**
- ์žฅ์†Œ URL(์ง€๋„ ์œ„์น˜):
- ์ƒํ˜ธ๋ช…:
- ์ฃผ์†Œ:
- ์ „ํ™”๋ฒˆํ˜ธ:
- ๊ฑฐ๋ฆฌ(km):

kakaomap URL(์žฅ์†Œ URL):http://place.map.kakao.com/26338954 -> ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ์—์„œ ์žฅ์†Œ URL์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•œ ํ›„ ์—”ํ„ฐ -> ๋ธŒ๋ผ์šฐ์ ธ๊ฐ€ ์‹คํ–‰
kakaomap URL(์žฅ์†Œ URL):exit -> exit ์ž…๋ ฅํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ

โœ”๏ธ์˜์กด์„ฑ

  • Java 8 ์ด์ƒ
  • httpclient, json API
<dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
</dependency>
<dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20210307</version>
</dependency>

โœ”๏ธํ‰๊ฐ€ ๊ธฐ์ค€

  • ์ œ์‹œ๋œ ๊ธฐํ•œ ๋‚ด ์ œ์ถœ (5์ )
  • ๋ฌธ์ œ ์กฐ๊ฑด ์ค€์ˆ˜ํ•œ ์ฝ”๋“œ (5์ )
  • ์ œ์•ˆ๋œ ๊ธฐ๋Šฅ ์ž‘๋™ ์—ฌ๋ถ€ (5์ )
  1. ์ž…์ถœ๋ ฅ ํ™”๋ฉด์ด ์ž˜ ์„ค๊ณ„ ๋˜์—ˆ๋Š”๊ฐ€?
  2. JSON ๋ฐ์ดํ„ฐ ์ž˜ ํŒŒ์‹ฑํ•˜์—ฌ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•˜์˜€๋Š”๊ฐ€?
  3. ๋ฐ˜๊ฒฝ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์ถœ๋ ฅ์ด ๋˜๋Š”๊ฐ€?
  4. ์žฅ์†Œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ž˜ ํ‘œ์‹œ๋˜๋Š”๊ฐ€?

โœ”๏ธ์ œ์ถœ๋‚ด์šฉ

  • ์†Œ์Šค์ฝ”๋“œ ์ œ์ถœ
  • ์ž…์ถœ๋ ฅ ์‹คํ–‰ํ™”๋ฉด ์บก์ฒ˜ ์ œ์ถœ
  1. ์†Œ์Šค์ฝ”๋“œ์— ๊ณผ์ œ1 ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ณผ์ œ1 ํด๋”์— ์•„๋ž˜ 2๊ฐœ์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ
  2. ์ž…๋ ฅํ™”๋ฉด ์บก์ฒ˜
  3. ์ถœ๋ ฅํ™”๋ฉด ์ฑ•์ฒ˜

 


๐ŸŽฏKAKAO API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์ฃผ๋ณ€ ์•ฝ๊ตญ ๊ฒ€์ƒ‰

 

๐Ÿ’‰์˜์กด์„ฑ

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.json/json -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
</dependencies>

 


๐Ÿ“œMODEL Class

MyAddress.java

1
2
3
4
5
6
7
8
9
10
11
12
13
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyAddress {
    private String query;
    private String latitude;
    private String longitude;
    private int radius;
}
cs

 

๊ฒ€์ƒ‰ํ•œ ๋‚ด ์ฃผ๋ณ€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๊ฐ์ฒด

๊ฒ€์ƒ‰  ์ฟผ๋ฆฌ์™€ ๊ฑฐ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ์‘๋‹ต์œผ๋กœ ์˜จ ๊ฒฝ๋„, ์œ„๋„๋ฅผ ์ €์žฅํ•  property๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

Getter ์™€ Setter ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ƒ์„ฑ์ž์™€ ๋ชจ๋“  ์•„๊ทœ๋จผํŠธ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ„ ์ƒ์„ฑ์ž๋Š” lombok API๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋กœ ์„ค์ •ํ•ด์คฌ๋‹ค.

 

 

Pharmacy.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pharmacy implements Comparable<Pharmacy> {
    private String url;
    private String businessName;
    private String address;
    private String phoneNumber;
    private Float distance;
 
    @Override
    public int compareTo(Pharmacy o) {
        return (int) (this.getDistance() - o.getDistance());
    }
}
cs

๊ฒ€์ƒ‰url์ฃผ์†Œ, ์ƒํ˜ธ๋ช…, ์ฃผ์†Œ,  ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•  ์•ฝ๊ตญ ๊ฐ์ฒด

๋‚˜์ค‘์— ์•ฝ๊ตญ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ์ˆœ์œผ๋กœ ๋‚˜์—ดํ•˜๊ธฐ ์œ„ํ•ด Comparable interface๋ฅผ implements ํ•˜์—ฌ compareTo() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ฃผ์—ˆ๋‹ค.


๐Ÿ”‘์†”๋ฃจ์…˜

์š”์ฒญ๊ณผ ์‘๋‹ต์€ apache์—์„œ ์ œ๊ณตํ•˜๋Š” HttpClient API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

 

๊ฒ€์ƒ‰ ์œ„์น˜ ์ฐพ๊ธฐ

kakao developers ์˜ ์ง€๋„/๋กœ์ปฌ ์—์„œ "ํ‚ค์›Œ๋“œ๋กœ ์žฅ์†Œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ" API๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋ฅผ ๋ฐ›์€ ํ›„ ๊ฒ€์ƒ‰์„ ํ–ˆ์„ ๋• ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ณต๋ฐฑ์„ ์ง€์šด ํ›„ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋„ ๋งŒ๋“ค์–ด ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

ํ—ค๋”์—๋Š” ์ธ์ฆ ๊ฐœ์ธ API Key ๋ฅผ ํ•„์ˆ˜๋กœ ๋ณด๋‚ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„ฃ์–ด์„œ ๋ณด๋‚ด์ฃผ์—ˆ๋‹ค.

 

์ถœ๋ ฅ์œผ๋กœ๋Š” ์‘๋‹ต์„ ์—”ํ‹ฐํ‹ฐ๋กœ ๋ฐ›์•„ json ํ˜•ํƒœ๋กœ ๋ณด๋‚ด์˜จ ์‘๋‹ต์„ jsonobject๋กœ ๋ฐ›๊ณ  ๋ฐฐ์—ด์ธ documents๋ฅผ ํŒŒ์‹ฑํ•œ ํ›„ ์ ค ์ฒซ๋ฒˆ์งธ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ 0์„ ๋„ฃ์–ด ์ฒซ๋ฒˆ์งธ jsonobject๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. 

์ดํ›„์—๋Š” ํ‚ค๊ฐ’์— ๋งž๋Š” ๋ฐธ๋ฅ˜๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ MyAddress ๊ฐ์ฒด์•ˆ์— ๋„ฃ์–ด์ค€ ํ›„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

๊ทผ์ฒ˜ ์•ฝ๊ตญ ์œ„์น˜ ์ฐพ๊ธฐ

kakao developers ์˜ ์ง€๋„/๋กœ์ปฌ ์—์„œ "์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์žฅ์†Œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ" API๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

์นดํ…Œ๊ณ ๋ฆฌ ๊ทธ๋ฃน ์ฝ”๋“œ๋Š” ์•ฝ๊ตญ์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ๊ตญ ์ฝ”๋“œ์ธ PM9์„ ๋„ฃ๊ณ  ์œ„์—์„œ ์–ป์€ ๊ฒฝ๋„ , ์œ„๋„์™€ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋„ฃ์€ ๊ฑฐ๋ฆฌ๋ฅผ ๋„ฃ์–ด์„œ GET ์š”์ฒญ ํ•ด์ค€๋‹ค.

 

์‘๋‹ต์œผ๋กœ ์˜จ ์‘๋‹ต ์—”ํ‹ฐํ‹ฐ๋ฅผ JSONObject๋กœ ํŒŒ์‹ฑํ•˜์—ฌ JSON ๋ฐฐ์—ด์„ ์ถ”์ถœํ•˜๊ณ  ์•ฝ๊ตญ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋งŒํผ ์•ฝ๊ตญ์˜ ์ •๋ณด๋“ค์„ ํ‚ค ๊ฐ’์„ ํ†ตํ•ด ํŒŒ์‹ฑํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. ์•ฝ๊ตญ ๊ฐ์ฒด๋Š” ์•ฝ๊ตญ ๋ฆฌ์ŠคํŠธ์— ๋ฌถ์–ด ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

url์„ ์ฝ˜์†”์— ์ž…๋ ฅํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ์›นํŽ˜์ด์ง€ ๋‚˜ํƒ€๋‚ด๊ธฐ

์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” java.net.URI ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ˜์†”์— url๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €์— ์›นํ™”๋ฉด์„ ๋„์šฐ๊ฒŒ ํ–ˆ๋‹ค.


๐Ÿช„์‹คํ–‰ ๊ฒฐ๊ณผ

 

์ž…๋ ฅ ํ™”๋ฉด

 

์ถœ๋ ฅ ํ™”๋ฉด


 

๐Ÿค”ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 

์ „๋ฐ˜์ ์ธ ๋‚œ์ด๋„๋Š” ์‰ฌ์šด ํŽธ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์ฒ˜์Œ ์œ„์น˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋„ฃ์–ด ๊ฒ€์ƒ‰ํ–ˆ์„๋•Œ ์ž˜๋ชป๋œ ์ฟผ๋ฆฌ๋ผ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์•˜๋‹ค. ์ฟผ๋ฆฌ์— ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ๋˜์–ด์žˆ์œผ๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค. replaceAll()์„ ์“ฐ๊ธฐ์ „ strip()์„ ์ผ๋Š”๋ฐ๋„ ์—ฌ๋ฐฑ์ด ์ง€์›Œ์ง€์ง€ ์•Š์•„ ์ฐพ์•„๋ณด๋‹ˆ strip()์€ ๋ฌธ์žฅ ์ฒ˜์Œ๊ณผ ๋์— ์žˆ๋Š” ์—ฌ๋ฐฑ๋งŒ์„ ์ง€์šฐ๋Š” ๊ฒƒ์ž„์„ ๋ฐฐ์› ๋‹ค. ์‚ฌ์ด์‚ฌ์ด์— ์žˆ๋Š” ๊ณต๋ฐฑ์€ replaceAll() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค. ์ด๋•Œ ๊ณต๋ฐฑ์„ ํ‘œํ˜„ํ•˜๋Š” ์ •๊ทœ์‹ ๋˜ํ•œ ๋ฐฐ์› ๋‹ค.

์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ํŒŒ์›Œ์ฝ”๋”ฉ ์‹์œผ๋กœ ๋ง๊ณ  ๋” ๊น”๋”ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ ๊ฐ™๋‹จ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. java.net.URI API๋Š” ์ฒ˜์Œ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋Š”๋ฐ, ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹ˆ๋ผ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ž‘๊ฒŒ ๋งŒ๋“ ๋‹ค๋ฉด ๊ฝค ๊ฐ•๋ ฅํ•œ ๊ธฐ์ˆ ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ž‘๋™์›๋ฆฌ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค. ์ถ”์ธกํ•ด ๋ณด๊ฑด๋ฐ ์šด์˜์ฒด์ œ ๋‚ด์— ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •๋œ ๋ธŒ๋ผ์šฐ์ €์— URL์„ ์ „์†กํ•˜์—ฌ ์›นํŽ˜์ด์ง€๋ฅผ ๋„์šธ ๊ฑฐ ๊ฐ™๋‹ค. 

์—ฌ์ฐจ์ €์ฐจ ๋“ค๋ฆฌ๋Š” ์†Œ์‹์— ์˜ํ•˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€๋Š” ExceptionHandler ๊นŒ์ง€ ๋งŒ๋“ค์–ด ๊ตฌํ˜„ ํ–ˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๊ทธ์ •๋„๊นŒ์ง€ ํ•ด์•ผํ–ˆ๋‚˜ ์ƒ๊ฐ์— ๋น ์กŒ๋‹ค. ๊ณผ์ œ์—์„œ ์ง€์ผœ์•ผํ•˜๋Š” ์‚ฌํ•ญ์—๋งŒ ํฌ๊ฑฐ์Šค๋ฅผ ๋งž์ถ˜ ๊ฑฐ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. ๋‹ค์Œ ๊ณผ์ œ์—์„  ์ข€ ๋” ์‹ ๊ฒฝ์„ ์จ๋ด์•ผ๊ฒ ๋‹ค.

 

๋Œ“๊ธ€