일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 엑셀드래그단축키
- 요척합의
- MERN스택
- 봉제용어
- 와끼
- 우레탄지퍼
- 지연환가료
- 나일론지퍼
- 엑셀필터복사붙여넣기
- TACKING
- 미니마카
- 슈퍼코딩
- 영어시간읽기
- 40HQ컨테이너40GP컨테이너차이
- 미국영어연음
- 고급영어단어
- 핸드캐리쿠리어차이점
- 엑셀자동서식
- 필터링후복사붙여넣기
- 자켓실측
- 비리짐
- 헤이큐
- 40HQ컨테이너
- WHATTIMEOFTHEDAY
- Armhole Drop
- 암홀트롭
- AATCC
- 비슬론지퍼
- 웹API
- 클린코드
- Today
- Total
CASSIE'S BLOG
키워드 it 비공개 본문
Kubernetes 이게 음악으로 치면 오케스트라고.. 그 한명의 연주자가 컨테이너 또는 애플리케이션이지 ?
맞아요! Kubernetes는 음악의 오케스트라와 비슷한 역할을 합니다. 오케스트라에서 지휘자가 각 악기의 연주를 조율하는 것처럼, Kubernetes는 여러 컨테이너나 애플리케이션을 효율적으로 관리하고 조정하는 역할을 합니다. 이때 각 "악기"는 실제 애플리케이션이나 서비스가 담긴 "컨테이너"라고 볼 수 있죠.
즉, 개별적인 컨테이너(애플리케이션)는 각각의 연주자와 같고, Kubernetes는 이들이 함께 조화를 이루도록 도와주는 "지휘자"인 셈입니다. Kubernetes가 이들 간의 상호작용을 관리하고, 애플리케이션이 안정적으로 실행될 수 있도록 조율하는 역할을 하죠.
docker는 연주자로 치면 한명 kubernetis는 오케스트라인거지? 개념이 뭐가 다른거야?
아서가 설명해준 것
Docker는 연주자(즉, 개별 컨테이너)이고, Kubernetes는 오케스트라(여러 컨테이너를 조정하고 관리하는 시스템)라고 비유할 수 있습니다. 둘의 개념은 서로 밀접하게 연결되어 있지만, 역할과 기능에서 중요한 차이가 있습니다. 간단히 설명하면:
Docker: 개별 "연주자" (컨테이너)
Docker는 애플리케이션을 "컨테이너"라는 작은 독립된 환경에서 실행하는 도구입니다. 이 컨테이너는 애플리케이션과 그 애플리케이션이 실행되는 데 필요한 라이브러리, 설정 파일 등을 모두 포함하고 있어 다른 환경에서도 동일하게 실행될 수 있습니다.
Docker는 애플리케이션을 "패키징"하는 역할을 하며, 이 패키지를 컨테이너라고 부릅니다. 즉, Docker는 각 연주자가 독립적으로 연주할 수 있는 "악기"를 만드는 도구입니다.
Docker는 주로 애플리케이션을 실행하는 데 초점을 맞추고 있습니다.
Kubernetes: "오케스트라" (컨테이너 오케스트레이션)
Kubernetes는 여러 개의 Docker 컨테이너를 관리하고, 이들이 잘 협력하도록 조정하는 시스템입니다. 마치 오케스트라 지휘자가 여러 악기의 연주를 조율하듯, Kubernetes는 여러 컨테이너를 관리하며 애플리케이션이 원활하게 실행되도록 합니다.
Kubernetes는 컨테이너의 배포, 스케일링, 모니터링, 로드 밸런싱, 장애 처리 등과 같은 작업을 자동으로 수행합니다. 이를 통해 애플리케이션이 여러 서버에 걸쳐 안정적으로 실행되도록 보장합니다.
Kubernetes는 각 컨테이너가 어떻게 상호작용하고, 어디서 실행될지를 관리하는 "지휘자" 역할을 합니다.
개념적인 차이:
Docker:
애플리케이션 컨테이너화: 애플리케이션을 독립적인 컨테이너에 패키징하여 실행하는 데 집중합니다.
개별 컨테이너: 각 컨테이너는 독립적이고 격리된 환경에서 실행됩니다.
Kubernetes:
컨테이너 관리 및 오케스트레이션: 여러 개의 컨테이너를 자동으로 배포하고 관리하는 시스템입니다.
스케일링, 로드 밸런싱, 장애 처리: 컨테이너들이 원활하게 협력하고, 시스템 자원을 효율적으로 사용할 수 있도록 조정합니다.
예시 비유:
Docker는 하나의 연주자가 악기를 연주하는 것과 같고, Kubernetes는 여러 연주자가 함께 공연을 할 수 있도록 조율하고 관리하는 오케스트라의 지휘자와 같습니다. Docker는 각 연주자가 잘 준비되도록 하고, Kubernetes는 그들이 협력하여 하나의 멋진 공연을 만들어 내도록 합니다.
JPA의 장점
데이터베이스 독립성: 데이터베이스에 의존하지 않고, JPA 구현체가 SQL을 생성하여 실행하므로 데이터베이스 변경 시에도 코드 수정이 적습니다.
객체 지향적 데이터 모델링: 객체지향 프로그래밍에 맞춰 엔티티 간의 관계를 설정하고 코드만으로 테이블 간의 관계를 쉽게 설정할 수 있습니다.
자동 관리 기능: 엔티티 상태 변경 시 자동으로 데이터베이스에 반영되며, 캐싱 및 트랜잭션 관리 등의 기능을 제공합니다.
Lazy Loading 및 Cascade: 필요한 경우에만 데이터를 가져오는 지연 로딩(Lazy Loading)과 관련 객체의 상태를 자동으로 관리하는 Cascade 옵션을 사용할 수 있습니다
객체지향에 대해서 말하시오
• 클래스, 인스턴스, 오버라이딩, 오버로딩에 대해 기술하시오
• HTTP Request 200,300,400,500 번대 응
답은 무엇인가?
• Python이 느린 이유에 대해서 설명하시오
• 웹서버와 WAS 는 어떠한 구성으로 이루어 져 있나요?
• Mybatis jpa의 장점에 대해서 기술하시오.
• 대용량의 트래픽이 발생할 때 시스템을 어떤
식으로 구성해야 하는가?
• 클라우드의 장단점에 대해서 말하시오.
• 64bit, 32bit의 차이점
• 자료구조에 대해 말해주세요 (단순구조, 선형 구조, 비선형구조, 파일구조)
. TCp/P 에 대해 기술하시오
• DNS 란 무엇인가요?
• ORM이란? > MyBatis란?
1. mybatis란, 기존 jdbc를 이용하여 프로그 래밍을 하면 **자바 소스안에 sq문을 작성 (DAO)**했지만, xml파일에 sq문을 작성하 므로 추후 수정시에 다른곳에는 아무런 영 향없이 xm파일만 수정하면 됨. 유지보수에 용이하고 가독성이 좋다.
2. orm(Object-Relational Mapping) : 24*/|
와 관계형 데이터베이스의 데이터를 자동으 로 연결해주는 개념으로 객체간의 관계를 바탕으로 sq을 자동으로 생성해준다.
• DI란?
객체를 직접생성하는 것이 아니라, 스프링컨테이너(외부)에서 생성된 객체를 주입시켜 생성 자/setter로 사용한다.
- 이것을 사용하면 결합도와 의존성은 낮아지 고, 재사용성과 유지보수가 높아진다
DB연산자
ANY 조건에 하나라도 만족하면 출력
IN 조건에 일치하는 것만 출력
ALL 모든조건이 만족해야 출력
EXISTS 결과가 존재하면 전체출력
Q # 1-2) 객체지향의 특징은?
답변:다형성, 상속, 캡슐화, 추상화 의 특징을 가지고 있다. (상추캡(이)다 )
다형성 은 하나의 메소드나 클래스가 다양 한 방법으로 동작하는 것을 말한다. 상속을 통해 기능을 확장하거나 변경하는 것을 가 능하게 해 주고, 같은 클래스 내의 코드 길이 를 줄여준다. 오버라이딩이나 오버로딩을 통해서 한 요소에 여러 개념을 넣어 놓은 것 이다.
상속 는 새로운 클래스가 기존의 클래스의 자료와 연산을 이용하게 해주는 것입니다.
공통적으로 필요한 성격을 가장 기본적인 클래스로 정의해두고, 상속받아 사용. 중복 을 최소화한다.
캡슐화 는 객체가 맡은 역할을 수행하기 위 한 하나의 목적을 위해 데이터와 기능들을 묶는 것을 말합니다.
TCP 헤더는 옵션 필드를 포함할 수 있으 며, 이를 통해 최대 40바이트까지 확장 가 능합니다. 따라서, 기본 헤더 크기인 20바 이트에 옵션 필드를 추가하여 최대 40바 이트까지 확장할 수 있습니다.
데이터 구조에서 "homogeneous"는 데이터 구조 안에 있는 모든 요소가 같은 데이터 타입을 가진다는 의미입니다. 예를 들어, 배열 같은 경우 모든 요소가 정수(int)라면 그 배열은 homogeneous하다고 할 수 있습니다.
반면, "heterogeneous"는 데이터 구조 내의 요소들이 서로 다른 데이터 타입을 가질 수 있다는 것을 의미합니다. 예를 들어, 객체 배열이 숫자, 문자열, 객체 등을 함께 담고 있을 경우 heterogeneous한 구조라고 할 수 있습니다.
즉, homogeneous 데이터 구조는 동일한 데이터 타입만 담는 구조를 말합니다.
다중행연산자
다중 행 연산자는 서브쿼리에서 여러 개의 행을 반환할 때 사용하는 연산자로, 결과값을 비교하거나 필터링하는 데 활용됩니다. 주요 다중 행 연산자에는 IN, ANY, ALL이 있습니다.
IN: 서브쿼리가 반환하는 여러 값 중 하나라도 일치하는 경우 참을 반환합니다.
예: WHERE column IN (SELECT ...)
ANY: 서브쿼리 결과 중 하나 이상의 값과 비교해서 조건이 참이 되면 참을 반환합니다.
예: WHERE column > ANY (SELECT ...) — 하나라도 조건에 맞으면 참입니다.
ALL: 서브쿼리 결과의 모든 값과 비교하여 조건이 모두 만족되면 참을 반환합니다.
예: WHERE column > ALL (SELECT ...) — 모든 값보다 크다면 참입니다.
TELNET의 개념
인터넷이나 로컬 영역 네트워크 연결에 쓰기 위해 23번 포트를 이용하는 네트워크 프 로토콜이다.
Telnet 서비스는 보통 보안 문제로 SSH를 적용해서 많이들 사용한다.
• SSH(Secure SHell)의 개념
• 원격 접속 시 포트 번호 22번을 사용하여 강력한 보안 인증을 제공하는 프로토콜
이다.
• 기존 rsh, rlogin, telnet을 대체하기 위해 설계되어 강력한 인증 방법 제공 및 안 전성이 우수하다.
욜로 브이 8모델 AI기반의 세그멘테이션기술을 적용해서 카메라의 모습이 어떤 화면에 합성되서 같이 움직이게 할 수 있다고 하는데
YOLOv8 모델과 AI 기반 세그멘테이션 기술을 이용해 카메라 화면 속 장면과 그래픽을 합성하여 함께 움직이게 하는 기술을 말합니다. 여기서 몇 가지 핵심 요소를 살펴보면 다음과 같습니다.
YOLOv8 모델: "YOLO"는 "You Only Look Once"의 약자로, 객체를 빠르게 인식하는 딥러닝 기반의 객체 탐지 모델입니다. YOLOv8은 이 모델의 최신 버전으로, 객체 탐지 성능이 개선되어 특정 물체나 사람을 더 빠르고 정확하게 인식할 수 있습니다.
세그멘테이션 기술: 세그멘테이션은 AI가 이미지에서 원하는 영역(사람, 차량, 동물 등)을 정확히 구분하는 기술입니다. 세그멘테이션을 통해 카메라 화면에서 특정 객체나 영역을 식별하고 그 외의 부분과 분리할 수 있습니다.
합성 기술: 이 기술을 활용하면 식별된 객체나 사람이 다른 배경이나 그래픽과 자연스럽게 합성되어 함께 움직일 수 있습니다. 예를 들어, 카메라로 특정 장면을 촬영할 때 AI가 사람을 인식하고, 그 사람과 배경에 가상의 객체를 합성하여 실시간으로 움직이도록 만들 수 있습니다.
이 기술은 증강현실(AR)이나 게임, 방송 중 실시간 그래픽 합성 등에서 유용하게 활용될 수 있어요.
mode bit는 CPU가 현재실행중인 모드를 나타내는 것으로 0이면 커널 모드, 1이면 사용자모드를 나타냅니다.
릴레이션의 종류에서 튜플은 관계형 데이터베이스에서 테이블의 한 행을 말합니다.
자바스크립트에서 메모리힙과 콜스택은 자바스크립트 엔진의 주요구조임.
메모리힙:
변수와 객체의 메모리 할당을 담당하는 곳을 말한다.
콜스택이란:
함수가 호출이 되면 쌓이는 곳이다. 대신 함수가 쌓이는 순서와는 반대로 실행된다.
List in First Out, 먼저 들어온 것이 먼저 나간다는 의미로, LIFO 구조라고 부른다.
프리페이징
처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든페이지 한꺼번에 페이지 프레임에 적재하는 기법
페이지 부재 빈도
페이지 부재율에 따라 주기억장치에 있는 페이지 프레임 수를 늘리거나 줄여 페이지 부재율을 적정수준으로 유지하는 방식
absolute & relative
예시 1: position: absolute
큰 상자(부모 요소)가 있고, 그 안에 작은 상자(자식 요소)가 있습니다.
작은 상자에 position: absolute; top: 10px; left: 10px;를 적용하면, 작은 상자는 부모 상자를 기준으로 왼쪽 위에서 10px, 10px 떨어진 위치에 고정됩니다.
이때, 작은 상자는 레이아웃 흐름에서 분리되어서 원래 있어야 할 자리를 차지하지 않게 되고, 다른 요소들이 그 자리로 채워질 수 있습니다. 그래서 다른 요소와 겹칠 가능성이 생깁니다.
예시 2: position: relative
이번에는 동일하게 큰 상자(부모 요소)와 그 안에 작은 상자(자식 요소)가 있다고 가정해요.
작은 상자에 position: relative; top: 10px; left: 10px;을 적용하면, 작은 상자는 원래 있던 위치에서 위로 10px, 왼쪽으로 10px 이동합니다.
하지만 레이아웃 상에 작은 상자가 원래 있던 자리 그대로 남아 있어서, 그 자리는 비지 않고 다른 요소들이 차지하지 않습니다. 따라서 다른 요소와 겹치지 않게 됩니다.
이렇게 보면 absolute는 부모 기준으로 완전히 떨어져 배치되는 것이고, relative는 원래 자리에서 살짝 이동한다고 보면 됩니다.
프로시져
CREATE OR REPLACE PROCEDURE 프로시져명
(파라미터1 IN | OUT | IN OUT
, 파라미터2 IN | OUT | IN OUT. . .);
IS[AS]
변수, 상수 등을 선언
BEGIN
로직을 실행할 쿼리문
[EXCEPTION 예외처리]
END 프로시져 명;
프로시저란?
• 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램
• 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템이 저장한 것
• 테이블에서 데이터를 추출, 조작하고 결과를 다른 데이블에 다시 저장하거 나 갱신하는 처리를 할 때 프로시저를 사용한다.
엔비디아가 gpu만드는 회사구나…
엔비디아 고객은 오픈AI, 구글, 앤트로픽, 메타, 네이버 등 소수에 불과하다. - <AI 반도체 혁명>, 권순우, 이동수, 권세중, 유지원 - 밀리의 서재
https://www.millie.co.kr/v3/bookDetail/9c96074734ed4533
인공지능이 발전하면서 엔비디아 GPU는 그래픽카드가 아니라 AI 반도체가 됐다. GPU가 일개 그래픽카드였다면 엔비디아는 결코 글로벌 시가총액 1위 기업이 될 수 없었을 것이다.
전 세계 1위 AI 반도체 회사 엔비디아 CEO인 젠슨 황이 대만 출신이고, 격차가 크긴 하지만 사실상 2위 회사로 평가할 수 있는 AMD의 CEO 리사 수도 대만 출신이다. 이들이 설계하는 AI 반도체를 손에 잡히는 실물로 만드는 위탁생산(파운드리)은 대만 회사인 TSMC가 한다. 대만에서 열린 컴퓨텍스에 이들이 모두 모였고, 그 존재만으로 전 세계 미디어의 주목을 이끌어낸 것이다. - <AI 반도체 혁명>, 권순우, 이동수, 권세중, 유지원 - 밀리의 서재
젠슨 황 CEO는 국립대만대학교 체육관에서 열린 기조 연설에서 기존에 발표했던 AI 가속기 블랙웰 울트라칩은 2025년부터, 루빈은 2026년부터 양산할 예정이라고 밝혔다. 2027년에는 루빈 울트라 GPU가 출시될 예정이라고도 말하며 루빈에는 6세대 고대역폭메모리 HBM4 8개, 루빈 울트라에는 12개가 탑재될 예정이라고 밝혔다.
이 발표는 두 가지 측면에서 시장을 놀라게 했다. 젠슨 황 CEO가 신제품 출시 주기를 기존 2년에서 1년으로 단축하겠다고 밝힌 것이다.
글로벌 반도체 산업의 기준은 반도체 집적회로의 성능이 2년마다 2배로 증가한다는 ‘무어의 법칙’을 따르기에 전 세계 반도체 생태계는 2년을 주기로 신제품을 만든다(89쪽 참고). 그런데 1위 업체인 엔비디아가 신제품 주기를 1년으로 단축하면 나머지 경쟁사들이 따라가지 않을 수 없다.
뷰를 구성하는데 다양한 서버 사이드 템플렛 엔진을 사용할 수 있음. 타임리프, 프리마커, 무스타치 등 어떠한 템플렛 엔진 써도 상관없습니다.
CPU와 GPU는 둘 다 반도체 기반의 처리 장치지만, 각각 다른 방식으로 작업을 처리합니다.
CPU (Central Processing Unit): 중앙처리장치로, 컴퓨터의 핵심 두뇌 역할을 합니다. CPU는 복잡한 연산을 순차적으로 빠르게 처리하는 데 적합합니다. 일반적으로 하나의 작업을 효율적으로 처리하지만, 다중 작업을 동시에 처리할 때는 상대적으로 비효율적일 수 있습니다.
GPU (Graphics Processing Unit): 그래픽 처리 장치로, 한 번에 대규모의 데이터를 병렬로 처리하는 데 최적화되어 있습니다. 원래 그래픽 연산에 주로 사용되었지만, 최근에는 인공지능, 딥러닝, 고성능 컴퓨팅(HPC)에서도 중요한 역할을 하고 있습니다. 수천 개의 작은 코어를 사용해 한꺼번에 많은 데이터를 처리할 수 있습니다.
CPU와 GPU는 모두 반도체를 사용하여 만들어지며, 이 두 장치는 각각의 특성에 따라 서로 다른 작업에 특화되어 있습니다. CPU는 복잡한 계산을 순차적으로 빠르게 처리하고, GPU는 대량의 단순 연산을 병렬로 처리하는 것이 특징입니다.
엔비디아 GPU의 장단점을 이해하려면 이를 써본 사람이 많아야 하는데, 써본 사람 자체가 별로 없다. 왜냐면 엔비디아 GPU가 너무 비싸다.
엔비디아 GPU는 처음에 그래픽카드로 시작했다. 컴퓨터에 하나씩 있는 익숙한 부품이다. 하지만 요즘 이야기하는 엔비디아 GPU는 집집마다 있는 그 GPU가 아니다. - <AI 반도체 혁명>, 권순우, 이동수, 권세중, 유지원
엔비디아의 AI 서버 DGX H100은 H100 GPU 8장을 묶어서 구성된다. 8장을 묶은 서버 1대가 대략 5억 원쯤 한다.
초거대언어모델LLM, Large Language Model을 만들어 학습을 시키려면 이러한 서버가 최소 200대는 필요하다. 학습을 시키는 데 필요한 GPU 가격만 1천억 원이라는 뜻이다. 인공지능 서비스를 운영하려면 서버가 1000대는 있어야 한다(물론 많으면 많을수록 좋다). 엔비디아 GPU를 사는 데만 5천억 원이 필요하다는 의미다. 여기에 인건비, 전기요금, 임대료 등 부대 비용은 일부러 더하지 않았다.
영원할 것만 같았던 인텔 제국은 애플, ARM 등 저전력 반도체 진영에 완전히 밀려 버렸다. 이들은 모바일 저전력 환경 속에서 새로운 생태계를 만들고 인텔의 자리를 조금도 허용하지 않았다. - <AI 반도체 혁명>
GPU가 인공지능 시대에 각광을 받는 이유는 나눠서 계산하는 ‘병렬형’이라는 특징 때문이다. 인공지능 데이터는 처리 규모가 무지막지하게 크다. 아무리 뛰어난 반도체라 하더라도 1개의 반도체로 작업을 처리하려면 시간이 너무 오래 걸린다. 몇 시간 기다리는 정도가 아니다. 수백 년이 걸릴 수도 있다. 카이스트의 A교수는 한 언론 보도를 통해 “오픈AI의 ‘소라’ 같은 동영상 생성형 AI 모델을 카이스트가 가용할 수 있는 엔비디아 A100으로 만들려면 148년이 걸리는 것으로 분석된다”라고 말하기도 했다.
- <AI 반도체 혁명>, 권순우, 이동수, 권세중, 유지원 - 밀리의 서재
랜카드
0과 1을 어떻게 전기 신호로 변환하나요?
오, 좋은 질문이에요! 컴퓨터는 네트워크를 통해 데이터를 송수신할 수 있도록 랜 카드가 메인 보드에 포함되어 있는 내장형 랜 카드'나 별도의 랜 카드를 가지고 있어요. 0과 1의 정보가 컴퓨터 내부에 있는 랜 카드로 전송되고 랜 카드는 0과 1을 전기 신호로 변환하는 거예요.
뒤로가기도 되는 이유가 스택을 사용해서라고 함.
스택의 특징
1) 가장 나중에 들어온 데이터가 가장 먼저 나가는 후입선출 구조 (LIFO) 구조
2) 리스트의 한쪽으로 삽입과 삭제 연산을 수행함
import java.util.Stack;
public class Browser {
private Stack<String> backStack; // 뒤로가기 스택
private Stack<String> forwardStack; // 앞으로가기 스택
public Browser() {
backStack = new Stack<>();
forwardStack = new Stack<>();
}
// 페이지 방문
public void visit(String url) {
// 새로운 페이지 방문 시 현재 페이지를 뒤로가기 스택에 저장
if (!backStack.isEmpty()) {
forwardStack.push(backStack.peek());
}
backStack.push(url);
System.out.println("Visiting: " + url);
}
// 뒤로가기
public void goBack() {
if (backStack.size() > 1) {
String current = backStack.pop(); // 현재 페이지 제거
forwardStack.push(current); // 제거한 페이지를 앞으로가기 스택에 추가
System.out.println("Going back to: " + backStack.peek());
} else {
System.out.println("No previous pages.");
}
}
// 앞으로가기
public void goForward() {
if (!forwardStack.isEmpty()) {
String url = forwardStack.pop();
backStack.push(url);
System.out.println("Going forward to: " + url);
} else {
System.out.println("No forward pages.");
}
}
public static void main(String[] args) {
Browser browser = new Browser();
browser.visit("Page 1");
browser.visit("Page 2");
browser.visit("Page 3");
browser.goBack(); // Page 2
browser.goBack(); // Page 1
browser.goForward(); // Page 2
}
}
이 코드의 설명
- backStack: 사용자가 방문한 페이지를 저장합니다. 가장 최근에 방문한 페이지가 스택의 맨 위에 위치합니다.
- forwardStack: 사용자가 뒤로 간 페이지를 저장합니다. 사용자가 다시 앞으로 갈 수 있도록 하기 위해 사용됩니다.
- visit 메서드: 새로운 페이지를 방문할 때 호출됩니다. 현재 페이지를 backStack에 저장하고, 새로운 URL을 추가합니다.
- goBack 메서드: 사용자가 뒤로 가기를 클릭할 때 호출됩니다. 현재 페이지를 backStack에서 제거하고, 그 페이지를 forwardStack에 추가합니다.
- goForward 메서드: 사용자가 앞으로 가기를 클릭할 때 호출됩니다. forwardStack에서 페이지를 꺼내 backStack에 추가합니다.
결론
위와 같은 방식으로 자바에서 스택을 사용하여 웹 브라우저의 뒤로가기 및 앞으로가기 기능을 구현할 수 있습니다. 하지만 실제 웹 애플리케이션에서는 주로 JavaScript와 같은 클라이언트 사이드 언어를 사용하여 이러한 기능을 구현하는 것이 일반적입니다. 이 예시는 자바에서 스택의 사용법을 보여주는 것으로 이해하면 좋습니다!
DTO VS VO
very impo
비즈니스 로직이 자바의 서비스 혹은 컨트롤러 레벨에 들어가있는 경우 생깁니다. 운 없으면 3개 파일 수정
가능한 파일이 적게 바뀌는 구조를 유지하기 위해서는 특정 값을 담기위한 클래스 (DTO, VO)를 만들어서는 안됩니다.
MAP과 LIST는 어떤 값이든 담을 수 있는 객체이고 이걸 단순하게 이용한다면 굳이 여러 파일을 고칠 필요가 없어집니다.,
MAP과 LIST를 남용하는 것의 단점으론 코드만 봐서 파라미터의 이름과 타입이 뭔지 모른다는 점입니다.
하지만 프로젝트가 끝난 시점에서는 프로그램 명세서도 있고 ERD도 있고 실제로 작동하는 코드도 있지요.
-----
DTO와 VO는 자바에서 데이터를 주고받을 때 자주 사용하는 객체의 종류입니다. 쉽게 설명하면, DTO는 주로 데이터를 전송할 때 사용하고, VO는 데이터를 저장할 때 주로 사용합니다. 둘 다 데이터만 담고 있는 객체지만, 사용되는 목적이 약간 달라요.
1. DTO (Data Transfer Object)
DTO는 이름처럼 데이터를 전송하기 위해 사용되는 객체입니다. 데이터를 다른 계층으로 전달하거나, 네트워크를 통해 주고받을 때 쓰여요.
주요 특징: 주로 읽기/쓰기가 가능하고, 데이터를 전송하는 목적으로 사용되기 때문에 **mutable(변경 가능)**한 속성이 많아요.
class UserDTO {
private String name;
private int age;
// 생성자
public UserDTO(String name, int age) {
this.name = name;
this.age = age;
}
// getter와 setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2. VO (Value Object)
값을 표현하기 위해 사용되며, 수정 불가(불변)합니다.
class UserVO {
private final String name;
private final int age;
// 생성자 (setter가 없고 값이 변경되지 않음)
public UserVO(String name, int age) {
this.name = name;
this.age = age;
}
// getter만 존재
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
왜 VO는 // 생성자 (setter가 없고 값이 변경되지 않는거야?
값을 저장할 떄 사용한다고 했잖아 VO가 그러면 SETTER가 있어야하는거 아니야?
좋은 질문이에요! VO(Value Object)는 값 저장에 사용되지만, 한 번 설정된 값이 변경되지 않도록 보장하는 것이 목적이에요. 그래서 VO는 **불변(immutable)**하게 설계됩니다. 이 불변성 때문에 setter가 필요하지 않아요.
왜 VO는 불변성을 유지해야 할까?
안정성: VO는 한 번 값이 설정되면, 값이 변하지 않아야 하는 경우에 사용됩니다. 예를 들어, 사용자 정보나 특정 상태를 나타낼 때, 그 값이 중간에 변경되면 안 되는 경우가 있죠. VO를 사용하면 이런 상황을 방지할 수 있습니다.
예시:
사용자의 이름이나 나이가 한 번 설정되면, 그 값이 외부에서 쉽게 바뀌지 않도록 하는 것이 중요할 때 VO를 사용합니다.
동시성 문제 해결: 여러 스레드가 동시에 같은 객체를 사용할 때, 그 객체가 불변이면 값이 변하지 않아 동시성 문제를 피할 수 있어요. VO는 이런 동시성 문제를 해결하는 데 유리합니다.
데이터의 일관성 유지: VO는 주로 특정 값을 정확하게 표현하고 변경되지 않도록 보장해야 할 때 사용됩니다. 예를 들어, 특정 상태나 조건을 나타낼 때 그 상태가 임의로 변경되면 문제가 발생할 수 있기 때문에, VO는 변하지 않도록 설계합니다.
그래서 VO에 setter가 없는 이유:
VO는 불변의 데이터를 저장하는 역할을 하므로, 값이 한 번 설정되면 더 이상 수정되지 않는 것이 목적입니다.
반면, DTO는 데이터를 주고받으며 수시로 값을 변경할 필요가 있기 때문에 setter가 존재합니다.
간단한 비유:
VO는 한 번 작성된 문서처럼 생각하면 돼요. 문서가 완성되면 더 이상 수정되지 않고 그대로 유지되는 것처럼, VO도 한 번 설정되면 그 값이 변하지 않아요.
반면, DTO는 수정 가능한 노트처럼 여러 번 데이터를 수정하고 전송할 수 있는 용도로 사용됩니다.
주문 상태의 적절한 처리 방법
주문 상태는 주문 관리 시스템에서 상태 패턴이나 상태 열거형을 사용하여 구현하는 것이 좋습니다. 예를 들어:
상태 열거형 (Enum): 주문의 여러 상태를 열거형으로 정의하고, 각 상태가 다음 상태로 전이되는 로직을 추가할 수 있습니다.
public enum OrderStatus {
PENDING, // 결제 대기
COMPLETED, // 주문 완료
SHIPPED; // 배송 중
}
호텔예약사이트에서 예약정보 VO를 쓸 수 있겠네~!
여러 필드를 가진 VO(Value Object)를 사용하는 상황은 웹 프로그래밍 프로젝트에서 흔히 발생합니다. 여기서는 호텔 예약 서비스와 쇼핑몰의 예를 들어 VO를 활용할 수 있는 상황을 설명하겠습니다.
1. 호텔 예약 서비스에서의 VO 예시
예약 정보 VO (ReservationVO)
- 필드:
- checkInDate: 체크인 날짜
- checkOutDate: 체크아웃 날짜
- guestName: 고객 이름
- roomType: 객실 종류
- numberOfGuests: 투숙객 수
- 설명: 이 VO는 예약 정보를 한 번에 묶어서 표현합니다. 체크인 날짜와 체크아웃 날짜는 변경되지 않으며, 특정 예약에 대한 정보를 안전하게 다룰 수 있습니다.
class ReservationVO {
private final LocalDate checkInDate;
private final LocalDate checkOutDate;
private final String guestName;
private final String roomType;
private final int numberOfGuests;
public ReservationVO(LocalDate checkInDate, LocalDate checkOutDate, String guestName, String roomType, int numberOfGuests) {
this.checkInDate = checkInDate;
this.checkOutDate = checkOutDate;
this.guestName = guestName;
this.roomType = roomType;
this.numberOfGuests = numberOfGuests;
}
// Getter 메서드 생략
}
2. 쇼핑몰에서의 VO 예시
주문 정보 VO (OrderVO)
필드:
orderId: 주문 ID
orderDate: 주문 날짜
customerId: 고객 ID
totalAmount: 총 결제 금액
items: 주문 항목 목록 (List<ItemVO>)
설명: 이 VO는 하나의 주문에 대한 정보를 포함합니다. 주문 ID와 고객 ID는 변경되지 않으며, 주문 항목 리스트를 포함하여 주문의 전체 정보를 표현할 수 있습니다.
class OrderVO {
private final String orderId;
private final LocalDate orderDate;
private final String customerId;
private final BigDecimal totalAmount;
private final List<ItemVO> items;
public OrderVO(String orderId, LocalDate orderDate, String customerId, BigDecimal totalAmount, List<ItemVO> items) {
this.orderId = orderId;
this.orderDate = orderDate;
this.customerId = customerId;
this.totalAmount = totalAmount;
this.items = new ArrayList<>(items); // 불변성을 보장하기 위해 복사
}
// Getter 메서드 생략
}
class ItemVO {
private final String productId;
private final String productName;
private final int quantity;
private final BigDecimal price;
public ItemVO(String productId, String productName, int quantity, BigDecimal price) {
this.productId = productId;
this.productName = productName;
this.quantity = quantity;
this.price = price;
}
// Getter 메서드 생략
}
요약
호텔 예약 서비스에서는 예약 정보를 포함하는 ReservationVO를 사용하여 체크인 및 체크아웃 날짜, 고객 이름, 객실 종류 등을 묶어서 관리합니다.
쇼핑몰에서는 주문 정보를 포함하는 OrderVO와 주문 항목을 나타내는 ItemVO를 사용하여 하나의 주문에 대한 전체 정보를 안전하게 처리할 수 있습니다.
이러한 VO는 여러 필드를 통해 데이터를 구조화하고 불변성을 보장함으로써 코드의 안정성과 가독성을 높이는 데 기여합니다.
Si에서는 다양한 자료구조 안 씀
Map 과 List 두개만 씀
스택 큐 트리 자료구조가 많긴 한데
Hashmap을 쓰는 건 map이 인터페이스이고 hashmap이 구현 클래스라는 지식을 몰라도 상관없습니다.
Arraylist가 thread safe하기 때문에 linkedList대신 쓴다는 것도 상관없습니다.
알아야하는 건 map을 쓸 때는 hashmap을 써야하고 list를 써야할 때는 arraylist 사용해야한다는 정도입니다.
Q # 10) 자바 데이터 타입에 대해 설명
하세요.
답변.
Primitive type 기본형 : 변수에 값 자체를 저장(정수형, 실수형, 문자형, 논리형 등 8 가지) 한다. stack 메모리 영역에 실제 값을 저장한다.
Reference type 참조형 : 기본형 외의 모든 타입(String, 클래스, 인터페이스, 배열 등)
이다. new로 정의하고, 실제 값은 heap에 저장하고 stack에는 메모리 주소만 저장한다.
absolute: 부모 요소 중에서 position 속성이 relative, absolute, 또는 fixed로 설정된 요소를 기준으로 위치가 고정됩니다. 만약 그런 부모 요소가 없다면, 뷰포트(화면) 기준으로 위치가 정해집니다.
relative: 해당 요소 자체의 원래 위치를 기준으로 이동합니다. relative는 그 자체로 요소를 고정하지 않고, 본래 위치에서 이동만 시킵니다.
그래서, absolute는 특정 기준 요소에 종속되지만, relative는 자기 자신을 기준으로 동작하는 차이가 있습니다.
그래서 부모요소에 relative 걸잖아
C++에서 enum은 열거형을 정의하는 데 사용되는 키워드입니다. 열거형은 관련된 상수들의 집합을 정의하여 코드의 가독성을 높이고, 상수 값을 의미 있게 관리할 수 있게 해줍니다.
간단한 예:
enum Color {
RED, // 0
GREEN, // 1
BLUE // 2
};
위의 예에서 Color는 열거형이며, RED, GREEN, BLUE는 열거형 상수입니다. 기본적으로 열거형 상수는 0부터 시작하여 1씩 증가하는 정수 값을 가집니다. RED는 0, GREEN은 1, BLUE는 2가 됩니다.
열거형은 다음과 같이 사용할 수 있습니다:
Color favoriteColor = BLUE;
if (favoriteColor == BLUE) {
// BLUE 색상을 선택함
}
이렇게 enum을 사용하면 코드가 더 명확해지고, 잘못된 값이 사용되는 것을 방지할 수 있습니다.
Q. 그러면 blue가 2인데 2가 아니라 blue로 쓸 수 있다는건가?
맞습니다! enum을 사용하면 상수 값에 이름을 붙일 수 있어서, 숫자 대신 이름으로 상수를 사용할 수 있습니다. 위의 예에서 Color 열거형의 BLUE는 실제로는 2를 나타내지만, 코드에서 BLUE라는 이름을 사용하면 숫자를 직접 사용하는 것보다 코드가 더 읽기 쉽고 의미가 명확해집니다.
즉, 다음과 같은 코드에서:
Color favoriteColor = BLUE;
favoriteColor는 BLUE라는 이름을 사용하므로, 값이 2로 할당됩니다. 이 값은 enum을 통해 코드에서 더 의미 있게 표현되므로, 나중에 코드의 가독성과 유지보수성에 도움이 됩니다.
Forward(request, response)≤
서블릿에서 다른 서블릿이나 JSP로 요청을 전달하는 메서드입니다.
싱글톤패턴? 커널덤프디버깅? 패킷분석
Q. Promise 란?
- 정의: 동기적으로 순서대로 불러야하는 코드에는 콜백 함수를 사용할 수 있지만
- 콜백을 계속 호출하면 코드가 복잡해지고 에러처
리하기도 힘들어 이런 콜백의 단점을 보완한 Promise
를 사용할 수 있는데,
Promise는 비동기 함수의 결과를 담고 있는 객체
- 특징: 세 개의 상태를 가짐(대기_Pending, 성공 _Fulfilled, 실패_Rejected)
=> 실무를 경험한 분들은 잘 알 수 있겟지만 성공
(fullfilled) 하였을때는 then으로 결과를 받을 수 있고
실패(rejected)하였을 때는 catch로 결과를 받을 수
있다.
Q. Async/Await 란?
- 정의: 콜백, Promise 체인의 단점을 보완한 것 Promise를 반환하는 함수 앞에 await를 붙이면
해당 Promise의 상태가 바뀔 때까지 코드가 기다림
Promise가 성공 상태 또는 실패 상태로 바뀌기
전까지는 다음 연산을 시작하지 않는다.
에러 처리는 try/catch를 사용
Q. 동기 방식과 비동기 방식 차이점?
- 동기 방식: 직렬적으로 일을 처리
요청이 들어오면 순차적으로 작업을 수행하고
해당 작업이 수행중이던 다음 작업은 대기하게 됨
서버는 한번에 많은 요청이 들어오고 동시에 많
은 요청을 처리해야하기 때문에 이러한 방식과는 맞지 않음
- 비동기 방식: 병렬적으로 일을 처리 요청이 들어오면 해당 요청에 의한 작업이 끝나
지 않았더라도 계속 요청을 받고, 작업이 끝났다는 이 벤트가 오면 해당 요청을 처리
=> 여기에 대해 웹에서 동기 방식과 비동기 방식에 적 용 되는 부분에 대하여 질문을 받았었는데, 동기 방식은 결제 프로세스가 적용될 때 프로세스 적 용 순서가 중요하기에 반드시 필요하다 설명하고, 비동 기 방식은 댓글이나 게시글을 올릴 때 먼저 올린 사람 이 적용된다 이런 식으로 설명했는데 잘 대답했는지는 잘 모르겠다..
아무래도 두리뭉술하게 설명하는 것보단 좀더 공부하
여 구체적으로 설명하는게 나을 수 있을거같다..
Q. MSA(MicroService Architecture) 란?
- 정의:
참고) https://mozzi-devlog. tistory.com/34
=> 이 부분에 대한 것은 조금 더 공부가 필요할 것 같 다... 글을 읽어도 100% 까지 이해되지 않아 아직 부 족한 걸 많이 느꼈다...
스택(stack)이란 가장 대표적인
선형 자료구조 중에 하나로, 데이터를 하나씩 쌓아 올린 형태의 자료구조예요.
GRANT, REVOKE가 DCL의 대표적인 명령어이다. DCL 뭐 줄인말이야? It에서?
DCL은 "Data Control Language"의 약자입니다. IT에서 DCL은 데이터베이스에서 사용자의 권한을 제어하는 명령어들을 포함하는 언어를 의미합니다. 대표적인 DCL 명령어로는 GRANT와 REVOKE가 있습니다.
GRANT: 특정 사용자에게 데이터베이스 객체에 대한 권한을 부여하는 명령어.
REVOKE: 특정 사용자의 권한을 회수하는 명령어.
Q. nosQL(Not only SQL)란
- 정의: SOL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하는 단어, 비관계형 데이터베 이스, 여러 유형의 데이터베이스를 사용
대량의 분산된 비정형 데이터를 저장하고 조회하
는데 특화된 데이터베이스로 스키마 없이 사용하거나 느슨한 스키마를 제공하는 저장소
주로 빅데이터, 분산 시스템 환경에서 대용량 데 이터를 처리하는데 적합
- 특징: RDBS와 달리 데이터간의 관계를 정의하 지 않음, 대용량의 데이터를 저장, 분산형 구조로 설 계, 고정되어 있지 않은 테이블 스키마를 갖음
⅜7) https://shuu.tistory.com/135
=> 많은 데이터들을 다루기 위해서는 noSOL에 대한 내용을 숙지하면 나쁘지 않다. 나도 실무에서 사용해 본 것은 아니지만 공부해보면 왜 많이 들리는 기술인 가 알 수 있다. 백엔드 개발자 또는 빅데이터 개발자로 ..가기위해선 필수일지도..
"[a HH:mm:ss]" 오전 오후 찍힘
1. DOM Tree 생성 단계
2. CSSOM Tree 생성 단계
3. 렌더링 트리 생성 단계
4. 레이아웃 단계 (Layout Phase)
5. 페인팅 단계(Painting Phase)
위 순서대로 진행되며, 이러한 단계를 거쳐서 브라우저에 웹 페이지가 렌더링되게 됩니다.
업캐스팅
서브클래스객체를 슈퍼클래스 타입으로 변환하는 것
업캐스팅을 하면 자식클래스의 멤버는 접근이 불가해지고, 부모클래스 멤버만 사용할 수 있게된다.
STP는 기본적으로 22번 포트를 이용한다.(정처기)
STP(Spanning Tree Protocol)는 네트워크 루프를 방지하고 효율적인 데이터 경로를 보장하기 위해 스위치 간의 트리 구조를 형성하는 네트워크 프로토콜입니다.
네트워크 루프는 네트워크의 데이터 패킷이 끝없이 순환하여 네트워크 성능을 저하시킬 수 있는 상태입니다.
OSPF(개방형 최단 경로 우선)는 큰 네트워크에서 자주 사용하는 라우팅 프로토콜입니다. (정처기)
경로 저장: 목적지까지의 가능한 모든 경로를 라우팅 테이블에 기록합니다.
정보 업데이트: 네트워크에 변화가 생기면 그 정보를 네트워크 내 모든 장치에 전송하여 최신 상태로 유지합니다.
즉, OSPF는 네트워크 내 모든 경로를 알고 있으며, 변화가 생기면 즉시 모든 장치에 알려주는 시스템입니다.
SDN (정처기)
이기종의 스위치와 라우터의 플로 테이블을 개방형 프로토콜에 의해서 패킷 전달 및
제어 기능을 소프트웨어적으로 분리 구현한 SDN을 위한 인터페이스 표준 기술이다
SDN은 네트워크 장비의 제어 기능을 소프트웨어로 분리하여 중앙에서 관리할 수 있게 하는 기술입니다.
쿼리스트링
http://example.com/page?name=John&age=25&gender=M
IT에서 "프로비저닝(provisioning)"은 시스템, 애플리케이션 또는 서비스가 사용자 또는 다른 시스템에서 사용할 수 있도록 필요한 리소스와 설정을 준비하고 제공하는 과정을 의미합니다. 이는 다양한 IT 환경에서 여러 가지 형태로 나타날 수 있으며, 다음과 같은 주요 유형이 있습니다:
서버 프로비저닝: 서버 하드웨어를 설치하고 운영 체제, 애플리케이션 소프트웨어 및 네트워크 설정을 구성하여 서버를 사용 가능한 상태로 만드는 과정입니다.
네트워크 프로비저닝: 네트워크 장비를 설정하고 네트워크 연결을 구성하여 장치와 시스템 간의 통신을 가능하게 하는 과정입니다.
스토리지 프로비저닝: 스토리지 디바이스나 클라우드 스토리지 리소스를 할당하고 구성하여 데이터 저장을 가능하게 하는 과정입니다.
사용자 프로비저닝: 시스템이나 애플리케이션에 접근할 수 있도록 사용자 계정을 생성하고 필요한 권한을 부여하는 과정입니다.
서비스 프로비저닝: 특정 IT 서비스(예: 이메일, 데이터베이스, 웹 호스팅 등)를 설정하고 구성하여 사용자가 사용할 수 있도록 준비하는 과정입니다.
프로비저닝은 자동화 도구를 사용하여 효율적으로 수행될 수 있으며, 이를 통해 시간과 인력을 절약하고 오류를 줄일 수 있습니다. 대표적인 도구로는 Ansible, Terraform, Chef, Puppet 등이 있습니다.
MVP:
프론트엔드에서 MVP(Minimum Viable Product)를 만들 때의 구조는 기본적으로 최소 기능을 갖춘 제품을 신속하게 개발하고 배포하기 위한 간단하고 효율적인 구조를 말합니다. 이러한 MVP 구조는 다음과 같은 요소를 포함할 수 있습니다:
폴더 구조:
src: 소스 코드를 담는 폴더.
components: 재사용 가능한 UI 컴포넌트를 담는 폴더.
pages: 페이지 단위의 컴포넌트를 담는 폴더.
assets: 이미지, 폰트 등 정적 자원을 담는 폴더.
styles: 스타일 시트를 담는 폴더.
utils: 유틸리티 함수들을 담는 폴더.
services: API 호출 등을 처리하는 서비스 모듈을 담는 폴더.
StringT0kenizer 클래스로 문 자열 분리하기! split 비교.
'PROGRAMMING > 면접준비' 카테고리의 다른 글
Db관련 정리 (0) | 2024.06.09 |
---|---|
SWT & RCP & SWING (0) | 2024.04.13 |
파티셔닝 (DB 유지보수 팁) (1) | 2024.04.12 |
도서 개발자 기술면접 (면접 질문 정리) + 개인적으로 정리한 것 (0) | 2024.04.11 |
네트워크 프로토콜 (0) | 2024.03.24 |