728x90
 
 

 

REST API란 REST를 기반으로 만들어진 API를 의미한다.

REST API를 알기 위해 REST부터 알아보자!

 


REST란?

 

  • REST(Representational State Transfer)의 약자로,
  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.

 

즉, REST란 

  1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
  3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.
  4. REST는 URI와 HTTP 메소드를 사용해서 자원과 행위를 표현다.

 

CRUD Operation이란
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로,
REST에서의 CRUD Operation 동작 예시는 다음과 같다.

 

Create : 데이터 생성(POST)
Read : 데이터 조회(GET)
Update : 데이터 수정(PUT, PATCH)
Delete : 데이터 삭제(DELETE)

 

REST 구성 요소

REST는 다음과 같은 3가지로 구성이 되어있다. 

  1. 자원(Resource) : HTTP URI
  2. 자원에 대한 행위(Verb) : HTTP Method
  3. 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load

 

REST의 특징

  1. Server-Client(서버-클라이언트 구조)
  2. Stateless(무상태)
  3. Cacheable(캐시 처리 가능)
  4. Layered System(계층화)
  5. Uniform Interface(인터페이스 일관성)

 

REST의 장단점

 

- 장점 

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
  • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
  • 서버와 클라이언트의 역할을 명확하게 분리한다.

 

- 단점 

  • 표준이 자체가 존재하지 않아 정의가 필요하다.
  • HTTP Method 형태가 제한적이다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
  • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스폴로어)

 

❓ URI와 URL의 차이점

  • URI : Uniform Resource Locator로 인터넷 상 자원의 위치
  • URL : Uniform Resource Identifier로 인터넷 상의 자원을 식별하기 위한 문자열의 구성
    1. URI는 URL을 포함함

그럼...

 

REST API란?

 

  • API
    • 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것
  • RESPT API란, 쉽게 REST의 원리를 따르는 데이터를 상호교환하게 설계된 API를 의미한다. 
  • 잘 풀어서 말해보면
  • HTTP를 잘사용하기위해, URI와 HTTP메소드를 사용해서, URL로 어떤 자원에 접근할 것인지, 메소드로 어떤 행위를 할것인지 표현하여 설계된 API를 말한다.
  • 하지만 REST API를 올바르게 설계하기 위해서는 지켜야 하는 몇가지 규칙이 있다.!!

 

REST API 설계 예시

1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.

Bad Example http://ch9800113.com/Running/
Good Example  http://ch9800113.com/run/  

 

2. 마지막에 슬래시 (/)를 포함하지 않는다.

Bad Example http://ch9800113.com/test/  
Good Example  http://ch9800113.com/test

 

3. 언더바 대신 하이폰을 사용한다.

Bad Example http://ch9800113.com/test_blog
Good Example  http://ch9800113.com/test-blog 
 

 

4. 파일확장자는 URI에 포함하지 않는다.

Bad Example http://ch9800113.com/photo.jpg  
Good Example  http://ch9800113.com/photo 
 

 

5. 행위를 포함하지 않는다.

Bad Example http://ch9800113.com/delete-post/1  
Good Example  http://ch9800113.com/post/1 
 

 

REST API 설계 예시


REST ful이란?

 

 

 

 

REST FUL이란,

  • REST의 원리를 따르는 시스템을 의미한다.
  • 하지만 REST를 사용했다 하여 모두가 RESTful 한 것은 아니다.  
  • REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTful하다 말할 수 있으며,
  • 모든 CRUD 기능을 POST로 처리 하는 API 혹은 URI 규칙을 올바르게 지키지 않은 API는 REST API의 설계 규칙을 올바르게 지키지 못한 시스템. 즉, REST API를 사용하였지만 RESTful 하지 못한 시스템이라고 할 수 있다.

 

또한, API가 RESTful로 간주되기 위해서는 몇가지 조건이 있는데 그 중 가장 중요한 건,

 

  1. 클라이언트-서버 커뮤니케이션: 요청 간에 클라이언트 정보가 저장되지 않으며, 각 요청이 분리되어 있고 서로 연결되어 있지 않음
  2. Stateless(무상태)

