본문 바로가기
728x90
728x90

Study56

[CS] OS - 운영체제와 컴퓨터 운영체제 운영체제란 컴퓨터 시스템을 효율적으로 관리하고, 사용자가 컴퓨터를 쉽게 다룰수 있게 해주는 인터페이스이다. 운영체제의 역할 CPU 스케줄링과 프로세스 관리 CPU소유권 할당과, 프록세스의 생성과 삭제, 자원 할당 및 반환을 관리한다. 메모리 관리 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리한다. 디스크 파일관리 디스크 파일을 어떠한 방법으로 보관할지 관리한다. I/O 디바이스 관리 I/O 디바이스(마우스, 키보드)와 컴퓨터 간에 데이터를 주고받는 것을 관리한다. 운영체제의 구조 운영체제의 구조는 아래와 같다. 운영체제를 크게 인터페이스(GUI)와 커널 2개의 부분으로 나눌 수 있다. 인터페이스 커널에 사용자 명령어를 전달하고, 사용자에게 실행결과를 알려주는 역할을 한다. ex) .. 2023. 1. 30.
[CS] 네트워크 - HTTP HTTP HTTP는 애플리케이션 계층에서 웹서비스 통신에 사용된다. 1.0 부터 시작하여 발전을 거듭해 현재는 HTTP/3에 이르렀다. HTTP/1.0 1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었다. 즉, 서버로 부터 하나의 파일을 가져올 때 마다, TCP의 3-way-handshake를 계속 열어아한다는 뜻이다. 이로인해, RTT가 증가하는 문제가 발생했다. RTT Round Trip Time의 약자로, 패킷이 목적지에 도달하고 나서, 다시 출발지로 돌아오기 까지 걸리는 왕복 시간. RTT 해결책 이미지 스플리팅 작은 아이콘들을 각각의 이미지 파일로 만들게 되면, 과부하가 걸리기 때문에 사용하는 방식이다. 위의 이미지 처럼 아이콘들을 하나하나 분리한 파일로 사용하는 것이 아니라, 하.. 2023. 1. 24.
[CS] 네트워크 - IP 주소 IP 주소 IP주소란 말그대로 IP가 목적지를 판단하기 위해 사용하는 '컴퓨터의 주소'를 의미한다. 당연한 소리겠지만, 중복되는 IP주소를 갖고 있는 컴퓨터가 존재한다면, 목적지를 판단하기 위한 IP주소의 역할을 제대로 수행할 수가 없을 것이다. 그렇기 때문에 번호의 중복을 피하기 위해 ICANN이라는 기관이 중심이 되어 전세계의 IP주소를 관리하고 있다. TCP/IP 계층에 대한 내용을 작성하면서 IP는 인터넷(네트워크) 계층에서 하나뿐인 중심적인 프로토콜이라 했는데, IP가 사용하는 IP주소에 대해 조금더 자세히 알아보자. ARP ARP는 인터넷계층에서 사용되는 프로토콜 중 하나로, IP의 보조적인 역할로 사용된다. 컴퓨터와 컴퓨터 간의 통신은 IP로 이뤄진다고 생각하지만, 사실은 IP주소에서 ARP.. 2023. 1. 20.
[Spring] 스프링 컨테이너 김영한님의 스프링 핵심 원리 - 기본편을 바탕으로 작성하였습니다. [Spring] DI와 IoC 그리고 컨테이너와 이어지는 포스팅입니다. Spring 컨테이너로 변경 이전 포스팅에서 순수 Java로 DI 컨테이너를 Spring 컨테이너로 변경하는 작업을 해볼거다. 그리고 스프링컨테이너에 등록된 객체들을 조회하는 방법도 알아보려 한다. 전체코드는 깃헙에 올라가있음 AppConfig 우선 AppConfig 를 수정해보자. @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberReposi.. 2023. 1. 19.
[CS] 네트워크 - 네트워크 기기 네트워크 기기의 처리범위 네트워크는 여러개의 네트워기 기기를 기반으로 구축된다. 네트워크 기기는 계층별로 처리범위를 나눌 수 있다. 상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만, 하위계층을 처리하는 기기는 상위 계층을 처리할 수 없다. 에를 들자면, 애플리케이션 계층을 처리하는 기기는 그 밑의 모든 계층의 프로토콜을 처리할 수 있지만, 물리계층을 처리하는 기기는 다른 계층의 프로토콜을 처리할 수 없다. 스위치 스위치(Switch)란 패킷을 수신부로 보내는 역할(Switching)을 하는 기기이다. 이 때, 패킷의 어떠한 정보를 바탕으로 수신부를 판단하는지에 따라 계층이 나뉘어진다. 스위치의 종류는 L1, L2, L3, L4, L7 이 있다. OSI 7계층 모델에서 어떠한 계층에 사용되는지에.. 2023. 1. 18.
[CS] 네트워크 - TCP/IP TCP/IP 인터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다. 즉, TCP/IP란 전 세계적으로 가장 많이 사용되는 공통된 통신 프로토콜 이다. 프로토콜 데이터를 주고 받기 위해 송신측과 수신측의 컴퓨터가 미리 정해놓은 공통된 메뉴얼 TCP/IP 4계층 TCP/IP에서는 송수신과 관련된 일련의 작업을 몇개의 단계로 나눠서 수행한다. 각 단계를 계층(layer)이라고 한다. 각각의 계층들은 프로토콜의 네트워킹 범위에 따라 네개의 추상화 계층으로 구성된다. OSI 가장 널리 사용되는 네트워크 모델 .. 2023. 1. 18.
[CS] 네트워크 - 네트워크의 기초 네트워크란 네트워크란 노드와 링크가 서로 연결되어, 리소스를 공유하는 집합을 의마한다. 노드란 서버, 라우터, 스위치 등 네트워크 장치를 의미한다. 링크 유선 또는 무선을 의미한다. 좋은 네트워크란? 네트워크를 구축 할때는 좋은 네트워크로 만드는 것이 중요한데, 여기서 말하는 좋은 네트워크란, 많은 처리량을 처리할 수 있고, 지연시간이 짧고, 장애빈도가 적으며, 좋은 보안을 갖춘 네트워크를 의미한다. 처리량(throughpur) 링크를 통해 전달되는 단위 시간당 데이터양 단위로는 bps(bits per second)를 사용한다. 트래픽, 대역폭, 에러, 하드웨어 스펙에 영향을 받는다. 지연시간(latency) 요청이 처리되는 시간을 의미한다. 어떤 메세지가 두장치 사이를 왕복하는데 걸린시간을 의미한다. .. 2023. 1. 16.
[Spring] DI와 IoC 그리고 컨테이너 김영한님의 스프링 핵심 원리 - 기본편을 바탕으로 작성하였습니다. DI DI는 의존성 주입(Dependency Injection)이란 뜻으로, 의존 관계를 외부에서 결정 하여 주입한다는 의미 이다. 의존관계란? A클래스와 B클래스가 있을 때, B클래스의 변경이 A클래스에 영향을 미칠 때 A는 B와 의존 관계라고 한다. DI를 통해 모듈간의 결합도가 낮아지고 유연성이 높아진다. IoC IoC는 제어의 역전(Inversion of Control) 이라는 의미이다. 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다. 대부분의 프레임워크에서 사용하는 방식이다. 덕분에 개발자는 프레임워크에 필요한 부품을 개발하고, 조립하는 방식의 개발을 하게 된다. 이렇게 조립된 코드의.. 2023. 1. 16.
[Spring] 스프링의 역사 EJB의 몰락 옛날 옛적에는(2000년 초반) EJB라는 기술이 있었고, 이게 Java 진영의 표준이었다. 당연하게도 금융권을 포함한 모든 곳에서 널리 사용 되었고, EJB이외의 오픈 소스들은 사파로 취급당했다. 그런데 EJB는 이론적으로는 굉장히 뛰어난 기술이었지만, 실제 사용하는 개발자들에게는 한숨메이커 였다고 한다. 일단 비쌌고, EJB에 굉장히 종속적으로 프로그래밍 할 수밖에 없어 객체지향적인 설계가 불가능했고, 테스트를 하기에도 힘들거나 아예 불가능 했다고 한다. 게다가 느리기까지. 총체적 난국이었다. 이외에도 여러 단점들이 있었다고 하는데, 그래도 어쩌나 이거 안쓰면 사파 취급당하니.. 눈물을 머금고 어거지로 썼다고 한다. 그러다가 참다 참다 폭발한 두명의 개발자가 판을 흔들기 시작한다. Hi.. 2023. 1. 11.
[CS] 프로그래밍 패러다임 - 함수형, 절차지향형 프로그래밍 패러다임 프로그래밍 패러다임이란? 프로그래머에게 프로그램의 관점을 갖게 해주는 개발 방법론 프로그래밍 패러다임은 크게 선언형, 명령형으로 나눠지며, 선언형은 함수형이라는 하위 집합을 갖는다. 명령형은 다시 객체지향, 절차지향으로 나눠진다. 함수형 프로그래밍 함수형 프로그래밍은 선언형 패러다임의 일종이다. 순수함수들을 블록처럼 쌓아 로직을 구현하고, 고차함수를 통해 재사용성을 높인 프로그래밍 패더라임 이다. 테스트가 용이하며, 예측이 쉽다는 특징이 있다. 절차지향형 프로그래밍 절차지향형 프로그래밍은 로직이 수행되어야 할 연속적인 계산 과정으로 이루어져 있다. 일이 진행되는 방식으로 그저 코드를 구현하기만 하면 되기 때문에 코드의 가독성이 좋고, 실행속도가 빠르다는 장점이 있다. 반면, 단점으로는.. 2023. 1. 10.
[CS] 프로그래밍 패러다임 - 객체지향 프로그래밍 객체지향 프로그래밍 객체지향 프로그래밍이란? OOP(Object-Oriented Programming)라고도 불리는 객체지향 프로그래밍은 프로그램의 상호작용을 객체들의 집합으로 표현하며, 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식의 프로그래밍 패러다임이다. 설계에 많은 시간이 소요되고, 처리속도가 느리지만 유지보수성이 뛰어나고, 확장에 유연하다는 장점이 있다. 객체지향 프로그래밍의 특징 추상화 추상화란 객체의 핵심적인 개념 또는 기능을 추출하여 간추려 정의하는 것. 객체들은 공통된 클래스를 토대로 생성되는데, 이때 객체들이 어떤 공통된 특징을 가지고 있어야 한다고 정의하는 것이다. 캡슐화 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것을 말한다. 캡슐화가 중.. 2023. 1. 10.
[CS] 디자인 패턴 - MVC, MVP, MVVM MVC MVC 패턴 Model, View, Controller 세개의 컴포넌트로 이뤄진 디자인 패턴. 애플리케이션의 구성요소를 세가지 역할로 구분하여 개발 프로세스에서 가ㅣ깍의 구성요소에만 집중해서 개발 할 수 있다. 재사용성과 확장성이 용이하지만, 반대로 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점이 있다. Model DATA, 정보들의 가공을 책임지는 컴포넌트 비즈니스 로직을 처리한 후 모데르이 변경사항을 컨트롤러와 뷰에 전달한다. 모델은 다음과 같은 규칙을 가지고 있다. 사용자가 편집하길 원하는 모든 데이터를 가지고 있다. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말하야 한다. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 한다. View 사용자에게 보여지는 부분을 담당하.. 2023. 1. 9.
[CS] 디자인패턴 - 이터레이터, 노출모듈 이터레이터(Iterator) 패턴 이터레이터 패턴이란 이터레이터를 사용하여, 컬렉션의 요소들에 접근하는 디자인패턴 예제 코드 Book이라는 객체를 모아둔 컬렉션(집합체)를 순회하는 Iterator를 구현 해보려고 한다. public class Book { private String name; public Book(String name) { this.name = name; } public String getName() { return name; } } public interface Aggregate { public abstract Iterator createIterator(); } public class BookShelf implements Aggregate { private Book[] books; pr.. 2023. 1. 9.
[CS] 디자인패턴 - 프록시 패턴(프록시 서버) 프록시 패턴 프록시 패턴이란? 대상 객체(subject)에 접근하기 전, 그 접근에 대한 흐름을 가로채 대상객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 프록시 서버 프록시 서버란 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램. Nginx 프록시 서버 Nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리가능한 웹서버이다. 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.(리버스 프록시) 이를 통해 익명 사용자의 직접적인 서버로의 접근을 차단하고, 간접적으로 한단계를 더 거침으로써 보안성을 더 강화할 수 있다. CloudFlare 프록시 서버 CloudFlare는 전 세계적으로 분.. 2023. 1. 9.
[CS] 디자인패턴 - 옵저버 패턴 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것. 옵저버 패턴 옵저버 패턴이란? 주체가 어떤 객체의 상태 변화를 관찰하다가, 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 잇는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 위에서 말하는 주체란 객체의 상태 변화를 관찰자이며, 옵저버들이란 이객체의 상태변화에 따라 전달되는 메서드 등을 기반으로 추가 변경사항이 생기는 객체들을 의미한다. 또한 주체와 객체를 따로 두지 않고, 상태가 변경되는 객체를 기반으로 구축하기도 한다. 옵저버 패턴은 MVC 패턴에도 사용 되기도 한다. 주체라고 할 수 있는 model에서 변경사항 생겨 이를 메서드를 통해 view에게 알려주고, 이를 기반으로 co.. 2023. 1. 5.
[CS] 디자인패턴 - 전략 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것. 전략 패턴 전략 패턴이란? 정책 패턴이라고도 하며 객체의 행위를 바꾸고 싶은 경우 직접 수정하는 것 이아닌, 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주며 상호교체가 가능하게 만드는 패턴 가장 큰 예로 Passport.js 라이브러리가 있다. 예제 코드 패스포트를 구현 할 수는 없으니까 간략한 예시를 구현 해보자. 장바구니에 물건을 담고, 결제를 할 때 결제수단을 Strategy로 만드는 코드이다. Strategy package org.example.strategy; public interface PaymentStrategy { public void pay(int amount.. 2023. 1. 5.
[CS] 디자인패턴 - 팩토리(if 없애기) 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것. 팩토리패턴 팩토리 패턴이란? 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이다. 상위 클래스가 중요한 뼈대를 겨정하고, 하위 클래스가 객체생성에 관한 구체적인 내용을 결정하는 패턴. Java 예시코드 라떼와, 아메리카노를 만들어내는 팩토리패턴을 구현해보려 한다. 우선 추상 클래스인 Coffee를 만들어 보자. public abstract class Coffee { public abstract int getPrice(); abstract String getName(); @Override public String toString() { return String.format("%.. 2023. 1. 5.
[CS] 디자인 패턴 - 싱글톤 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 해결 할 수 있도록 하나의 규약형태로 만들어 놓은 것 싱글톤 패턴(Singletone pattern) 싱글톤 패턴이란? 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 보통 데이터베이스 연결 모듈에 많이 사용한다. Javascript 예시 코드 class SingletoneJS { constructor() { if(!SingletoneJS.instance) { SingletoneJS.instance = this } return SingletoneJS.instance; } } node 공부할 때 많이 사용 했던 코드라 익숙하다. 생성자가 호출되고, SingletonJS.instance 가 undefined인 경우 SingletoneJS.inst.. 2023. 1. 4.
[Spring] mySql + JPA CRUD 인텔리J 유료버전 기준으로 작성된 글 입니다 Java Version 11 [Spring] 스프링 부트 시작하기. Hello, World! [Spring] form 태그와 JSON 형식을 이용한 요청 [Spring] Spring mySql 연결 + JPA 과 이어지는 내용입니다. 설정 저번 포스팅에서 DB와 연결만 해놓고 서비스 로직을 작성할 어떠한 설정도 하지 않았다. 이제 해야됨. Repository repository 부터 생성을 해보자. package com.example.helloworld.repository; import java.util.List; import com.example.helloworld.domain.User; public interface UserRepository { User .. 2023. 1. 4.
[Spring] Spring mySql 연결 + JPA 인텔리J 유료버전 기준으로 작성된 글 입니다 Java Version 11 [Spring] 스프링 부트 시작하기. Hello, World! [Spring] form 태그와 JSON 형식을 이용한 요청 과 이어지는 내용입니다. 라이브러리 의존성 추가 우선 build.gradle을 열어서 dependencies에다가 mySql과 JPA라이브러리 의존성을 추가해주자. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'mysql:mysql-connector-java' 이 위에 두개를 붙여 넣으면 된다. runtimeOnly는 컴파일 시점에는 필요없지만 실행 시점에는 꼭 필요한 라이브러리의 의존성을 추가할 때 사용한.. 2023. 1. 4.
728x90
728x90