howudong의 등록된 링크

키자드에 등록된 총 428개의 포스트를 확인하실 수 있습니다.

Tistory

[스파로스 4기] 4~6주차 회고 - 1차 프로젝트 진행 현황 및 근황

서론 모든 팀들이 본격적으로 프로젝트 개발에 들어갔다. 생각보다 내가 부족한 부분이 많아서 속도가 다른 팀원들만큼 안 나서 마음이 급급했다.. 그래서 블로그도 바빠서 잘 못썼다.. 원래는 트러블 슈팅이다 뭐 다해서 쓸게 엄청 많은데, 일정에 쫓긴다고..ㅠ 이번 포스팅에서는 주로 지난 3주간 했던 것에 대해 이야기하고, 스파로스를 통해 배웠던 것에 대해 이야기하겠다! 강사님께서 특별히 빌려주신 애플 모니터.. 처음 써봤는데 좋더라.. 지금도 감사히 잘 쓰고 있다..! 프로젝트 진행 Git Action을 통한 CI/CD 구축 Git Action을 사용한 CI/CD를 구축해 본 경험이 있어서, 우리 팀에서는 내가 인프라를 담당하게 됐다. 근데 또 예전에 했던 그대로 할 수 없지 않은가.. 더 발전시키고 싶었다..

Tistory

[스파로스 4기] 2~3주차 회고 - 팀 프로젝트 설계 문서 작성 및 팀 리뷰

서론 스파로스 아카데미 4기에 합격한 뒤, 평일 9 to 6 교육을 들은 지 벌써 3주가 지났다. 출입증도 받았다..! 원래는 각 주차마다 회고를 쓸 생각이었는데, 2주 차에 평일 휴일이 많이 겹쳐서 3일밖에 안 가서 회고를 적을 껀덕지가 없었다. 그래서 2 ~ 3 주차를 합쳐서 포스팅을 한다!! 본문에는 2주 동안 있었던 특별한 이벤트(?) 나 설계 관련된 이야기를 주로 하겠다. 백엔드 스킬업 2 ~ 3주 차 오전에는 기술 역량 향상을 위한 스킬업 시간을 가졌다. 강사님께서 강의를 해주는 형식으로, 격일 단위로 프런트 엔드, 백엔드 기술을 번갈아가면서 배웠다. 나는 백엔드 분야이기 때문에 해당 포스팅에는 백엔드와 관련된 포스팅만 하겠다! Spring Data JPA MyBartis 대신 JPA에 대해 ..

Tistory

[스파로스 4기] 1주차 회고 - 스타트 캠프

화요일에는 간단한 입학식 및 여러 가지 안내를 받고, 노트북 및 웰컴 선물(?)을 받았다. 본격적인 부트 캠프는 수요일부터 시작됐는데, 이번주는 스타트 캠프 주간으로, 기술을 배운다라기보다는 프로그래밍 설계, 팀 협업, 팀 빌딩과 같은 교육이 주를 이루었다. 이번주에 한 것은 아래와 같다. 디자인 띵킹(Design Thinking) 이벤트 스토밍(Event Storming) 현업자에게 배우는 Git CLI 오프라인 강의 1차 프로젝트 팀 빌딩 프로젝트 설계 및 팀 빌드업에 관한 것이었다. 이 중, Design Thinking과 Event Storming에 대해 자세히 후기를 남겨보겠다. Design Thinking 1. 롤플레잉 진행 가장 처음으로 한 활동이다. 이건 교육이라기보다는 활동이라고 하는 게 ..

Tistory

부산 스파로스 아카데미 4기 백엔드 합격 후기

올해 2월, 부산 신세계 I&C에서 스파로스 아카데미 4기를 모집하였다. 실무형 SW 교육 프로그램, 프로젝트 중심의 교육 과정이 마음에 들어 지원하게 됐다. 모집 인원이 프론트엔드 + 백엔드 30명밖에 안 돼서 뽑히기 쉽지 않을 것 같았는데.. 운 좋게 합격했다.. 간략한 요약을 좋아하시는 분들을 위해 내 정보와 선별 과정에서의 행적을 적어두겠다. 본인 이력 합격 분야 -> 백엔드 부산 소재 대학 컴퓨터공학과 졸업 3년 동안 게임개발 진행하다 작년 5월부터 백엔드 개발 전향 내세울만한 거 백엔드로써 프로젝트 경험 1개 우테코 프리코스 진행(만 했음) 블로그 운영 중인 게 최대 자랑거리 선별 과정 행적 코딩 테스트 = 3문제 중 3문제 품 인터뷰 = 진짜 말아먹음 선별 절차 서류 전형 코딩 테스트 최종 ..

Tistory

[Java/C++] 프로그래머스 Level 2 - 아날로그 시계 (PCCP 기출문제 2번)

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250135 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이해 자체는 되게 간단했는데, 풀려면 수학적인 계산이 좀 필요했다. 솔직히 설명 없이 코드만 적혀있으면, 왜 이렇게 풀었는지 전혀 모를 거 같다. 썸네일 더보기 문제 핵심 및 풀이 각도의 관점으로 접근 이 문제에서 바라는 것은, 초침이 각각 시침과 분침과 겹치는지를 판단하는 것이다. 이를 알아내기 위해서는 어떻게 해야 할까? 특정 시간만으로 판단할 순 없다. 왜냐하면 초침이 움직..

Tistory

[Java/C++] 프로그래머스 Level 3 - 수레 움직이기 (PCCP 기출문제 4번)

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250134 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 최근에 나온 따끈따끈한 문제. 생각할 경우의 수가 많다 보니까, 빡구현 문제에 속하는 것 같다. 1시간 제 한 시간 안에는 푸는 것에는 실패했지만, 인터넷 도움 없이 스스로 풀어냈다. 문제 핵심 및 풀이 제한사항을 통해 유형 파악 제한사항을 통해 문제의 유형을 파악하는 것이 첫 번째 관문이라고 생각한다. N x M 맵의 최대 크기를 살펴보면, 아무리 커봤자 4 x 4 가 최대 크기이다..

Tistory

UTM을 통한 amd64.iso 이미지 생성 오류 해결법 (MAC OS)

발생한 오류 MAC 운영체제는 arm 기반이라서, 일반적인 가상머신을 사용하더라도 amd iso 이미지는 생성하지 못한다. 그러나 UTM 가상머신은 QEMU을 통해 amd iso 이미지 파일을 Mac 운영체제에서도 실행가능하게 해 준다. 그런데.. 아마 이런 화면이 뜨면서 부팅이 제대로 안될 수도 있다. (필자는 vyos_amd64.iso 이미지를 생성하려다가 실패했다.) 이론상으론 분명 생성돼야 하는데.. 가상머신도 바꿔보고, 검색도 해보고 했는데.. 아무것도 안 나왔다. 한 5시간을 헤맸다. 결국엔 스스로 해결했다. 오류 해결법 우선 amd64.ios 이미지를 생성하고자 가상 머신의 Edit에 들어간다(오른쪽 마우스 클릭) 물론 구동을 멈춘 상태여야 한다. 이제 QEMU -> UEFI Boot의 체크..

Tistory

[Java/C++] 프로그래머스 Level 2 - 석유 시추(PCCP 기출문제 2번)

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr PCCP가 뭔진 모르겠는데, 갑자기 이와 관련된 기출문제가 많이 뜨더라. 그래서 하나 풀어봤다. 문제 이해 자체는 간단하고, 범위도 그렇게 넓지 않아서 쉽게 풀릴 줄 알았다. 근데 시간초과가 떠서 좀 애먹었다. 문제 핵심 및 풀이 석유 그룹화 해당 문제의 핵심은 상하좌우로 연결되어 있는 석유를 하나의 덩어리로 보는 것이다. 이는 land [][]의 값이 1인 곳부터 시작하여, 상화좌우..

Tistory

[Java/C++] 프로그래머스 Level 3 - 공 이동 시뮬레이션

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/87391?language=java 오랜만에 풀어본 프로그래머스 Level 3 문제. 1시간 제한시간을 두고 풀었는데, 로직만 생각하다가 결국에 실패했다. 끝나고도 천천히 고민해 봤지만 마땅히 답이 떠오르지 않아, 여러 정보를 참고해 봤다. 개인적으로 이 문제는 수학적인 센스를 요구하는 문제인 것 같다. 어떻게 이런 생각을 하지.. 문제 핵심 및 풀이 문제 제한 사항 잘 파악하기 문제만 읽어보면 단순한 BFS 혹은 완전 탐색 시뮬레이션이라고 생각하기 쉽다. 하지만 제한사항을 보면 절대 그렇지 않은 것을 확인할 수 있다. n과 m의 범위, 그러니까 행과 열의 개수가 모두 10^9까지 가능하다...

Tistory

[Java/C++] 프로그래머스 Level 3 - 에어컨

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/214289 2023 현대 모비스 알고리즘 대회 예선에서 올라온 문제다. 프로그래머스에 카카오 기출 말고 다른 기업 것을 풀어보는 건 처음이었는데, 확실히 유형이 다르다는 것을 느꼈다. 문제가 나온 지 얼마 안 돼서 푼 사람이 70명 남짓밖에 되지 않았다. 그래서 참고할만한 인터넷 글은 없었는데, 다행히 질문 글에 해설 글을 참고하여 풀 수 있었다. 그렇게 여차저차 2일 만에 문제를 해결했다. 문제 핵심 및 풀이 희망 온도 마치 중요한 것처럼 적혀있지만, 희망온도라는 키워드에 속지 않도록 해야 한다. 문제 설명에서 보면 "희망 온도는 에어컨의 전원이 켜져 있는 동안 원하는 값을 변경할 수 있..

Tistory

[Java/C++] 프로그래머스 Level 2 - 빛의 사이클 경로

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/86052 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정답률이 왜 이렇게 낮나 했더니, 문제 이해하기가 난해했다. 진짜 친구랑 둘이서 푸는데, 문제 해석으로 토론할 줄은 몰랐지.. 솔직히 깔끔한 문제는 아니었다고 생각했다. 문제 핵심 및 풀이 '빛의 경로 사이클'에 대한 정의 이 문제의 핵심이자 가장 애매했던 부분이다. 문제에서는 빛의 경로 사이클을 "빛이 이동하는 순환 경로를 의미"한다고 정의했다. 진짜 딱 이 한 문장이라 나머지는 예제..

Tistory

[우테코 6기 프리코스] 4주차 - 크리스마스 프로모션 리뷰 및 회고

Git repository https://github.com/howudong/java-christmas-6-howudong 4주 차 후기 4주 차는 지금까지 했던 어떤 미션과는 요구사항이 복잡했다. 그리고 요구사항을 과제식으로 설명한 것이 아니라, 클라이언트가 기능을 요청하는 방식을 사용했다. 그러다 보니 뭔가 미션을 위한 문제라기보다는 실제 서비스 개발이라는 느낌이 강했다. 이번에는 내가 실무자라는 느낌으로 미션에 임했다. 클라이언트에게 프로그램을 전달하고, 협업을 위해 할 수 있는 설계를 하기 위해 노력했다. 또한 기능이 실제로 확장될 수 있고 프로그램이 유지보수가 된다는 점을 생각했다. 도메인 설계 다이어그램 이번 주차의 핵심이라고 할 수 있는 도메인의 다이어그램이다. 값 객체(Value Objec..

Tistory

[우테코 6기 프리코스] 3주차 - 로또 코드 리뷰 및 회고

repository https://github.com/howudong/java-lotto-6/tree/howudong 3주 차 소감 요구사항이 복잡해지기 시작한 것 같다. 확실히 1~2주 차는 맛보기였다.. 이번 주차에는 입력과 출력에 필요한 도메인 정보들이 다르다. 그래서 처음으로 DTO를 적용시켜 봤다. DTO라는 개념 자체는 간단하지만 이를 직접 사용한다는 것은 간단하지 않았다. 'DTO로 어디서 바꿔줘야 하는가?', '이를 효율적으로 사용하기 위해선 어떻게 해야 하는가?' 이런 것들을 고려하는 데에 개인의 주관이 많이 들어갔다. DTO로 변환시켜 주기 위한 service 계층을 사용하다 보니, 자연스럽게 프로그램 규모가 커지고 복잡해지기 시작했다. 이럴 때일수록 중요한 것이 객체지향적인 설계라고 ..

Tistory

[우테코 6기 프리코스] 2주차 - 자동차 경주 코드 리뷰 및 회고

