인터넷에서 데이터는 효율적인 라우팅을 위해 패킷 단위로 쪼개져 같은 목적지로 전송되며

TCP는 패킷에 각각 번호를 부여하여 목적지에서 재조립한다. (패킷 분실 확인 처리/ 패킷 추적)

 

패킷의 구성 : 헤더 (수신단 인터넷 주소, 순서) / 데이터 / 테일러 (에러정보)

 


1. 흐름제어 (정지-대기, 슬라이딩 윈도우)

송수신단 사이 데이터 처리속도 차이를 제어 > 데이터 처리속도를 조절해 수신자의 버퍼 오버플로우 방지

 

1) 정지-대기 (stop and wait)

매번 패킷에 전송 후 정지-대기, 확인 응답 받은 뒤 다음 패킷 전송가능

> 비효율적

 

2) 슬라이딩 윈도우 (sliding window)

윈도우 : 송수신단에서 만들어진 버퍼크기

수신단에서 설정한 윈도우 크기 만큼 송신단에서 확인 응답이 없어도 세그먼트 전송 가능 (연속적)

> 데이터 흐름 동적 조절

 

 

2. 오류제어 (ARQ : 정지-대기, GBn, SR)

ARQ (Auto Repeat Request) : 자동 반복 요청. 프레임 손상/손실 시 재전송 요청 (흐름제어와 연관성)

 

1) 정지-대기 ARQ

송신단에서 1개 프레임을 전송하면 수신단에서 ACK 혹은 NAK 전송 (에러 유무 응답)

  • ACK : 다음 프레임 전송
  • NAK : 손상된 프레임 번호 반환

 

데이터 프레임과 ACK 프레임은 0,1 번호를 번갈아 부여하여 구분

NAK응답/ 데이터, ACK 분실 시 타임아웃 > 재전송 

 

2) Go-Back-n ARQ

프레임 손상/분실, ACK 손실로 인한 타임아웃 시 확인된 마지막 프레임 이후 모든 프레임 재전송

송신단은 전송한 프레임의 복사본을 가짐 (ACK, NAK 구분)

수신단은 NAK 이후 수신 데이터는 폐기하고 재전송 받는다

 

GBn ARQ에서 데이터 프레임 손실된 경우
GBn ARQ에서 데이터 프레임 분실된 경우

 

 

3) SR ARQ (Selective-Reject ARQ)

손상/손실된 프레임만 재전송 (GBn ARQ의 모든 프레임을 재전송하는 단점 보완)

별도의 데이터 재정렬, 버퍼 필요 : 수신단에 버퍼를 두어 수신데이터 정렬 (비용증가)

 

 

 

3. 혼잡제어 (AIMD, Slow Start)

하나의 라우터에 데이터가 몰려 모든 데이터 처리가 어려울 때 > 호스트들 재전송 > 혼잡가중 > 오버플로우/데이터 손실 발생 가능

네트워크 혼잡을 피하기위해 송신단의 데이터 전송/처리속도를 제어하는 기법

 

1) AIMD (Additive Increase Multicative Decrease)

합 증가 - 곱 감소 알고리즘

 

  • 패킷 1개 전송 > 전송한 패킷이 문제 없이 도착 > 윈도우 사이즈 +1 하며 전송
  • 전송 실패/타임아웃 > 윈도우 사이즈 절반 감소

나중에 진입 > 초기엔 불리하지만 결국엔 시간 흐르면 공평해짐

문제점 : 초기에 높은 대역폭 사용 못함 (처음에 전송속도 올리는데 많은 시간 소요), 네트워크 혼잡성 미리 감지 못함

 

 

2) Slow Start

AIMD 와 시작 같음 (시작 느림)

ACK마다 윈도우 사이즈 +1 > 한 주기 이후 윈도우 사이즈=2배 

