Network의 구조

우선 관련 용어와 개념을 살펴보자. 

1. Network Edge

  • 용어 그대로 네트워크의 가장자리라고 할 수 있다.
  • Network Edge는 Client와 Server로 구분되며, 둘을 합쳐 Hosts 또는 Endsystem이라고도 부른다.
  • 서버는 흔히 데이터센터 안에 존재한다.

2. Access Network, Physical Media

  • Access Network란 Network Core와 연결되는 네트워크를 의미한다. 즉, network edge들이 인터넷을 사용할 수 있도록 길을 만들어주는 네트워크를 의미한다.
  • ISP (Internet Service Provider)가 Access Network를 제공하며, 그 예시로 스마트폰과 같은 모바일은 global ISP를 통해서, 학교나 기업 등의 특정 지역에서는 regional ISP를 통해서 access network를 제공한다.
  • 이 네트워크가 연결되기 위해서 필요한 것이 Physical Media이다.

3. Network Core

  • Network Core는 전체 네트워크 시스템의 중앙에 위치하여 데이터를 전송하는 핵심적인 역할을 한다.
  • Network Core는 여러 라우터들로 구성되어 있으며, 이 라우터들은 communication link로 연결되어 있다.

이제 각각을 좀 더 자세히 알아보자.

Access Network

Access Network란 다른 Endsystem까지의 경로 상에 있는 첫 번째 라우터 즉, 가장 자리 라우터(edge router)에 연결되는 네트워크를 의미한다. 

Digital Subscriber Line (DSL)

지금도 사용되지만 2010년정도까지 많이 쓰였다. 기존에 사용하던 전화선을 사용한다는 것이 특징이다.

Digital Subscriber Line (DSL)

그림을 자세하게 살펴보자.

  • DSL Modem : 각 가정에 있는 DSL Modem은 지역 중앙국(Central Office)에 위치한 DSLAM(DSL Access Multiplexer)데이터 통신을 위해 사용되는 장치로, 디지털 신호와 아날로그 신호 간의 변환을 수행한다. 
  • Splitter : Splitter 또한 가정에 존재하며, 가정에 도착하는 디지털 신호(컴퓨터)와 아날로그 신호(전화)를 분리한다.
  • DSLAM(DSL Access Multiplexer) : Central office에 DSLAM을 각 집에서 나오는 디지털 신호를 모아서 인터넷 쪽으로 보내주고, 나머지는 전화와 관련된 음성들은 기존의 telephone network로 전달이 된다.

특징

  • 장점 : 기존의 telephone line을 사용할 수 있다. 그리고 central office DSLAM을 두고 디지털 신호를 모아서 ISP한테 보내줄 수 있다.
    • DSL phone line을 통해서 데이터를 전송하는 것은 인터넷으로
    • DSL phone line을 통해서 보이스는 telephone으로 간다.
  •  2000년대 초반에는 download를 많이 하고, upload는 많이 하지 않았다. 그래서 전체 대역폭을 사용하지만 한계가 있기 때문에, downstream 쪽의 대역폭(frequency)을 더 많이 주게 되었다. 그래서 downstream 쪽은 24Mbps, upstream 쪽에는 2.5 Mbps까지 transmission rate를 두게 된다.
    • <2.5 Mbps upstream transmission rate (typically < 1Mbps)
    • <24 Mbps downstream transmission rate (typically < 10Mbps)
  • xDSL (DSL의 종류)
    • ADSL : Asymmetric DSL 
    • HDSL : High-bit-rate DSL
    • SDSL : Symmetric DSL (-> upstream도 늘리자.)
    • VDSL : Very-high-speed DSL

Cable network, HFC (Hybrid Fiber Coax)

케이블 티비를 이미 사용하고 있는 사용자들에게 인터넷을 제공하겠다라는 개념에서 출발하였다. 초기에 나왔던 DSL보다 속도가 빠르다는 것이 특징이다.

Cable Network, HFC