https://github.com/woowacourse-precourse/java-racingcar-6/pull/149 2주 차를 마치고 느낀 점 구현 난이도는 1주 차보다 높진 않았던 것 같다. 오히려 1주 차보다 낮은 느낌을 받았다. 그런데 객체지향적 설계 같은 여러 가지 조건을 고려하다 보면, 이 미션 생각보다 까다롭다. TDD를 처음으로 적용해 봤는데, 확실히 좋더라. 클래스의 역할 분리가 명확하게 되고, 더욱 견고하게 만들어지는 느낌이다. 무엇보다도 오류가 훨씬 적어져서, 오류 색출에 걸리는 시간이 대폭 줄어들었다. 순조롭게 진행을 하다가, 마지막 날에 큰 리팩토링을 해버리는 바람에 애를 먹었다. 코드를 고치는 건 괜찮은데, 테스트 코드를 옮기고 하는 게 진짜 괴롭더라... 오히려 괴로워하다 보..

Tistory

[Java 8+] Map 효율적인 메서드 : compute, computeIf~, putIfAbsent

Java에서 Map을 사용하다 보면 로직을 처리하는데 함수 호출이 잦아지는 경우가 많아 코드를 한눈에 알아보기가 힘들다. 그래서 Map interface 중 Map 사용을 간결하게 하도록 돕는 함수에 대해 알아봤다. 이번 포스팅에서 소개할 메서드는 compute() computeIfAbsent() vs putIfAbsent() computeIfPresent() 이다. 소개도 나와있는 순서대로 하겠다. compute 동작 compute(K key, BiFunction

Tistory

[우테코 6기 프리코스] 1주차 - 코드 리뷰 전에 나 혼자 회고

Repository 주소 https://github.com/howudong/java-baseball-6/tree/howudong GitHub - howudong/java-baseball-6 Contribute to howudong/java-baseball-6 development by creating an account on GitHub. github.com 다이어그램 domain 다이어그램 설계 domain과 view의 연관관계 다이어그램 domain과 view과 서로 연관관계없이 잘 만들어진 모습을 확인할 수 있다. 컨트롤러만 빼고 보면 서로 모르게 잘 만들진 것 같은데.. 컨트롤러를 포함해서 생각해야 하나? 컨트롤러를 포함하면 그림이 좀 복잡해져서 연관관계를 파악하기 어려워진다. 일단 내가 할 수 ..

Tistory

[Network] 일반화된 포워딩 : OpenFlow - 매치 플러스 액션의 개념과 예시

매치 플러스 액션 ‘매치’와 ‘패킷’으로 이뤄진 2단계의 목적지 기반 포워딩 매치(match) 목적지 IP 주소를 찾는 것 프로토콜 스택의 다른 계층에서 다른 프로토콜과 관련된 여러 헤더 필드에 대해 ‘매치’ 수행 가능 액션(action) 매치 이후, 패킷을 스위치 구조로 지정된 하나 이상의 출력 포트로 전송하는 것 이는 목적지 기반 포워딩과 같은 역할 인터페이스에서 나가는 패킷을 로드 밸런싱(load balancing) 한 후, 헤더값을 다시 쓰는 역할 의도적으로 패킷을 차단/삭제 및 추가 처리 작업을 위해 특수 서버로 패킷을 보내는 작업을 함 패킷을 차단/삭제하는 것은 방화벽과 같은 기능 추가 작업 처리는 DPI와 비슷한 동작 매치 플러스 액션 테이블 매치 플러스 액션 테이블은 원격 컨트롤러를 통해 ..

Tistory

[Network] IPv6: 개발 배경과 데이터그램 포맷 변화 분석, IPv4에서 전환

IPv6 개발 배경 1990년대 초에 IETF는 IPv4 프로토콜의 다음 버전을 개발하기 시작 IPv4 주소 공간이 고갈되기까지는 아직 상당히 시간이 남았지만, 광범위하게 새로운 기술을 구축하기에는 상당히 시간이 필요하기 때문에 이때 시작됨 IPv6 개발의 주된 동기 → 32비트 IPv4 주소 공간이 인터넷에 접속하는 서브넷과 노드들로 인해 빠른 속도로 고갈 진행 중 → 큰 IP 주소 공간의 필요성을 인식하여 새로운 IP 프로토콜인 IPv6가 개발됨 IPv6 개발자들은 IPv4의 축적된 운용 경험에 근거하여 IPv4의 다른 면을 확장하고 축소하였음 IPv6 데이터그램 포맷 IPv6에 도입된 중요한 변화 1. 확장된 주소 기능 IPv6는 IP 주소 크기를 32비트에서 128비트로 확장 → IP 주소가 고갈..

Tistory

[Network] NAT 가능 라우터의 개념과 특징(+ NAT 변환 테이블)

NAT(네트워크 주소 변환)이 필요하게 된 배경 SOHO(small office, home office) 네트워크의 확산 →ISP는 SOHO에 관한 LAN 설치 시, 모든 SOHO의 IP 장치를 수용할 수 있는 주소 범위를 할당해야 함 SOHO의 IP 장치 - 전화, 태블릿, 게임 장치, IP TV, 프린터 등 네트워크가 현저히 커지면 큰 주소블록이 할당되어야 하는데, 이러면 다양한 케이스의 문제 발생 ISP가 할당해야 하는 SOHO 네트워크의 해당 주소 범위에 인접 부분을 할당한 경우 특정 홈 네트워크 소유자가 IP 주소가 어떻게 관리되는지 알고자 하는 경우 이런 상황에서 네트워크 주소 변환(NAT)으로 주소를 할당할 수 있다. NAT 가능 라우터 NAT 가능 라우터는 홈 네트워크의 일부인 인터페이스를..

Tistory

[Network] 호스트, 서브넷의 IP 주소 할당 : 주소 블록과 DHCP

주소 블록 획득 기관의 서브넷에서 IP 주소 블록을 사용해야 하기 때문에 주소 블록을 획득해야 한다. 이를 위해 네트워크 관리자는 이미 할당받은 주소의 큰 블록에서 주소를 제공하는 ISP와 접촉 ISP와 접촉하여 주소 블록을 할당받는 예시 가정 ISP가 주소 블록 200.23.16.0/20을 할당받았다고 가정 ISP의 동작 이 주소 블록을 작은 주소 블록 8개로 나누고, 이것으로 8개 조직을 지원할 수 있다. ISP가 주소 블록을 얻는 방법 ISP도 주소 블록을 다른 곳에서 얻어야 한다. IP 주소 공간을 관리하고 ISP와 다른 조직에 주소 블록을 할당하는 최상위 국제기관이 존재 → 이러한 IP 주소는 ICANN 기반으로 관리 ICANN(Internet Corporation for Assigned Nam..

Tistory

[Java/C++] 프로그래머스 Level 3 - 미로 탈출 명령어

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150365 [2023 KAKAO BLIND RECRUITMENT]에 나왔던 문제. 카카오의 최신 출제 트렌드를 파악하지 못한 나의 잘못이 컸다. 그걸 알았다면 처음에 잘못 접근하지 않아서 시간을 잡아먹지 않았을 것이다.. 지금 생각해 보면 당연한 건데, 왜 헛다리 짚었을까? 문제 핵심 및 풀이 핵심 파악 이 문제에서 핵심은 도착점까지 가장 빠른 경로를 찾는 것이 아니라, 무조건 k 횟수를 움직여야 한다는 점이다. 가장 빨라야 하는 것은 경로가 아닌 움직인 경로의 문자열 사전순이다. 상하좌우를 각각 'u' , 'd' , 'l' , 'r'로 나타낸다. 각 방향마다 문자가 정해져 있다는 것은, ..

Tistory

[Network] IPv4 주소체계와 서브넷 주소 체계(CIDR, Class)

인터페이스 인터페이스(Interface) : 호스트와 물리적 링크 사이의 경계를 뜻함 인터페이스와 라우터 라우터는 2개 이상의 연결된 링크가 필요 → 라우터는 이런 링크 사이의 경계 또한 인터페이스라 함 라우터가 2개 이상의 연결된 링크가 필요한 이유 → 라우터 작업은 한 링크로부터의 데이터그램을 다른 링크로 전달하는 것이기 때문 각 링크마다 하나의 인터페이스를 갖고, 라우터는 여러 개의 인터페이스를 가진다. IP주소와 인터페이스 모든 호스트와 라우터는 IP 데이터그램을 송수신 가능 → IP는 각 호스트와 라우터 인터페이스가 IP 주소를 갖도록 요구 → 기술 측면에서, IP 주소는 인터페이스 자체와 관련이 있다. 인터페이스를 포함하는 호스트 라우터보다 인터페이스와 더 관련 있다는 뜻 IP주소의 표기 각 ..

Tistory

[Network] IPv4 데이터그램 포맷의 구성 및 주요 필드 정리

IPv4 데이터그램 포맷 및 주요 필드 IP 데이터그램은 총 20바이트의 헤더(옵션이 없다고 가정)를 갖는다. 데이터그램이 TCP 세그먼트를 전송할 경우 단편화되지 않은 각 데이터그램은 애플리케이션 계층 메시지와 함께 총 40바이트의 헤더를 전송 IP헤더 20 + TCP 헤더 20 버전 정보 4비트로 데이터그램의 IP 프로토콜 버전을 명시한다. 라우터는 버전 번호를 확인하여 데이터그램의 나머지 부분을 어떻게 해석할지 결정 헤더 길이 IPv4 데이터그램은 헤더에 가변 길이의 옵션을 포함 → 해당 4개의 비트로 IP 데이터그램에서 실제 페이로드가 시작하는 곳을 결정 페이로드(payload) : 전송되는 데이터 자체를 뜻함 예시 - 데이터그램에 캡슐화된 트랜스포트 계층 세그먼트 대부분의 IPv4 데이터그램은 ..

Tistory

[Network] 패킷 스케줄링의 다양한 방식 정리

패킷 스케줄링 큐에 있는 패킷이 출력 링크를 통해 전송되는 순서를 결정하는 방식 다양한 방식이 존재 FCFS(First-Come-First-Served) 라우터에서 일반적으로 사용되는 큐잉 처리 방법 흔히 FIFO(First-In-First-Out)으로 알려져 있음 FIFO 링크 스케줄링의 원리 링크가 현재 다른 패킷을 전송 중인 경우, 출력 링크 큐에 도착한 패킷은 전송을 기다림 패킷이 출력되는 링크를 통해 완전히 전송되면, 큐에서 제거됨 패킷이 링크를 통해 완전히 전송된다 → 서비스를 받는 경우라는 뜻 도착한 패킷을 담을 버퍼 공간이 충분하지 않은 경우 → 공간 확보를 위해 큐의 패킷 폐기 정책 사용 패킷 손실 여부 또는 다른 패킷을 큐에서 제거할 것인지 여부를 결정 아래에서의 FIFO 가정은 패킷 ..

Tistory

[Java/C++] 프로그래머스 Level 3 - 파괴되지 않는 건물

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92344#qna 알고리즘 스터디 끝나니까 자연스럽게 알고리즘을 안 풀게 되네.. 하루에 하나는 아니더라도 주 3회 정도는 꾸준히 풀어야 하는데, 일주일 만에 푸는 것 같다. 알고리즘에 좀 더 신경 써야겠다. 문제 핵심 및 풀이 쉬운 문제? 문제 이해는 쉽다. 그리고 푸는 방법도 보기엔 간단해 보인다. 그냥 (r1, c1) ~ (r2, c2) 직사각형에 포함된 모든 인덱스에 degree를 더해주면 된다. 근데 이 문제의 제한사항을 보면 그 사용은 사용하지 못하는 것을 알 수 있다. 행과 열의 크기는 최대 1,000까지 가능하다. 즉 1000*1000 짜리 맵이 나올 수 있다. 또한 처리해야 ..

Tistory

[Network] 스위치 구조 : 입/출력 큐잉의 발생 원인 및 버퍼링의 사용

큐잉과 패킷 손실 패킷 큐는 입력 포트와 출력 포트 모두에서 형성 가능 큐의 위치와 범위(입/출력 포트 큐)에 영향을 주는 요인 트래픽 로드 스위치 구조의 상대 속도 및 라인 속도 큐가 커질수록 소모되는 메모리의 양이 많아짐 → 도착하는 패킷을 저장할 수 있는 메모리가 없을 때 패킷 손실(packet loss) 발생 패킷 손실 시나리오 가정 입력 및 출력 라인의 속도(전송률)은 모두 초당 R(line) 패킷으로 동일 N개의 입력 포트와 N개의 출력 포트가 존재 모든 패킷의 고정 길이가 같고,동기식으로 입력 포트에 도착 임의의 링크 상에서 패킷 송신 시간과 수신 시간은 동일 시간 간격 동안 0 또는 하나의 패킷이 입력 링크상에 도착 가능 R(switch) : 패킷이 입력 포트에서 출력 포트로 이동할 수 있..

Tistory

[Java/C++] 프로그래머스 Level 3 - 보행자 천국

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/1832 2017년도 그러니까 6년 전쯤에 카카오 코딩 테스트에서 나온 문제 현재의 카카오 코딩테스트 출제 스타일이 다른 느낌 요즘은 DP 잘 안 나온다던데.. 문제 핵심 및 풀이 DFS나 BFS로 풀면 시간초과 아직까지 이해가 가지 않는 부분이다. DFS의 최적의 시간복잡도는 O(V+E)이다. 그래서 문제 조건상 최대 500 * 500 * 2이기 때문에 DFS를 돌려도 시간초과가 뜰 리가 없다고 생각했다. 그런데 해당 방법은 시간초과가 뜨고 다른 방법을 사용해야 했다. 내 상식으로는 이해할 수가 없는데.. 아시는 분..? DP로 문제 접근 두 번째로 생각해 볼 수 있는 가능성은 DP였다. ..

Tistory

티스토리 사진 비율 바꾸는 쉬운 방법(원본 손실X)

썸네일 1:1 비율 썸네일이 제대로 보이기 위해서는 썸네일 사진을 1:1 비율로 바꿔야 한다. 이러한 작업은 엄청 귀찮다. 그래서 여러 가지 방법을 사용해 봤다. 여러 실험을 통한 결과, 아래에 서술할 방법이 가장 편하고 쉬운 것 같아서 소개한다. 작업 환경 본 포스팅은 맥북 기준으로 작성되었다. 하지만 스크린샷 기능만 있으면 돼서 윈도나 Mac이나 상관없다. 프로그램도 스크린샷을 찍을 수 있는 것만 있다면 그 외에는 아무것도 필요 없다. 어차피 비율 조절하는 작업은 티스토리 내에서 할 것이다. 유의 사항 이 방법은 원하는 게시물의 썸네일 비율을 변경하는 것에 유용한 것이다. 그러니까 티스토리 맞춤형이기 때문에 다른 쪽에서는 이게 편할지 어떨지 모르겠다. 비율 조절하는 방법 1. 비율 조절하고자 하는 사..

Tistory

[Network] 라우터 핵심 : 스위치 구조의 3가지 스위칭 기술 정리

스위칭 스위치 구조가 라우터의 핵심인 이유 → 패킷이 입력 포트에서 출력 포트로 실제로 스위칭(포워딩)되는 구조를 통과하기 때문 세 가지 스위칭 기술 1. 메모리를 통한 교환 CPU(라우팅 프로세서)를 직접 제어해서 입력 포트와 출력 포트 사이에 패킷 스위칭을 하는 방법 가장 단순한 초기의 라우터이자 사용한 전통적인 컴퓨터 입력 포트와 출력 포트는 전통적인 운영체제에서 전통적인 I/O 장치처럼 작동 동작 과정 패킷이 도착하면 입력 포트는 라우팅 프로세서에게 인터럽트를 보냄 패킷을 프로세서 메모리에 복사 라우팅 프로세서는 헤더에서 목적지 주소를 추출 및 포워딩 테이블에서 적절한 출력 포트를 찾음 이후, 라우팅 프로세서는 다음 패킷을 출력 포트의 버퍼에 복사한다. 메모리 대역폭이 초당 최대 B인 패킷을 메모..

Tistory

[Network] 라우터의 입력/출력 포트 기능과 목적지 기반 전송 요점

입력 포트 처리 입력 포트의 라인 종단 기능과 링크 계층 처리 → 라우터의 개별 입력 링크와 관련된 물리 계층 및 데이터 링크 계층을 구현 입력 포트에서 수행되는 검색 ← 라우터 동작의 핵심 포워딩 테이블을 사용하여 도착 패킷이 스위치 구조를 통해 전달되는 출력 포트를 검색 포워딩 테이블의 사용 및 갱신 포워딩 테이블은 라우팅 프로세서에서 계산되거나 갱신됨 또는 원격 SDN 컨트롤러에서 수신됨 위의 라우팅 프로세서는 다른 네트워크 라우터의 라우팅 프로세서와 상호작용하기 위해 라우팅 프로토콜을 사용한다. 포워딩 테이블은 라우팅 프로세서에서 입력 라인 카드로 복사된다. 각 라인 카드에서 위와 같은 섀도 복사본을 사용할 때의 이점 → 패킷 단위로 중앙 집중식 라우팅 프로세서를 호출하지 않게 됨 → 병목 현상을..

Tistory

[Network] 라우터 내부 구조와 관련된 포워딩(forwarding) 정리

라우터 내부 구조 상위 레벨의 관점에서 본 일반적인 라우터 구조 입력 포트(input port) 여기서의 포트(port) → 물리적인 입출력 라우터 인터페이스를 의미 네트워크 애플리케이션 및 소켓과 관련된 소프트웨어 포트와는 명백히 다름 가장 중요한 기능 - 검색 기능 이는 가장 오른쪽 박스에서 발생 포워딩 테이블을 참조하여 도착된 패킷이 스위치 구조를 통해 라우터 출력 포트를 결정 → 제어 패킷은 입력 포트에서 라우팅 프로세서로 전달된다. 맨 왼쪽 박스와 출력 포트의 맨 오른쪽 박스 → 라우터로 들어오는 입력 링크로, 물리 계층 기능을 수행 들어오는 링크의 반대편에 있는 링크 계층과 상호 운용을 하기 위해 필요한 링크 계층 기능을 수행 이 링크 계층 기능은 입력 및 출력 포트에서 미들박스로 표시된다. ..

Tistory

[Network] 네트워크 서비스 모델 요점 정리

네트워크 서비스 모델 네트워크 서비스 모델 : 송수신 호스트 간 패킷 전송 특성을 정의 네트워킹에 관련된 다양한 의문은 네트워크 계층이 제공하는 서비스 모델에 따라 결정됨 트랜스포트에서 네트워크 계층이 목적지까지 패킷을 전달하는 걸 믿을 수 있는가? 여러 패킷이 전송될 때 동일한 순서로 수신자의 트랜스포트 계층에 전달될 수 있는가? 네트워크가 네트워크 혼잡에 대한 피드백을 제공할 수 있는가? 송신 호스트와 수신 호스트에서 트랜스포트 계층을 연결하는 채널의 추상적인 관점이란? 네트워크 계층이 제공할 수 있는 서비스 보장된 전달 패킷이 출발지 호스트로부터 목적지 호스트까지 도착하는 것을 보장하는 서비스 지연 제한 이내의 보장된 전달 패킷의 전달과 더불어 호스트 간의 특정 지연 제한 안에 전달함을 보장하는 서..

Tistory

[Network] 제어 평면 2가지 접근 방법(포워딩 테이블, SDL)

포워딩 테이블(forwarding table) 네트워크 라우터에서 필수 불가결한 요소 포워딩은 네트워크 계층 데이터 평면에 의해 실행되는 매우 중요한 기능 라우터 역할 : 도착하는 패킷 헤더의 필드값을 조사하여 패킷을 전달 → 이 값을 라우터의 포워딩 테이블의 내부 색인으로 사용 포워딩 테이블 엔트리에 저장되어 있는 헤더 값 해당 패킷이 전달되어야 하는 라우터의 외부 링크 인터페이스를 나타냄 헤더의 값은 네트워크 계층 프로토콜에 따라 다름 패킷의 목적지 주소일 수도 있고, 패킷이 속한 연결의 지시 일수도 있음 제어 평면: 전통적인 접근 방법 첫 포워딩 테이블이 어떻게 구성되는가? (제어 평면에서) 라우팅과 (데이터 평면에서) 포워딩 사이의 중요한 상호작용을 보임 라우터의 포워딩 테이블의 내용은 라우팅 알..

Tistory

[Java/C++] 프로그래머스 Level 3 - 사라지는 발판

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92345 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2022 카카오 블라인드 코딩테스트에서 나왔던 문제. 문제 자체는 이해하기 쉬운데, 풀기는 너무 어렵다. 다른 사람들은 100점 방지용 문제라고도 하더라. 문제 핵심 및 풀이 해당 문제의 해결법 결론부터 말하자면 해당 문제는 재귀와 백트래킹에 대해 정말 잘 이해하고 있거나, 미니맥스(MiniMax) 알고리즘을 알고 있어야 풀 수 있다. 미니맥스 알고리즘은 게임 이론 및 AI에서 사용하는..

Tistory

[네트워크] 라우터의 역할 및 포워딩과 라우팅의 개념과 차이

두 호스트 사이에 네트워킹이 이뤄지는 과정 두 호스트 사이에는 중계 라우터가 있다고 가정 과정 송신자 네트워크 계층은 본인의 트랜스포트 계층으로부터 세그먼트를 얻는다. 각 세그먼트를 데이터그램으로 캡슐화하고, 인접한 라우터에게 데이터그램을 전송 수신 호스트의 네트워크 계층은 트랜스포트 계층 세그먼트를 추출 후, 본인의 트랜스포트 계층가지 전달 네트워크 제어 평면에 의해 출발지 ~ 목적지 호스트까지 전송되도록 함 → 이때 로컬 포워딩, 라우터 별 포워딩 등을 대응시킴 의미 각 라우터 데이터 평면 역할 → 입력 링크에서 출력 링크로 데이터그램을 전달하는 것 네트워크 제어 평면의 근본적인 역할 → 데이터그램이 출발지 ~ 목적지까지 전달되게끔 로컬, 라우터별 포워딩을 대응시킨 것 라우터 프로토콜 스택 트랜스포트..

Tistory

[네트워크] QUIC(빠른 UDP 인터넷 연결) 개념 및 특징

QUIC(Quick UDP Internet Connections) 란? QUIC → 빠른 UDP 인터넷 연결 프로토콜 애플리케이션 설계자는 애플리케이션 계층에 항상 자신의 프로토콜을 확장할 수 있다. 신뢰적인 데이터 전송, 혼잡 제어 및 연결 관리를 위한 많은 접근 방식을 사용 QUIC의 특징 QUIC는 UDP를 하위 트랜스포트 계층 프로토콜로 사용하는 애플리케이션 계층 프로토콜 특히 단순하지만 발전된 HTTP/2 버전 위에서 인터페이스 되도록 설계됨 가까운 장래에 HTTP/3은 기본적으로 QUIC을 통합할 것 QUIC의 주요 기능 연결지향적이고 안전함 TCP와 마찬가지로 QUIC은 두 종단 간의 연결지향 프로토콜 이를 위해 QUIC 연결 상태를 설정하기 위해 종단 간에 핸드셰이크가 필요 연결 상태의 두..

Tistory

[네트워크] 혼잡 제어 관점으로 본 TCP와 UDP의 공평성

공평성 혼잡 제어 메커니즘이 공평하다는 것의 정의 가정 각각 다른 종단 간의 경로를 갖고, 전송률이 R bps인 병목 링크가 존재 K개의 TCP 연결이 해당 병목 링크를 지나간다. 병목 링크(bottleneck link) 각 연결에 대해 연결 경로상에 있는 모든 링크는 혼잡하지 않음 병목 링크의 전송 용량과 비교해서 충분한 전송 용량을 갖고 있음을 의미 각 TCP 연결은 큰 파일을 전송하고 있고, 병목 링크를 통과하는 UDP 트래픽은 없음. 위 가정에서 각 연결의 평균 전송률이 R/K에 가까울수록 공평한 것 → 각 연결은 링크 대역폭을 동등하게 공유 TCP가 연결 사이에서 대역폭을 똑같이 공유하는 이유 전송률이 R인 링크 하나를 공유하는 2개의 TCP 연결의 경우 가정 두 연결은 같은 MSS와 RTT를 ..

Tistory

[네트워크] 명시적 혼잡 알림(ECN)과 지연 기반 혼잡 제어 개념 및 특징

네트워크 지원 명시적 혼잡 알림과 지연 기반 혼잡 제어 TCP 송신자는 네트워크에서 명시적인 혼잡 표시를 수신하지 않는다. → 대신, 관찰된 패킷 손실을 통해 혼잡을 추론한다. 최근에는 네트워크가 TCP 송/수신자에게 명시적 혼잡 신호를 보낼 수 있도록 IP 및 TCP에 대한 확장이 제한, 구현 및 배포됨 또한 측정된 패킷 지연을 사용하여 혼잡을 추론하는 TCP 혼잡 제어 프로토콜의 일부 변형이 제안 명시적 혼잡 알림(Explicit Congestion Notification, ECN) 인터넷 내에서 수행되는 네트워크 지원 혼잡 제어의 한 형태 TCP와 IP가 모두 관련되어 있음 명시적 혼잡 알림(ECN)을 사용 IP 데이터그램 헤더의 서비스 유형 필드에 있는 2비트에서 사용한다. 혼잡 알림 비트의 사용..

Tistory

[네트워크] TCP 혼잡 제어 알고리즘의 3가지 요소와 혼잡 제어 모델 정리

전통적인 TCP의 혼잡 제어 종단 간의 혼잡 제어를 사용 TCP의 접근 방식 네트워크 혼잡에 따라 연결에 트래픽을 보내는 전송률을 각 송신자가 제한하도록 함 TCP 송신자가 자신과 목적지 간의 경로에서 혼잡이 없음을 감지 → 송신자는 송신율을 높임 송신자가 경로 사이에 혼잡을 감지 → 송신자는 송신율을 낮춤 TCP 송신자가 연결로 트래픽을 보내는 전송률을 제한하는 방법 송신 측에서 동작하는 TCP 혼잡 제어 메커니즘은 추가적인 변수인 혼잡 윈도를 추적 혼잡 윈도(congestion window, cwnd) TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 속도에 제약을 가함 LastByteSent - LastByteAcked ≤ min(cwnd, rwnd) → 송신하는 쪽에서 확인응답이 안 된 데이터의..

Tistory

[네트워크] 혼잡의 원인과 비용, 혼잡 제어의 원리 정리

혼잡 제어의 원인과 비용 네트워크 혼잡 원인을 처리하기 위한 방법 → 네트워크 혼잡을 일으키는 송신자들을 억제하는 메커니즘 필요 혼잡 제어가 발생하는 시나리오 초점 → 호스트들이 자신의 전송률을 증가시키고 네트워크 혼잡이 발생함에 따라 발생하는 일 시나리오 1 : 2개의 송신자와 무한 버퍼를 갖는 하나의 라우터 각각 출발지와 목적지 사이에 단일 홉을 공유하는 연결을 갖는다. 가정 호스트 A,B의 애플리케이션이 λ(in)바이트/초의 평균 전송률로 연결상으로 데이터를 보냄 → 이러한 데이터는 각 데이터 단위가 소켓으로 한번만 전송된다.(원본 데이터) 소켓을 통해 트랜스포트 계층 프로토콜로 데이터를 넘겨주는 것 하위의 트랜스포트 계층 프로토콜은 단순히 데이터를 캡슐화하고 전송하는 역할 → 오류 복구, 흐름 제..

Tistory

[Java/C++] 프로그래머스 Level 3 - 110 옮기기

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/77886?language=cpp [월간 코드 챌린지 시즌2]에 나온 문제라고 한다. 문제는 짧아서 좋긴 한데, 풀기 어려웠다. 문제 핵심 및 풀이 우선순위 파악 이 문제에서 구해야 하는 것은 입력 숫자에 대해 사전순으로 가장 빠른 것을 찾는 것이다. 앞자리에 '0'이 많을수록 사전순으로 빠르다. 110을 삽입할 때, 적어도 기존의 위치보다는 더 앞자리에 있어야 한다. 110을 삽입한다고 생각해 보자. 만약 '0' 앞에 삽입한다면 이 자리에 있던 '0'은 원래 자리보다 3칸이나 더 뒤로 미뤄지는 것이다. 그래서 '0'이 있다면 뒤에 삽입하는 것이 사전순으로 이득일 것이다. 이런 식의 사고를 ..

Tistory

[네트워크/Network] TCP의 세방향 핸드셰이크(3-Way HandShake)와 연결 종료의 자세한 과정

TCP 연결 관리 일반적인 네트워크 공격의 대부분은 TCP 연결 관리의 취약점을 악용 SYN 플러드(flood) 공격 등 TCP 연결 설정의 자세한 과정 가정 호스트(클라이언트)에서 운영되는 프로세스가 다른 호스트(서버)의 프로세스와 연결 설정을 원함 → 클라이언트 TCP에게 연결 설정을 원하다는 사실을 알린다. → 클라이언트 TCP는 TCP를 이용해 서버와 TCP 연결 설정을 시작함 연결 설정을 위해 두 호스트 사이에서 3개의 패킷이 송신됨 → 세 방향 핸드 셰이크 세 방향 핸드셰이크 1단계 클라이언트 측 TCP는 서버 TCP에게 SYN 세그먼트를 송신 SYN 세그먼트 애플리케이션 계층 데이터를 포함하지 않는다. SYN 비트라고 불리는 하나의 비트 플래그를 1로 설정 → SYN 세그먼트라고 불리는 이유..

Tistory

[네트워크/Network] TCP 흐름 제어 개념과 원리

흐름 제어 서비스(flow-control service) 애플리케이션에게 흐름 제어 서비스를 제공하는 이유 TCP 연결의 각 종단에서 호스트들은 연결에 대한 개별 수신 버퍼를 설정 → 송신자는 수신자의 버퍼를 오버플로시키는 것을 방지하기 위해 제공 수신자의 버퍼가 오버플로가 발생하는 과정 TCP 연결이 순서대로 올바르게 바이트를 수신할 때 TCP는 데이터를 수신 버퍼에 저장 해당 애플리케이션 프로세스는 버퍼에서 데이터를 읽지만, 수신한 시점에 읽을 필요 없음 → 오랜 시간 동안 데이터를 읽지 않을 수도 있음 송신자가 점점 더 많은 데이터를 전송함으로써 연결의 수신 버퍼에 오버플로 발생 애플리케이션이 데이터 읽는 속도가 느릴수록 발생 가능성 높음 송신자의 데이터 전송 속도가 빠를수록 발생 가능성 높음 흐름..

Tistory

[네트워크/Network] TCP 데이터 전송 주요 이벤트와 동작 과정 정리

신뢰적인 데이터 전송 비신뢰적인 인터넷의 네트워크 계층(IP 서비스) 인터넷 프로토콜은 데이터그램 전달을 보장 X 데이터그램이 순서대로 전달되는 것도 보장 X 데이터그램에 포함된 데이터의 무결성(intergrity)을 보장 X 비트가 손상될 수도 있다. IP 서비스에서 데이터그램은 라우터의 버퍼를 오버플로 상태로 만들 수 있음 트랜스포트 계층의 세그먼트가 IP 데이터그램에 의해 네트워크 상에서 운반됨 → 트랜스포트 계층의 세그먼트도 이러한 문제를 겪을 수 있음 TCP의 신뢰적인 데이터 전송 서비스 TCP는 IP의 비신뢰적인 최선형 서비스에서 신뢰적인 데이터 전송 서비스를 제공 TCP 타이머 관리 절차에서는 단일 재전송 타이머 사용을 권장한다. 전송됐지만 아직 확인응답받지 못한 세그먼트와 개별적인 타이머가..

Tistory

[운영체제] CPU 스케줄링 기본 개념과 기준 정리

CPU 스케줄링 기본 개념 기본 가정 일반적인 스케줄링 개념을 논의하는 경우 → 프로세스 스케줄링 스레드에 국한된 개념을 가리키는 경우 → 스레드 스케줄링 “CPU에서 실행”이라는 용어를 사용하는 경우 → 프로세스가 CPU 코어에서 실행되고 있음을 의미 다중 프로그래밍 다중 프로그래밍의 목적 CPU 이용률을 최대화하기 위해 항상 실행 중인 프로세스를 가지게 하는 데에 있음 대기 시간으로 인한 낭비를 줄여 시간을 생산적으로 활용하려고 시도한다. 대기 시간이 발생하는 이유 → 프로세스는 I/O 요청이 완료되기를 기다려야 함 다중 프로그래밍 개념 → 해당 개념은 모든 처리 코어로 확장됨 CPU를 항상 바쁘게 유지한다. → 다수의 프로세스를 메모리 내에 유지한다. 어떤 프로세스가 대기해야 하면, 운영체제는 CP..

Tistory

[네트워크/Network] 왕복 시간(RTT) 예측과 타임아웃 주기 설정

왕복 시간(RTT) 예측 TCP는 손실 세그먼트를 발견하기 위해 타임아웃/재전송 메커니즘을 사용 SampleRTT SamepleRTT : RTT 샘플 세그먼트 RTT(Rount-trip time) : 세그먼트가 송신된 시간부터 긍정 확인응답될 때까지의 시간의 길이 TCP는 한 번에 하나의 SampleRTT만 측정 → 모든 전송된 세그먼트에 대해 SampleRTT를 측정하지 않는다. → SampleRTT가 전송되었지만 현재 확인응답이 없는 세그먼트 중 하나에 대해서만 측정됨 이 측정시간은 왕복시간마다 SampleRTT의 새로운 값을 얻게 한다. TCP는 재전송한 세그먼트에 대한 SampleRTT는 계산하지 않고, 한 번 전송된 세그먼트에 대해서만 측정한다. SampleRTT의 값 해당 값은 라우터에서의 혼..

Tistory

[네트워크/Network] TCP 세그먼트 필드 - 순서/확인 응답 번호의 개념 및 사용

순서 번호와 확인 응답 번호 TCP 세그먼트 헤더에서 가장 중요한 필드 TCP의 신뢰적인 데이터 전송 서비스의 중대한 부분 순서 번호의 사용 일련의 전송된 세그먼트에 대해가 아닌, 전송된 바이트 스트림에 대한 관점을 반영 TCP는 데이터를 구조화하지 않고, 순서대로 정렬되어 있는 바이트 스트림으로 봄 세그먼트에 대한 순서 번호 → 세그먼트에 있는 첫 번째 바이트의 바이트 스트림 번호 실제 TCP 연결 양쪽 모두 시작 순서 번호를 임의로 선택 → 종료 이후에도 네트워크에 남아있던 세그먼트와의 오인될 확률을 최소화하기 위해 → 같은 호스트 간의 나중 연결을 위해서 순서 번호 사용 예시 가정 호스트 A 프로세스는 TCP 연결상에서 호스트 B의 프로세스로 데이터 스트림의 전송을 원함 호스트 A의 TCP는 데이터..

Tistory

[네트워크/Network] TCP 연결의 개념, 원리 및 세그먼트 구조 정리

TCP 연결 TCP - 연결지향형(connection-oriented) 두 프로세스 간의 데이터 전송 및 수신을 위해 핸드셰이크가 필요 데이터 전송을 보장하는 파라미터들을 설정해야 함 → 각자 어떤 사전 세그먼트들을 보낸다. TCP 연결의 양단은 TCP 연결과 연관된 많은 TCP 상태 변수를 초기화한다. TCP 관점에서의 연결 두 통신 종단 시스템의 TCP에 존재하는 상태를 공유하는 논리적인 것 TCP 프로토콜은 오직 종단 시스템에서만 동작, 중간 네트워크 요소에서는 동작 X → 중간 네트워크 요소들은 TCP 연결 상태를 유지하지 않는다. 중간 라우터들은 TCP 연결을 전혀 감지하지 못한다. 중간 라우터는 연결은 보지 못하고, 데이터그램만 봄 TCP 연결은 한쪽 호스트에서의 소켓 연결과 다른 쪽 호스트에..

Tistory

[Java/C++] 프로그래머스 Level 3 - 기둥과 보 설치

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60061 [2020 카카오 블라인드]에서 나왔던 문제. 너무 생각을 복잡하게 하고, 이상하게 해서 오래 걸렸다. 문해력이 부족한 탓일까? 문제 핵심 및 풀이 제한 사항 분석 제한사항을 보면 n은 최대 100이기 때문에, 100x100이 한계이다. 또한 build_frame이라는 구조물의 설치/삭제 커맨드는 최대 1000개까지 들어온다. 100x100x1000 = 10^7 으로 완전탐색을 해도 상관이 없다. 구조물을 어떻게 표현할 것인가? 이것도 나름 생각이 필요했다. 문제에서 기둥은 위로 설치하고, 보는 오른쪽으로 설치한다고 했다. 그래서 이를 설치가 시작된 곳의 좌표로, 구조물을 표현했다..

Tistory

[네트워크/Network] 파이프라이닝 오류 회복 방법 - GBN,SR 정리

GBN(Go-Back-N, N부터 반복) 프로토콜 프로토콜 이름은 손실이 있거나 아주 긴 지연된 패킷이 있을 때의 송신자 동작으로부터 유래됨 해당 프로토콜에서 송신자는 확인응답을 기다리지 않고 여러 패킷을 전송할 수 있다. 파이프라인에서 확인응답이 안 된 패킷의 최대 허용 수 N보다 크면 안 된다. GBN 프로토콜의 사용으로 송신자는 패킷으로 파이프라인을 채우는 것이 가능해짐 송신자 관점의 순서 번호 범위 base : 확인응답이 안 된 가장 오래된 패킷의 순서 번호 nextseqnum : 사용되지 않은 가장 작은 순서 번호 전송될 다음 패킷의 순서 번호 4가지 순서 번호 범위 간격 [0, base-1] 순서 번호는 이미 전송되고 확인응답된 패킷에 대응된다. 간격 [base, nextseqnum-1] 송신..

Tistory

[네트워크/Network] rdt3.0(전송 후 대기) 분석과 파이프라이닝의 필요성

rdt3.0 비트 오류와 손실 있는 채널상에서의 신뢰적인 데이터 전송 2가지 부가 내용을 프로토콜로 생각해야 함 어떻게 패킷 손실을 검출할 것인가? 새로운 프로토콜 메커니즘을 추가해야 함 패킷 손실이 발생했을 때, 어떤 행동을 할 것인가? 체크섬, 순서 번호, ACK 패킷, 재전송의 사용 송신자에게 손실된 패킷의 검출과 회복 책임을 부여 송신자의 손실된 패킷의 검출 가정 송신자가 데이터 패킷을 전송하고, 패킷 또는 수신자 패킷에 대한 ACK를 손실 → 송신자에게는 수신자로부터 어떠한 응답도 없음 송신자가 패킷을 잃어버렸다고 확신할 정도로 충분한 시간을 기다릴 수 있다면, 패킷을 재전송 가능 패킷 손실 확신을 위해선 얼마나 기다려야 할까? 적어도 송신자와 수신자 사이의 (왕복 시간 지연 + 수신 측에서 패..

Tistory

[Java/C++] 프로그래머스 Level 3 - 코딩테스트 연습

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/118668?l [2022 KAKAO TECH INTERNSHIP]에 나왔던 문제 현재 프로그래머스에서 정답률은 20%로 Level 3 중에서도 낮은데, 실제 시험에서는 훨씬 더 낮지 않았을까? 다른 사람이 푼걸 보니, 꽤나 풀이법이 다양하게 나오는 문제였다. 그리고 최적화를 아주 깐깐하게 보는 문제였다. 문제 핵심 및 풀이 행동의 선택지 생각하기 어떻게 보면 문제를 그냥 정리하는 것일 수도 있는데, 난 여기서 큰 힌트를 얻었다. 점수는 알고력과 코딩력이라는 2가지의 유형이 존재하므로, 이를 각각 A, B라고 두겠다. 초기 점수가 (A, B)라고 생각해 보자. 최단 시간을 얻기 위해 할 수 ..

Tistory

[네트워크/Network] 신뢰적인 데이터 전송 프로토콜 - rdt 1.0 / rdt 2.0(1,2) 분석 정리

rdt 1.0 rdt 1.0 : 완벽하게 신뢰적인 채널상에서의 신뢰적인 데이터 전송 프로토콜 하위 채널이 완전히 신뢰적인 가장 간단한 경우 유한 상태 머신(FSM) 정리 rdt1.0 송신자와 수신자에 대한 유한상태 머신(finite-state machine) (a) : FSM은 송신자의 동작을 정의 (b) : FSM은 수신자의 동작을 정의 송신자와 수신자는 분리된 FSM을 가진다. 해당 그림에서 송신자와 수신자 FSM은 각각 하나의 상태만을 가진다. 하나의 상태를 가지므로, 전이는 그 상태로부터 자신으로 되돌아옴 유한 상태 머신 표기 점선 화살표 : FSM의 초기 상태 액션(action) : 이벤트가 발생했을 때 취해지는 것 가로선 아래에 나타냄 이벤트(event) : 전이를 일으킴 가로선 위에 나타냄 ..

Tistory

[네트워크/Network] 신뢰적인 데이터 전송 서비스 추상화와 동작 원리

신뢰적인 데이터 전송의 원리 신뢰적인 채널의 서비스 추상화 상위 계층 객체에게 제공에게 제공된다. 데이터가 전송될 수 있는 신뢰적인 채널의 서비스 추상화이다. TCP 인터넷 애플리케이션에게 제공하는 서비스 모델 신뢰적인 채널에서 전송된 데이터는 손상이나 손실되지 않는다. 모든 데이터는 전송된 순서 그대로 전달된다. 신뢰적 데이터 전송 프로토콜의 의무 - 서비스 추상화를 구현 신뢰적인 전송 프로토콜 ‘아래에 있는’ 계층이 신뢰적이지 않을 수 있어서 어려워진다. 예시 TCP → IP의 바로 상위에 구현된 신뢰적인 데이터 프로토콜 비신뢰적인 종단 간의 네트워크 계층(IP) 신뢰적으로 통신하는 두 종단점 바로 아래에 있는 계층의 구성 단일 물리적 링크(링크 레벨 프로토콜) 전 세계 인터넷 네트워크(트랜스포트 레..

Tistory

[Java/C++] 프로그래머스 Level 2 - 스킬트리

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/49993? [Summer/Winter Coding 2018~]로 태그가 나와있던데 아무튼 그렇다. 직관적이고 단순하게 생각하면 된다. 복잡하게 생각하면 더 어려워지는 문제인 것 같다. 문제 핵심 및 풀이 선행 스킬 관계 만들기 특정 스킬을 익히기 전에 익혀야 할 스킬을 선행 스킬이라고 하겠다. 이건 단순하게 꼬리물기 구조로 만들어주면 된다. "BCD"가 규칙일 때, B → C → D라는 뜻인데, 연속적으로 이루어져 있다.. 이걸 부모 자식 관계로 한번 바꿔서 생각해 보자. C를 배우기 위해선 B가 필요하다. 즉, parent [C] = B가 된다. D라는 스킬을 배우기 위해선 B, C 2개..

Tistory

[네트워크/Network] 비연결형 트랜스포트(UDP)의 특징과 구조

UDP - 최소 기능의 트랜스포트 계층 프로토콜 UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다. UDP가 제공하는 기능 다중화/역다중화 간단한 오류 검사 기능 → IP에 아무것도 추가하지 않는다. UDP를 사용한다는 것은 거의 IP와 직접 통신하는 것과 같다. 데이터 전달 과정 애플리케이션 프로세스로부터 메시지를 가져와서 세그먼트를 생성하여 네트워크 계층으로 넘김 세그먼트의 구성 다중화/역다중화 서비스에 대한 출발지 포트 번호 필드와 목적지 포트 번호 필드 다른 2개의 필드 네트워크 계층은 세그먼트를 IP 데이터그램으로 캡슐화하고, 수신 호스트에게 전달하기 위해 최선을 다한다. 세그먼트가 수신 호스트에 도착 UDP는 데이터 전달을 위해 목적지 포트 번호를 사용해 애플리케이션 프로..

Tistory

[네트워크/network] 트랜스포트 계층의 데이터 다중화와 역다중화

트랜스포트 계층의 데이터 수신 및 전달 트랜스포트 계층의 의무 목적지 호스트의 트랜스포트 계층은 바로 아래의 네트워크 계층으로부터 세그먼트를 수신 → 목적지 호스트의 트랜스포트 계층은 호스트에서 동작하는 프로세스에게 수신한 세그먼트를 전달할 의무를 지님 예시 4개의 네트워크 애플리케이션을 갖는다고 가정 트랜스포트 계층이 하위 네트워크 계층으로부터 데이터를 수신 → 4개의 프로세스 중 하나에게 데이터를 전달해야 함 트랜스포트 계층에서의 소켓 프로세스는 네트워크 애플리케이션의 한 부분으로서 소켓을 가지고 있다. 이를 통해 네트워크와 프로세스 간의 데이터를 교환하는 출입구 역할을 함 수신 측 호스트의 트랜스포트 계층은 데이터를 직접 프로세스에 전달하지 않는다. → 대신 중간 매개자인 소켓에게 전달 각각의 소켓..

Tistory

[네트워크/Network] 인터넷 프로토콜(IP) 개념과 UDP/TCP 서비스 모델

인터넷 트랜스포트 계층의 개요 인터넷 문서(RFC)에서 트랜스포트 계층 패킷 용어 표기 TCP → 세그먼트 UDP → 세그먼트 or 데이터그램 인터넷 프로토콜(IP) 인터넷 프로토콜(Internet Protocol) 인터넷의 네트워크 계층 프로토콜의 이름 IP 서비스 모델은 호스트들 간에 논리적 통신을 제공하는 최선형 전달 서비스 최선형 전달 서비스(best-effort delivery service) IP가 통신하는 호스트들 간에 세그먼트 전달에 최대한 노력한다. 하지만 IP는 어떤 보장도 하지 않는다. 세그먼트의 전달을 보장하지 않는다. 세그먼트가 순서대로 전달되는 것을 보장하지 않는다. 세그먼트 내부 데이터의 무결성(integrity)을 보장하지 않는다. → 이러한 이유로 IP를 비신뢰적인 서비스라..

Tistory

[Java/C++] 프로그래머스 Level 3 - 상담원 인원

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/214288 2023 현대 모비스 알고리즘 경진대회 예선에서 출제된 문제. 시간제한을 두고 풀 땐 실패했지만 집에서 천천히 풀어보니 아이디어가 쉽게 떠올랐던 문제 문제 핵심 및 풀이 시간 복잡도 파악 문제 해결을 위해 시간 복잡도를 계산해야 한다. 제한 사항을 살펴보자. 상담 유형은 최대 5개, 멘토의 수는 최대 20명, 상담 요청은 최대 300개까지이다. 문제에서 핵심적으로 해야 하는 것은 멘토 n명을 상담 유형 k에 적절히 분배하는 것이다. 만약 가능한 모든 경우의 수를 구해서 찾는다면 대략 얼마나 걸릴까? k = 5, n = 20이라고 가정하자. 각 유형별로 적어도 1명은 존재해야 하므..

Tistory

[네트워크/Network] 트랜스포트 계층 프로토콜의 정의와 논리적 통신

트랜스포트 계층 서비스 및 개요 트랜스포트 계층 프로토콜의 논리적 통신 다른 호스트에서 동작하는 애플리케이션 프로세스 간 논리적 통신을 제공 논리적 통신(logical communication) 애플리케이션 관점, 프로세스를 동작시키는 호스트들이 직접 연결된 것처럼 보인다는 의미 호스트는 수많은 라우터와 다양한 형태의 링크를 통해 연결되어 있음 → 이를 통해 서로 다른 지역에 존재할 수 있음 애플리케이션 프로세스는 메시지 송신을 하는데 논리적 통신을 사용한다. ← 메시지 운반에 사용되는 인프라스트럭처의 세부사항에 상관없이 메시지를 송신하기 위해서 논리적 통신의 개념(과정) 트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현됨 송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터..

Tistory

[네트워크/Network] TCP 소켓 프로그래밍 개념 및 구현(Python)

클라이언트-서버 애플리케이션 개발 애플리케이션에 TCP, UDP 중 어떤 것을 사용할지 결정해야 함 TCP : 연결지향적 서비스 신뢰적 바이트 스트림 채널 제공 해당 채널을 통해 데이터가 두 종단 시스템 사이를 흐름 UDP : 비연결형 서비스 한 종단 시스템에서 다른 곳으로 데이터를 독립적인 패킷으로 만들어 전송 전송에 대한 보장을 하지 않는다. RFC 표준 프로토콜 vs 개인 독점 프로토콜 RFC 표준 프로토콜 오늘날 대부분의 네트워크 애플리케이션 독립 개발자가 개발한 클라이언트와 서버 프로그램 간의 통신을 포함 RFC에 정의된 프로토콜을 구현할 때, 해당 프로토콜과 잘 알려진 포트 번호를 사용 개인 독점 프로토콜 공개된 프로토콜을 구현하지 않음 → 다른 독립 개발자는 이 애플리케이션과 상호작용하는 코..

Tistory

[네트워크/Network] UDP 소켓 프로그래밍 개념 및 구현(Python)

UDP를 이용한 소켓 프로그래밍 UDP 소켓 프로그래밍 과정 송신 프로세스가 데이터 패킷을 소켓 밖으로 내기 전에 먼저 패킷에 목적지 주소를 붙여 넣음 패킷이 송신자의 소켓을 통과 해당 소켓을 인터넷을 통해 수신 프로세스에 있는 소켓으로 라우트함 패킷이 수신 소켓에 도착 수신 프로세스는 소켓을 통해 해당 패킷을 추출하고 다음에 패킷의 콘텐츠를 조사 및 동작 UDP 패킷 구성 목적지 주소 목적지 주소 = 목적지 호스트 IP 주소 + 소켓 포트 번호 목적지 호스트 IP 주소 → 이를 통해 인터넷의 라우터는 목적지 호스트로 인터넷을 통해 패킷을 라우트 가능 소켓 포트 번호 포트 번호(port number) : 소켓이 생성될 때 소켓에 할당되는 식별자 호스트는 여러 개의 소켓을 갖는 많은 네트워크 애플리케이션 ..

Tistory

[Java] 함수형 인터페이스를 이해하면 코딩이 편해진다.

함수형 인터페이스를 알면 편한 이유 우리가 보통 코딩을 할 때 Visual Studio Code, Intellij 등 IDE 환경에서 진행한다. IDE를 사용하면 엄청나게 편리하다. 내가 여기서 말하고자 하는 것은, IDE가 클래스의 함수 이름과 기능을 제공해 주는 것에 대한 것이다. 컬렉션이 어떤 함수를 가지고 있는지를 알 수 있고, 어떤 기능을 하는지 알 수 있다. 위는 인텔리제이에서 arrayList 컬렉션에서 사용할 수 있는 함수를 IDE에서 창으로 알려주는 모습이다. 빨간 줄 부분이 전부 함수형 인터페이스 부분이다. 사실 함수형 인터페이스는 생소하지만 항상 우리 옆에 있었다. 함수형 인터페이스를 모른다면, IDE에서 해당 함수의 사용법을 알려줬는데도 사용하지 못하는 것이다. 예를 들어서 stre..

Tistory

[Java/C++] 프로그래머스 Level 2 : [3차] 방금그곡

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/17683? 2018 카카오 블라인드 3차 코딩 테스트에서 나왔던 문제단순 구현 문제라고 생각되는데, 생각보다 구현해야 하는 함수 부분이 많아서 잘 정리하는 게 중요했다. 또한 예외 케이스가 많은 문제여서 테스트 케이스를 잘 짜는 것이 중요했다. 문제 핵심 및 풀이 멜로디와 일치하는 곡 찾기의 문제 멜로디(m)가 곡(musicInfo) 안에 있는지 확인하는 과정은, 일반적으로는 문자열 비교로 하면 된다. 하지만 입출력 예시 3번에서 볼 수 있듯이 #이 문제가 된다. 일반적인 문자열 비교로 찾을 때는, m = "ABC" , musicInfo = "ABC#" 일 때, 조건 일치로 판단한다. 그래..

Tistory

[Java/C++] 프로그래머스 Level 2 - 택배 배달과 수거하기

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150369? 2023년 카카오 블라인드에서 나온 따끈따끈한 최신 문제 이 문제를 실제 테스트로 봤으면 어땠을까? 문제 로직은 크게 어렵다고 생각 들진 않았지만 이상하게 푸는데 오래 걸렸다. 문제 핵심 및 풀이 제한사항 부분을 보면 집(n)의 개수가 최대 100,000개이고, cap은 50까지밖에 되지 않는다. deliveries와 pickups의 개수 또한 n과 같다. 해당 문제에서는 cap이 50밖에 되지 않는 것은 오히려 반복 횟수를 늘린다. 왜냐하면 50번밖에 담지 못하니까 여러 번 왔다 갔다 해야 하니까.. 그래서 완전탐색으로 해당 문제를 풀기에는 비효율적으로 보이고, 실제로 완전 ..

Tistory

[Java/C++] 프로그래머스 Level 3 - 다단계 칫솔 판매

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/77486 2021 Dev-Maching에서 나온 문제 카카오 기출문제만 풀다와서 그런진 모르겠는데, Level 3 치곤 쉽게 풀었다. 만약 카카오 코딩 테스트에서 나왔다면, Level 2 쯤 아니었을까? 문제 핵심 및 풀이 그림에서 보면 알 수 있듯이, 트리 구조가 형성되는 것을 알 수 있다. 그리고 해당 문제에서는 자신을 추천한 사람을 아는 것이 중요한데, parent [i] = k : i를 추천한 사람이 k이다. 이런 식으로 정의하도록 한다. 사람 이름 문자열을 매핑 여기서 생각해야 할 것은 트리의 각 노드들이 사람이름(문자열)이라는 점이다. 그래서 parent의 인덱스로 문자열을 사용..

Tistory

[네트워크/Network] 넷플릭스와 유튜브의 비디오 스트리밍 방식

스트리밍 저장 비디오 - 넷플릭스 넷플릭스 비디오 배포에는 2가지 주요 구성요소 아마존 클라우드 자체 CDN 인프라가 있음 아마존 클라우드 웹사이트는 아마존 클라우드에서 모든 것이 실행된다. 넷플릭스에서의 웹사이트 사용자 등록 및 로그인, 결제, 영화 장르 검색, 영화 추천 서비스 등 다양한 기능 처리 아마존 클라우드의 주요한 기능 콘텐츠 수집(contetent ingestion) 넷플릭스는 고객들에게 비디오 분배 전, 먼저 영화를 수집하고 처리해야 한다. 영화의 스튜디오 마스터 버전을 받아서 클라우드 시스템의 호스트에 업로드함 콘텐츠 처리(content processing) 아마존 클라우드 시스템의 기기에서는 각 영화의 여러 가지 형식의 비디오를 생성 ← 고객들의 다양한 플레이어 기기 사양에 적합하기 ..

Tistory

[네트워크/Network] CDN의 구축 방식과 클러스터 선택 정책 및 DNS 활용

거대 데이터 센터 구축 및 직접 전송 인터넷 비디오 회사에서 스트리밍 서비스를 제공하는 가장 단순한 방법 인터넷 비디오 회사들은 엄청난 스트리밍 트래픽을 전 세계에 걸친 지점에 끊김 없이 안정적으로 제공하는 일을 한다. 이러한 일들은 매우 어려운 문제임 과정 단일한 거대 데이터 센터를 구축하여 모든 자료를 센터에 저장 전 세계의 사용자에게 비디오 스트림을 데이터 센터로부터 직접 전송 문제점 클라이언트가 데이터 센터로부터 멀리 있는 경우 서버로부터 클라이언트로의 패킷 경로는 많은 통신 링크와 ISP를 거쳐감 거쳐가는 많은 통신 링크 중 하나라도 비디오 소비율보다 낮은 전송용량인 경우 → 종단 간에 처리율이 낮아지고, 결국 사용자는 화면 정지 현상을 겪음 종단 간의 길이가 길어질수록 이런 현상은 증가 인기 ..

Tistory

[네트워크/Network] 인터넷 비디오 매체와 HTTP 스트리밍 및 DASH

인터넷 비디오 스트리밍 비디오 애플리케이션 → 미리 녹화된 비디오를 대상으로 한다. 녹화된 비디오는 서버에 저장되어 사용자가 서버에게 온디맨드 요청을 통해 시청 예 : 넷플릭스, 유튜브, 아마존, 틱톡 등 많은 인터넷 회사가 비디오 스트리밍 지원 비디오 매체의 특징 비디오는 일반적으로 초당 24개 혹은 30개의 이미지로 일정한 속도로 표시 비디오는 이미지의 연속이다. 압축되지 않은 디지털 인코딩된 이미지는 픽셀 단위로 구성 각 픽셀은 휘도와 색상을 나타내는 여러 비트들로 인코딩 됨 비디오의 중요 특징 - 압축 가능 비디오 품질과 비트 전송률은 서로 반비례하다. 현대 상용 압축 알고리즘은 원하는 모든 비트 전송률로 비디오 압축 가능 비트 전송률이 높을수록 이미지 품질이 좋아지고 사용자 시청 환경이 향상 압..

Tistory

[운영체제] 교착 상태 탐지(Deadlock Detection)과 회복 방법 정리

교착 상태 탐지(Deadlock Detection) 시스템이 교착 상태 예방 혹은 방지 알고리즘을 사용하지 않는 경우 다음 2가지 알고리즘들을 반드시 지원해야 한다. 교착 상태가 발생했는지 결정하기 위해 시스템의 상태를 검사하는 알고리즘 교착 상태로부터 회복하는 알고리즘 탐지와 회복 방법은 필요한 정보를 유지하고 탐지 알고리즘을 실행 시간 비용이 든다. 또한, 교착 상태로부터 회복할 때 내재하는 가능한 손실을 포함하는 오버헤드가 필요 각 지원 유형이 한 개씩 있는 시스템 대기 그래프(wait-for graph) 해당 경우, 대기 그래프를 사용해서 교착 상태 알고리즘을 정의 대기 그래프(wait-for graph) : 자원 할당 그래프의 변형 대기 그래프를 얻는 방법 자원 할당 그래프로부터 자원 유형의 노..

Tistory

[네트워크/Network] P2P 파일 분배의 개념과 비트 토렌트

P2P 파일 분배 P2P 구조는 항상 켜져 있는 인프라스트럭처 서버에 최소한으로 의존한다. 인프라스트럭처 서버에 전혀 의존 안 할 수도 있음 cf ) 클라이언트-서버 구조 → 인프라스트럭처 서버에 많이 의존함 P2P는 간헐적으로 연결되는 피어(호스트 쌍)들이 서로 직접 통신 피어는 사용자가 제어하는 데스크톱과 랩톱, 스마트폰이 보유한다. 서비스 제공자가 소유하는 것이 아님 자연적인 P2P 애플리케이션 커다란 파일을 한 서버에서 다수의 호스트(피어)로 분배한다. 파일이 될 수 있는 것 리눅스 운영체제의 새로운 버전 기존 운영체제 혹은 애플리케이션을 위한 소프트웨어 패치(patch) MP3 음악파일 혹은 MPEG 비디오 파일 클라이언트-서버 파일 분배에서 서버는 파일 복사본을 각 피어들에게 보내야 함 → 이..

Tistory

[Java/C++] 프로그래머스 Level 2 - 후보키

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42890? 카카오 코딩 테스트 문제 위주로 풀고 있는데, 어째 Level 2에 나오는 문제는 왜 전부 유형이 비슷한 거 같지? 문제 핵심 및 풀이 제한 사항 부분에서 문제의 유형을 알 수 있다. 고를 수 있는 선택지인 column이 최대 8개, 판별해야 할 row는 최대 20밖에 되지 않는다. 탐색 범위가 엄청 작은 것을 알 수 있어서, 이 문제는 완전 탐색으로 충분히 풀 수 있다는 것을 알 수 있다. 키 쌍이 될 수 있는 경우의 수 어떤 속성(column)의 조합이 후보키가 될 수 있는지는 속성 조합을 만들어보고, 직접 모든 row와 비교해 보는 수박에 없다. 그렇기 때문에 결국엔 조합이..

Tistory

[운영체제] 교착 상태 회피와 자원 할당 알고리즘, 은행원 알고리즘

교착 상태 회피(Deadlock Avoidance) 교착 상태 예방의 단점 장치의 이용률이 저하됨 시스템 총 처리율(throughput)이 감소 교착 상태 회피 원리 자원이 어떻게 요청될지에 대한 추가 정보를 제공하도록 요구하는 것 각 스레드의 요청과 방출에 대한 완전한 순서를 미리 안다면, 각 요청에 대해 스레드가 대기해야 하는지의 여부를 결정할 수 있다. → 각 요청에서 발생할 수 있는 교착 상태를 피할 수 있다. 스레드 대기 여부를 결정하기 위해, 여러 가지 정보를 고려해야 한다. 현재 가용 자원 현재 각 스레드에 할당된 자원 각 스레드가 앞으로 요청하거나 방출할 자원 교착 상태 회피 알고리즘 각 스레드가 자신이 필요로 하는 각 유형의 자원마다 최대 수를 선언하도록 요구하는 것 → 가장 단순하고 제..

Tistory

[Java/C++] 프로그래머스 Level 2 - 메뉴 리뉴얼

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72411 2021 카카오 블라인드 코딩 테스트에서 나온 문제. 자료구조 Map을 잘 알아야 풀 수 있는 문제 같다. Map을 사용하지 않고 다른 건 잘 모르겠다. 문제 핵심 및 풀이 메뉴(orders)의 개수가 최대 20개, 메뉴 조합(course)의 가짓수는 최대 10가지. 문제 풀이에 핵심이 되는 조합과 개수가 엄청 작기 때문에, 해당 문제는 완전 탐색으로 풀 수 있다. 여기서 문제가 되는 것은 메뉴 조합이 구성되는 방식이 "AB", "ABC" , "CDE", "A" 이렇게 정수가 아닌 문자열이기 때문에, 인덱스로 문자열을 사용하기 위해 자료구조 Map을 사용해야 한다. orders에서..

Tistory

[네트워크/Network] DNS 레코드와 메시지

자원 레코드(resource record, RR) DNS 서버들은 호스트 이름을 IP 주소로 매핑하기 위해 자원 레코드를 저장한다. 각 DNS는 하나 이상의 자원 레코드를 가진 메시지로 응답 자원 레코드의 구성 4개의 튜플(tuple)로 구성 → {Name, Value, Type, TTL} TTL(time to live) : 자원 레코드의 생존 기간 자원이 캐시에서 제거되는 시간을 결정 Type의 종류 Name과 Value의 의미는 Type에 따른다. 여기서의 서술은 TTL을 무시한 채 작성 Type = A인 경우 Type A 레코드는 표준 호스트 이름의 IP 이름의 IP 주소 매핑을 제공 Name : 호스트 이름 Value : 호스트 이름에 대한 IP 주소 Type A 레코드 예시 → ( relay1...

Tistory

[네트워크/Network] DNS 서비스와 동작 원리, DNS 캐싱

DNS: 인터넷의 디렉터리 서비스 호스트 이름(host name) 호스트의 식별자 중 하나 호스트는 IP 주소(IP address)로도 식별됨 예시 : www.facebook.com, www.google.com … 사용 이유(장점) 호스트 이름은 기억하기 쉬워 사용자가 편리함 단점 호스트 이름은 인터넷에서의 호스트 위치에 대한 정보를 거의 제공하지 않는다. 호스트 이름은 라우터가 처리하는데 어려움이 있다. ← 가변 길이의 알파뉴메릭 문자로 구성되어 있기 때문 DNS가 제공하는 서비스 인터넷 디렉터리 서비스(DNS)가 필요한 이유 라우터와 사람의 차이로 인해 호스트 이름을 IP 주소로 변환해 주는 서비스 필요 → 인터넷 DNS(domain name system)의 주요 임무 사람은 기억하기 쉬운 호스트 이..

Tistory

[네트워크/Network] 전자메일 메시지 포맷과 접속 프로토콜

메일 메시지 포맷 전자메일을 보낼 때 주변 정보가 포함된 헤더가 메시지 몸체 앞에 오게 된다. 주변 정보는 일련의 헤더 라인에 포함되는데 RFC 5322에 정의되어 있다. RFC 5322는 메일 헤더 라인에 대한 정확한 포맷과 그 의미에 대해 해석을 기술 헤더라인과 메시지 몸체는 빈 줄(CRLF)로 분리됨 각 헤더 라인은 키워드, 콜론 값의 순서로 구성되고, 읽을 수 있는 텍스트를 포함 키워드 중엔 반드시 필요한 것과 선택 사항이 있다. 반드시 필요한 키워드 → From: 헤더 라인과 To: 헤더 라인 선택 사항 키워드 → Subject: 헤더 등 이러한 명령어는 SMTP 명령과는 다르다. From To과 같은 공통 단어가 있긴 함 메일 메시지 포맷의 From To→ 메일 메시지 자체의 일부 SMTP의 ..

Tistory

[네트워크/Network] 인터넷 메일 시스템 3가지 상위 레벨 개념

인터넷 전자메일 오늘날 인터넷의 가장 중요하고 널리 사용되는 애플리케이션 중 하나 전자메일은 비동기적인 통신 매체 → 상대방 스케줄과 상관없이 자신이 편할 때 메시지를 보내거나 읽는다. 전자 메일은 분배가 쉽고, 빠르고, 저렴함 전자메일은 HTML 포맷 텍스트, 첨부 메시지, 하이퍼링크, 내장된 사진 등의 특성을 지님 인터넷 메일 시스템의 상위 레벨 개념 3개의 주요 요소가 존재 → 사용자 에이전트, 메일 서버, SMTP 사용자 에이전트(user agent) 사용자가 메시지의 응답, 읽기, 전달, 저장, 구성을 가능하게 함 대표적인 사용자 에이전트의 예시 마이크로소프트 아웃룩, 애플 메일, G-Mail 등 사용자가 메시지를 쓰면, 메시지를 메일 서버로 보냄 → 메시지는 메일 서버의 출력 메시지 큐에 들어..

Tistory

[네트워크/Network] HTTP/2의 필요성과 HTTP/2 프레이밍(+HTTP/3)

HTTP/2 HTTP/1.1 이후 새로운 첫 번째 HTTP 버전 HTTP/2 가 발표된 이후 2020년 기준 주요 웹사이트 천만 개가 해당 버전을 사용 구글 크롬, 인터넷 익스플로러, 사파리, 오페라, 파이오폭스 등이 지원 HTTP/2는 클라이언트와 서버 간의 데이터 포맷 방법과 전송 방법을 변경 상태 코드, URL, 헤더 필드 등 HTTP 메서드 자체를 변경하진 않음 HTTP/2의 주요 목표 하나의 TCP 연결상에서 멀티플렉싱 요청/응답 지연 시간을 줄이는 것 요청 우선순위화, 서버 푸시, HTTP 헤더 필드의 효율적인 압축 기능 등을 제공 하나의 웹 페이지를 전송하기 위해 병렬 TCP의 수를 줄이는 것 서버를 열고 유지하는데 필요한 소켓을 줄일 수 있다. TCP 혼잡 제어를 제어할 수 있다. But,..

Tistory

[네트워크/Network] 웹 캐싱(Web Caching)과 조건부 GET

웹 캐싱 웹 캐시(web cache) 기점 웹 서버(origin Web server)를 대신하여 HTTP 요구를 충족시키는 네트워크 개체 프락시 서버(proxy server)라고도 함 웹 캐시는 자체의 저장 디스크를 가지고 있음 → 최근 호출된 객체의 사본을 저장 및 보존 브라우저 웹 캐싱 과정 브라우저는 사용자의 모든 HTTP 요구가 웹 캐시에 가장 먼저 보내지도록 구성될 수 있음 일단 브라우저가 설정되면, 객체에 대한 각각의 브라우저 요청은 웹 캐시에 가장 먼저 보내짐 특정 객체를 요구할 때 발생하는 과정 브라우저는 웹 캐시와 TCP 연결을 설정하고, 웹 캐시에 있는 객체에 대한 HTTP 요청 보냄 웹 캐시는 객체의 사본이 자기에게 저장되어 있는지 확인 저장되어 있는 경우 → 웹 캐시는 클라이언트 브..

Tistory

[네트워크/Network] 쿠키(Cookie)를 이용한 클라이언트-서버 상호작용

쿠키를 사용하는 이유 HTTP 서버는 상태를 유지하지 않는다. 때때로 웹사이트가 사용자를 확인해야 할 때가 존재 → 해당 이유로 HTTP는 쿠키(cookie)를 사용 대부분의 주요 상용 웹사이트는 쿠키를 사용하고 있음 쿠키기술의 4가지 요소와 쿠키 동작 방식 쿠키가 가지는 4가지 요소 HTTP 응답 메시지 쿠키 헤더 라인 HTTP 요청 메시지 쿠키 헤더 라인 사용자의 브라우저에 사용자 종단 시스템과 관리를 지속시키는 쿠키 파일 웹 사이트의 백엔드 데이터베이스 쿠키의 동작 과정 가정 해당 사용자는 PC 인터넷 익스플로러를 통해 항상 웹 접속을 한다. PC로 인터넷 익스플로러를 통해 특정 웹사이트(A)를 접속했다. 해당 사용자는 과거에 웹사이트(B)를 방문한 적이 있다. 과정 웹 서버 A에 요청이 들어올 때..

Tistory

[네트워크/Network] HTTP 메시지 포맷 구조 요약 정리

HTTP 메시지 포맷 HTTP 명세서(RFC)는 HTTP 메시지 포맷을 정의한다. 브라우저, 웹 서버, 네트워크 캐시 서버에 의해 삽입될 수 있는 헤더라인 정의 두 가지 HTTP 메시지가 존재 → 응답 메시지와 요청 메시지 HTTP 요청 메시지 예시를 통한 요청 메시지 분석 GET /somedir/page.html HTTP/1.1 // 요청 라인(request line) // ---- 헤더 라인(header line) Host : www.someschool.edu // 객체가 존재하는 호스트를 명시 Connection : close // 브라우저는 서버에게 지속 연결 사용을 원하지 않는다. User-agent : Mozilla/5.0 // Mozilla/5.0 = 파이어 폭스 브라우저 Accept-lan..

Tistory

[운영체제] 시스템 모델과 교착상태(DeadLock) vs 라이브락(LiveLock)

교착 상태(DeadLock) 교착 상태(Dead Lock) : 대기 중인 스레드들이 다시는 그 상태를 변경할 수 없는 경우 한 스레드 집합 내의 모든 스레드가 그 집합 내의 다른 스레드에 의해 발생될 수 있는 이벤트를 기다린다면, 이는 교착 상태임 요청한 자원들이 다른 스레드에 의해 점유되어 있고, 그들도 다 대기 상태에 있기 때문 한 스레드가 자원을 요청했을 때, 그 시각에 요청한 자원을 사용할 수 없는 상황 → 해당 스레드는 대기 상태로 들어간다. 교착 상태가 없는 프로그램을 설계하는 것은 전적으로 프로그래머의 책임 시스템 모델(System model) 시스템은 경쟁 스레드들 사이에 분배되어야 할 유한한 수의 자원들로 구성됨 시스템 자원은 다수의 유형 혹은 클래스로 분할된다. 자원 유형 예시 : CP..

Tistory

[네트워크/Network] HTTP와 TCP의 이해, TCP 연결 방식 정리

웹의 등장과 특성 1990년대 초, 새로운 애플리케이션인 월드와이드웹이 등장 가장 큰 장점 → 웹이 온디맨드 방식 온디맨드(On Demand) : 사용자의 요구가 있었을 때 그 요구에 따라 서비스를 제공하는 것 cf ) 라디오 / TV → 콘텐츠 제공자의 주파수를 사용자가 맞춰야 함 이외의 장점 개인이 웹 상에 어떠한 정보를 사용 가능하게 하는 것이 매우 쉬움 → 모든 사람이 매우 낮은 비용으로 발행자가 될 수 있음 하이퍼링크와 검색 엔진은 정보를 얻는데 많은 도움을 준다. 웹과 관련된 프로토콜은 모바일 인터넷 애플리케이션을 위한 플랫폼을 제공 HTTP의 구현 2가지 프로그램으로 구현됨 (클라이언트 프로그램, 서버 프로그램 ) 클라이언트 프로그램 → 각기 다른 종단 시스템에서 수행 클라이언트 프로그램과 ..

Tistory

[Java/C++] 프로그래머스 Level 2 - 프렌즈4블록

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/17679 카카오 블라인드 코딩테스트 2018년도 문제. 코딩테스트 리뷰를 보니까 난이도 상 문제였다. 문제 핵심 및 풀이 해당 문제는 제한사항에서 완전탐색으로 가능하다는 것을 인지해야 한다. 핵심적인 구현은 2가지가 있다. 1. 2x2에 연결되어 있는 다른 2x2 블록이 같이 터질 수 있도록 하는 것. 2. 블록이 터진 후 비어있는 공간에 위에 있는 블록들이 떨어지는 것. 2x2 블록들이 연쇄적으로 사라지게 하기 일단 2x2 조건을 만족하는 블록들을 찾아내는 것은 쉽다. 무조건 2x2 고정이기 때문에 현재 좌표를 (i, j)라고 한다면 ( i , j ) == ( i , j+1 ) == ( ..

Tistory

[네트워크/Network] 인터넷 프로토콜과 애플리케이션 계층 프로토콜

인터넷 전송 프로토콜이 제공하는 서비스 인터넷 애플리케이션 지원 유형 인터넷은 애플리케이션에게 2개의 전송 프로토콜을 제공 → TCP와 UDP 여기서 인터넷은 일반적인 TCP/IP 네트워크를 뜻함 TCP와 UDP는 서로 다른 서비스 모델을 제공한다. TCP 서비스 TCP 서비스 모델은 연결지향적 서비스와 신뢰적인 데이터 전송 서비스를 제공한다. 연결지향형 서비스 - 과정 메시지 전송 전에, TCP는 클라이언트와 서버가 서로 제어 정보를 교환하게 한다. → 핸드셰이킹 과정 클라이언트와 서버에 패킷이 곧 도달한다는 것을 알려주는 역할 핸드셰이킹 과정 이후, TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 칭함 해당 연결은 메시지를 동시에 보낼 수 있기 때문에 전이중(full-duple) 연결 애플리케이션..

Tistory

[네트워크/Network] 트랜스포트 서비스와 트랜스포트 프로토콜

애플리케이션이 이용 가능한 트랜스포트 서비스 소켓은 애플리케이션 프로세스와 트랜스포트 프로토콜 간의 인터페이스 전송 과정 송신 측 애플리케이션은 소켓을 통해 메시지를 전송 소켓의 반대편에서 트랜스포트 프로토콜은 네트워크를 통해 해당 메시지를 수신 프로세스의 소켓으로 이동시켜야 함 트랜스포트 프로토콜 대부분의 네트워크는 하나 이상의 프랜스포트 프로토콜을 제공 애플리케이션 개발할 때, 트랜스포트 프로토콜 중 하나를 선택해야 함. 애플리케이션 요구에 가장 적합한 서비스를 제공하는 프로토콜 선택 하나를 선택해야만 하고, 각 전송 모드는 다른 서비스를 제공 트랜스포트 계층 프로토콜이 제공하는 서비스 신뢰적 데이터 전송, 처리율, 시간, 보안 신뢰적 데이터 전송(reliable data transform) 프로토콜..

Tistory

[Java/C++] 프로그래머스 Level 2 - 거리두기 확인하기

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/81302?language=cpp 카카오 기출문제 중 Level 2 난이도 그림만 많지 문제를 이해하기에는 어렵지 않다. X는 칸막이로 치고 그냥 5x5 맵에 P와 P 사이에 맨해튼 거리를 계산하면 된다. 문제 핵심 및 풀이 키포인트는 5 x 5 맵이 5개 있다는 점. 탐색 범위가 작아 완전 탐색이든 뭐든 시간적인 제약은 없다. 또한 핵심 아이디어는 이 문제가 그래프 탐색을 할 수 있다는 것. 그중에서 편한 방법은 BFS인데, 왜냐하면 BFS를 통해 최단거리를 쉽게 구할 수 있기 때문이다. 이 문제를 왜 BFS로 풀 수 있을까? 맨해튼 거리를 계산하는 것이기 때문이다. 두 점 A와 B의 좌표..

Tistory

[네트워크/Network] 애플리케이션 구조와 프로세스 간 통신

네트워크 애플리케이션 개발의 중심 다른 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것 예시 웹 어플레케이션의 서버와 클라이언트로 구별되는 두 가지 프로그램 클라이언트 프로그램 : 사용자 호스트에서 실행되는 브라우저 프로그램 사용자 호스트 → 데스크톱, 랩톱, 태블릿, 스마트폰 서버 프로그램 : 웹 서버 호스트에서 실행되는 웹 서버 프로그램 이러한 서버는 종종 데이터 센터에 위치 종단 시스템에만 애플리케이션 소프트웨어가 존재 → 기본 설계 방식 새로운 애플리케이션 개발 여러 종단 시스템에서 실행되는 소프트웨어를 작성해야 함 C, Java, Python 등으로 작성됨 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요가 없다. 네트워크 코어 장비는 네트워크 계층 및 그..

Tistory

[Java/C++] 프로그래머스 Level 2 - 순위 검색

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72412?language=cpp 카카오 코딩테스트에 나온 문제. 문제 이해 자체는 어렵지 않다. 문제 핵심 및 풀이 해당 문제의 포인트 1. 효율성 검사도 하기 때문에 시간복잡도가 중요하다. info의 크기가 50,000까지이고, query의 크기는 100,000까지이다. 이를 O(N)으로 계산한다고 했을 때, 5* 10^5 * 10^4 = 5억 정도라서 O(N)으로 탐색하기에는 아슬아슬하다. 그래서 최적화를 해야 하는 문제이다. 실제로 O(N)으로 푸니까 시간초과가 나온다. O(N)으로 풀었을 때의 시간 복잡도가 얼마인지 모르겠긴 하다. 2. 문자열 분리 해당 문제에서 info는 띄어쓰..

Tistory

[Java/C++] 프로그래머스 Level 2 - 양궁 대회

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/92342? 카카오 코딩테스트로 나오면 문제인데, 자주 풀어보긴 해야겠다. 문제 핵심 및 풀이 해당 문제의 유형은 제한사항을 보면 알 수 있다. 최대 10발까지 가능하고, 점수도 11개가 끝이다. 충분히 완전탐색으로 풀 수 있는 문제다. 라이언 점수 경우의 수 완전 탐색으로 풀면 되기 때문에, 백트래킹을 떠올렸다. n개의 화살을 11개의 점수에 각각 넣어보면 된다. 여기서 중요한 것은 맞추는 순서는 상관없다는 것이다. 어차피 해당 점수에 맞은 화살 개수만을 따지기 때문에 백트래킹할 때 중복 조합으로 구현해 주면 된다. 점수 계산 점수를 구하는 방법은 간단하다. 모든 점수를 확인해 주면서 어피..

Tistory

[Java / C++] 프로그래머스 Level 3 - 외벽 점검

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/60062# 카카오 코딩 테스트에 나왔던 문제다. 확실히 문제 이해하기도 복잡하다. 문제 핵심 및 풀이 유형 유추 제한 조건에 보면 외벽의 최대 길이(n)는 200까지이다. 인원을 배치할 수 있는 경우의 수는 200가지이다. 인원은 최대 8명까지 가능하다. 그리고이 결함이 있는 외벽도 15개까지밖에 주어지지 않는다. 계산에 필요한 인원, 외벽, 최대 길이가 굉장히 짧다. O(n^2)을 하더라도 충분하고 O(n^3)도 가능하다. 그래서 완전 탐색이 사용가능하다고 생각했다. 어떻게 하면 외벽 점검을 최소의 인원만 사용할 수 있을까 해당 문제에서 키워드는 외벽이 원형 모양이라는 것이다. 이 말은 ..

Tistory

[운영체제] 고전적 동기화 문제 - The Dining-Philosophers 문제

식사하는 철학자들(The Dining-Philosophers) 문제 규칙 가정 5명의 철학자가 원형 테이블을 공유하는 상황 테이블 중앙에는 밥이 있고, 테이블에는 5개의 젓가락이 존재 철학자가 생각(행동) 할 때, 다른 동료들과 상호작용하지 않음 밥을 먹을 때의 규칙 자신에게 가장 가까이 있는 2개의 젓가락을 집으려고 시도 옆 사람이 들고 있는 젓가락은 집을 수 없다. 가까이 있는 2개의 젓가락 → 자신과 자신의 왼쪽 철학자, 그리고 오른쪽 철학자 사이에 있는 젓가락을 뜻함 철학자는 한 번에 한 개의 젓가락만 집을 수 있음 배고픈 철학자가 동시에 젓가락 2개를 집는 경우 젓가락을 놓지 않고 식사를 한다. 식사를 마치면 2개의 젓가락 모두 내려놓고 다시 대기한다. 식사하는 철학자 문제의 의의 고전적인 동기..

Tistory

[C++] 백준 16973 - 직사각형 탈출

문제 이해 단계 https://www.acmicpc.net/problem/16973 NxM 크기의 격자판이 주어지고 크기가 HxW인 직사각형이 주어진다. 이동할 수 있는 칸은 0, 이동할 수 있는 칸은 1로 되어 있다. 직사각형의 가장 왼쪽 위의 칸이 처음에 주어지고, 도착 좌표가 주어진다. 이때 이 직사각형의 왼쪽 위가 도착좌표까지 갈 때 최단거리를 구하는 것 문제 접근 단계 직사각형의 크기가 있다는 점만 제외하고는 벽과 격자판이 존재하고, 특정 지점까지 이동하는 최단 거리를 구해야 한다는 점에서 대표적인 BFS 문제라는 점이라는 것을 알 수 있다. 중요한 것은 직사각형이기 때문에 체크해야 할 부분이 하나가 아니라 여러 개로 늘어난 것인데, 직사각형 왼쪽 위 칸이 도착 지점으로 가야 하므로, 이 문제에..

Tistory

[운영체제] 고전적 동기화 문제 - 유한 버퍼, Readers-Writers 문제

고전적인 동기화 문제 많은 클래스의 병행 제어(concurrency control) 문제에 대한 것 해당 문제들로 새로운 동기화 방법을 검증할 수 있음 유한 버퍼 문제(The Bounded-Buffer Problem) 해당 문제는 동기화 프리미티브(primitive)들의 능력을 설명하기 위해 사용 프리미티브 : 프로그래밍 관점에서 해석 이용 가능한 가장 작은 processing의 단위 언어에서 표현의 원자 요소 예 : 덧셈, 뺄셈 → 가장 단순하기 때문에 primitive operation라고 함 소비자와 생산자가 공유하는 자료구조 int n; // n개의 버퍼로 구성된 풀(pool) semaphore mutex = 1; // 상호배제 기능 제공 semaphore emtpy = n; // 비어 있는 버퍼..

Tistory

[네트워크/ Network] 인터넷의 개념과 프로토콜, 접근 네트워크

인터넷이란 무엇인가? 2가지 방법이 존재 인터넷의 구성요소를 기술하는 것 인터넷을 구성하는 기본적인 하드웨어와 소프트웨어 구성요소 기술 분산 애플리케이션에서 서비스를 제공하는 네트워킹 인프라스트럭처 관점에서 서술 인프라스터럭처(infrastructure) 컴퓨터와 사용자들을 연결하는 데 사용되는 물리적인 하드웨어를 말한다. ← 정보 기술과 인터넷의 관점으로 본 인프라스럭처 줄여서 “인프라”라고 많이 부름 구성요소로 본 인터넷 중요한 3가지 키워드 인터넷(network of networks) : 네트워크들이 모인 네트워크 프로토콜(protocol) : 네트워크에서 메시지 송수신을 제어하는 일련의 규칙 표준화(Internet standards) : 네트워크는 표준화가 굉장히 중요 종단 시스템(end Syst..

Tistory

[C++ / Java] 프로그래머스 Level 2 - 가장 큰 정사각형 찾기

문제 링크 ↓ ↓ ↓ https://school.programmers.co.kr/learn/courses/30/lessons/12905? 1과 0으로 채워진 보드판이 존재한다. 표에서 1로 이루어진 가장 큰 정사각형의 넓이를 출력하는 것이 문제 이때, 보드의 크기는 최대 1000x1000까지 가능하다. 문제 핵심 및 풀이 최악의 경우 반복 횟수 보드의 최대 크기는 1000x1000이다. 그리고 구해야 하는 것은 정사각형의 크기이다. 만약 이를 직접 1의 개수를 세어가면서 구한다면 어느 좌표에서 시작해야 최대 정사각형인지 모르기 때문에 최악의 경우 1000x1000 배열을 전부 훑어야 할 수도 있다. 그런데 각 시작점부터 1의 개수를 세야 하기 때문에 1000 x 1000 x 1000 x 1000 = 10..

Tistory

[C++ / Java] 프로그래머스 Level 2 - 2 x n 타일링

문제 링크 ↓ ↓ ↓ https://school.programmers.co.kr/learn/courses/30/lessons/12900 세로 길이가 2이고, 가로길이가 n으로 주어진다. 타일은 2가지 방식 중 하나로만 배치할 수 있다. 1. (1x2) 타일을 가로로 배치하는 경우 2. (2x1) 타일을 세로로 배치하는 경우 가로길이가 n일 때 나올 수 있는 경우의 수를 1,000,000,007로 나눈 나머지를 구하는 문제 문제 핵심 및 풀이 일단 답을 구할 때 1,000,000,007로 나누라고 한 거 보니 경우의 수가 엄청나게 많이 나올 것이라는 것을 예측할 수 있다. 가로( n)가 1일 때부터 나올 수 있는 패턴을 나열해 보자. 1,2,3,5 순으로 개수가 많아진다. 답을 구할 때 1,000,000,..

Tistory

[운영체제] 락 없는(lock-free) 알고리즘, 동기화 도구 사용 전략 정리

동기화 도구들은 임계 구역 문제인 상호 배제를 보장하고 라이브니스 문제를 해결하는데 효과적 락 없는(lock-free) 알고리즘 락 없는 알고리즘의 구현 락 없는 알고리즘을 구현하는 이유? → 락 오버헤드 없이 경쟁 조건으로부터 보호하기 위해 락 없는 알고리즘을 구현하기 위해 CAS 명령을 사용하는데 중점을 둠 CAS → compare and swap의 약어 장점 : 락 없는 설루션은 오버헤드가 낮고 확장성이 있기 때문에 인기가 있음 단점 : 알고리즘 자체가 개발 및 테스트가 어려운 경우가 많음 CAS 기반 접근 방식 CAS 기반 접근 방식이 낙관적으로 접근하는 과정 우선 낙관적으로 변수를 갱신 충돌 감지를 사용하여 다른 스레드가 변수를 병행하게 갱신 중인지 확인 갱신 중이라면, 충돌 없이 성공적으로 갱..

Tistory

[운영체제] 라이브니스(Liveness) 문제 (데드락, 우선순위 역전) 정리

라이브니스(Liveness) 임계구역 접근을 위해 동기화 도구를 사용할 때 문제 임계구역에 들어가려고 시도하는 프로세스가 무기한 대기할 가능성이 생김 무기한 대기는 진행 및 한정된 대기 2개의 기준을 위반한다. 라이브니스와 라이브니스 실패 프로세스가 실행 수명주기 동안 진행되는 것을 보장하기 위해 시스템이 충족해야 하는 일련의 속성 무기한 대기하는 프로세스는 라이브니스 실패의 한 예시 다양한 형태의 라이브니스 실패 → 결과적으로 성능과 응답성이 나쁜 것이 특징 예시 무한 루프 바쁜 대기 루프 → 라이브니스 실패의 가능성이 있음 특히 프로세스가 임의로 오래 시간 동안 루프 돌고 있는 경우 가능성 높아짐 도구를 통해 상호 배제를 제공하려는 노력이 병행 프로그래밍 환경에선 실패 가능성 존재 도구를 통한 상호 ..

1 2 3 4 5