혼잡 현상 발생했던 윈도우 사이즈 절반 까지는 지수 함수 꼴로 윈도우 증가, 이후 +1씩 증가

 

  • 혼잡 회피 : 윈도우 크기가 임계 값에 도달하면 데이터 손실 가능성 높음 > 회피하기 위해 윈도우 선형증가(+1) > 혼잡하면 윈도우 크기 세그먼트 후 1로 감소 + 임계값을 손실 발생했을 때의 윈도우 사이즈 절반으로 감소
  • 빠른 회복 : 혼잡상태 > 윈도우 사이즈 절반으로 감소 > 선형증가(+1)
  • 빠른 재전송 : 중복된 순번의 패킷 3개 수신 시 재전송, 윈도우 사이즈 절반으로 감소

 


Reference

 

TCP (흐름제어/혼잡제어/오류제어)

1. 패킷(Packet)이란? 인터넷에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해 데이터를 여러 개의 조각으로 나누어 전송을 하게 되는데, 이때의 조각을 이라고 한다. 쉽게 말

velog.io

 

반응형

'CS Interview > Network' 카테고리의 다른 글

HTTP & HTTPS / GET & POST (HTTP METHOD)  (0) 2021.05.06
[TCP] 연결, 해제, FLAG/ 3-way handshake, 4-way handshake  (0) 2021.05.04
TCP와 UDP  (0) 2021.05.04

프로그래머스>해시>'완주하지 못한 선수' 를 풀었다.

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

얼마전 비슷한 문제를 풀어서 어렵지 않게 풀 수 있었다. (해쉬는 파이썬 딕셔너리가 짱짱인듯..)

 

비슷한 문제 : [해커랭크] Hash Table : Ransom Note 가 있다. (같은 접근으로 풀이 가능)

 

Hash Tables : Ransom Note (Python)

Hash Tables: Ransom Note | HackerRank Given two sets of dictionaries, tell if one of them is a subset of the other. www.hackerrank.com 오랜만에 해커랭크에서 문제를 풀었다. 고새 파이썬 딕셔너리 사용..

rokroks.tistory.com

 

 


 

 

Solution

def solution(p,c):
    dic={}
    res=''
    for x in p:
        if x not in dic:
            dic[x]=1
        else:
            dic[x]+=1

    for x in c:
        if x in dic:
            dic[x]-=1
    
    for x in dic:
        if dic[x]>0: res=x
            
    return res  

1) 딕셔너리에 '참가자 이름 : 동명이인 수'로 저장

2) 완주자 이름(딕셔너리 key) 존재 시 value 감소  

3) 딕셔너리 0 초과 값인 key 출력 (완주하지 않은 경우)

 

 

깰끔

 

 

 


 

 

 

다른 사람의 파이썬 풀이 중에 흥미로운 라이브러리가 있어서 가져와봤다.

(참고 : wooaoe.tistory.com/71)

 

import collections as coll
def solution(p,c):
    p.sort()
    c.sort()
    result=coll.Counter(p)-coll.Counter(c)
    return list(result)[0]

collections 라이브러리의 Counter,, 차집합 개념으로 구현된 코드이다.

역시 파이썬은 최강이다..

 

 

반응형

프로세스 

실행중인 프로그램 

디스크로부터 메모리에 적재되어 CPU 할당을 받을 수 있는 것

OS로부터 주소공간, 파일, 메모리 등을 할당받음

 

  • 프로세스 스택 : 임시자료 (함수 매개변수, 복귀주소, 로컬변수)
  • 데이터 섹션 : 전역변수
  • 힙(heap) : 프로세스실행 중에 동적 할당되는 메모리

 

PCB

프로세스 제어 블록

특정 프로세스에 대한 중요한 정보를 저장 하고 있는 운영체제의 자료구조

OS는 프로세스 관리를 위해 프로세스 생성 시 동시에 고유 PCB를 생성함