그림을 자세히 살펴보자.

  • Cable Modem : DSL Modem과 비슷하게 가정 안에 존재하여 똑같이 디지털 신호와 아날라고 신호 간의 변환을 수행한다. 이는 보통 케이블 티비 회사에서 렌트를 해준다.
  • Splitter : 이 또한 DSL에서의 Splitter와 유사하다. 디지털 신호와 아날로그 신호를 분리하는 역할을 한다.
  • HFC (Hybrid Fiber Coax) : 각 가정에서의 데이터와 TV 신호는 공유되는 케이블을 통하여 Cable headend에 연결된다. 이때 집과 cable headend까지는 coax 케이블을 사용하고, 그 이후에는 cable headend부터 ISP까지는 fiber로 연결한다.
    • Frequency Division Multiplexing : 다른 채널은 다른 주파수로 전달된다. 이는 DSL과는 다르게 Cable은 access network를 share하기 때문이다. -> 하단에서 조금 더 살펴보자.
  • Cable Headend : 유선 TV 방송을 위해 전파를 증폭, 조정, 변환, 투입차단 또는 혼합하여 선로로 송출하는 장치들과 신호를 간선 케이블로 송출하는 모든 설비를 말한다.
  • CMTS (Cable Modem Termination System) : 케이블 모뎀으로부터 송신된 아날로그 신호를 다시 디지털 포맷으로 변환하는 역할. 이는 DSL 네트워크의 DSLAM와 유사한 기능을 한다. 여기서 해당 신호가 ISP로 가야하는 것인지 또는 Cable TV 방송국으로 가야하는 것인지 등이 결정된다.

특징

  • DSL은 dedicated한 반면 Cable은 shared access network이다.
  • 왜냐하면 Cable Headend가 보내는 모든 패킷이 모든 링크의 downstream 채널을 통해서 모든 가정을 전달되고, 가정에서 보내는 모든 패킷은 upstream channel을 통해 Cable Headend로 전달되기 때문이다.
  • 그렇기 때문에 위에서 봤듯이, 다른 채널마다 다른 주파수로 전송해야하는 frequency division multiplexing이 필요해지는 것이다. 
  • 하지만 그럼에도, 각 사용자가 같은 채널을 사용하거나, 다른 데이터를 수신중이라면 속도는 느려질 수 밖에 없다.

FTTx : 요즘은 무엇을 쓸까?

  • cable tv를 쓰는 집도 많이 있다.
  • FTTx : Fiber to the x
    • FTTH : fiber to the home (새로운 집들)
    • FTTC : fiber to the curb
    • FTTO : fiber to the office
  • 시골이나 수요가 없는 곳들은 FTTx가 힘들다. Fiber를 설치하는데에 돈이 드니까. 그래서 아직도 DSL도 쓴다. 미국같은 곳들도 아직도 DSL을 쓰는 곳들도 있다고 한다.

Home Network

집에서 일반적으로 사용되는 access network를 그림으로 표현하면 다음과 같다.

Home Network

  • wired Ethernet (1 Gbps)
  • wireless devices : 스마트폰, laptop
  • wireless access points (54 Mbps)
  • cable 또는 DSL modem -> 위에서 살펴보았다.
  • router, firewall, NAT

이제 각각을 자세하게 알아보자.

Enterprise access networks (Ethernet)

  • 회사, 학교 등에서 ethernet을 설치하여 사용한다.
  • Endsystem들은 Ethernet switch로 연결되며, Ethernet Switch 또는 상호연결된 스위치들의 네트워크는 다시 더 큰 인터넷으로 연결된다.
  • transmission rate : 10 Mbps, 100Mbps, 1Gbps, 10Gbps 등 (현재는 테라 단위)

Wireless access networks

  • endsystem을 router로 연결하는 공유된 무선 access network이다.
  • 이는 access point라고 불리는 base station을 통해서 연결된다.
  • 무선 access network에는 크게 wireless LAN과 wide-area wireless access가 있다.

Wireless LAN

  • 건물 내에서 사용.
  • 무선 랜 환경에서 사용자들은 네트워크에 연결된 AP (Access Point)로 패킷을 송수신한다.
  • AP는 다시 유선 네트워크에서 연결된다.

