반응형
반응형

📝테크리드(Tech Lead)

주로 소프트웨어 개발 팀에서 기술적 측면에서 팀을 이끄는 역할을 말합니다

프로젝트의 기술적 방향을 제시하고 팀원들을 조직하며 코드 리뷰를 수행하고 프로젝트의 기술적인 책임

 

📝CTO

기술 책임자로서 기업이나 조직에서 기술 전략의 주도를 맡고 있는 직위입니다 CTO는 기술적인 측면에서 기업의 비전을 이끌어 가며 기술적 결정을 내립니다 주로 연구 및 개발, 기술적 혁신, 시스템 아키텍처, 기술 리더십 등을 담당

반응형
반응형

📝MIME 타입

MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘 → 내가 보낸 데이터가 Text이다 또는 엑셀이다 등


MIME 타입의 구조는 매우 간단합니다 '/'로 구분된 두 개의 문자열인 타입과 서브타입으로 구성됩니다 → type/subtype

정해진 것들만 사용하기 때문에 아래 예제를 보시면 이해가 더 쉬울 것입니다

 

  • text (텍스트를 포함하는 모든 문)
    • text/plain → <b> 안녕하세요 </b> → <b> 안녕하세요 </b> 
    • text/html → <b> 안녕하세요 </b> → 안녕하세요
  • image (모든 종류의 오디오 파일)
    • image/jpeg
    • image/png
  • audio (모든 종류의 오디오 파일)
    • audio/mpeg
    • audio/ogg
    • audio/*
  • video (모든 종류의 이진 데이터) 
    • video/mp4
    • applicaiton (모든 종류의 이진 데이터)
    • applicaiton/json


🔗 MIME 타입 정의서
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types

 

MIME 타입 - HTTP | MDN

MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘입니다: 웹에서 파일의 확장자는 별 의미가 없습니다. 그러므로, 각 문서와 함께 올바른 MIME 타입을 전송하도록,

developer.mozilla.org

 

📝싱글톤 패턴

싱글톤(Singleton)패턴은 객체의 인스턴스가 오직 1개만 생성되는 디자인패턴이다
이점은 메모리 측면에서 좋으며 다른 클래스의 인스턴스들이 접근하여 사용할 수 있지만 데이터를 동시에 접근하면 동시성에 문제가 발생할 수 있으니 유의해야한다.

public class Single {

    private static Single singleton = new Single();
    
    private Single() {
        // 생성자는 외부에서 호출 못하도록 private 선언
    }

    public static Singleton getInstance() {
        return instance; // 외부 클래스들이 쓸 수 있도록 static 선언
    }
}

 

⚠️싱글톤 문제점 

  1. 코드 자체가 많이 들어간다
  2. DIP위반 .getInstance를 이용해 구체로 들어가 호출해야한다
  3. private 생성자로 자식 클래스 만들기 어렵다유연성이 떨어지고 안티패턴으로 불린다.

 

📝Chunk 지향 처리

Chunk데이터 덩어리트랜잭션이라고 생각하시면 편하실 거 같습니다
Chunk 지향처리란, 한 번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만든 뒤 Chunk 단위로 트랜잭션을 다루는 것을 의미합니다 여기서 Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우에는 해당 Chunk 만큼만 롤백이 되고 이전에 커밋된 트랜잭션 범위까지는 반영이 된다는 것입니다.

 

📝APM

Application의 성능을 관리하는 서비스로 모니터링, 성능 분석, 장애관리 등 지원한다.

 

📝메모리디비

Memory DB는 Disk-based DB와 달리 말 그대로 외부 저장 장치에 데이터를 저장하지 않고 메모리에서 데이터를 읽고 쓴다 아래 사진과 같은 구조로 접근하기 때문에 Disk-based DB보다 훨씬 속도가 빠르다 하지만 Memory DB는 기본적으로 영속성(persistence)을 보장하지 않는다 즉, 에러 발생으로 갑자기 프로세스가 종료될시 휘발성으로 데이터가 모두 날아갈 수 있다 또한 메모리에 저장하기 때문에 용량에 대한 제약이 있다 한계에 도달하면 기존 데이터를 지우든가 아니면 새로운 데이터를 입력하지 못할 것입니다.

 

출처 : https://constructor.tistory.com/18

반응형
반응형

📝검색엔진

DB에 일반 검색에 문제점들을 해결하기 위해 만들어졌으며 현재에는 검색뿐만 아니라 다양하게 이용되고 있습니다 대표적인 특징들은 아래와 같습니다

 

💗장점

  • 전문 검색
    • 데이터베이스로 처리하기 어려운 대량의 비정형 데이터 검색이 가능하다
    • 예를 들면 "다이슨선풍기" 라는 키워드로는 "다이슨 DP-03 퓨어쿨 선풍기" 를 조회할 수 없습니다 하지만 "다이슨 / DP-03 / 퓨어 / 쿨 / 선풍기" 라고 검색엔진이 형태소 분해를 했을 때는 조회가 가능합니다
  • 동의어 검색
    • 예를 들면 검정 구두라고 했을 때 블랙 구두도 나오게 하고 싶을 때 사용하기 좋습니다.
  • 복잡한 정렬 가능
    • 일반적으로 관련성이 높은 레코드를 상위에 노출하는게 중요합니다
    • 색인된 데이터들로 적합도 점수를 매겨서 빠르게 정렬 및 다양한 정렬을 할 수 있게 해줍니다

 

엘라스틱에서는 BM25라는 알고리즘을 사용합니다.

TF문서내 검색 키워드의 단어 빈도수가 높을 경우 점수가 높아진다

("치킨" 이라는 키워드가 본문에 50개가 나왔다 등)

 

DF는 단어 빈도수가 많을 수록

IDF의 경우 전체 문서에서 검색 키워드의 빈도수가 높을수록 검색 점수는 낮아진다.

(필요 없는 단어라는 취급 예를 들면 "조사", "숫자" 등)

 

TF와 IDF의 적절한 조합으로 인해 만들어진게 BM25라는 엘라스틱 자체 적합도 알고리즘

 

⚠️단점

  • 색인 처리를 한 후에 검색을 할 수 있기 때문에 실시간 처리는 불가능하다.
  • 트랜잭션(Transaction) 롤백(Rollback) 등의 기능을 제공하지 않는다
  • 분산 시스템 구성의 특징 때문에, 시스템적으로 비용 소모가 큰 롤백, 트랜잭션을 지원하지 않습니다 그래서 데이터 관리에 유의해야 합니다.


엘라스틱서치에는 물론 업데이트 명령이 있습니다만, 실제로는 데이터를 삭제했다가 다시 만드는 과정으로 업데이트됩니다 이러한 특성은 나중에 불변성(Immutable)이라는 이점을 제공하기도 합니다.

 


📝DB vs 검색엔진

 

DB로도 충분한데 왜 검색엔진을 쓰냐라고 하시는데 검색엔진은 검색에 특화되어있는 솔루션으로 검색에서 위에 설명한 거 같은 장점이있습니다.

 

📝동작 방식 (역인덱싱)

검색엔진은 색인이라는 역인덱싱과정을 채택하는데 색인과정을 거칠시 형태소가 분해되어 각 형태소가 몇번째에 레코드와 관련있는지에 대해서 표시를 해줍니다. 그래서 짜장면을 검색할시 형태소에서 찾아 얘는 관련되어 있는 레코드는 1번이네? 이러면서 찾아갑니다

 

물론 미리 색인작업을 거쳐야하기 때문에(빨리 찾아갈 수 있게끔) 실시간이 상황에 따라 어렵다는 단점이 있습니다.

 


📝Solar vs Elastic

 

오픈소스 검색엔진이 두개가 있습니다. (Solar와 Ealstic Search)

어떤 글에서는 Solar보다 Elastic이 더 빠르다 아니다 이런 글들이 많은데 솔직히 핵심기능 측면에서는 큰 차이는 없어보입니다.

 

  • Solar
    • 자유도가 높습니다 개발자 중심의 API를 가지고 있습니다.
    • 대시보드를 제공하지 않지만, 외부 시각화 도구와 연동할 수 있습니다.
    • Solr은 일괄 처리 방식을 사용하여 변경 사항이 검색 결과에 반영되기까지 시간이 걸릴 수 있습니다 이는 Solr이 변경 사항이 발생할 때마다 색인을 업데이트하는 것이 아니라 변경 사항이 축적된 후 일괄 처리를 수행하기 때문입니다.

 

  • Elastic
    • 자유도는 높지 않지만 다양한 API를 제공하기 때문에 필요한 건 웬만해서 구현이 다 가능합니다
    • 대시보드를 따로 제공해주고 있습니다 (Kibana)
    • Elasticsearch는 변경 사항이 발생할 때마다 실시간으로 검색 색인을 업데이트하므로, 변경 사항이 바로 검색 결과에 반영됩니다 Elasticsearch는 분산 아키텍처와 실시간 검색 성능에 대한 요구 사항이 높은 대규모 애플리케이션에서 사용하기 좋습니다

 

기술적인 장단점에 차이는 없는 것 같고 커뮤니티 활성도등을 따지는게 좋을 거 같습니다 저 같은 경우는 엘라스틱을 선택해 사용중입니다.

반응형
반응형

 📝약타입

다른 타입으로 변환이 가능하며 심지어 암묵적으로 변화을 해주기도 한다

int a = 1;
float b = 1.1f;
float c = a + b;

 

📝강타입

다른 타입으로 변환이 금지 되었고 명시적으로 타입을 선언해줘야한다

int a = 1;
String b = "Hello"
String c = a + b;

 

 

📝MView

물리적으로 존재하는 테이블로 데이터가 일정 공간을 차지한다는 특징이 있습니다

MView는 특정 결과를 생성하는 쿼리가 자주 사용되거나 실행 시간이 많이 소요되는 조인이나 복잡한 SQL에 대한 성능을 향상시키기 위해 사용한다

기존의 뷰(View)와는 달리, MView는 실제 데이터를 저장하고 있어 해당 값을 빠르게 조회 데이터 웨어하우 (Data Warehouse)나 대규모 데이터베이스 환경에서 효과적으로 사용될 수 있습니다

 

📝Base64

 

데이터를 64진법으로 표현하는 방식으로 2^6 =64 → 6bit로 문자 한개를 표현한다 (이진데이터 → 텍스트 형식 변환)

6bit를 4개씩 모아 변환하는데 이 때문에 비는 공간이 발생한다 빈공간은 = 문자로 채운다

Base64로 인코딩시 데이터의 크기는 33%증가하게 된다.

 

 

UTF-8하고 인코딩하는게 비슷해보이지만 UTF-8의 경우 문자 인코딩에 특화되어있어서 HTML, 텍스트 파일, 문자에 대해서는 사용되지만 엑셀, 이미지와 같은 이진데이터의 경우 Base64를 사용해서 보낼 수 있다

 

  • UTF-8
    • 문자열 → UTF-8 인코딩 → 이진형태로 변환 후 데이터 전송 → 이진형태 디코딩 → UTF-8 디코딩 → 문자열
  • Base64 (엑셀파일 기준)
    • 엑셀 파일 (데이터 이진 형태) → Base64 인코딩 문자열 전송 (이진형태로 데이터를 안 보내도 전송할 수 있게 설계되어있음) → Base64 디코딩 → 이진형태 Content Type에 맞게 해독

 

 

📝CI(Continuous Integration) / CD(Continuous Delivery, Continuous Deployment)

CI/CD 개념은 소프트웨어 개발 생명주기를 자동화하고 가속화하여 효율성을 높이고 신속한 소프트웨어 제공 가능

많이 사용하는 제품으로 Jenkins가 있다

 

📝CI (Continuous Integration)

CI는 "지속적 통합"을 나타내며 소프트웨어 개발에서 발생할 수 있는 문제를 조기에 감지하고 해결하기 위한 개발 방법론으로 개발자들이 코드를 중앙 저장소에 푸시할 때마다 자동으로 빌드 및 테스트를 수행합니다 이를 통해 코드 변경 사항의 통합이 지속적으로 이루어지며, 팀 내에서 코드 품질을 높이고 오류를 조기에 발견할 수 있습니다

 

💗장점

  1. 코드 퀄리티 향상 → 반드시 유닛테스트가 필요하기 때문에 그에 맞는 방향으로 개발해 실수를 줄인다.
  2. 즉각적인 버그 알림 → 유닛테스트 후 문제가 생긴 곳을 개발한 개발자에게 즉각 알림

 

📝CD (Continuous Delivery, Continuous Deployment)

CI를 기반으로 하는 지속적인 전달과 배포를 의미

  1. Continuous Delivery (CD):
    • Continuous Integration에서 온 테스트 및 빌드 단계를 통과한 코드를 자동으로 운영 환경에 배포 가능한 상태로 만듭니다
  2. Continuous Deployment (CD):
    • Continuous Integration에서 테스트 및 빌드를 통과한 코드가 자동으로 실제 운영 환경에 배포됩니다

 

📝쿠버네티스

컨테이너 관리 툴로서 나뉜 걸 배포하려고 할 때 수동으로 하나하나씩 올리기 힘들기 때문에 자동화 해주고 컨테이너를 모니터링해주고 죽은 즉시 바로 재시작을 시켜준다

컨테이너를 미리 카피하고 만들어 부하분산을 해준다.

 

 

 

 

 

🔗 참고 및 출처

https://www.youtube.com/watch?v=4oSS6xZ_fuM

https://velog.io/@jee/%EA%B0%95%ED%83%80%EC%9E%85%EA%B3%BC-%EC%95%BD%ED%83%80%EC%9E%85-%ED%98%B9%EC%9D%80-%EC%A0%95%EC%A0%81%ED%83%80%EC%9E%85%EA%B3%BC-%EB%8F%99%EC%A0%81%ED%83%80%EC%9E%85

 

반응형
반응형

📝프론트엔드 개발자

주로 HTML, CSS, JavaScript 등을 사용하여 웹 페이지나 애플리케이션의 시각적인 부분을 담당합니다

백엔드로 부터 데이터를 받아와 데이터를 보여주는 등의 역할

 

📝백엔드(서버쪽)

데이터베이스와의 상호작용, 서버 로직 구현 등을 담당하여 프론트엔드가 필요로 하는 데이터를 처리하고 전달

 

📝모바일개발자

Android나 iOS 플랫폼에 맞게 앱을 디자인하고 개발

 

📝애플리케이션개발자

다양한 플랫폼에 적용되는 소프트웨어 애플리케이션을 개발응용 프로그램, 모바일 앱 등

 

📝게이밍 플레이 개발자

게임의 사용자 경험을 개선하고 다양한 게임 요소를 설계하며 게임 플레이를 개발모든 환경 움직임 코드로 구현

 

📝게이밍 엔진 개발자

게임 엔진을 개발하거나 기존 엔진을 수정하여 게임의 핵심 기능을 구현물리 엔진, 그래픽스, 사운드 처리 등에 전문화

 

📝보안 개발자

소프트웨어와 네트워크 시스템의 보안을 담당

 

📝백엔드 시스템 플랫폼 개발자

대규모 시스템의 백엔드 인프라를 개발하고 관리합니다 → 분산 시스템, 클라우드 서비스, 데이터베이스 관리 등에 전문화

반응형
반응형

📝SGML 

<QUOTE TYPE="example">
	typically something like <ITALICS>this</ITALICS>
</QUOTE>
<!-- <QUOTE>, <ITALICS>을 의미 -->

다양한 마크업 언어를 만들 수 있는 범용 메타(추가적인 정보) 언어로 매우 복잡하며 사용자 정의 언어를 만들 수 있는 유연한 구조를 가지고 있다 → SGML에서 파생된 건 HTML, XML이 존재

 

📝XML

<?xml version="1.0" encoding="UTF-8"?>
<addressBook>
  <contact>
    <name>John Doe</name>
    <email>john.doe@example.com</email>
    <phone>123-456-7890</phone>
  </contact>
  <contact>
    <name>Jane Smith</name>
    <email>jane.smith@example.com</email>
    <phone>987-654-3210</phone>
  </contact>
</addressBook>

SGML에서 파생된 언어SGML보다 간단하며 미리 정의된 규칙에 따라 작성을 해야한다 유효성 검사를 위해 DTD 또는 XML 스키마를 사용한다

 

📝DTD

XML에서는 자유롭게 태그를 정의하여 문서를 작성 할 수 있지만, 어떤 태그를 사용할지 XML 문서의 구조를 결정 해두면 유용하다. XML은 구조를 작성할 때 DTD라는 언어를 사용한다.

 

XML 태그를 마음대로 정할 수 있지만 이러한 형태로 써라라는 걸 선언한 경우 더 효율적이다.

(서로 관계가 있는 매장하고 거래를 할 때 데이터 이름을 어떻게 할지에 대한 프로토콜 정의)

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE 재고정보[
    <!ELEMENT 재고정보 (상품)>
    <!ELEMENT 상품 (이름, 개수)>
    <!ELEMENT 이름 (#PCDATA)>
    <!ELEMENT 개수 (#PCDATA)>
]>

<재고정보>
    <상품>
        <이름>책장</이름>
        <개수>12</개수>
    </상품>
</재고정보>

 

 

🔗 참고 및 출처
https://araikuma.tistory.com/769

 

반응형
반응형

📝서버

서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터입니다.

레이어 7계층을 다 사용할 수 있습니다 → 즉, L2, L3, L4, 스위칭 등 다 만들 수 있습니다.

 

📝DNS 플러시 

캐싱이라는 것으로 한번 들어간 서버의 DNS 정보를 가지고 있어서 빠르게 다시 접속할 수 있게 도와줍니다 → 도메인이름으로 DNS서버를 거쳐서 아이피 정보를 가져오는 작업을 안 해도 됨

하지만 서버가 이전될 시 DNS가 변경되기 때문에 캐싱을 강제로 초기화(DNS 플러시)를 하지 않으면 옛날 아이피로 계속 들어갈 수 있습니다. 그래서 서버 이전시에 해당 작업이 필요합니다.

 

📝웹 방화벽

웹 애플리케이션 보안에 특화되어 개발된 솔루션입니다. 웹방화벽의 기본 역할은 그 이름에서도 알 수 있듯, SQL Injection, Cross-Site Scripting(XSS)등과 같은 웹 공격을 탐지하고 차단하는 것입니다. 

 

📝방화벽

일반적인 방화벽은 모든 포트를 차단하여 외부에서 내부 시스템으로의 불법 접근을 막습니다

네트워크 보안을 강화하기 위한 핵심적인 보안 장치 중 하나

 

📝IDS (Intrusion Detection System)

네트워크나 시스템에서 발생하는 이상 행위를 감지하여 경고를 발생시키는 시스템 → 침입탐지시스템

 

📝IPS (Intrusion Prevention System)

IPS(침입방지시스템)는 IDS와 비슷하지만, 이상 행위를 탐지하는 것뿐만 아니라 실시간으로 침입을 방지하도록 설계

 






 

 

반응형
반응형

📝개발서버

말 그대로 개발하기 위한 서버입니다.

 

📝스테이징서버

개발은 계속 이루어져야하고 버전별로 운영서버로 배포하기 전에 두는 서버입니다.

 

📝운영서버(리얼서버)

실제 운영되는 서버로서 사용자들이 사용하는 서버입니다.

 

📝정적바인딩

실행 이전에 값이 확정되는 경우로 컴파일 타임에 호출될 함수가 결정된다 → Final과 같은 고정 상수를 의미한다 즉, 바뀌지 않으며 무조건 고정적인 값을 의미
정적 바인딩은 컴파일 시 이미 값이 확정되어있기 때문에 실행시 속도 효율이 높아진다

 

📝동적바인딩

실행 이후에 값이 확정되면 동적 바인딩이라 한다 → 로직을 통해 A라는 사용자는 C라는 결과가 B라는 사용자는 D라는 결과가 이런식으로 바뀌는 걸 의미한다

코드 한개로 다양한 경우에 처리가 가능하지만 그냥 무지성으로 코딩하면 메모리 공간 낭비, 속도 이슈 등이 있을 수 있다

 

📝HR (인적자원관리)

조직의 목표를 이루기 위해 필요한 인적 자원을 확보·개발·활용하는 활동을 계획하고 관리하는 일련의 과정이다

 

📝그룹웨어

협업 시스템으로 연차관리, 일정관리 등.. 업무 효율을 높여주는 사내 사이트를 의미한다.

 

📝WBS

프로젝트의 전체 일정수립 및 관리 문서​이다.

 

📝ISP

인터넷을 제공하는 공급자란 의미로 국내 기업에는 KT, SKT 등이 있습니다 또한 밖에서 사용자들이 이용할 수 있는 서버를 임대할 때 클래스개념으로 ISP에서 할당해줍니다.

반응형
반응형

📝프롬프트, 명령프롬프트(cmd)

컴퓨터가 입력을 기다리고 있음을 나타내는 표시

명령프롬프트(cmd) → 명령을 기다리고 있다

 

📝CLI (Command line interface)

명령 줄 인터페이스 [대화식인터프리터]로 키보드로만 써서 다 할 수 있다
cmd를 통해서 작업하는 방식을 생각하면 이해하기 쉽다

 

📝GUI

사용자가 컴퓨터와 정보를 교환할 때 그래픽을 통해 작업할 수 있는 환경을 말한다 → 예시) 아이콘
마우스 등을 이용하여 화면에 있는 메뉴를 선택하여 작업을 할 수 있다

 

📝Compilation 플랫폼 의존적

OS별로 컴파일 방법이 다 다르기 때문에 OS에 따라 실행할 수도 있고 못할 수도 있다 → 기계어가 다름

 

📝Interpretation 플랫폼 독립적 

Compilation의 경우 OS별로 컴파일 방법이 다 다르지만 Interpretation 플랫폼의 독립적이면 어떤 중간 장치(Java의 경우 JVM이 될 수 있다) 각 OS에 맞게 변환 해 컴파일을 해준다

 

📝Kotline

JetBrain을 만든 회사가 만들었으며 JVM에서 동작하는 크로스 플랫폼 오픈소스 프로그래밍 언어로 자바와 호환이 가능하고 서로의 코드로 변환 시키는게 가능하다. → 안드로이드 스튜디오를 이용해 코틀린 자료를 자바로 변환하여 사용가능하다
코틀린과 스프링을 접목시킨 코프링이라는 것도 존재한다.

  • Null Safe (Null에 대한 자동 처리)
  • corouting (많은 걸 한번에 실행가능한 코드 생성 가능) → 실제 써먹을 정도인지는 안 해봐서 모름
  • 코틀린 → JS로 컴파일 (Node.js, React.js와 호환 가능) → 실제 써먹을 정도인지는 안 해봐서 모름

 

📝exe 파일 장점

exe 파일은 실행 파일로, 컴파일된 코드를 포함하며 소스 코드를 숨기고 보호하는 기능

반응형