CPU 할당받은 프로세스가 작업 처리 중에 프로세스 전환이 발생하면 진행작업을 PCB에 저장 후 CPU를 반환함

> 다시 CPU 할당 받으면 이전에 종료된 시점부터 작업 수행 가능

 

PCB 에 저장되는 정보

  • 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
  • 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
  • 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
  • CPU 레지스터
  • CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
  • 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
  • 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
  • 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등

 

 


스레드

프로세스의 실행단위 (흐름)

한 프로세스 내에서 동작하는 여러 흐름으로 프로세스 내의 공간/자원 공유가능

구성 : 스레드 ID, 레지스터 집합, 독립된 PC(program counter), 독립된 스택 (메모리공간)

같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린파일, 신호 등 OS 자원을 공유함

 

 

멀티 스레드

하나의 프로세스를 다수의 실행단위로 구분하여 자원을 공유 (하나의 프로그램에서 병렬 처리)

자원의 생성, 관리의 중복을 최소화하여 수행능력 향상 (메모리 공간, 시스템 자원소모 감소)

스레드 간의 통신 = 자원 이용 없이 전역변수의 공간/ 동적할당 공간(heap) 에서 통신가능

 

주의 : 동기화작업 필요 > 스레드 간 접근 가능하므로 엉뚱한 값 읽기/수정 가능 > 동기화로 작업처리 순서, 공유자원 접근 제어 > 과도한 동기화는 락발생 > 병목현상 주의

 

 

싱글스레드 프로세스와 다중스레드 프로세스


 

 

멀티 스레드 : 하나의 프로그램 병렬 처리. 적은 메모리공간 사용, 문맥전환 빠름, 오류로 하나의 스레드 종료 시 전체 스레드 종료 가능, 동기화 문제(병목현상) 

RPC 서버 (Remote Procedure Call 원격 프로시저 호출) : 서버가 메시지 수신 시 서비스를 위한 새로운 스레드 생성, 여러 요청을 병렬로 처리

 

멀티 프로세스 : fork(), 여러 프로그램 병렬 처리. 하나의 프로세스 종료 시 다른 프로세스에 영향없음, 많은 메모리공간, 많은 CPU시간 소요

 

 

멀티 태스킹 : OS에서 지원, TASK 번갈아 수행. 독립된 자원사용, 공유 X

 

멀티 프로그래밍 : 프로세서의 I/O작업 종료대기 중에 하나의 프로세서에서 다른 프로그램을 수행 (자원낭비 방지)

 

>>> 대상 시스템 특징에 따라 적합한 동작방식 선택/적용해야 함 

 


Reference

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

 

 

[운영체제] 4장 다중 스레드 프로그래밍(Multithreaded Programming)

4.1 개요(Overview) ▶ 스레드(threads) : CPU의 기본 단위, 스레드 ID, 프로그램 카운터, 레지스터 ...

blog.naver.com

 

 

[OS] 멀티프로세싱, 멀티프로그래밍, 멀티태스킹, 멀티스레딩

멀티 프로세싱은 다수의 프로세서가 서로 협력적으로 일을 처리하는 것을 의미한다. 컴퓨터는 1대인데 프로세서(CPU)는 2개 이상이다. 보통, 멀티코어시스템(multi-core system)을 포함한다.초기의 컴

velog.io

 

반응형

TCP의 연결, 데이터 전송, 해제 과정 한 눈에 보기

 

서버 : socket() 생성 → bind() 소켓 주소할당 → listen() 연결요청 대기상태 → accept() 연결허용 → read/write() 데이터 송수신 → close() 연결종료

클라이언트 : socket() 생성 → connect() 연결요청 → read/write() 데이터 송수신 → close() 연결종료

 

 

3-way handshake : TCP 연결

서버 listen() 상태 

1) 클라이언트 connect(), C->S 접속요청 패킷 SYN(M) 전송  

2) 서버 accept(), S->C 요청 수락 패킷 ACK(M+1), SYN(N) 전송 