Wide-area wireless access

  • 광역무선접속
  • 수십 미터 반경 내에 있어야 하는 와이파이와 다르게, 기지국(tellco, cell tower)의 수십 킬로미터 반경 내에 있으면 된다.

Hosts (Endsystem) 

  • application message가 발생하면 Hosts는 데이터를 보낼 때 그냥 보내지 않고, 인터넷의 경우 작은 청크 단위로 잘라서 보낸다. 이때 이 단위를 packet이라고 부른다. (L bits)
  • 이때 패킷을 송수신하는 데에 필요한 시간을 계산하는 것이 중요하다.
  • link transmission rate = link capacity = link bandwith R이라고 할때

 

Host : sends packets of data

  • application message가 발생을 하면, 데이터를 보낼때 그냥 보내지 않고, 인터넷의 경우 잘라서 보낸다.
    • smaller chunk : packet, Lbits
  • link transmission rate = link capacity = link bandwidth R이라고 할때

  •  packet transmission delay = link로 L-bit packet을 보내는데에 필요한 시간 = L bits / R (bits/sec)

Physical Media (물리 매체)

물리매체를 알아보기 전에 비트에 대해서 먼저 알아보자.

하나의 Endsystem에서 여러 링크와 라우터를 걸쳐 다른 Endsystem으로 비트가 전달되는 상황을 생각해보자. 이 비트는 여러 라우터를 거치게 된다. 즉, 비트는 목적지로 전달될 때 여러 라우터를 걸쳐 전송되며, 일련의 송신기(transmitter)-수신기(receiver) 쌍을 거치게 된다. 이 비트를 전송하기 위하여 필요한 것이 물리매체(physical media)이다. 비트는 물리 매체 상에 전자파나 광 펄스를 전파함으로써 전송된다.

물리매체는 여러 형태이며, 경로상의 각 송신기-수신기 쌍에 대해 같은 유형일 필요는 없다. 예시로는 꼬임쌍선, 동축케이블, 다중모드 광섬유케이블 등이 있다.

물리매체는 크게 두가지로 구분된다.

  • 유도 매체 (guided media) : copper, fiber, coax와 같은 solid media를 통해서 전파되는 물리매체이다.
  • 비유도 매체 (unguided media) : radio와 같이 무선으로 자유롭게 전파되는 물리매체이다.

Physical Media : coax, fiber

  • Coaxial Cable : 동축 케이블
    • two concentric copper conductors : 꼬임쌍선처럼 2개의 구리선으로 되어 있으나, 두 구리선이 평행하지 않고 동심원 형태를 이루고 있다.
    • bidirectional : 데이터가 양방향으로 왔다갔다할 수 있다.
    • 사용 : 케이블 TV 시스템
  • fiber optic cable : 광섬유
    • 비트를 나타내는 빛의 파동을 전하는 가늘고 유연한 매체
    • high-speed operation : 초당 10~100기가비트에 이르는 높은 비트율을 지원한다.
    • 광장비는 고가이므로 근거리 전송(LAN, 가정)에는 이용하기 어렵다.
    • 특징 
      • 전자기성 간섭에 영향을 받지 않는다.
      • 100 km까지는 신호 감쇠 현상이 매우 적다.
      • 태핑(tapping, 도청)하기가 어렵다.
    • 사용 : 해저링크, 광역 전화 네트워크

Physical Media : Radio

  • unguided media
  • 물리적인 wire가 존재하지 않고, 전자기 스펙트럼으로 신호를 주고 받는다.
  • bidirectional : 양방향
  • 전파가 될 때 환경과 거리에 영향을 받는다.
    • Reflection : 반사되거나
    • Obstruction : 막히거나
    • Interference : 방해되거나