클라이언트와 서버간 종속적이지 않다는 말이다.

즉, 서버는 클라이언트의 정보를 저장-유지하고 있지않아, 같은 사람이보낸 정보도, 같은사람이 보냈는지 정보를 유지하고있지 않다는 말이다.

 

이말은 즉, 클라이언트가 요청시 마다, 자기 정보를 보내야하고, 서버는 받은 정보로 클라이언트의 정보를 확인한다.

 

따라서,  

  • 멀티플랫폼 지원이 용이하고,
  • Stateless한 RESTful API는 Client의 요청(호출)을 어느 Server라도 동일하게 처리할 수 있고
  • 즉, 어떤 Server라도 Client들의 요청에 응답할 수 있다는 것은, 서버 환경이 분산되었든 아니든, Client쪽에서는 Server쪽에 신경 쓸 필요 없이 API 호출만 하면 원하는 결과를 받을 수 있다는 점에서 RESTful API가 활용되는 것이다.

RESTful API를 사용하면 좋은점

위의 한문장이 사실 rest api를 의미하지만, 단순 정의일뿐 면접관이 의도한 대답은 아니라고 생각된다.

 

REST API의 장점은

 

1. 보기 좋다. 

  • URL만 보고 어떤 자원에 접근할 것인지, 메소드를 보고 어떤 행위를 할지 알 수 있기 때문에, 개발을 할때 용이하다.

 

2. 자원을 아낄 수 있다.

  • 1개의 URI로 4개의 행위(CRUD)를 명시할 수 있기 때문에, 굉장히 효율적이다.

 

3. stateless한 상태를 유지할  수 있다.

  • 이게 제일 중요!!
  • REST API의 가장 큰 특징으로, 다양한 브라우저와 모바일에서 통신할 수 있도록 한다.
  • 클라이언트가 서버에 종속적이지 않아도 되기때문에, scale out한 상황에서도 용이하다.

 

 


정리

RESTful API(=REST API)란,

 

  • REST의 설계 규칙을 잘 지켜서 설계된 API = REST한 방식으로 클라이언트와 서버간 상호 데이터 교환을 하는 API
  • 서로간에 stateless한 특징을 가지는 API
  • 추가로 Hypermedia (링크)를 통해서 애플리케이션의 상태 전이가 가능해야 하고 Hypermedia (링크)에 자기 자신에 대해한 정보가 담겨야 있어야 진정한 REST API라고 볼 수 있다..!!!

 

 

 

 


References

 
728x90
728x90

❗️리눅스(Linux)란?

👉 Linux는 커널이다. ⇒ 커스텀 OS 만들기 가능

  • Windows나 Mac과 달리 Linux는 실제로 분리되고 잘 정의된 운영 체제가 아니다.
  • 오히려 Linux는 커스터마이즈된 OS를 만들 수 있는 커널이다.
  • Linux 커널을 기반으로 한다.
  • Linux 아키텍처는 커널, 시스템 라이브러리, 시스템 도구, 개발 도구 및 최종 사용자 도구와 같은 구성 요소로 구성된다.
  • 커널은 운영 체제의 핵심이다.
  • 장치 메모리를 관리하고 프로세스를 관리한다.
  • Linux 커널을 기반으로 하는 운영 체제 시스템을 Linux 배포판이라고 한다.

👉 Linux 커널은 오픈 소스이다. ⇒ 커스텀 OS 만들기 가능

  • Linux는 유닉스 기반의 무료 오픈 소스 운영 체제이다.
  • Linux를 Windows 및 Mac과 구별되는 특성 중 하나는 오픈 소스라는 점이다.
  • 이는 커널을 통해 사용자가 자신의 운영 체제를 개발할 수 있음을 의미한다.
  • Linux는 무료 오픈 소스이기 때문에 누구나 무료로 다운로드하여 코드를 변경하여 수정 된 사본을 재배포 할 수 있다.
  • 이것은 Windows, Mac과 같이 미리 정의되고 제한된 OS에 익숙하지 않은 보다 기술적인 사용자에게 특히 유용하다.
  • 현재 사용자가 기본 설정에 따라 다운로드 할 수 있는 Linux 배포판을 사용할 수 있다.
  • 이러한 배포판은 여러 개발자들이 만들었다.
  • 전 세계 개발자들이 리눅스 코드를 공유하고 공동으로 개발할 수 있다.
  • Linux 커널은 사용자를 위한 운영 체제 역할을 하는 다양한 배포판을 지원한다.
  • 이러한 배포판 중에 하나가 바로 Ubuntu이다.

