본문 바로가기

전체 글167

BOJ_트리의 독립집합 [DFS, DP] 트리의 독립집합 2 초128 MB77383809283448.511%문제https://www.acmicpc.net/problem/2213그래프 G(V, E)에서 정점의 부분 집합 S에 속한 모든 정점쌍이 서로 인접하지 않으면 (정점쌍을 잇는 간선이 없으면) S를 독립 집합(independent set)이라고 한다. 독립 집합의 크기는 정점에 가중치가 주어져 있지 않을 경우는 독립 집합에 속한 정점의 수를 말하고, 정점에 가중치가 주어져 있으면 독립 집합에 속한 정점의 가중치의 합으로 정의한다. 독립 집합이 공집합일 때 그 크기는 0이라고 하자. 크기가 최대인 독립 집합을 최대 독립 집합이라고 한다. 문제는 일반적인 그래프가 아니라 트리(연결되어 있고 사이클이 없는 그래프)와 각 정점의 가중치가 양의 정수로.. 2024. 11. 9.
4. SOLID 4.1.3 리스코프 치환 원칙LSP -> '기본 클래스의 계약을 파생 클래스가 제대로 치환할 수 있는지 확인하라'라는 말은 파생 클래스가 기본 클래스의 모든 동작을 완전히 대체할 수 있어야 합니다. 파생 클래스가 기본 클래스에 할당된 의도와 계약이 무엇이니를 먼저 파악할 수 있어야 합니다. 원시적으로는 코드 작성자에게 직접 물어보기가 있지만, 명백한 한계가 있기에, 불필요한 커뮤니케이션 비용을 발생시킵니다. 이는 그리 선호하는 방법이 아니고, 세련된 방법으로 테스트 코드를 사용하는 것입니다. 초기 코드 작성자가 생각하는 모든 의도를 테스트 코드로 만들어 두는 것입니다. 그렇게 된다면, 파생 클래스를 작성하는 개발자는 테스트를 보고, 초기 코드 작성자의 의도를 파악할 수 있을 것이고, 기본 클래스로 작성된.. 2024. 11. 9.
2. 객체의 종류 객체의 종류 중에서 유명한 VO, DTO, DAO, Entity에 관해 함께 살펴보죠.  2.1 VO(Value Object: 값 객체)VO라는 것은 대체 무슨 의미일까요? VO라는 것은 클래스로 만들어진 객체를 값(value)과 같이 볼 수 있다는 의미입니다. 해당 클래스는 객체지만 동시에 값입니다. 그래서 값 객체라고 부릅니다. 그럼 값은 뭘까요? 값의 사전적 정의가 중요한 것이 아니죠. 값이라고 부르는 것의 특징 와 이것이 '소프트웨어 관점에서 어떻게 해석되는가'입니다. 이 특징을 파악한다면 이 특징들을 만족하는 객체를 만들어 그 객체를 '값 객체'라고 부를 수 있을 것입니다. 소프트웨어 설계자 입장에서 값은 불변성, 동등성, 자가 검증이라는 특징이 있습니다. 이제 해당 특징에 대해 설명할 것이고,.. 2024. 11. 5.
CS w/Backend 세미나 최근 알고리즘과 자바 언어를 위주로 공부하고 있지만, 깊게 들어갈수록 CS의 중요성을 깨닫고 있다. 그래서 kocw 강의 중 컴퓨터구조, 네트워크, 운영체제를 복기하며 정리하고 있다. 해당 글은 세미나를 참여하며 좋다고 느낀 지식을 기억하고자 개인적으로 정리한 것이다.1. 서버 아키텍처와 성능 개념 정리대규모 트래픽을 처리할 수 있는 서버 아키텍처를 설계하는 데에는 여러 개념과 성능 지표를 이해하는 것이 중요합니다.서버가 초당 처리할 수 있는 트랜잭션 수(TPS), 부하 처리 방식, 그리고 확장성을 고려해 서버의 성능을 최대화하는 방법에 대해 알아보겠습니다.2. 트래픽과 TPS (Transaction Per Second)- TPS (Transaction Per Second): 서버가 초당 처리할 수 있는.. 2024. 11. 5.
[1-5 상] 1. Object-Oriented 들어가기에 앞서특정 라이브러리, 최신 프로그래밍 언어, 인프라 기술은 '기술'이라고 분류합니다. 개발자로서 실질적인 성장을 하고 싶다면 '기술'을 공부하는 것도 아니고, '컴퓨터 공학'도 아닌 '개발'을 공부해야 합니다. 개발을 공부한다는 것은 아래와 같은 키워드를 의미합니다. OOP, 테스트, 아키텍처가 최소 조건이라 생각합니다. 우리는 기술에 집중할 게 아니라 설계나 개발 역량 같은 좀 더 추상적이고, 보편적으로 어디서든 사용할 수 있는 지식을 학습하는 데 집중해야 합니다. 프로그래밍 언어를 학습하는 것 역시 단순히 기술을 학습하는 것이며, 얼마든지 쉽게 증발할 수 있는 기술이라 말하는 것을 이해할 수 있을 것입니다. 최신 지식을 꾸준히 공부하는 것은 개발자에게 분명히 필요한 덕목입니다. 하지만 기술.. 2024. 11. 5.
넥슨 KOREA 최종 면접 후기 넥슨 KOREA 주니어 서버 프로그래머 프라시아 전기 직무에 지원하게 되었다.과정은 서류 -> 온라인 인성검사 -> 코딩 테스트 -> 기술 면접 -> 결과였다. 1. 서류 제출 합격 후 인성검사와 코딩테스트 관련 메일이 왔다. 서류 통과 후 코딩테스트 일정 관련 메일을 받게 되었다. 72시간 내 주어진 문제에 대해 해결하면 됐고, 총 6,7 문항 정도 나왔던 것으로 기억한다. 어떤 알고리즘에 대해 나왔는지 서술은 못하지만 체감상 백준 실버1에서 골드3 사이의 문제였다. 겹치는 알고리즘은 없었고, 많이 고민했던 부분은 히든 테스트케이스를 맞춰가는 과정이었다. 풀이한 코드를 실행하면 보이지 않는 테케에 성공과 실패 여부를 알 수 있어서 이를 풀어가는 점이 재밌었다. 보이는 것 외 테케가 있는지는 정확히 모르.. 2024. 11. 5.
Data_Structure_Algorithm Big-O, Big-Theta, Big-Omega는 알고리즘의 시간 복잡도를 분석할 때 사용하는 점근 표기법입니다. 이들은 입력 크기 ( n )이 커질 때 알고리즘의 성능이 어떻게 변화하는지를 나타내기 위해 사용됩니다.1. Big-OBig-O는 알고리즘의 최악의 경우 성능을 나타내는 표기법으로, 주어진 함수 f(n)이 특정 함수 g(n) 보다 느리지 않다는 점근적 상한(upper bound)을 나타냅니다. 즉, Big-O 표기법은 알고리즘이 최악의 경우에 얼마나 느려질 수 있는지를 설명합니다. 예시: f(n) = 3n + 2 라면 Big-O는 O(n)으로 나타낼 수 있습니다. 2. Big-Theta Big-Theta는 알고리즘의 평균적인 성능을 나타내며 상한과 하한이 일치하는 경우를 표현합니다. f(n).. 2024. 11. 5.
Pipeline 파이프라인(Pipelining) 설계 기법파이프라인 설계는 CPU의 성능을 향상시키기 위해 각 명령어의 실행을 여러 단계로 분할하여 동시에 여러 명령어를 처리하는 방법입니다. 이를 통해 CPU는 각 사이클에 한 명령어가 아닌 여러 명령어의 일부를 실행할 수 있습니다.1. Non-Pipeline Design파이프라인을 적용하지 않은 설계 방식에는 싱글 사이클 구현과 멀티 사이클 구현이 있습니다.싱글 사이클 구현 (Single Cycle Implementation)- 설명: 모든 명령어가 한 사이클에서 실행됩니다. 각 명령어가 완료될 때까지 하나의 클럭 사이클을 사용하기 때문에, 복잡한 명령어도 동일한 사이클 내에서 처리해야 합니다.- 특징: - 구현이 단순하여 이해하기 쉽지만, 복잡한 명령어가 있는 경우.. 2024. 11. 5.
Computer Arithmetic Computer Arithmetic컴퓨터 산술은 컴퓨터가 숫자와 논리 연산을 수행하는 방법을 다루며, 이를 이해하기 위해 여러 논리 게이트, 보수 시스템, 부동 소수점 표기법 등이 필요합니다.NAND 게이트NAND 게이트는 구성의 단순성, 부품의 폭넓은 가용성, 비용 효율성 등 여러 장점이 있어, 모든 기본 논리 기능을 수행할 수 있습니다. 이는 NAND 게이트만으로도 AND, OR, NOT, XOR 등 모든 논리 연산을 구현할 수 있다는 것을 의미합니다.2의 보수 (Two's Complement)2의 보수는 컴퓨터에서 음수 표현에 널리 사용되는 방식으로, 다음과 같은 장점을 가집니다.0의 표현이 하나뿐이다.  2의 보수 표현에서는 +0과 -0이 존재하지 않으며, 0은 하나의 상태로만 표현됩니다. 이는 .. 2024. 11. 5.
BOJ - 점프2253 [DP] Java 하반기 코딩테스트를 치루며, DP 관련해서 문제가 자주 출제되었다고 생각한다. 어떤 회사의 코딩테스트인지는 밝히지 못하겠지만, 해당 문제와 비슷하게 풀었던 문제가 기억나서 글을 작성하였다. 추가로 해당 문제를 풀이한 언어로 Java 코드는 없었고, 대부분 파이썬과 C++로만 정리되어 있어, 풀이에 어려움을 겪을 분들에게 정답을 공유하고자 작성했다. 정답 풀이는 아래 Github 링크에 있고, 개인적으로 고민하며 해결함을 바랬기에 제 코드 위주로 구조적인 힌트만 간략하게 작성하였다. https://github.com/himJJong/codingtest_study/blob/master/24_11_04/boj_%EC%A0%90%ED%94%84.java codingtest_study/24_11_04/boj_점프.. 2024. 11. 4.
Linking Object File과 Linker의 역할Object File (객체 파일)컴파일러가 소스 코드를 변환한 결과물로, 크게 세 가지 유형으로 나눌 수 있습니다.1. Relocatable Object File다른 파일에 정의된 함수나 전역 변수를 참조할 수 있는 객체 파일입니다. 파일 내부에 정의되지 않은 심볼은 ?와 같은 표시로 나타나며, 나중에 Linker가 연결을 통해 참조를 해결해줍니다. 2. Executable Object File실행 가능한 완전한 파일로, 모든 심볼이 연결되어 메모리에 로드 후 실행할 준비가 된 상태입니다. 3. Shared Object File여러 프로그램에서 공유 가능한 라이브러리 파일입니다. 프로그램 실행 시 동적으로 로딩되어 메모리 사용을 효율화할 수 있습니다. Linke.. 2024. 10. 25.
Instruction Set Architecture 컴파일러와 인터프리터 그리고 컴파일 과정컴파일러컴파일러는 고급 언어로 작성된 프로그램을 해당 머신이 알아들을 수 있도록 번역해주는 도구입니다. 컴파일 과정을 통해 실행 파일이 생성되며, 이 파일은 독립적으로 실행할 수 있습니다.컴파일 과정c, java, python(source program) → Compiler → 실행 머신의 언어(Target Program)컴파일러의 동작 과정은 다음과 같은 단계로 이루어집니다:Preprocessor : #include와 같은 전처리 지시자에 따라 소스 코드의 주소를 적절히 변경하여 실행할 코드를 가져오는 단계입니다.Compilation : 전처리된 코드를 어셈블리 언어로 변환합니다.Assembler : 어셈블리 언어 코드를 머신 코드로 바꿉니다.Linker : 변환.. 2024. 10. 25.
알고리즘 기록 Github Link https://github.com/himJJong/codingtest_study (2024_01 ~ 2024_10) GitHub - himJJong/codingtest_studyContribute to himJJong/codingtest_study development by creating an account on GitHub.github.com  https://github.com/himJJong/Eggorithm_Study/tree/himJJong/himJJong%20-%20Java (2022_07 ~ 2024_01) Eggorithm_Study/himJJong - Java at himJJong · himJJong/Eggorithm_Study알고리즘 스터디 🧑🏻‍💻. Contribute to hi.. 2024. 10. 1.
9. Object 클래스와 JVM 이해과정 Java의 Object 클래스는 Java에서 모든 클래스의 조상 클래스입니다. 즉, Java에서 작성된 모든 클래스는 기본적으로 Object 클래스를 상속받으며, Object 클래스에서 제공하는 메서드를 사용할 수 있습니다. 여기서는 Object 클래스에서 중요한 5가지 메서드인 toString(), equals(), hashCode(), finalize(), clone()에 대해 구체적으로 설명하겠습니다. 1. toString() 메서드역할:toString() 메서드는 객체를 사람이 이해할 수 있는 문자열로 변환해줍니다. 이 메서드는 객체가 어떤 값을 가지고 있는지 쉽게 확인할 수 있도록 돕습니다. 왜 사용해야 하는가?기본적으로 객체를 출력하거나 디버깅할 때, 객체의 상태를 쉽게 확인할 수 있는 방법이.. 2024. 9. 21.
codeTree - Grid Compression [Hard] https://www.codetree.ai/missions/8/problems/count-number-of-points-2?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 처음보는 개념의 문제라서, 작성해보고자 한다. 비슷한 유형의 코테 문제도 많이 봤던 것 같아 자세하게 이해하고 넘어가보자!!! Pair 클래스는 해당 x,y 지점을 담을 것이고, Tuple 클래스는 직사각형의 왼쪽 아래와 오른쪽 위 지점을 담을 것이다. 신기했던 것은 nums라고 만들어진 TreeSet에 해당 좌표 x,.. 2024. 8. 16.
codeTree - PriortyQueue [Hard] https://www.codetree.ai/missions/8/problems/sum-of-kth-smallest-pair?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai    배운점 : arr1, arr2 배열의 원소들을 정렬해서 미리 배열의 원소들의 합을 구할 때 최소를 구하고자 한다. 이해가 안되었던 로직은 아래와 같다. pq는 두 배열 원소의 합 쌍을 기준으로 오름차순 정렬한 PriorityQueue이다. 1. k번째의 최솟값을 구해야 하므로 for 문을 k-1까지 진행하며, pq.. 2024. 8. 16.
codeTree - TreeSet [easy] https://www.codetree.ai/missions/8/problems/small-but-big-number?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai 배운것: TreeSet의 floor, ceiling 메서드를 통해 정렬된 값들 중 원하는 범위를 찾아낼 수 있었다. 2024. 8. 16.
Udemy CKA(Lightning Lab) 1.  SolutionHere is the solution for this task. Please note that the output of these commands have not been added here.To seamlessly transition from Kubernetes v1.29 to v1.30 and gain access to the packages specific to the desired Kubernetes minor version, follow these essential steps during the upgrade process. This ensures that your environment is appropriately configured and aligned with the .. 2024. 8. 13.
Section 11 : Deploy with Kubeadm(+프로비저닝 중 문제점 해결과정) 전에 얘기한 바와 같이, 쿠버네티스 클러스터는 kubeAPI서버, etcd, controller 등 다양한 컴포넌트로 구성됩니다. 그리고 우리는 이러한 컴포넌트 간의 통신을 가능하게 하기 위한 보안과 인증서 관련한 몇 가지 요구사항도 보았습니다. 이러한 다양한 컴포넌트를 각각의 노드에서 개별적으로 모두 설치하고 configuration file들을 수정하여 컴포넌트가 서로를 가리키는지 확인하고 인증서가 잘 작동하는지 확인하는 것은 지루한 작업입니다. kubeadm 툴은 이러한 모든 작업을 처리함으로써 우리에게 도움을 줍니다.Stepskubeadm 툴을 사용해서 쿠버네티스 클러스터를 설정하는 단계를 대략적으로 살펴보겠습니다. 첫째, 클러스터를 구성하기 위한 여러 시스템 또는 프로비저닝된 가상머신이 있어야 .. 2024. 8. 11.
Section 10 : Design and Install a k8s cluster Cofigure high availability클러스터의 마스터 노드가 없어진다면 어떻게 될까요? workers가 작동하고 있다면, 컨테이너가 살아있는 동안 어플리케이션은 작동합니다. 사용자는 실패할 때까지 앱에 접속할 수 있어요. 만약 컨테이너나 pod가 문제가 생겼다면? pod는 ReplicaSet에서 생성되었고, master의 replication Controller가 작업자에게 새 Pod의 Load를 지시합니다. 하지만 마스터는 사용할 수 없죠. pod의 재생성이 불가하고, node schedule도 설정할 수 없습니다. kube-apiserver도 사용이 불가하여, 관리 목적으로 kube control tool이나 API를 통해 외부적으로 클러스터에 액세스할 수 없습니다. 그래서 프로덕션 환경에.. 2024. 8. 10.
KodeKloud - Test Record (section 9) 1. What is the MAC address assigned to node01?> ssh node01> ip address 2. We use Containerd as our container runtime. What is the interface/bridge created by Containerd on the controlplane node?> ip address show type bridge 3. If you were to ping google from the controlplane node, which route does it take? What is the IP address of the Default Gateway?> ip route 4. What is the port the kube-sche.. 2024. 8. 2.
Section 9 : Networking 1. Prerequisite - Switching RoutingNetwork란 무엇일까요? 컴퓨터 A,B가 있고 노트북과 데스크톱, 클라우드 VM이 있는데 시스템 A가 어떻게 B와 연결되나요? 스위치에 연결하면 스위치는 두 시스템을 포함하는 네트워크를 만들어줍니다. 스위치에 연결하기 위해 각 호스트에 인터페이스가 필요합니다. 물리적이거나 가상으로요.  위 명령을 통해 호스트의 인터페이스를 확인할 수 있고, 예로 Eth0이란 이름의 인터페이스를 볼 수 있습니다. 스위치에 연결할 때 사용할 것이에요. ip addr 명령으로 링크가 올라가고, IP 주소가 할당되면 이제 컴퓨터는 스위치를 통해 서로 통신할 수 있습니다. 스위치를 통해 동일한 네트워크 상에서만 통신할 수 있고, 다른 네트워크로 패킷을 주고 받을 .. 2024. 7. 28.
KodeKloud - Test Record (section 8) 1. The application stores logs at location /log/app.log. View the logs. You can exec in to the container and open the file:> k exec webapp -- cat /log/app.log  2. Configure a volume to store these logs at /var/log/webapp on the host. Use the spec provided below.Name: webappImage Name: kodekloud/event-simulatorVolume HostPath: /var/log/webappVolume Mount: /log > k edit pod webapp> k replcae --for.. 2024. 7. 20.
Section 8 : Storage Introduction to Docker Stroage : 쿠버네티스 같은 컨테이너 오케스트레이션 도구 저장소를 이해하려면 먼저 저장소가 컨테이너로 어떻게 작동되는지 이해하는게 좋습니다. 먼저 Docker로 저장소가 어떻게 작동하는지 확인해봅시다. Docker의 저장소에 관해서는 2가지 메인 개념이 있습니다.1. Stroage Drivers2. Volume Dirvers Storage in Docker  시스템에 Docker를 설치하면 이 폴더 구조가 /var/lib/docker에 생성됩니다. AUFS 컨테이너라고 불리는 것 아래에 이미지 볼륨 등 여러개의 폴더가 있습니다. 이곳이 docker가 기본값으로 모든 데이터를 저장하는 곳이죠. 여기서 데이터란 Docker 호스트에서 실행되는 이미지 및 컨테이너.. 2024. 7. 20.
KodeKloud - Test Record (section 7) 1. 아래 명령어를 통해 구성 요소의 정보를 알아낼 수 있음.> cat /etc/kubernetes/manifests/kube-apiserver.yaml 2. What is the Common Name (CN) configured on the ETCD Server certificate?> openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -text 3.How long, from the issued date, is the Kube-API Server Certificate valid for?File: /etc/kubernetes/pki/apiserver.crt> openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text .. 2024. 7. 12.
Section 7 : Security 클러스터 자체를 형성하는 호스트부터 시작해보자. 이런 호스트에 대한 모든 접근은 보안되어야 하고, 비밀번호 기반의 인증은 사용하지 않게 하며, SSH 키 기반의 인증만 가능하다. kubectl 명령어나 APU에 직접 접근할 때 모든 사용자의 접근은 kube-apiserver 상호작용하며 관리됩니다. 이 모든 요청은 kube-apiserver로 가게 되는데, kube-apiserver는 요청을 처리하기 전에 Authenticate(인증) 합니다. 이것을 통해 kube-apiserver 자체의 접근을 제어하는 것이고, 이때 사용되는 다양한 메커니즘이 있습니다. 1) 누가 클러스터에 접근할 수 있는가? (인증 메커니즘)2) 그것이 무엇을 할 수 있는가? (인가 메커니즘) 클러스터 구성 요소간의 모든 통신은 k.. 2024. 7. 12.
KodeKloud - Test Record (section 6) 1. We need to take node01 out for maintenance. Empty the node of all applications and mark it unschedulable.-> kubectl drain node01 --ignore-daemonsets  2. How many pods are scheduled on node01 now in the default namespace?-> kubectl get pods -o wide 3. How many nodes can host workloads in this cluster? Inspect the applications and taints set on the nodes.-> k describe node | grep Taints 4. vers.. 2024. 7. 2.