유형

  • Terrestrial Microwave (지상 마이크로파) : 유선의 전송 매체를 사용하기 어려운 강, 사막 등의 장애물을 가로질러 장거리 통신 서비스를 제공하기에 적합하다. 파라볼라 안테나를 사용한다는 것이 특징이다.
  • LAN : WIFI가 예시이다. 근거리 네트워크(십~수백미터)로 동작하는 채널 
  • Wide-area : Cellular 기술이 예시이다. 최근에는 6G까지 논의되고 있다.
  • Satellite : 위성은 지구 표면에서 약 36,000km 위에서 궤도를 돌며 네트워크를 제공한다. 위성 통신은 신호가 이동해야 하는 거리 때문에 평균적으로 약 280msec의 종단 간 지연(End-to-End Delay)이 발생한다. 일부 위성은 인터넷 서비스를 제공하기 위하여 낮은 고도에서 운영되며, 이는 지연 시간을 줄이고 성능을 향상시키는 데 도움이 된다.

 

 
반응형
SMALL

📚 [대학생 꿀팁] 무료로 ebook 보는 방법 : 교보도서관 이용방법 📚

공부하다보면 매번 전공 교재나 시중 책들을 빌리는 것이 골치 아플 때가 많다.

직접 가서 빌리기도 귀찮고, 다시 가서 반납하는 일들이 여간 번거로운 게 아니다. 

그래서 ebook을 빌릴 수 있는 방법이 있지 않을 까 해서 찾았는데, 무료로 ebook을 볼 수 있는 방법을 찾았다..! 바로 교보문고 전자도서관을 이용하는 것이다. 

사용가능한 대학교 목록을 봤는데, 거의 모든 대학교들이 가능한 것 같아서 한 번 확인해보고 사용해보면 좋을 것 같다. 


 

 

교보 전자도서관을 소개합니다 - 교보문고전자도서관

책, 그 이상의 가치! 교보문고 전자도서관을 소개합니다. 이용자는 공간, 시간적 부담 없이 효율적인 문화생활을, 관리자는 도서 선정부터 이용통계까지 간편한 관리업무를, 기관은 구성원에게

ebook.kyobobook.co.kr

위 링크에서 사용 가능한 지역도서관, 대학도서관 등이 나와있으니 내가 이용하고 있는 도서관이 사용가능한지 확인해보고 사용하자. 

그리고 이 도서관에 회원가입이 되어 있어야 한다..! 뭐 대학생은 자신의 대학교 도서관에는 회원가입이 되어있으니까 신경쓸 필요는 없다. 


1. 교보 전자도서관 어플리케이션 다운받기

플레이스토어나 앱스토어에 들어가서 '교보문고 전자도서관'을 검색해보자. 그러면 다음과 같은 어플을 찾을 수 있을 것이다.

얘를 다운받아주자.

2. 도서관 검색

이제 내가 이용하고 있는 지역도서관이나 대학도서관을 찾아보자. 하단 바에 있는 도서관 검색을 누른 뒤 검색해보자. 

도서관 검색하기

3. 로그인하기

이제 로그인을 해보자. 우리 학교는 그냥 학교 포털 아이디와 비밀번호였다. 지역도서관은 회원가입할 때 사용했던 아이디와 비밀번호를 적으면 될 듯 싶다. 

로그인이 안된다면 하단에 '로그인 실패 시 아래 사항을 확인하여 주세요.'를 한 번 확인해보고 다시 로그인해보자!

로그인하기

4. 책 대출하기

로그인까지 마쳤다면, 이제 실제 도서관처럼 책을 대출할 수도 있고, 이미 대출이 되어 있는 책은 예약도 가능하다. 

책을 대출해보자.


이렇게 해서 교보문고 전자도서관에서 무료로 책을 대출할 수 있는 방법에 대해서 알아보았다.

책 들고 다니기 상당히 무겁고 번거로운데, 이 어플을 알고 나서부터는 딱히 책을 들고 다닐 일이 없어졌다..!

아직 많은 사람들이 모르는 것 같아서, 더 많은 사람들이 이용해보면 좋을 것 같다. 

 

반응형
SMALL

HuggingFace에서 상당히 재밌어 보이는 것을 찾았는데, 바로 nob-hill-noir라는 탐정 게임이다.

LLM 언어 모델을 게임에 적용시켜 직접 채팅을 치면서 용의자를 심문하고, 증거를 수집하여 살인사건을 조사하는 게임이다. 