👉 Linux 사용되는 곳

  • Linux는 보편적으로 개인용 컴퓨터, 데스크탑, 게임 개발, 임베디드 시스템, 스마트 폰, 태블릿 등에 사용된다.

👉 리눅스의 장점

  • 안정적이고 안전한 운영 체제이다.
  • 여러 사용자가 동시에 작업 할 수 있기 때문에 다중 사용자 시스템이다.
  • 동시에 더 많은 프로세서를 지원하고 사용하는 OS이다.
  • 또한, 그것은 멀티 태스킹이며 많은 프로세스를 동시에 실행할 수 있다.

👉 운영 체제(OS)란?

  • OS : Operationg System
  • OS란 컴퓨터 시스템의 각종 하드웨어적인 자원과 소프트웨어적인 자원을 효율적으로 운영 관리함으로써 사용자가 시스템을 이용하는데 편리함을 제공하는 시스템 소프트웨어를 말한다.
  • OS는 수 많은 애플리케이션들이 잘 동작할 수 있도록 자원(리소스)를 할당하고 관리한다.
  • 따라서 OS는 하드웨어와 소프트웨어를 하나로 묶는 핵심 소프트웨어(중개자 역할)이다.
  • OS의 핵심 목적은 사용자가 편리하고 효율적인 방식으로 프로그램을 실행하는 환경을 제공하는데 있다.
  • 하드웨어 및 소프트웨어를 관리하는 실행관리자라고도 할 수 있다.
  • 또한 외부의 접근도 방어해주는 역할도 한다. (그 외에도 여러가지 기능을 제공한다.)

👉 커널(kernel)이란?

  • 커널이란 컴퓨터의 운영 체제의 핵심이 되는 컴퓨터 프로그램의 하나이다.
  • 시스템의 모든 것을 완전히 통제한다.
  • 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다.
  • 핵심이라고도 한다.
  • 보안, 자원 관리, 추상화 같은 역할을 한다.

👉 운영 체제와 커널의 차이

  • 운영 체제는 크게 사용자 영역과 커널 영역으로 나눠져 있다.
  • 사용자 영역은 실제 사용자가 응용프로그램(애플리케이션)을 이용하기 위해서 마련한 공간이고, 커널 영역은 사용자 영역에서 사용자가 이용하는 프로그램을 안전하고 효율적으로 작동하기 위해서 컴퓨터의 자원들을 관리하는 영역이다.
  • 커널은 운영 체제의 일부분으로, 운영 체제의 핵심적인 역할을 하는 부분이다.
  • 커널은 운영 체제에서 CPU, 메모리, 입출력 장치등과 같은 중요한 자원을 초기화하고 관리하는 부분이다.

👉 배포판이란?

  • 리눅스에서 작동하는 여러 종류의 프로그램을 꾸러미 하나로 모아놓은 것을 말한다.
  • 리눅스 프로그램은 제각각 작동할 수 있지만 두가지 이상 프로그램이 만나 주어진 일을 처리하는 경우도 있다.
  • 이처럼 상호작용이 잘되는 것들을 셀렉해서 우분투 같은 배포판이 등장하는 것이다.
  • 배포판에 대해서는 배포한 개인 또는 단체나 회사가 업그레이드 및 수정을 도맡아 해준다.
  • 이처럼 사람들이 저마다 좋은 프로그램들을 모아 만들어지는 리눅스의 배포판들은 대게 주요 배포판의 영향을 받아 만들어지기도한다.
  • 배포판 현황을 사람에 비유하면 리눅스에는 3대 명문 가문으로 데비안, 레드햇, 슬랙웨어가 있고 각 가문에 후손 격인 배포판들이 여러 개 있다.
  • 우분투는 데비안 가문 소속으로 쿠분투, 에듀분투 같은 자매를 두고 있다.

