• 블로그 쓰는걸 두려워하지 말라
    → 이미 블로그가 많은데 이게 필요한가?
         ⇒ 필요함, 실제로 많은 블로그들이 있지만 꾸준한 블로그는 드문게 사실임
         ⇒ 유명한 블로그들은 그만한 이유가 있다, 그런 블로그들 특별한건 없다 다만 꾸준히 오랜기간 연재했을뿐
  • 어디선가 발표를 해봐라 그럼 내가 발표하기위해 더 열심히 공부하게 될것이다
  • 세미나, 컨퍼런스의 내용을 들으러 가는것도 좋지만 여러 사람을 만날기회로 생각하고 가봐라
  • 두려워하지말고 여기저기 자문을 구해봐라! 그분들도 삐약이들이 궁금증을 갖고 질문을 하면 좋아할 것이다

질문

  • 질문을 참지마라.. 나보다 윗사람들에게 질문하는것을 두려워하지말고 질문해라
    → 질문안하고 혼자 끙끙대면 오히려 안좋은 결과를 초래한다
  • 왜? WHY?
    •  업무를 지시받았을때 왜? 질문할것
      → 왜? 를 찾고, 목적에 따라 어떻게? 가 나와야 좋은 개발자가 된다
      → 하나를 알려줘도 100을 알수있는 개발자가 되려면 WHY? 의문을 가질것
      → 어떻게? 를 먼저 생각하면 결과가 산으로 갈수가 있다! 목적을 알고, 목적에 따라 개발하는게 좋음!
      → 어떻게? 보다는 왜? 를 먼저 알아야한다
  • 단, 질문을 하되 몇가지 생각하며 질문해야한다
    1. 핑프면 안된다
      → 내가 뭘 하려고하는데 뭘 찾아봤는데 어떤식으로 된다, 하지만 나는 어떻게 하려고 하는데 잘 안된다 이렇게했는데 잘 안되는데 혹시 왜 이러는지 알려주실수 있나요?
    2. 질문 안하는거 보단, 질문을 너무많이해서 '물음표살인마' 가 되는게 좋음
    3. 같은 질문을 반복해서 하지 말것!
    4. 질문을 할때는 질문에 대한 배경을 설명해야한다!
      → A 를 만들라고 하셔서 A를 만드려는데 제가 알아본바 B 방법은 ~~~~~ 하는 방식이고, C방법은 ㅁㅁㅁㅁㅁ 하는 방식인거 같습니다, 이 두개의 방법중 어떤게 더 효율적일지 감이 잡히지 않습니다 어떻게 진행하는게 좋을까요?
  • 역지사지
    • 상대방 질문에 대한 이해와 존중!
⚠️ 당신은 어떤 사람과 일하고 싶나요?

 