평소에도 방탈출, 보드게임 등 퍼즐이나 게임을 좋아하기 때문에 찾자마자 바로 플레이 해보았다.

 

Nob Hill Noir - a Hugging Face Space by guanghap

 

huggingface.co


 

[플레이 후기]

npc 심문하기

이런식으로 npc한테 채팅으로 질문을 하거나, 필요한 정보들을 물어볼 수 있다. 처음에는 플레이 가이드라인 같은 것이 없어서 어떤 말을 해야할지 조금 막막한 점이 있었다. (그래서 처음에는 조금 삽질을..) 그래도 하다보면 어떤 질문들을 해야할지 감이 오기 시작한다..

메모도 할 수 있다.

중간중간 정보들을 Notes에다가 메모할 수도 있다. 메모 안하면 범인 찾는 건 좀 힘들 수도.. 영어 이름들이라 메모 안하면 누가 누군지 헷갈린다.

 

[스포주의..!]

1. 여기서부터 게임의 스토리나 플레이 방식에 대해서 조금 더 후기를 적어보자면, 일단 기존의 탐정게임들과는 다르게 질문과 이에 대한 답이 상당히 자유롭다는 점이 굉장히 매력적이었다. 당연히 스토리라인을 위한 어느정도?의 틀은 있었겠지만, 내가 원하는 질문들을 마음대로 할 수 있다는 점과 이에 대한 답 또한 그때마다 달라진다는 것이 게임에 몰입하는 데에 상당한 도움을 주었던 것 같다. 

 

2. 그리고 또 신기한게 캐릭터마다 성격과 말투가 정확하게 느껴진다는 것이었다..! 질문에 대한 답을 하는 말투도 그렇고, 답을 하는 데에 있어서 각 캐릭터 별로 성격이 확실하다는 것을 느꼈다. 

 

3. 마지막으로 단순히 심문만 하는 것이 아니라, 너무 질문을 집요하게 했을 때 나오는 이벤트?가 상당히 재미있었던 것 같다. (난 좀 무서웠음..)

 

결론은 언어모델과 게임을 하는 시대가 도래한 건 분명하고, 이를 이용한 creative한 게임들이 많이 나오기를 바라며..

 

(NLP 공부도 열심히 하자...!)

 

반응형
SMALL

계속 Github 명령어를 헷갈려서 이참에 기본 명령어들을 정리하려고 한다.

...


1. Git 영역

(1) Working directory (Local) : 코드를 수정하는 영역

(2) Staging Area : git add를 통해 수정된 코드를 올리는 영역

(3) .git directory (Repository) : git commit을 통해 Repository에 제출

Git 영역

2. Git 기본 설정

git --version # 설치 및 버전 확인

# 사용자 정보 설정 
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

# 설정한 모든 정보 확인
git config --list

3. 프로젝트 시작하기

git init # git이 해당 폴더를 관리하도록 설정
git status # 변경사항 확인

git add <파일/디렉토리 경로> # 해당 파일만 Staging Area로
git add . # 현재 디렉토리의 모든 파일을 Staging Area로

git commit -m "Commit Message" 
git log # 커밋 변경사항 확인

4. Github 시작하기

git push # 원격 저장소인 레포로 반영
git pull # 원격 저장소의 데이터를 로컬 저장소에 최신화

git clone [REPO_URL] [DIR] # 이미 초기화된 원격저장소를 복제해와서 개발해야 하는 경우, clone 명령어를 활용하여 복제해올 수 있음.

 

반응형
SMALL

이번에 Object Detection 경진대회를 나가게 되면서 YOLOv8을 사용해보게 되었다.

이번 글에서는 YOLO라는 모델에 대한 자세한 설명보다는, 

Custom Dataset을 어떻게 YOLOv8에 Training 시키는지에 대한 자세한 설명과 코드 위주로 정리해보고자 한다.


1. YOLOv8이란?

우선, 기본적으로 YOLO(You Only Look Once)라는 모델은 객체 탐지(Object Detection)를 위한 딥러닝 모델 중 하나로서, 실시간 객체 탐지 및 분류 태스크에 널리 사용된다.