3) 클라이언트 connect(), C->S 요청 수락 확인 패킷 ACK(N+1) 전송

연결 성립 (Established)

 

3-way handshake

 

4-way handshake : TCP 해제

Established 상태

1) C->S 연결 종료요청 FIN FLAG 전송

2) S->C 종료 수락 메시지 ACK 전송

   일시적 TIME_OUT (데이터를 모두 보낼 때 까지)

3) S->C 연결 종료 FIN FLAG 전송

4) C->S 확인 메시지 ACK 전송

서버 소켓 연결 close(), 클라이언트 일정 시간 동안 TIME_WAIT (잉여패킷 대기)

 

4-way handshake


TCP flag(URG, ACK, PSH, RST, SYN, FIN)

FLAG 순서  - | URG  | ACK | PSH | RST | SYN | FIN |

각각 1비트로 TCP 세그먼트 필드 안에 CONTROL BIT 또는 FLAG BIT 로 정의 되어 있다.

 

 

SYN(Synchronization:동기화) - S : 연결 요청 플래그

TCP 에서 세션을 성립할 때  가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호 (ISN) 를 보내게 된다.

 

시퀀스 랜덤인 이유
Connection시 사용하는 포트는 유한 범위 내 사용되고 시간이 지나면 재사용 됨
= 두 통신 호스트가 과거 사용된 포트 번호쌍을 사용할 가능성이 있음 
>>> SYN의 시퀀스가 순차적일 경우 서버에서는 SYN으로 패킷 구분하므로 이전 Connections에서 오는 패킷으로 인식 가능  

 

ACK(Acknowledgement) - Ack : 응답

상대로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있음
수신자가 송신자 시퀀스 번호에 길이 또는 데이터 양을 더해 ACK를 전송 (일반적으로 +1)

ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송

 

FIN(Finish) - F : 연결 종료 요청
세션 연결을 종료시킬 때 사용. 더이상 전송할 데이터가 없음을 나타냄

 

RST(Reset) - R : 연결 종료
재설정(Reset)을 하는 과정, 양방향에서 동시에 일어나는 중단 작업

비 정상적인 세션 연결 끊기. 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용

 

PSH(Push) - P : 밀어넣기

받은 데이터를 버퍼가 채워지기를 기다리지 않고 (버퍼링 없이) 즉시 목적지인 OSI 7 Layer 의 Application 계층으로 전송

TELNET 과 같은 상호작용, 빠른 응답이 중요한 프로토콜(대화형 프로토콜)에 사용

 

URG(Urgent) - U : 긴급 데이터
Urgent pointer가 유효한 것인지를 나타냄. 긴급 데이터로 다른 데이터에 비해 우선순위가 높아야 함 
(ex. ping 명령어 실행 도중 Ctrl+c 입력)

 

Placeholder             
패킷의 플래그에 SYN, FIN, RST, PSH등의 플래그가 설정 되어 있지 않은 경우 세팅됨

ACK플래그와 함께 사용되기도 함

 

 


Reference

 

[TCP] 3-way-handshake & 4-way-handshake

[TCP] 3-way-handshake & 4-way-handshake 연결 성립(Connection Establishment) 1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다. 2) 서버는 클라이언트의 요청인 SYN(a)을 받고 클라이언트에게..

asfirstalways.tistory.com

 

 

TCP 통신 과정 및 비정상 종료(TCP 3,4-way handshake)

TCP Handshake 란? OSI 7계층 중 Network layer에 해당하는 프로토콜인 TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용하고 세션을 종료를 성립하기 위해 4-way handsh..

www.crocus.co.kr

 

 

gyoogle/tech-interview-for-developer

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

 

반응형

Transport Layer (TCP vs UDP)

OSI 7계층의 하위 3계층과 상위 3계층의 인터페이스를 담당 (TCP/UDP : OSI 전송계층의 표준)

 

