전공 수업 CS

    [알고리즘] 순환(Recursion)의 개념과 기본 예제 1, 2, 3

    [알고리즘] 순환(Recursion)의 개념과 기본 예제 1, 2, 3

    Recursion : 자기 자신을 호출하는 함수(재귀함수) java식) 자기 자신을 호출하는 method > void func(...) { ... func(...); ... } what will happen? public class Code01 { public static void main(String [] args) { func(); } public static void func() { System.out.println("Hello"); func(); #자기자신을 다시 호출 } } 무한루프에 빠짐 그럼 Recursion은 항상 무한루프에 빠질까? public class Code02 { public static void main(String [] args){ int n =4; func(n); } publ..

    [알고리즘] 개념을 재정리 하기 위한 알고리즘 커리큘럼 로드맵

    지난학기 알고리즘을 수강했었는데 어려움을 많이 느낀 과목이었다. 이번 방학에는 알고리즘 커리큘럼을 새우고, 탄탄한 알고리즘 실력을 기르려고 한다. 내가 지향하는 바는 SOLID BASIC 이니까! 백준 문제 커리큘럼 입출력 방식에서 시작해서, 기초 자료구조, 기초 수학, DP, 정렬, 그래프, 이분탐색, 분할정복, 그리디, 완전탐색으로 끝이 남 입출력 - 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992 DP - 1463, 1..

    [소프트웨어 공학] 데브옵스(DevOps) | 데브옵스 엔지니어가 하는 일은?

    [소프트웨어 공학] 데브옵스(DevOps) | 데브옵스 엔지니어가 하는 일은?

    데브옵스(DevOps) Development + Operations의 합성어 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 의미한다. 데브옵스 DevOps 엔지니어는 무슨 일을 할까? 소프트웨어를 만드는 조직에는 크게 프로그램을 구현하는 ’개발부서‘와 출시 후에 유지보수를 담당하는 ‘운영부서‘가 있다. 개발부서는 오류가 발생했을 때 버그를 수정하거나, 사용자들의 요구를 반영하여 빠르게 새로운 기능을 제공하고자 할 것이다. 하지만 운영부서는 이와 다르게 서비스의 안정성과 빠른 성능을 유지하는 데 집중한다. 따라서 개발부서는 잦은 업데이트를 통해 서비스를 개선하려고 한다면, 운영부서는 최대한 변화를 최소화하여 현재 잘 작동하고 있는 서비스의 안정성을 확보하는 ..

    [소프트웨어 공학] 클린코드 & 시큐어 코딩

    전문가들이 표현한 '클린코드' `한 가지를 제대로 한다.` `단순하고 직접적이다.` `특정 목적을 달성하는 방법은 하나만 제공한다.` `중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기 이 세가지가 비결` `코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행하는 것` #클린코드란? 코드를 작성하는 의도와 목적이 명확하며, 다른 사람이 쉽게 읽을 수 있어야 함 즉, 가독성이 좋아야 한다. #가독성을 높인다는 것은? 다른 사람이 코드를 봐도, 자유롭게 수정이 가능하고 버그를 찾고 변경된 내용이 어떻게 상호작용하는지 이해하는 시간을 최소화 시키는 것... 클린코드를 만들기 위한 규칙이 있다. #1.네이밍(Naming) 변수, 클래스, 메소드에 의도가 분명한 이름을 사용한다. int elapse..

    [소프트웨어 공학] 클린코드와 리팩토링

    클린코드와 리팩토링은 의미만 보면 비슷하다고 느껴진다. 어떤 차이점이 있을지 생각해보자 #클린코드 클린코드란, 가독성이 높은 코드를 말한다. 가독성을 높이려면 다음과 같이 구현해야 한다. 네이밍이 잘 되어야 함 오류가 없어야 함 중복이 없어야 함 의존성을 최대한 줄여야 함 클래스 혹은 메소드가 한가지 일만 처리해야 함 얼마나 코드가 잘 읽히는 지, 코드가 지저분하지 않고 정리된 코드인지를 나타내는 것이 바로 '클린 코드' public int AAA(int a, int b){ return a+b; } public int BBB(int a, int b){ return a-b; } 두 가지 문제점이 있다. public int sum(int a, int b){ return a+b; } public int sub..

    [소프트웨어 공학] 애자일(Agile)

    [소프트웨어 공학] 애자일(Agile)

    #등장배경 초기 소프트웨어 개발 방법은 계획 중심의 프로세스였다. 마치 도시 계획으로 건축에서 사용하는 방법과 유사하며, 당시에는 이런 프로세스를 활용하는 프로젝트가 대부분이었다. #하지만 지금은? 90년대 이후, 소프트웨어 분야가 넓어지면서 소프트웨어 사용자들이 '일반 대중들'로 바뀌지 시작했다. 이제 모든 사람들이 소프트웨어 사용자들의 대상으로 되면서 트렌드가 급격하게 빨리 변화하는 시대가 도달했다. 이로써 비즈니스 사이클(제품 수명)이 짧아졌고, SW 개발의 불확실성이 높아지게 되었다. #새로운 개발 방법 등장 개발의 불확실성이 높아지면서, 옛날의 전통적 개발 방법 적용이 어려워졌고 사람들은 새로운 자신만의 SW 개발 방법을 구축해 사용하게 된다. 창의성이나 혁신은 계획에서 나오는 것이 아니라고 생..

    [컴퓨터 네트워크] Blocking I/O & Non-Blocking I/O

    I/O 작업은 Kernel level에서만 수행할 수 있다. 따라서, Process, Thread는 커널에게 I/O를 요청해야 한다. #Blocking I/O(1) Process(Thread)가 Kernel에게 I/O를 요청하는 함수를 호출 특징 I/O 작업이 진행되는 동안 user Process(Thread) 는 자신의 작업을 중단한 채 대기 Resource 낭비가 심함 (I/O 작업이 CPU 자원을 거의 쓰지 않으므로) 여러 Client 가 접속하는 서버를 Blocking 방식으로 구현하는 경우 -> I/O 작업을 진행하는 작업을 중지 -> 다른 Client가 진행중인 작업을 중지하면 안되므로, client 별로 별도의 Thread를 생성해야 함 -> 접속자 수가 매우 많아짐 이로 인해, 많아진 Th..

    [컴퓨터 네트워크] 로드 밸런싱 (Load Balancing)

    [컴퓨터 네트워크] 로드 밸런싱 (Load Balancing)

    둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것 요즘 시대에는 웹사이트에 접속하는 인원이 급격히 늘어나게 되었다. 따라서 이 사람들에 대해 모든 트래픽을 감당하기엔 1대의 서버로는 부족하다. 대응 방안으로 하드웨어의 성능을 올리거나(Scale-up) 여러대의 서버가 나눠서 일하도록 만드는 것(Scale-out)이 있다. 하드웨어 향상 비용이 더욱 비싸기도 하고, 서버가 여러대면 무중단 서비스를 제공하는 환경 구성이 용이하므로 Scale-out이 효과적이다. 이때 여러 서버에게 균등하게 트래픽을 분산시켜주는 것이 바로 로드 밸런싱이다. 로드 밸런싱은 분산식 웹 서비스로, 여러 서버에 부하(Load)를 나누어주는 역할을 한다. Load Balancer를 클라이언트와 서버 사이에 두..

    [컴퓨터 네트워크] 대칭키 (Symmetric Key) & 공개키(Public Key)/비대칭키(Asymmetric Key)

    대칭키(Symmetric Key) 암호화와 복호화에 같은 암호키(대칭키)를 사용하는 알고리즘 동일한 키를 주고받기 때문에, 매우 빠르다는 장점이 있음 but, 대칭키 전달과정에서 해킹 위험에 노출 #공개키(Public Key)/비대칭키(Asymmetric Key) 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘 대칭키의 키 분배 문제를 해결하기 위해 고안됨.(대칭키일 때는 송수신자 간만 키를 알아야하기 때문에 분배가 복잡하고 어렵지만 공개키와 비밀키로 분리할 경우, 남들이 알아도 되는 공개키만 공개하면 되므로) 자신이 가지고 있는 고유한 암호키(비밀키)로만 복호화할 수 있는 암호키(공개키)를 대중에 공개함 #공개키 암호화 방식 진행 과정 A가 웹 상에 공개된 'B의 공개키'를 이용해 평문을 암호화하여..

    [컴퓨터 네트워크] 라우팅 알고리즘 | RIP와 OSPF | 임시노드, 영구노드 작성

    [컴퓨터 네트워크] 라우팅 알고리즘 | RIP와 OSPF | 임시노드, 영구노드 작성

    시험 날짜는 다가오는데... 진도는 계속 나간다ㅎ... 갈수록 어려워짐 오늘은 라우팅 알고리즘에 대해서 배웠고 이를 정리해두려한다. * 제 3계층(네트워크 계층) 1. Routing Control :: 경로만 설정함. (경로 관리) 2. Switching :: 주어진 경로에 따라 정보에 처리. 정보만 처리함. (전송관리) → 속도, 메시지 크기, Protocol을 맞춰줌. 3. Traffic :: 주어진 전송의 혼잡(과부화) 3-1. 전송 단위 3-2. 속도 3-3. Protocol :: 여기서 스위칭과 트래픽은 서로 연관이 있지만 라우팅 제어는 이들과 조금 거리가 있다고 할 수 있다. *Routing # Metric :: Routing 의 파라미터 1. hop 수 2. cost 3. delay 4. t..