공식 깃허브 : 

 

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite - GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

github.com

2. YOLOv8 설치

아래 코드를 실행해서 yolov8를 설치해주자.

!pip install ultralytics

3. Custom Dataset 구조

가장 애를 먹었던 부분인데, 바로 데이터셋 구조 설정이다. 다음 그림과 같은 파일 구조를 띄도록 해준다. 

yolov8 파일 구조

경로 설정에 계속 문제가 생기면 상대경로 말고 절대경로로 지정하는 것을 추천한다.

4. coco8.yaml 파일 설정 

  • path : dataset root 경로
  • train : training set 경로
  • val : validation set 경로
  • test : test set 경로
  • classes : 클래스 정보
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)

# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  ...
  77: teddy bear
  78: hair drier
  79: toothbrush

5. Training

다음 코드를 실행하여 Training 해주자.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data='coco8.yaml', epochs=100, imgsz=640)

6. Inference

from ultralytics import YOLO

# 위에서 Trained된 모델 불러오기
model = YOLO('yolov8n.pt')

# inference 하고 싶은 이미지 불러오기
source = 'path/to/image.jpg'

# Run inference on the source
results = model(source)  # list of Results objects
반응형
SMALL

❗️이 포스팅은 인프런의 [스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술] 강의를 정리한 내용입니다.❗️

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

[스프링 입문기 5] 스프링 웹개발 기초

  • 정적 컨텐츠
  • MVC와 템플릿 엔진
  • API 방식

정적 컨텐츠

  • 서버에서의 변형 없이 정적 파일을 그대로 웹 브라우저에게 넘겨줌
  • Spring Boot에서는 /static 폴더에서 정적 컨텐츠를 사용할 수 있도록 제공한다.

정적 컨텐츠 작동 방식

  1. 웹 브라우저에서 localhost:8080/hello-static.html 경로로 들어가면 내장 톰켓 서버가 요청을 받는다.
  2. 가장 먼저 hello-static과 관련된 컨트롤러가 존재하는지 찾아본다. (컨트롤러가 우선순위)
  3. 없다면 resources : static/hello-static.html를 찾는다.

MVC와 템플릿 엔진 

  • MVC란 하나의 애플리케이션을 만들 때의 개발 패턴으로, Model(모델), View(뷰), Controller(컨트롤러)이라는 세 가지 구성 요소로 소프트웨어를 구조화하는 방법을 말한다. 
  • Model : 모델이란 데이터와 비즈니스 로직을 담당하는 부분으로서, 애플리케이션의 데이터를 처리하고, 상태를 유지하는 역할을 말한다.
  • View : 뷰는 사용자 인터페이스(UI)를 담당하는 부분으로, 데이터를 시각적으로 표현하여 사용자에게 보여주는 역할을 담당한다.
  • Controller : 컨트롤러는 모델과 뷰 사이의 상호작용을 관리하는 부분이다.
  • "name"을 파라미터로 받고, 리턴은 templates/hello-template.html인 컨트롤러를 만들었다.
@GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(value = "name") String name, Model model){
        model.addAttribute("name", name); // key : name, value : name
        return "hello-template";
    }
  • "hello-template.html"에서는 모델의 attribute인 name값을 파라미터로 받은 value로 변경하여 html 내용을 동적으로 바꿀 수 있다. 
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaft.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p th:text="'hello '+ ${name}">hello! empty</p>
</body>
</html>
  • 파라미터는 GET 방식처럼 "http://localhost:8080/hello-mvc?name=spring!"처럼 설정해 줄 수 있다. 

API 방식

  • @ResponseBody를 사용. 
@GetMapping("hello-api")
@ResponseBody
public Hello helloAPI(@RequestParam("name") String name){
    Hello hello = new Hello();
    hello.setName(name);
    return hello; //hello라는 객체 자체를 반환
}

static class Hello{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

API 작동 방식