❗️우분투(Ubuntu)란?

  • 다양한 Linux 배포판이 있다.
  • 그들 중 일부는 Red Hat, CentOS, Debian, Fedora, Linux Mint이다.
  • 우분투는 또한 Linux 배포판이다.
  • 우분투에는 다양한 버전이 있다.
  • 우분투 데스크톱 버전은 개인용 컴퓨터에 적합하다.
  • Ubuntu Server는 클라우드 및 서버에 적합하고 Ubuntu Core는 IoT (Internet of Things) 기반 장치를 개발하는 데 적합하다.
  • Edubuntu는 많은 교육 응용 프로그램이있는 우분투 교육용 이다.
  • 우분투에는 그래픽 사용자 인터페이스 (GUI)와 명령 행 인터페이스 (CLI)가 있다.
  • GUI를 사용하면 단추, 창, 텍스트 상자 등의 그래픽 구성 요소를 사용하여 쉽게 작업을 수행 할 수 있다.
  • 또한 CLI를 통해 사용자는 명령을 입력하고 신속하게 실행할 수 있다.
  • 또한 Ubuntu를 쉽게 설치할 수 있으며, 시스템을 빠르게 부팅 할 수있는 Multi Boot Loader가 포함되어 있다.
  • 우분투 시스템에는 많은 소프트웨어가 포함되어 있다.
  • Libre Office, Firefox 웹 브라우저, VLC 미디어 플레이어, 김프 Adobe Photoshop 클론, MySQL 데이터베이스 관리 시스템 등이 있다.
  • 사용자는 Ubuntu 소프트웨어 센터 또는 다른 APT 기반 패키지 관리 도구에서 더 많은 무료 소프트웨어 및 도구를 다운로드 할 수 있다.
  • 또한 바이러스, 웜, 스파이웨어 및 기타 맬웨어와 같은 악성 소프트웨어로부터 데이터 및 리소스를 보호하는 보안 운영 체제이다.

❗️정리

  • 즉, 리눅스는 커널(컴퓨터 자원 등을 관리하는 영역)을 기반으로 하는 시스템 소프트웨어이기 때문에 Windows, Max 운영 체제에 있는 소프트웨어, GUI같은 것이 없다.
  • 이러한 리눅스 커널을 가지고 사용자 맞춤 운영 체제로 커스터 마이징(배포판)해서 사용하고 재 배포 할 수 있다.
  • 그래서 리눅스는 운영 체제라기 보단 커널이고 이러한 리눅스 커널을 기반으로 운영 체제가 만들어 진 것이다. 그것이 배포판이다.
  • 조금 더 자세한 설명을 위해서는 먼저 컴퓨터 하드웨어와 운영 체제에 대한 깊은 이해가 필요해 보인다.

❗️Reference

참고 : IT관련용어 [ OS ] 운영체제 란 무엇인가? (운영체제 종류와 특징)

참고 : What is Ubuntu? – www.futuredesktop.org

참고 : 1.2 배포판이란?

참고 : [rh-smart-meta-title]

728x90
728x90

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

예제 입력 1 복사

Mississipi

예제 출력 1 복사

?

예제 입력 2 복사

zZa

예제 출력 2 복사

Z

예제 입력 3 복사

z

예제 출력 3 복사

Z

예제 입력 4 복사

baaa

예제 출력 4 복사

A

words = input().upper()
unique_words = list(set(words)) 

cnt_list = []
for x in unique_words :
    cnt = words.count(x)
    cnt_list.append(cnt)  

if cnt_list.count(max(cnt_list)) > 1 :  
    print('?')
else :
    max_index = cnt_list.index(max(cnt_list)) 
    print(unique_words[max_index])