<물리계층 - 데이터링크계층 - 네트워크계층 - 전송계층 - 세션계층 - 표현계층 - 응용계층>

 


 

1. TCP (Transmission Control Protocol) - 전송제어 프로토콜

1) 전이중(full-duplex) 방식 : 전송 양방향으로 동시에 가능

2) 점대점(point to point)방식 : 각 연결이 2개의 종단점을 가지고 있음 

 

신뢰성 없는 인터넷을 통해 송수신 종단점(소켓) 간에 신뢰성있는 바이트 스트림 전송 

 

특징

연결형, 신뢰성(흐름제어, 오류제어), 순차성, 멀티캐스팅 지원 X, 브로드캐스팅 지원 X

 

  • 연결 : 3-way handshake
  • 해제 : 4-way handshake
  • 흐름제어 : 슬라이딩 윈도우
  • 오류제어 : 재전송

 

 

2. UDP (User Datagram Protocol) - 사용자 데이터그램 프로토콜

1) IP 데이터그램 캡슐화하여 전송

2) 연결 설정 없이 전송

3) 짧은 요청, 응답에 용이

 

포트들을 사용해 IP 프로토콜에 인터페이스 제공

클라이언트-서버 상황에 유용 (단일/다중 목적지로 전송 가능)

 

● DNS : 사전설정, 해제 필요 없음

1) 어떤 hostname의 IP주소를 찾을 때, DNS 서버로 hostname이 포함된 UDP패킷 전송

2) DNS 서버는 hostname이 포함된 UDP 패킷으로 응답 

 

● 실시간 멀티미디어 

RTP (Real time Transport Protocol) : UDP 패킷의 단일 스트림으로 몇몇 실시간 데이터 스트림을 멀티플렉싱

패킷에 번호를 부여하여 분실 패킷 추적 가능 

 

특징

비연결형, 신뢰성 X(흐름/오류제어 없음), 순차전달 X

 


Reference

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

 

 

[TCP] 3-way-handshake & 4-way-handshake

[TCP] 3-way-handshake & 4-way-handshake 연결 성립(Connection Establishment) 1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다. 2) 서버는 클라이언트의 요청인 SYN(a)을 받고 클라이언트에게..

asfirstalways.tistory.com

 

반응형

RESTful (REpresentational State Transfer)

자원을 정의하고 자원에 대한 주소 지정 방법 전반에 대한 패턴

분산 하이퍼미디어 시스템 (ex. WWW)을 위한 소프트웨어 아키텍처의 한 형식

리소스 : URI-Uniform Resource Identifiers (명사)

메소드 : HTTP Method (GET : 조회/ POST : 생성/ PUT : 기존 entity 전체수정/ PATCH : 일부수정/ DELETE : 삭제)

메시지: Header, Body 명확히 분리해서 사용

Header : API 버전정보(서버의 컨트롤정보), MIME 타입(응답받고자 하는 타입)

Entity : body에 작성

브라우저와 서버의 형식 통일 (ex. form-data, json ...)


장점 : Open API 제공 용이/ 멀티플랫폼 지원, 연동 용이/ 데이터를 원하는 타입으로 주고받을 수 있음

단점 : 메소드 4종류만 가능/ 분산환경에 부적합/ HTTP 통신모델만 지원


TDD (Test-Driven Development)

매우 짧은 개발 사이클 반복에 의존하는 SW개발 프로세스

개발자는 요구되는 기능에 대한 자동화된 TC작성 > 해당 테스트를 통과하는 가장 간단한 코드를 작성 (리팩토링 반복)

개발자는 해당 기능의 요구사항, 명세를 분명히 이해해야 함

장점 : 요구사항에 집중

단점 : 테스트에 대한 사전 학습 필요, 100% 무결성 보장 안됨


함수형 프로그래밍