  • API 방식은 템플릿 방식과 다르게 viewResolver 대신에 HttpMessageConverter가 작동한다. (JSON 포맷으로 변형)
  • 기본 문자는 StringHttpMessageConverter, 기본 객체는 MappingJackson2HttpMessageConverter가 처리한다. byte처리와 같은 다른 형식들도 기본적으로 HttpMessageConverter가 탑재되어 있다.
반응형
SMALL

❗️이 포스팅은 인프런의 [스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술] 강의를 정리한 내용입니다.❗️

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

[스프링 입문기 4] 빌드 및 실행하기

빌드하고 실행하기

  1. 터미널로 이동 
  2. './gradlew build' -> build 폴더가 생성됨
  3. 'cd build/libs' 로 이동 
  4. 'java -jar hello-spring-0.0.1-SNAPSHOT.jar' 
  5. 실행되는지 확인

+) 빌드 파일 지웠다가 다시 실행하고 싶을 때에는? './gradlew clean build'

잘 실행되었다면 다음과 같은 화면이 뜬다.

 

 

 

 

 

 

 

 

 

 

반응형
SMALL

❗️이 포스팅은 인프런의 [스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술] 강의를 정리한 내용입니다.❗️

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

[스프링 입문기 3] Welcome 페이지 만들기

Welcome Page 만들기

  • 사용자가 도메인을 타고 들어왔을 때 보이는 첫 화면이 된다.
  • 경로 : src/main/resources/static/index.html
  • index.html 파일 추가해주기
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    hello
    <a href="/hello">hello</a>

</body>
</html>
  • 서버를 다시 실행해주면 다음과 같은 화면을 확인할 수 있다. 

Welcome 페이지 추가

  • 이와 같이 static 폴더 안에 index.html 파일을 추가하면, 스프링 부트에서 자동적으로 이 index.html 파일을 홈화면으로 기능한다. 

thymeleaf 템플릿 엔진

  • index.html은 정적(static) 페이지이기 때문에, 내가 원하는 대로 페이지를 수정하기 위해서는 템플릿 엔진이 필요하다.
  • Spring Boot 템플릿 엔진 종류
    • FreeMarker
    • Groovy
    • Thymeleaf (가장 많이 사용되는 템플릿 엔진 중 하나)
    • Mustache

Controller 만들기

  • Controller는 web application의 첫 진입점이 된다.

controller 위치

  • hellospring 폴더 내부에 controller 패키지를 하나 만들어준다. 

conroller 패키지 만들기

  • controller 패키지 안에 HelloController 클래스를 생성해준다.

HelloController 클래스 만들기

  • HelloController 클래스 내에 다음 코드를 작성한다.
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    @GetMapping("hello")  // 웹 어플리케이션이 /hello로 들어오면 이 함수를 실행
    public String hello(Model model ) {
        model.addAttribute("data", "hello");
        return ("hello"); // template 중에서 hello.html을 실행하라는 의미
    }
}

템플릿 추가하기

  • src/main/resources/templates 폴더 안에 hello.html 파일을 추가한다.

hello.html 파일 위치

  • hello.html 파일에 다음 코드를 작성해준다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaft.org">
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <title>Hello</title>
</head>
<body>
  <p th:text="'안녕하세요. '+ ${data}">안녕하세요 손님.</p>
</body>
</html>
  • localhost:8080/hello로 들어가보면 다음과 같이 "data" 속성에 저장했던 "hello"값으로 바뀌어 출력되는 것을 볼 수 있다.

작동 원리

동작 원리

  1. 웹 브라우저에서 /hello 로 접근 하면 스프링 부트에 내장되어 있는 톰켓 서버에서 이를 받아 spring 컨테이너에 던져줌.
  2. 컨트롤러 내부에 @GetMapping("hello")를 찾아서 해당 메서드를 실행
  3. model에는 key:value 값을 저장 (여기서는 data:hello!!)
  4. return "hello"를 하면 templates/hello.html를 찾아감. (thymeleaf 템플릿 엔진 처리)
    • 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리한다.
    • 스프링 부트 템플릿엔진 기본 viewName 매핑 
    • 'resources/templates/' + {viewName} + '.html' 
반응형
SMALL

+ Recent posts