설명 순서는 다음과 같습니다.

1. Abstract class와 Interface의 공통점
2. 용도에 따른 차이점
3. 기능에 따른 차이점
4. 정리

1. Abstract class와 Interfae의 공통점

   - 추상 메서드를 가질 수 있다

   - 인스턴스화를 할 수 없다(new를 이용한 생성 불가)

   - 추상 클래스 또는 인터페이스를 상속한 클래스는 추상 메서드를 반드시 구현해야 한다


2. 용도에 따른 차이점

   - Abstract class는 자신의 기능을 하위 클래스에 확장시킬 때 사용

   - Interface는 구현된 객체가 같은 동작을 한다는 것을 보장하기 위해 사용


3. 기능에 따른 차이점

   - 변수 : Interface는 public static final로 정의된 상수만 가능, Abstract class는 모두 가능

   - 메서드 : Interface는 추상 메서드만 가능(현재는 아님), Abstract class는 모두 가능


4. 정리

   - 따라서, Abstract class는 일반 클래스처럼 일반 멤버 변수와 메서드를 가질 수 있으므로 중복된 멤버들을 통합시킬 때 사용될 수 있고 자신의 기능을 하위 클래스에 확장시킬 때 사용함. 반면 Interface는 구현된 객체가 같은 동작을 한다는 것을 보장하기 위해 사용됨.


Abstract class와 Interface의 차이에 대해 알아볼 수 있었습니다.

'Java' 카테고리의 다른 글

JAR, WAR, EAR  (1) 2023.09.18
Garbage Collector  (0) 2023.09.15
JVM  (0) 2023.09.14
[Java의 정석] Static이란?  (0) 2023.04.07
[Java의 정석] JVM이란?  (0) 2023.04.01

설명 순서는 다음과 같습니다.

1. OSI 7계층이란?
2. OSI 7계층을 나눈 이유
3. OSI 7계층 구조

1. OSI 7계층이란?

   - OSI 7계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말함


2. OSI 7계층을 나눈 이유

   - 통신이 일어나는 과정을 단계별로 나눠서 모듈화 함으로써, 이해하기 쉽고 7계층 중에 특정한 곳에 문제가 발생했을 때 다른 계층의 장비를 건드리지 않고 해결할 수 있기 때문


3. OSI 7계층 구조

 

   - 1계층(물리계층) : 비트로 이루어진 데이터를 전달하는 계층. 단지 데이터를 전달만 할 뿐임

   - 2계층(데이터링크 계층) : 물리계층으로 송수신되는 정보를 관리해서 안전하게 전달되도록 도와주는 계층. 에러검출, 재전송, 흐름제어를 진행함

   - 3계층(네트워크 계층) : 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 하는 계층. 라우터를 통해 이동할 경로를 선택하고 해당 경로에 따라 패킷을 전달함

   - 4계층(트랜스포트 계층) : 데이터를 어떻게 전달할지 정하는 계층. 대표적으로 TCP, UDP가 있는데 TCP는 데이터의 신뢰성을 보장하는 프로토콜이고 UDP는 신뢰성을 보장하지 않음

   - 5계층(셰션 계층) : 데이터가 통신하기 위한 논리적인 연결을 담당하는 계층. TCP/IP 세션을 만들고 없애는 책임을 함

   - 6계층(프레젠테이션 계층) : 데이터의 포맷을 관리하는 계층. 인코딩 or 디코딩, 암호화 or 복호화 등을 담당하는 계층

   - 7계층(애플리케이션 계층) : 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행하는 단계


OSI 7계층에 대해 알아볼 수 있었습니다.

'네트워크' 카테고리의 다른 글

브라우저에 URL을 입력하면 일어나는 일  (0) 2023.09.12
TCP, UDP  (0) 2023.08.08
쿠키, 세션  (0) 2023.08.03
3 way handshake, 4 way handshake  (0) 2023.08.02
HTTP와 HTTPS의 차이, 대칭키와 비대칭키  (0) 2023.07.28

설명 순서는 다음과 같습니다.

1. 입력한 URL의 IP 주소 찾기
2. 브라우저와 서버와 TCP 연결
3. 브라우저가 서버에 요청을 보냄
4. 서버는 요청을 받고 처리한 후 클라이언트에 응답을 보냄
5. 브라우저는 받은 응답을 렌더링해서 표시함