immutable : 가지고 있는 값을 변경할 수 없는 객체, 값 변경 시 새로운 객체 생성, 변경된 값 주입하여 반환

mutable : 값을 변경 가능한 객체

Reactive Programming : 반응형, 선언형 프로그래밍. 함수형 프로그래밍 활용. 모든 것을 stream으로 봄

↔ 명령형 프로그래밍 (Imperative Programming)

stream : 값들의 집합. 함수형 메소드를 통해 immutable하게 관리


MVC (Model, View, Controller)

Controller

클라이언트 요청 받을 시, 실제 업무 수행하는 Model 호출 / 클라이언트가 데이터 전송 시 데이터 가공 후 Model에 전달

Model의 작업이 끝나면 결과를 View에 전달

Model

Controller가 호출 시, 역할 수행

비즈니스 로직 구현 영역. 응용 프로그램에서 데이터를 처리하는 부분 (DB에 연결, 데이터 추출, 저장, 삭제 ,업데이트, 변환 작업 수행)

상태 변화가 있을 시 Controller, View에 통보 > 후속조치 명령 받음

View

Controller에게 받은 Model의 결과를 사용자에게 출력할 화면을 만듦

만든 화면을 웹브라우저에 전송, 웹브라우저가 출력 (추출한 데이터/ 텍스트/ 입력폼/ 인터페이스 등)

출처&amp;amp;amp;nbsp;https://asfirstalways.tistory.com/180


Reference

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

::Devlog::

모두가 개발을 아는 그 날까지

asfirstalways.tistory.com

반응형

'CS Interview > etc' 카테고리의 다른 글

마이크로 서비스란 (MSA) - 모놀리식 아키텍처, API Gateway vs ESB  (0) 2021.06.16
REST API 특징과 보안  (0) 2021.06.15
[IBM API connect] 특징  (2) 2021.05.11
JavaScript  (0) 2021.05.06
React & Vue  (0) 2021.05.06

※ 본 게시글은 '배워서 바로 쓰는 스프링 프레임워크' 책으로 공부한 내용을 정리한 글입니다 ※


1. 스프링 프레임워크란

: 자바 엔터프라이즈 애플리케이션 개발을 단순하게 해주는 오픈소스 애플리케이션 프레임워크이다.

  

 

Spring Framework

 

spring.io

▲스프링 프로젝트 홈페이지 : 참조문서와 API를 볼 수 있음

 

 

스프링의 특징

  • 구조가 잘 잡히고 유지 보수가 쉬우며 테스트에 좋음
  • 독립 실행 자바 애플리케이션/ 웹 애플리케이션/ 애플릿 등 다양한 유형의 자바 애플리케이션 개발 가능
  • POJO로 개발하는 것을 권장 (Plain Old Java Object 기존자바객체)
  • 추상화 계층 제공 (준비코드 처리) -> 상호작용 쉬워짐

 


 

2. 스프링 모듈

스프링은 담당하는 애플리케이션 개발 요소에 따라 여러 모듈로 구성된다.

모듈 그룹 설명
핵심 컨테이너 스프링 기반을 이루는 모듈
◆ spring-core / spring-beans : 스프링 DI 기능과 IoC 컨테이너 구현 지원
◆ spring-expression : SpEL(스프링 표현언어, 애플리케이션 객체설정) 지원
AOP와 계측 ◆ spring-aop : AOP 기능 지원(AOP : Aspect Oriented Programming 관점기반 프로그래밍)
◆ spring-intrument : 클래스 계측지원
메시징 ◆ spring-meassaging : 메시지 기반 애플리케이션 개발에 유용
데이터 접근/통합 DB나 메시징 공급자와의 상호작용을 쉽게해주는 모듈
◆ spring-jdbc : JDBC를 사용한 DB사용 단순화 지원