Q&A

  1. iOS 공부할때, UIKit 을 해야하는지 SwiftUI를 해야하는지?
    → 2년안에 취업을 생각하고 있다면 UIKit이 우선! 2년내에 취업할 생각은 없고, 아직까진 취미의 영역이다 하면 SwiftUI 로 해도 됨!
  2. 프론트엔드, 백엔드, 모바일 등 여러 분야가 있는데 여러가지 경험을 하기엔 시간이 오래걸리는데 어떻게 경험을 해야하는지?
    → 사실 경험하는건 좋은것이긴하나, 경험하는데 너무 많은 시간을 쏟지 않는게 좋다 1달정도면 튜토리얼 정도는 경험할수 있다! 다만 찍먹을 하는건 나쁜게 아님!
  3. 주니어, 인터미디에트, 시니어 개발자는 인터넷 회사에서 어떻게 나누어지는 구분인가요? 또 언제까지 보통 주니어라고 불리게 될까요?
    → 기준은 없는데 일반적으로 3년~ 5년정도면 주니어인거같다
  4. Swiftui 공부하면서 mvvm을 적용해서 코드를 작성하려고 노력하고 있는데 아직 어떤게 모델에 들어가야하고 뷰모델에 들어가야하는 지 구분하는 게 어렵습니다. 다른 사람들 코드를 보면서 제 나름대로 기준을 찾아가려고 하는데 혹시 추천하는 학습 방식 있으신지 궁금합니다!
    → 많이 해봐야한다, 같은 결과물을 A방법, B방법으로 반복 학습하며 익혀봐라! ( 아마도.. MVC방법, MVVM방법, VIPER방법 등등..? )
  5. 야곰 멘토님의 손을 거친 교육생들 중에 기억나는 분이 계신가요~? 있다면 어느분이고 왜 기억에 남으시는지 궁금합니당 :)
    → 일단 교육생이라고 생각하지 않는다, 다 동료고 친구이며 같이 공부하는 사람들임! 근데 기억나는 친구! 블로그를 꾸준히 작성하는 친구가 기억에 남는다! 지금 iOS 검색하면 1등으로 나오는 블로그일것이다
  6. ios 프론트 개발에서 TDD 를 어떻게 적용할 수 있을까요?
    → TDD 쉽지 않음,,
  7. 모르고 짜는 것에 대해 공부하다보면 너무 깊어지는 것 같아서 도대체 어느 정도까지 아는 게 좋은지, 그 공식 문서처럼 깊게 알아야 하는지 궁금합니다
    → 내가 이분야 전문가가 되겠다! 싶으면 깊게 공부하는게 좋다 하지만 그게 아니라면 굳이..?
  8. 야곰님께서 보시는 좋은 블로깅의 예시가 궁금합니다!
    → 꾸준히 써라.. 꾸준한게 제일 좋은 블로그임, 글이 틀리는걸 두려워하지 마라 나중에 수정하면 그만임!
  9. 공유라는 측면에서 노션보다는 블로그를 이용하는게 더 도움이 될까요?
    → 노션은 혼자보기에 좋음.. 블로그를 써보도록 할것!
  10. UI와 iOS 개발은 뗄 수 없는 존재일까요? 몇개월간 찍먹을 해봤는데, UI 짜는 게 너무 안 맞는 것 같아요 ㅠㅠ
    → UI가 안맞으면 어쩔수 없다.. 백엔드 찍먹도 해보고 이것저것 해보며 맞는걸 찾아보는것도 좋다

가변인자란?

int main(int abc, ...) { }

위 코드의 main 함수의 인자중,  ...  가변 인자 혹은 가변 파라미터

매개변수로 아무것도 넘겨주지 않거나 여러 개를 넘겨줄 수도 있음

함수가 고정된 수의 필수 인수에 가변 수의 선택적 인수가 붙은 형식을 사용할때 적용

 

va_list, va_start, va_end, va_copy, va_arg 함수

1) va_list

가변 인자의 시작 주소를 의미하는 포인터

2) va_start

// va_start 함수 원형
void va_start(va_list ap, variable_name);

va_list로 만들어진 포인터에게 가변인자 중 첫 번째 선택적 인수(variable_name)의 주소를 가르쳐주는중요한 매크로이다.

va_arg(), va_copy(), va_end()에 대한 후속 호출에 대해 ap 포인터를 초기화한다.

  • ap: va_list 로 만든 포인터가 담긴다.
  • variable_name: 인수 목록의 첫 번째 인자 바로 앞에 오는 필수 매개 변수의 이름. 즉, 마지막 고정된 필수 인수가 담긴다.

3) va_copy

void va_copy(va_list dest, va_list src);

va_start()를 dest에 적용한 후 src의 현재 상태에 도달하는 데 이전에 사용된 것과 동일한 순서로 va_arg()를 사용한 경우와 같이 dest를 src의 사본으로 초기화한다. va_copy() 또는 va_start()는 동일한 dest에 대한 va_end()의 중간 호출 없이 dest를 다시 초기화하도록 호출해야 한다.

4) va_arg