문제를 풀 때 입력받은 문자 중 중복되는 값을 제거한 리스트를 변수에 저장하고서 입력받은 문자열의 알파벳 개수를 세는데 이용했다. 빈 리스트를 생성하고서 개수를 센 수를 리스트에 추가하였고 최종적으로 수로 이루어진 리스트에서 가장 큰 값을 출력하였다. 이때, if-else 조건식을 이용해서 가장 큰 값의 개수가 여러 개인 경우 물음표를 출력하도록 했다. 

728x90
728x90

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

예제 입력 1 복사

level

예제 출력 1 복사

1

예제 입력 2 복사

baekjoon

예제 출력 2 복사

0

n = list(str(input()))
if list(reversed(n)) == n:
    print(1)
else:
    print(0)
728x90
728x90

문제

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다. 

도현이는 앞으로 M번 바구니의 순서를 회전시키려고 만들려고 한다. 도현이는 바구니의 순서를 회전시킬 때, 순서를 회전시킬 범위를 정하고, 그 범위 안에서 기준이 될 바구니를 선택한다. 도현이가 선택한 바구니의 범위가 begin, end이고, 기준이 되는 바구니를 mid라고 했을 때, begin, begin+1, ..., mid-1, mid, mid+1, ..., end-1, end 순서로 되어있는 바구니의 순서를 mid, mid+1, ..., end-1, end, begin, begin+1, ..., mid-1로 바꾸게 된다.

바구니의 순서를 어떻게 회전시킬지 주어졌을 때, M번 바구니의 순서를 회전시킨 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.

둘째 줄부터 M개의 줄에는 바구니의 순서를 바꾸는 만드는 방법이 주어진다. 방법은 i, j, k로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 회전시키는데, 그 때 기준 바구니는 k번째 바구니라는 뜻이다. (1 ≤ i ≤ k ≤ j ≤ N)

도현이는 입력으로 주어진 순서대로 바구니의 순서를 회전시킨다.

출력

모든 순서를 회전시킨 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.

예제 입력 1 복사

10 5
1 6 4
3 9 8
2 10 5
1 3 3
2 6 2

예제 출력 1 복사

1 4 6 2 3 7 10 5 8 9

n, m = map(int, input().split())
box = [i for i in range(1, n+1)]

for i in range(m):
    i, j, k = map(int, input().split())
    box = box[:i-1]+box[k-1:j]+box[i-1:k-1]+box[j:]
print(*box)
728x90
728x90

문제

동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다.

체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다.

체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다.

동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.

출력

첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. 만약 수가 양수라면 동혁이는 그 개수 만큼 피스를 더해야 하는 것이고, 음수라면 제거해야 하는 것이다.

예제 입력 1 복사

0 1 2 2 2 7

예제 출력 1 복사

1 0 0 0 0 1

예제 입력 2 복사

2 1 2 1 2 1

예제 출력 2 복사

-1 0 0 1 0 7

p = [1, 1, 2, 2, 2, 8]
n = list(map(int, input().split()))

for i in range(6):
    print(p[i] - n[i], end=' ')
728x90
728x90

문제

아래 예제와 같이 새싹을 출력하시오.

입력

입력은 없다.

출력

새싹을 출력한다.

예제 입력 1 복사

예제 출력 1 복사

         ,r'"7
r`-_   ,'  ,/
 \. ". L_r'
   `~\/
      |
      |

print("         ,r\'\"7")
print("r`-_   ,\'  ,/")
print(" \\. \". L_r\'")
print("   `~\\/")
print("      |")
print("      |")
728x90
728x90

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

출력

 

입력받은 그대로 출력한다.

예제 입력 1 복사

Hello
Baekjoon
Online Judge

예제 출력 1 복사

Hello
Baekjoon
Online Judge

while True:
    try:
        print(input())
    except EOFError:
        break

 try,except 구문을 통해 입력값이 계속 들어오면 그대로 프린트해주고, 입력값이 안들어온다면 즉 EOF(End Of File)상태라면 break를 걸어준다.

728x90

+ Recent posts