1. 입력한 URL의 IP 주소 찾기

   - 브라우저에 입력한 URL은 실제 주소의 별명임. 그러므로, 실제 주소인 IP를 알아야함

   - DNS는 별명과 IP주소를 <키, 값> 형태의 맵으로 갖고 있음. 따라서, DNS에 URL의 실제 IP 주소를 요청해서 알 수 있음

   - 바로 DNS에 IP주소를 묻기 전에 브라우저는 먼저 네 개의 캐시를 확인함

      ① 브라우저 캐시를 확인한다. 이전에 방문했던 웹 사이트의 DNS 기록을 일정기간 동안 저장하고 있음

      ② OS 캐시를 확인한다. OS의 시스템 호출로 DNS 기록을 가져옴

      ③ 라우터 캐시를 확인함

      ④ ISP 캐시를 확인함. ISP란 Internet Service Provider인데 이는 DNS 서버를 갖고 있어서 해당 서버에서 DNS 기록 캐시를 확인함

   - 캐시에서 찾을 수 없다면 IP 주소를 찾기 위해 DNS 서버에 요청을 함

   - DNS 서버에서 재귀적 질의를 통해 IP 주소를 획득


2. 브라우저와 서버와 TCP 연결

   - HTTP 프로토콜은 일반적으로 TCP 프로토콜을 사용함

   - TCP연결은 3 way handshake 과정을 통해 연결됨

   - 3 way handshake는 데이터의 신뢰성을 보장하기 위해함


3. 브라우저가 서버에 요청을 보냄


4. 서버는 요청을 받고 처리한 후 클라이언트에 응답을 보냄


5. 브라우저는 받은 응답을 렌더링해서 표시함


브라우저에 URL을 입력하면 발생하는 일에 대해 알아볼 수 있었습니다.

'네트워크' 카테고리의 다른 글

OSI 7계층  (0) 2023.09.12
TCP, UDP  (0) 2023.08.08
쿠키, 세션  (0) 2023.08.03
3 way handshake, 4 way handshake  (0) 2023.08.02
HTTP와 HTTPS의 차이, 대칭키와 비대칭키  (0) 2023.07.28

설명 순서는 다음과 같습니다.

1. 유저모드와 커널모드란
2. 시스템콜
3. 인터럽트

1. 유저모드와 커널모드란

   - 유저 모드 : 우리가 개발하는 프로그램이 실행되는 모드. 함부로 시스템의 자원에 침범하지 못하는 모드

   - 커널 모드 : 운영 체제 코드를 실행할 수 있는 모드. 시스템의 전반을 관리하는 연산을 실행할 수 있는 모드. 하드웨어와 관련된 작업을 여기서 직접 수행함 

   - 실행 모드를 두 가지로 나눈 이유 : 시스템을 보호하기 위해. 시스템의 자원에 사용자가 함부로 침범할 경우, 시스템에 심가한 문제가 생길 수 있음. 따라서, 시스템에 관련된 부분이나 하드웨어와 관련된 부분은 커널이 담당하고, 개발자는 커널을 통해서 시스템의 기능이나 하드웨어를 사용할 수 있도록 하는 것임

   - 유저모드 -> 커널모드로 전환되는 때

      ① 프로그램이 시스템에 관련된 기능을 사용하고 싶을 때 -> 시스템 콜을 호출해서 커널모드로 전환

      ② 프로그램 실행 도중, 시스템에서 이벤트가 발생했을 때 -> 하드웨어나 소프트웨어에서 이벤트가 발생했을 때, 인터럽트가 발생하고 커널모드로 전환

   - 유저모드에서 커널모드로 전환되는 과정

      ① 유저모드에서 프로그램 실행

      ② 시스템콜 또는 인터럽트가 발생하면, 커널모드로 전환

      ③ 커널모드에서 먼저 프로세스의 상태를 PCB에 저장

      ④ 커널이 시스템콜 또는 인터럽트를 처리

      ⑤ 처리가 완료되면 다음 실행될 프로세스의 PCB를 통해 CPU상태 복원


2. 시스템콜

   - 프로세스가 시스템의 자원이나 서비스를 사용하고 싶을 때, 운영체제에 요청하는 것을 '시스템콜'이라고 함

   - 운영체제 서비스를 사용하기 위한 인터페이스라고 생각하면 됨

   - ex) 프로세스 제어, 파일 조작, 장치 연결 및 관리 등등


3. 인터럽트

   - 시스템에서 이벤트(일 또는 문제)가 발생해서 처리가 필요할 때 '인터럽트'가 발생하고, 커널 모드에서 이를 처리함

   - 인터럽트는 하드웨어나 소프트웨어 모두 발생하게 됨

   - ex) 프로세스에게 할당된 시간을 다 사용했을 경우 Timer Interrupt가 발생하고, 커널 모드로 전환돼서 context-switching이됨


시스템콜과 인터럽트에 대해 알아볼 수 있었습니다.  

 