var_type va_arg(va_list ap, var_type);

ap로 지정된 위치에서 지정된 var_type 값을 검색하고 리스트에서 다음 인수를 가리키도록 ap 를 증가 시켜 다음 인수가 시작 되는 위치를 결정한다. 즉, 특정 가변인자를 가리키고 있는 va_list의 포인터를 다음 가변인자로 이동시켜 주는 매크로이다. 

  • ap: va_list로 만든 포인터가 담긴다.
  • var_type: int나 long, double과 같은 타입 이름이 담긴다.

var_type을 설정할 때 char, short 의 경우에는 int로 대신 쓰고, flaot의 경우에는 double로 대신 쓴 이후 형 변환을 해주어야 한다.
ex) char ch = (char) va_arg(ap, int);

va_end

void va_end(va_list arg_ptr);

모든 인수가 검색 된 후 va_end 는 포인터를 NULL로 다시 설정 한다. 즉, 사용한 가변인자 변수를 끝낼때 사용.

4. 반환값

va_arg() 함수는 현재 인수를 리턴한다. va_copy(), va_end(), va_start() 함수는 값을 리턴하지 않는다.

1. DHCP

우리가 유동IP 를 사용할때 이 IP는 누가 결정할까? --> 바로 DHCP 가 결정하게 된다,

이 DHCP 는 임의의 임대기간을 설정하여 IP를 부여해주게 된다.

 

IP 를 사용하는동안 임대기간이 종료되게 되면, DHCP 서버에 임대기간 갱신을 요청하고, 

DHCP 는 이에 따라 임대기간을 갱신시켜준다.

 

1 - 1. DHCP 임대 절차

 

1) DHCP Discover

  • 패킷 방향 : 클라이언트 -> DHCP 서버
  • 브로드캐스트 패킷 : Destination MAC = FF:FF:FF:FF:FF:FF
  • 의미 : 클라이언트가 DHCP 서버를 찾기 위한 메시지. 그래서 LAN상에(동일 subent상에) 브로드캐스팅을 하여 "거기 혹시 DHCP 서버 있으면 내게 응답 좀 해 주세요"라고 단말이 메세지를 보낸다. 이 Discover 패킷에는 IP 주소가 필요한 호스트의 MAC 주소가 담겨져 있어서 DHCP 서버가 응답할 때 패킷을 수신할 수 있게 된다.
  • 주요 파라미터(패킷 내용) :
    • Client MAC : 클라이언트의 MAC 주소

2) DHCP Offer

  • 패킷 방향 : DHCP 서버 -> 클라이언트
  • 브로드캐스트 메시지 : Destination MAC = FF:FF:FF:FF:FF:FF 혹은 유니캐스트. 
  • 이는 클라이언트가 보낸 DHCP Discover 메시지 내의 Broadcast Flag의 값에 따라 달라지는데, 이 Flag=1이면 DHCP 서버는 DHCP Offer 메시지를 Broadcast로, Flag=0이면 Unicast로 보내게 된다.
  • 의미: DHCP 서버가 "저 여기 있어요~"라고 응답하는 메시지. 단순히 DHCP 서버의 존재만을 알리지 않고, 클라이언트에 할당할 IP 주소 정보를 포함한 다양한 "네트워크 정보"를 함께 실어서 클라이언트에 전달한다.
  • 주요 파라미터(패킷 내용) :
    • Client MAC: 단말의 MAC 주소
    • Your IP: 단말에 할당(임대)할 IP 주소
    • Subnet Mask (Option 1)
    • Router (Option 3): 단말의 Default Gateway IP 주소
    • DNS (Option 6): DNS 서버 IP 주소
    • IP Lease Time (Option 51): 단말이 IP 주소(Your IP)를 사용(임대)할 수 있는 기간(시간)
    • DHCP Server Identifier (Option 54): 본 메시지(DHCP Offer)를 보낸 DHCP 서버의 주소. 2개 이상의 DHCP 서버가 DHCP Offer를 보낼 수 있으므로 각 DHCP 서버는 자신의 IP 주소를 본 필드에 넣어서 단말에 보냄.