spring-orm : ORM(객체-관계 매핑) 프레임워크 통합 지원 (하이버네이트, JPA)
spring-jms : JMS 공급자와의 상호작용 지원
 spring-tx : 프로그램을 통한 선언적 트랜잭션 관리 지원
 spring-web : 모든 웹 모듈이 공통으로 사용하는 클래스, 인터페이스 정의
 spring-webmvc : servlet, RESTful 웹 개발을 쉽게 해줌 (블로킹방식들)
 spring-webflux : 반응형(논블로킹), RESTful 웹 개발을 쉽게 해줌 
 spring-websocket : 웹소켓 프로토콜 지원
테스트  spring-test : 단위/통합테스트 지원

스프링의 여러 모듈은 애플리케이션에 꼭 필요한 부분만 포함하도록 설계한다.

 

 

 

스프링 배포판 명명규약

spring-<짧은 모듈 이름>-<스프링 버전>.jar

(짧은 모듈 이름 : aop, beans, context, expressions)

 

 

 

스프링 모듈 간 상호 의존 관계

 

의존관계 : 객체가 다른 객체와 상호작용하는 경우

출처 taejin0527.github.io

 

 


 

3. 스프링 기반 프레임워크

프레임워크 설명
스프링 시큐리티 엔터프라이즈 애플리케이션을 위한 인증, 권한부여 프레임워크
- XML에 빈 몇개를 설정하는 것 만으로 인증, 권한의 특징 부여 가능
스프링 데이터 여러 유형의 DB를 일관성있는 프로그래밍 모델로 사용가능하게 해줌
스프링 배치 애플리케이션이 뭉텅이로 작업을 처리하는 경우
스프링 통합 EA (기업 애플리케이션 통합) 제공
스프링 소셜 SNS와 상호 작용해야 하는 경우

사용중인 스프링 버전과 호환되는 버전인지 확인 후 사용하기

 

 

 


스프링의 특징과 모듈, 프레임워크에 대해 공부하고 정리해보았다. 다음은 IoC 컨테이너에 대해 알아보자.

반응형

'Web > Spring' 카테고리의 다른 글

스프링 프레임워크 (2) - IoC 컨테이너, Bean  (0) 2022.04.28
Spring Boot -프로젝트 생성  (0) 2021.05.14
스프링 공부 시작!  (0) 2021.05.04

그동안 웹과는 관련이 없는 프로젝트를 진행했다.

 

마지막으로 웹을 사용했던건 학부 졸업작품때 PHP로 주먹구구식 페이지를 구현했던 것..

(그마저 펌웨어가 주였던 작품.....)

 

그래서인지 항상 웹은 공부하기 싫으면서도 모르니까 해야만하는 존재였다. 

 

구구절절 어쩌구 어쨌든 재택근무를 하게 되어 이번 기회에 스프링공부도 시작해보려고 한다.

 

현미발 ㅎ2

부끄럽지만 작년에 법카로 구매했던 '배워서 바로 쓰는 스프링 프레임워크' 책으로 공부할 예정이다.

반응형
 

Hash Tables: Ransom Note | HackerRank

Given two sets of dictionaries, tell if one of them is a subset of the other.

www.hackerrank.com

오랜만에 해커랭크에서 문제를 풀었다. 고새 파이썬 딕셔너리 사용법이 헷갈려서 삽질을 좀 했다..

 

 

삽질했던 부분 

1) 딕셔너리는 키:값 형태인데 키에 문자열을 저장했다.. >> note의 문자열이 magazine 배열에 있을경우 무조건 'Yes' return하는 문제 발생

2) 해커랭크는 기본 입력부분은 제공이 되는데 입력부분을 제대로 확인하지 않아 magazine, note가 하나의 string인줄 알고 공백을 토큰으로 슬라이스 하고있었다...^^ 온라인 코테에서 입력부분 제공되는 경우도 있으니 앞으론 입력부도 제대로 확인하도록 하자 나 자신아,,^^

 

 


 