'운영체제' 카테고리의 다른 글

동기, 비동기  (0) 2023.08.31
Java에서 동기화 문제 해결  (0) 2023.08.12
동기화  (0) 2023.08.11
페이지 교체 알고리즘  (0) 2023.08.10
Deadlock  (0) 2023.08.08

설명 순서는 다음과 같습니다.

1. 동기, 비동기의 관점
2. 동기란
3. 비동기란
4. 정리

1. 동기, 비동기의 관점

   - 작업을 순차적으로 실행할 것인지 아닌지에 대한 작업의 수행방식을 말함


2. 동기란

   - 작업을 순차적으로 실행시키는 방식

   - 큰 작업이 여러 소작업의 모음이라고 할 때, 한 소작업이 완료된 후에 다음 소작업이 진행되는 방식임


3. 비동기란

   - 작업을 순차적으로 실행시키지 않는 방식

   - 여러 소작업을 멀티로 한꺼번에 실행시키는 방식임

   - 오래걸리는 소작업이 있다고 할 때, 이를 동기로 처리할 경우 뒤에 소작업들은 오래걸리는 작업이 완료될 때까지 기다려야함. 그렇지만 비동기로 처리할 경우 뒤에 소작업들은 오래걸리는 작업과 상관없이 자신의 작업을 처리할 수 있음

   - 이렇게 동시에 여러 작업을 처리한다는 것은 멀티스레드나 멀티프로세싱같은 방법으로 구현될 수 있다


4. 정리

   - 동기, 비동기 방식은 작업을 순차적으로 처리하는 방식이냐, 처리하지 않는 방식이냐의 차이임

   - 동기는 작업의 순서를 지켜지는 작업 처리 방식임

   - 비동기는 여러 작업을 함께 실행시키기 때문에, 작업의 순서를 지키지 않는 작업 처리 방식임


동기, 비동기에 대해 알아볼 수 있었습니다.

'운영체제' 카테고리의 다른 글

시스템콜, 인터럽트  (0) 2023.09.01
Java에서 동기화 문제 해결  (0) 2023.08.12
동기화  (0) 2023.08.11
페이지 교체 알고리즘  (0) 2023.08.10
Deadlock  (0) 2023.08.08
프로젝트 구조를 세워 구현하자

프로젝트 구조를 세우고 구현하려 합니다

 

1. 구조

   - api : api(ex. kakao)를 핸들링하는 클래스를 모아놓은 패키지

   - config : api 및 DB 연결에 필요한 key를 모아놓은 패키지

   - constant : 프로그램에 필요한 상수를 모아놓은 패키지

   - domain : 서비스에 필요한 개체를 모아놓은 패키지

   - repository : DB 커넥션과 repository를 모아놓은 패키지

   - service : 핵심 비즈니스 로직 클래스를 모아놓은 패키지

   - view : 콘솔에 입력과 출력을 담당하는 클래스를 모아놓은 패키지

 

2. 구현


프로젝트 종료!!!

1차 프로젝트 후 멘토님께 코드 리뷰를 받았는데... 오버 엔지니어링이라는 소리를 들었다. 확정성있는 프로젝트를 만들고 싶어서 그랬지만, 다음 프로젝트부터는 조금 더 가볍게 만들어 봐야겠다.

과제의 핵심을 구현하자

이번 과제의 핵심은 Database 연동이라고 생각합니다. 본격적으로 과제 수행 전에 이를 확실히 파악하려고 합니다.

 

1. Database 연동

   (1) DB 커넥션 얻기

      - 드라이버매니저를 이용해서 DB url, username, password를 전달해서 connection을 얻는다

   (2) SQL 수행

      - connection에서 statement를 세팅해서 실행

   (3) 사용한 커넥션 닫기


프로젝트 핵심 기능 파악 완료!!!

시작이 반이다

 

이전 심화과제1 프로젝트와 동일하게 초기 세팅을 완료하면 절반은 완료했다고 생각합니다.

 

1. Github Repository에서 클론 후 프로젝트 열기

   - git clone <repository 주소>

   - IntelliJ에서 프로젝트 열기

   - git checkout -b <브랜치 이름> -> 브랜치 생성

 

2. JDK 세팅

   - JDK 17로 세팅

 

3. 프로젝트에 필요한 Library 다운로드

   - json, httpcomponents, mysql드라이버 라이브러리 다운로드

   - pom.xml에 다음과 같이 추가

 

4. commit

   - git commit convention에 맞춰서 작성

   - git commit -m "chore : JDK 및 Library 세팅 완료"


프로젝트 절반 완료!!!

+ Recent posts