3) DHCP Request

  • 패킷 방향: 클라이언트 -> DHCP 서버
  • 브로드캐스트 메시지 : Destination MAC = FF:FF:FF:FF:FF:FF
  • 의미: 단말은 DHCP 서버(들)의 존재를 알았고, DHCP 서버가 단말에 제공할 네트워크 정보(IP 주소, subnet mask, default gateway등)를 알았다. 이제 단말은 DHCP Request 메시지를 통해 하나의 DHCP 서버를 선택하고 해당 서버에게 "단말이 사용할 네트워크 정보"를 요청한다.
  • 주요 파라미터(패킷 내용) :
    • Client MAC: 단말의 MAC 주소
    • Requested IP Address (Option 50): 난 이 IP 주소를 사용하겠다. (DHCP Offer의 Your IP 주소가 여기에 들어감)
    • DHCP Server Identifier (Option 54): 2대 이상의 DHCP 서버가 DHCP Offer를 보낸 경우, 단말은 이 중에 마음에 드는 DHCP 서버 하나를 고르게 되고, 그 서버의 IP 주소가 여기에 들어감. 즉, DHCP Server Identifier에 명시된 DHCP 서버에게 "DHCP Request" 메시지를 보내어 단말 IP 주소를 포함한 네트워크 정보를 얻는 것.

4) DHCP Ack

  • 패킷 방향: DHCP 서버 -> 클라이언트
  • 브로드캐스트 메시지 : Destination MAC = FF:FF:FF:FF:FF:FF 혹은 유니캐스트.
  • 이는 단말이 보낸 DHCP Request 메시지 내의 Broadcast Flag=1이면 DHCP 서버는 DHCP Ack 메시지를 Broadcast로, Flag=0이면 Unicast로 보내게 된다.
  • 의미: DHCP 절차의 마지막 메시지로, DHCP 서버가 단말에게 "네트워크 정보"를 전달해 주는 메시지. 앞서 설명한 DHCP Offer의 '네트워크 정보"와 동일한 파라미터가 포함된다.
  • 주요 파라미터(패킷 내용) : DHCP Request 패킷의 파라미터와 동일

 

2. DNS 

우리가 네이버 라는 사이트에 접속하기위해 일반적으로

www.naver.com  을 입력해서 접속하게된다,

 

그럼 naver 의 IP 주소가 www.naver.com   이 되는걸까? 

아니다, 원래의 IP 주소는 따로 있고, 이에 접속하기위해 우리는 DNS 라는것을 이용하는 것이다.

 

DNS 가 IP 주소로 찾아가는 과정은 다음과 같다.

DNS 에 관한 내용은 본 블로그 카테고리의

KITRI - 리눅스 에 보면 자세히 나와있다.

 

출처

https://velog.io/@hidaehyunlee/더-편리한-인터넷을-위해-DHCP-DNS-프로토콜#11-dhcp의-구성

1. OSI 계층 

https://ai-hong.tistory.com/37?category=845057 

 

02. OSI 7Layer & TCP/IP 4Layer

OSI 7Layer 의 각 계층적 구조는 다음과 같다. Application 계층부터 Transport 계층까지를 Network Edge 라고 하며, Network 계층부터 Physcial 계층까지를 Nerwork Core 라고 한다. 1) Network Edge - 인터넷의..

ai-hong.tistory.com

예전에 정리해 놓은 개념이 있어 대체한다.

 

2. TCP

TCP는 OSI 7계층중 전송 계층에서 사용하는 프로토콜이다.

3 way handshake 를 통해 연결을 하며

4 way handshake 를 통해 연결을 종료한다.

--> 서로의 확인과정이 있기때문에 당연 1:1 통신만 가능하며, 신뢰성 연결을 할수있다 하지만 UDP 에 비해 확인과정을 거치기 때문에