Solution

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the checkMagazine function below.
def checkMagazine(magazine, note):
    dic={}
    res=True
    
    for i in range(len(magazine)):
        if magazine[i] not in dic:
            dic[magazine[i]]=1
        else:
            dic[magazine[i]]+=1
        
    for i in range(len(note)):
        if note[i] in dic.keys():
                dic[note[i]]-=1
                if dic[note[i]]<0:
                    print('No')
                    res=False
                    break
        else:
            print('No')
            res=False
            break

    if res==True:
        print('Yes')

    
if __name__ == '__main__':
    mn = input().split()

    m = int(mn[0])

    n = int(mn[1])

    magazine = input().rstrip().split()

    note = input().rstrip().split()

    checkMagazine(magazine, note)

 

 

딕셔너리구조를 보여주기 위해 dic/ dic.keys()/ dic.values()를 각각 출력해보았다.

아래처럼 '문자열'(키):값(개수) 가 조회된다

 

 

어쨌든 햅삐한 결말...

 

반응형

크롤링(Crawling)

크롤링이란 웹에서 데이터를 수집하여 원하는 데이터를 추출하는 기술이다.

데이터를 검색, 색인, 가공까지 가능하기에 방대한 자료들을 활용하는 검색엔진 혹은 특정 정보들을 분석해야하는 분야에서 다양하게 사용되고 있다.

 


1. 크롤링 방식

1) 웹 페이지에 데이터 요청

정보를 추출하기 위해 웹에 요청하는 방식은 Get과 Post가 있다.

 

  • Get : URL을 통해 서버에 정보를 전달. URL 특성 상 길이제한이 있어 일반적으로 적은 양의 정보를 전달할 때 사용.
  • Post : 요청과 응답이 웹 페이지의 본문 안에서 일어나 글자 수의 제한이 없음.

이 단계에서 Python은 주로 requests 로 처리한다.

 

import requests

r=requests.get(target_url)

 

target_url 변수에 크롤링 하려는 웹페이지의 URL을 문자열로 저장한 뒤 requests.get()으로 불러온다.

 

 


 

2) 데이터 파싱

데이터를 추출하기 위해서는 가져온 웹 페이지를 파싱하는 단계가 필요하다.

파싱 :  페이지(문서, html 등)에서 원하는 데이터를 특정 패턴이나 순서로 추출하여 정보로 가공하는 것

 

이 단계에서 Python은 Beautiful soup 로 처리한다. (HTML, xml 파싱 라이브러리)

 

from bs4 import BeautifulSoup

#lxml파싱
lxml = BeautifulSoup(r.content, 'lxml')  #r=requests.get(target_url)

#HTML파싱
html = get_html(target_url)
soup = BeautifulSoup(html, 'html.parser')

 

1)에서 가져온 데이터를 파싱한다. (lxml이 성능향상에 좋음)

 

 


 

3) 데이터 추출

2)에서 파싱한 데이터에서 원하는 데이터를 추출, 처리한다.

 

이 단계에서 Python은 soup 객체의 find_all 혹은 find 함수를 사용해 데이터를 추출한다.

 

result = soup.find_all("a")
print(len(result))

 

 


2. 제한 규약 (robots.txt)

지식재산권을 침해하는 등의 피해를 방지하기 위해 웹 페이지마다 크롤링을 제한하는 규약이 있다.

웹 사이트 주소 끝에 'robots.txt'을 입력하면 크롤링을 허용하는 범위를 알려준다. 

 

나무위키에서 크롤링이 가능한 범위

 

크롤링개념과 크롤링 방식에 대해 알아보았다. 다음 회차에 Python으로 간단히 크롤링해보자.

 

 


Reference

 

웹 크롤링에 대해서

Data and Visualization

lumiamitie.github.io

 

크롤링 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

파이썬으로 크롤링 하기

requests와 Beautiful Soup을 사용해보기

medium.com

 

반응형

+ Recent posts