연결 속도 전송 속도가 느릴수밖에 없다.

 

2 - 1. 연결과정

1. 연결을 위해 SYN 플래그 전송

2. 연결 확인을 위해 SYN + ACK 전송

3. ACK를 전송하여 연결 확인

 

2 - 2. 연결 종료

1. 사용 다했으니 FIN + ACK 전송

2. 서버는 클라이언트에게 확인 완료를 위해 ACK 플래그 전송

3. 서버는 클라이언트에게 아무 반응이 없다면 FIN + ACK 전송

4. 클라이언트는 서버에세 종료 확인을 위해 ACK 플래그 전송후 연결 종료

 

2 - 3. TCP 의 헤더

- Source Port: 출발지의 포트, 즉 데이터를 보내는 컴퓨터의 포트 정보입니다. 컴퓨터가 갖을 수 있는 포트는 65536개이므로 사이즈가 2바이트인것을 확인하세요.

 

- Destination Port: 반대로 목적지의 포트입니다. 

 

- Sequence Number : 송신 데이터의 일련 번호를 담고 있습니다. 

 

- Acknowledgement Number : 그전의 데이터를 잘 받았다는 표시로 상대방이 다음에 전송할 일련번호를 담고 있습니다. 줄여서 ACK라고 하겠습니다.

 

- HLEN(Header Length) : 헤더의 정보를 담고 있습니다. 4 bits의 워드 단위입니다. 헤더의 길이는 최소 20바이트 ~ 60바이트까지입니다.

 

- Reserved : 예약된 비트입니다. 아직 사용하지 않습니다. 나중을 위해서 남겨두는 비트인 셈이지요.

 

- Control Flags 

FLAG 설명
URG
(Urgent Pointer)
Urgent Pointer의 필드가 유요하다는 의미의 FLAG
ACK
(Acknowledgement)
수신 확인 응답 FLAG
PSH
(Request for push)
송수신 버퍼의 있는 데이터 즉시 처리 요청 FLAG
RST
(Reset the connection)
연결을 강제 중단합니다. TCP가 유지되고 있을때 이 FLAG를 사용하면 그 즉시 연결을 끊어 버립니다. 해커들이 Hijacking을 위해 피해자의 연결을 끊어버릴때 사용합니다. 보통의 정상적인 종료는 아래의 FIN FLAG를 설정합니다.
SYN
(Synchronize sequence number)
연결 설정 FLAG
FIN
(Terminate the connection)
정상 종료의 연결 종료 FLAG

 

- Window Size :  수신자에서 송신자로 보내는 수신자의 윈도우 사이즈입니다. 즉, 수신 버퍼의 여유공간 크기를 의미하게 되지요. 송신자는 이 윈도우 사이즈 범위 내에서 수신측의 수신 확인(ACK)을 확인하지 않고 연속적으로 데이터를 보낼 수 있습니다.

 

- Checksum : 오류를 검사하기 위한 필드입니다. 전체 데이터가 오류가 나 변형되었는지 확인합니다. 

 

- Urgent Pointer : 긴급 데이터의 위치값을 담고 있습니다. 

 

3. UDP

- 비연결성 프로토콜 로서 송신자는 수신자에게 데이터 전송만 할뿐 수신자는 확인과정을 거치지 않는다

- 이러한 특징 때문에 전송 속도가 TCP 보다 훨씬 빠른것을 알수있다.

 

3 - 1. UDP 헤더

- Source Port / Destination Port

 Source Port는 메시지를 보내는 측에서 통신을 위해 사용하는 Port 번호

 Destination Port는 목적지, 즉 메시지를 받는 측의 통신 Port 번호

 

- Total Length

 헤더와 데이터를 합한 사용자 데이터그램의 전체 길이를 정의합니다. UDP 데이터그램의 헤더인 8바이트부터 65507바이트 사이의 값이 됩니다.

 

- Checksum

→ 헤더와 데이터를 모두 포함한 사용자 데이터그램 전체에 대해 오류를 탐지하기 위해 사용됩니다.

 

 

4. TCP 와 UDP 차이점

 

 

출처

https://joycecoder.tistory.com/20

https://velog.io/@hidaehyunlee/TCP-와-UDP-의-차이

https://hwan-shell.tistory.com/271

https://swalloow.tistory.com/77

1. 공인 IP (Public IP Address)

인터넷 사용자의 각각의 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소

외부에 공개되어 있는 IP 주소이다.

  • 공인 IP는 전세계에서 유일한 IP 주소를 갖는다.
  • 공인 IP 주소가 외부에 공개되어 있기에 인터넷에 연결된 다른 PC로부터의 접근이 가능하다. 따라서 공인 IP 주소를 사용하는 경우에는 방화벽 등의 보안 프로그램을 설치할 필요가 있다.
  • 우리의 공인 IP를 확인하려면 간단하게 www.naver.com 에 접속하여 " 내 IP 주소 확인" 을 치면 공인 IP 주소를 알수있다.

2. 사설 IP (Private IP Address)

만일 모든 IP 주소가 공인IP 로 되어있다면 어떨까?, 요즘은 각 사람마다 통신할수있는 기기가 1대가 아니다, IP 주소는 2^32 만큼의 갯수 즉, 43억개 가량이 되지만, 한 사람이 아이패드, 노트북, 핸드폰, 데스크톱 총 네개를 가지고있다고 생각해보자

그럼 인당 4개의 IP주소가 할당되어야 하고, 집에서도 인터넷을 사용하기위해 여러개의 IP주소를 한사람이 사용해야한다, 

이렇게 되면 IP 주소가 부족하게되어 결국 모든사람이 인터넷을 사용할수 없게 될것이다 이를 위해 나온것이 사설IP이다, 하나의 IP 주소를 서브넷팅을 통하여 사설 IP로 할당한다,

이 사설IP는 외부에 공개되어 있는것이 아니기 때문에 내부 망 내에서는 자유롭게 통신을 할수 있게된다.

2.1. 사설IP 주소대역

사설IP 주소는 다음 3가지 주소대역으로 고정된다.

  • Class A : 10.0.0.0 ~ 10.255.255.255
  • Class B : 172.16.0.0 ~ 172.31.255.255
  • Class C : 192.168.0.0 ~ 192.168.255.255

그렇다면 사설 IP 만 가지고 외부와 통신을 할수 있을까? 

--> 물론 불가능 하다 사설IP 는 하나의 공인IP 를 서브넷팅을 통해 할당된 주소이다, 따라서 공인IP 를 가지고있는 라우터(공유기) 에서

사설 IP를 각각 뿌려주게 된다. 

그림을 보면 쉽게 이해가 될것이다!

즉, 사설망 끼리의 통신은 가능하고, 사설망에서 공인IP를 거치지 않고 외부의 IP 로는 접근이 불가능 하게 된다!

3. 고정 IP와 유동 IP

고정 IP : 컴퓨터에 고정적으로 부여된 IP로 한번 부여되면 IP를 반납하기 전까지는 다른 장비에 부여할 수 없는 IP 주소
유동 IP : 장비에 고정적으로 IP를 부여하지 않고 컴퓨터를 사용할 때 남아 있는 IP 중에서 돌아가면서 부여하는 IP

인터넷 상에서 서버를 운영하고자 할 때는 공인 IP를 고정 IP로 부여해야 한다는 것이 중요

일반적인 집에서 사용하는 인터넷 서비스 업체는 각 가정마다 공인 IP를 유동 IP로 부여하고, 공유기 내부에서는 사설 IP를 유동 IP로 부여하는 것이 일반적

 

출처 : https://velog.io/@hidaehyunlee/공인Public-사설Private-IP의-차이점

+ Recent posts