본문 바로가기

Programming/프로그래밍 내용 정리

(22)
[k8s] 모니터링 시스템을 구축했다. (Fluentd, Elasticsearch, Kibana) [ 프롤로그 ] 회사에서 쿠버네티스를 도입한 지 얼마 되지 않았다. 쿠버네티스 모니터링 시스템을 구축하라는 명을 받고 Fluentd와 ElasticSearch 그리고 Kibana와 연결한 내용을 정리하였다. [ 상황 ] (1) 모니터링 시스템을 구축하기 위해 ElasticSearch와 Kibana를 만들었다. 참고로 ElasticSearch는 VM으로 만들었다. 이유는 안정화를 높이기 위해 모니터링 시스템은 쿠버네티스 노드와 격리된 환경에서 구축하는 것이 좋다고 생각했기 때문이다. (2) 로그 수집을 담당하는 Fluentd는 Kubernetes DaemonSet을 이용하여 각 노드에 설치하였다. 결론적으로 말하면 나는 Fluentd와 ElasticSearch Kibana를 연결하기 위해 아래와 같이 4가..
[쿠버네티스] cronjob.yaml - error converting YAML to JSON 에러 해결하기 회사 개발 프로젝트에서 쿠버네티스 크론잡을 이용해 포인트를 만료시키는 스프링 배치 코드를 실행시키고 있었다. [ 개발 환경 ] - JAVA : 17 - Spring framework : 3.1.5 - Cloud : Azure 나는 매일 오전 12시 01분에 도는 배치였고, value.yaml 파일은 대략 다음과 같았다. 그리고 이렇게 내가 만든 포인트 만료 배치만 돌릴 때는 문제가 발생하지 않았다. service: "batch" image: repository: 생략 pullPolicy: IfNotPresent tag: "" jobs: - name: expire-point (1번 배치) envFrom: - configMapRef: name: 생략 - secretRef: name: 생략 - secretRe..
[Linux] top과 jstat -gc 명령어로 서버와 GC 살펴보기(with 챗지피티) 📌 크롬은 용량을 너무 많이 차지해....😢 최근에 크롬창을 띄워 스크래핑을 진행하는 서버를 개발하면서 만난 이슈가 하나 있었다. 테스트를 위한 스테이지 서버는 t3.small 인스턴스 유형으로 세팅이 되어 있었는데, 하나의 스크래핑 요청만 진행할 때는 이상없이 진행됐지만 2개의 스크래핑을 동시에 진행하니 서버가 뻗어버렸다. (겨우 2개에 뻗다니 ㄷㄷㄷ) 가장 큰 원인은 스크래핑이 실패하는 경우 무조건 크롬창을 닫아야 하는데, 부분부분 특정 단계에서 크롬창이 닫히지 않고 그대로 떠있어서 크롬이 많은 용량을 차지하고 있었기 때문이었다. (크롬의 용량은 상당히 크다..........!) 그래서 어떤 단계에서든 스크래핑이 실패하면 무조건 크롬창을 닫도록 코드를 수정하니 동시의 2개의 스크래핑 요청이 온다고 해..
[AWS야 제발 친해지자] VPC / 서브넷 / 인터넷 게이트웨이 / 라우팅 테이블 / 로드밸런싱 스케쥴러는 기존에 A web 서버와 같이 쓰고 있어서 subnet이 was와는 다르게 설정되어 있는 상태였는데 설계목적이나 역할로 봤을 때 스케쥴러는 was 쪽 보안그룹이나 network 설정을 공유하고 was subnet에서 실행하는게 맞을 것 같아서 스케쥴러 ec2를 만들려합니다. crm 서버 사양도 조정할 예정입니다. 🤚 왜 이 글을 작성하게 되었는가 회사 업무 슬랙에 개발 실장님이 위와 같이 말씀하셨는데, 단번에 이해되지 않아 난 AWS를 너무 모르는구나 싶어서.... 공부해야 겠다는 마음에 이 글을 작성하게 되었다. 먼저, 위에서 'subnet(서브넷)' 이라는 단어가 등장하는데 서브넷을 이해하기 위해서는 앞서 VPC라는 것을 알아야 한다. 그래서 VPC부터 시작하여 연관된 내용을 하나씩 알아보..
[보안] SQL Injection / PreparedStatement / Statement 🎈 SQL Injection이란? SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다. 🎈 SQL Injection 공격 종류 및 방법 - 논리적 에러를 이용한 SQL Injection 위의 사진에서 보이는 쿼리문은 일반적으로 로그인 시 많이 사용되는 SQL 구문입니다. 해당 구문에서 입력값에 대한 검증이 없음을 확인하고, 악의적인 사용자가 임의의 SQL 구문을 주입하였습니다. 주입된 내용은 ‘ OR 1=1 -- 로 WHERE 절에 있는 싱글쿼터를 닫아주기 위한 싱글쿼터와 OR 1=1 라는 구문을 이용해 WHERE 절을 모두 참으로 만들고, -- 를 넣어줌으로 뒤의 구문을 모두..
왜 프로그래밍 언어에서 0.1 + 0.2 는 0.3이 아닐까요? 🎈결론 인간은 숫자를 표현하기 위해 혹은 연산을 하기위해 10진법을 사용하지만 컴퓨터는 2진법을 사용하기 때문에 그 차이에서 비롯된 오차때문이다. 우리가 12라는 숫자를 컴퓨터에 입력하면 컴퓨터에서는 내부적으로 해당 숫자를 1100(이진법)으로 변환하여 처리한다. 우리가 소수 0.75를 입력하면 컴퓨터에서는 0.11(이진법)으로 변환하여 처리한다. 🎈 그럼 왜 2진수로 표현하는데 오차가 생길까? 0.1(십진법)을 이진법으로 변환하게 되면 0.0001100110011001100110011001....... 과 같이 무한 소수로 정확하게 떨어지지 않는다. 컴퓨터의 메모리는 무한하지 않기 때문에 표현할 수 있는 최대한의 범위 내에서 가장 근접한 값으로 반올림 처리하여 우리에게 결과를 보여준다. 그리고 이로 인..
[네트워크] OSI7계층이 뭔가요? 🎈 OSI (Open Systems Interconnection Reference Model) 7계층이란? 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것이다. 국제표준기구 (ISO)에서 발표한 것으로 '인터넷 연결을 할 때 이렇게 설계를 하면 통신이 정상적으로 작동을 할것이다'라는 권고안이다. 🎈 왜 나눌까? 통신이 일어나는 과정을 단계별로 알 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있기 때문이다. 1. 물리계층 (physical layer) 0과 1로 되어있는 데이터를 전기신호로 바꿔주는 계층이다. 물리계층에서는 0과1로 데이터가 구성이 되고, 통신단위는 'bit'이다. 이 계층에서는 단지 데이터를 전달만 할 뿐 전송하려는 데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 ..
[네크워크] TCP와 UDP의 차이점이 뭔가요? 소켓 프로그래밍이 뭔가요? TCP UDP 연결방식 연결기반 - 연결 후 통신 - 1:1 통신방식 비연결기반 - 연결 없이 통신 - 1:1, 1:n, n:n 통신방식 특징 데이터의 경계를 구분하지 않는다.(byte-stream) 신뢰성 있는 데이터 전송 - 데이터의 전송 순서가 보장됨 - 데이터의 수신여부를 확인 - 패킷을 관리할 필요가 없음 UDP보다 전송속도가 느림 서버소켓은 연결만을 담당 데이터의 경계를 구분함(datagram) 신뢰성이 낮은 데이터 전송 - 데이터의 전송순서가 바뀔 수 있음 - 데이터의 수신여부를 확인안함 - 데이터가 손실되어도 알 수 없음 - 패킷을 관리해주어야함 TCP보다 전송속도가 빠름 소켓 대신 IP를 기반으로 데이터를 전송 UDP는 연결자체가 없어서 서버소켓과 클라이언트 소켓의 구분이 없음 관련 클래..
System.out.println()의 원리가 무엇인가요? 🎈 System.out.println()은 세 부분으로 나눌 수 있다. [ System ] System은 java.lang 패키지의 마지막 클래스이며 JVM이 시작될 때 자동으로 초기화된다. 자바 프로그램은 운영체제상에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 따라서, 운영체제의 모든 기능을 자바 코드로 직접 접근하기 어렵다. 하지만 System클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. System 클래스는 운영체제 시스템과 관련된 기능을 제공하는 클래스이며, 모든 멤버가 기본 static이기 때문에 별도의 인스턴스 객체를 생성할 필요가 없다. 표준 입출력 관리와, 환경 변수 접근, 시스템 속성 , 현재 ms / ns 시각 확인 , 객체 복사 등에 사용된다. [ out ] S..
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) 차이점이 뭔가요? 위 내용대로 엔티티를 작성하면 다음과 같다. [ Member.class ] [ Team.class ] Team과 Member는 양방향 연관관계이고, 연관관계의 주인은 Member이다. 🎈 예제코드 위 예제는 Team 객체와 Member 객체를 각각 만들고 Member 객체의 Setter 메소드를 통해 Team 객체를 셋팅해준 뒤 em.find() 메소드를 통해 Member를 조회한다. 여기서 중요한 점은 Member를 조회했다는 점이다. 👉🏻 FetchType이 EAGER 일 때 쿼리 Member를 조회했는데 Team까지 join되어 쿼리가 나간 것을 볼 수 있다. 👉🏻 FetchType이 LAZY 일 때 쿼리 Member만 조회해온 것을 볼 수 있다. EAGER는 사전적 의미인 열심인, 열렬한 처럼 M..
VPN이란? 🎈VPN 이란? VPN은 Virtual Private Network의 약자로 가설사설망이다. VPN은 모든 네트워크 패킷을 암호화 해서 → VPN 서버에 보내고, (VPN 서버를 통해서) → 인터넷에 안전하게 접속한다. VPN 서버에 연결하면, 인터넷 트래픽이 그 누구도 들여다볼 수 없는 암호화된 터널을 통과하게 된다. VPN으로 https를 지원하지 않는 사이트도 안전하게 접속이 가능하다. 모든 트래픽이 암호화 되기 때문이다. 데이터가 서버에 도착하면 암호 해독 프로세스를 통해 외부 패킷이 제거된다. (복호화) 🎈 VPN은 언제 사용할까? 1. 공공 Wi-Fi를 정기적으로 사용해야 하는 경우 VPN은 공용 Wi-Fi를 이용할 때 꼭 필요하다. 완전한 개인 정보 보호를 원한다면 VPN을 사용하여 인터넷 ..
[내용정리] 토스 SLASH 22 - 토스뱅크의 완전히 새로운 대출 시스템 https://youtu.be/SLamxuykpnw 토스뱅크는 마이크로 서비스의 장점을 그대로 가져오면서 전통적인 금융시스템과의 연계를 새롭게 디자인했다. 마이크로서비스 아키텍처로 구성된 '서비스 서버'와 모놀리틱으로 구성된 '코어뱅킹 서버'를 각각 독립된 API 서비스로 정의했다. 전문방식이 아닌 HTTP API 통신방식이 필요할 경우 코어뱅킹 시스템과 통신하면서 독립된 마이크로 서비스가 비즈니스 로직을 직접 해결할 수 있도록 구성했다. 비즈니스 로직을 처리하는 시스템 구조 뿐 아니라 KCB, NICE와 같은 대외기관과의 통신구조도 새롭게 디자인 했다. 대출이 실행되기 위해서는 고객의 신용정보가 필요하다. 신용정보는 허가받은 기관과의 통신을 통해서 사용할 수 있다. 또한 현재 고객이 가지고 있는 대출정..
카프카(Kafka)란? 🎈카프카(Kafka)란 ? 카프카는 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼이다. 🎈이벤트 스트리밍 플랫폼이란? 이벤트 스트리밍은 DB, 센서, 모바일 장치, 클라우드 서비스 및 소프트웨어 애플리케이션과 같은 이벤트 소스로부터 실시간 데이터를 이벤트 스트림 형식으로 획득하는 방식을 말한다. Kafka는 세 가지 주요 기능을 결합하여 end-to-end 이벤트 스트리밍을 구현할 수 있다. 이벤트 스트림을 지속적으로 발행(publish-write), 구독(subscribe-read) 한다. 이벤트 스트림을 원하는 만큼 내구성 있고 안정적으로 저장(store) 한다. 이벤트 스트림 을 발생 시 또는 소급하여 처리(Proce..
[OS] Context Switching이란? 🎈 Context Switching이란? 여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것 즉, CPU에 실행할 프로세스를 교체하는 기술 🎈 왜 Context Switching이 필요한가? 컴퓨터가 매번 하나의 Task만 처리할 수 있다면? 해당 Task가 끝날때까지 다음 Task는 기다릴 수 밖에 없음 또한 반응속도가 매우 느리고 사용하기 불편함 Task가 동시에 처리되는 것처럼 하기 위해서 어떻게 해야할까? Computer multitasking을 통해 빠른 반응속도로 응답할 수 있음 빠른 속도로 Task를 바꿔 가며 실행하기 때문에 사람의 눈으론 실시간처럼 보이게 됨 CPU가 Task를 바꿔 가며 실행하기 위해 Context Switching이 필..
[자료구조] Linked List(연결 리스트) 와 Array(배열)의 차이 크기 Array 의 size는 반드시 array 선언 시점에 지정되어있어야 합니다. LinkedList 의 size는 다양할 수 있습니다. node 들이 추가될 때 runtime 시점에서 LinkedList size 는 커질 수 있기 때문입니다. 메모리 할당 Array 에서, Memory 는 Array 가 선언되자 마자 Compile time 에 할당되어집니다. 이것을 Static Memory Allocation 이라고 부릅니다. Stack section 에 memory 할당이 이루어집니다. LinkedList 에서, Memory 는 새로운 node 가 추가될 때 runtime 에 할당되어집니다. 이것을 Dynamic Memory Allocation 이라고 부릅니다. Heap section 에 memor..
[운영체제] 프로세스 vs 스레드 vs 멀티스레드 차이점이 뭔가요? 🎈 프로세스 (Process) - 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 한다. - 사용자가 애플리케이션을 실행하면 --> 운영체제로부터 실행에 필요한 메모리를 할당 받아 --> 애플리케이션의 코드를 실행한다. - 이 때 실행되는 애플리케이션을 '프로세스' 라고 한다. (예) 크롬 브라우저 2개를 실행하면, 2개의 프로세스가 생성됨. 이렇게 하나의 애플리케이션은 여러 프로세스를 만들기도 함 🎈 스레드 (Thread) - 사전적 의미 : 한 가닥의 실 - 한 가지 작업을 실행하기 위해, 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 붙여진 이름 - 하나의 스레드 = 하나의 흐름 - 프로세스 내에서 실행되는 흐름의 단위 - 한 프로세스 내에 스레드가 2개라면, 코드가 실행되는 흐름이..
Docker를 사용하여 MySQL 설치하기 1. Docker 설치하기 Docker 홈페이지에 접속하여 OS에 맞는 Docker를 내려 받아 설치한다. $ docker -v 2. MySQL Docker 이미지 다운로드하기 $ docker pull mysql 다음 명령어로 다운로드한 Docker 이미지를 확인한다. $ docker images 3. MySQL Docker 컨테이너 생성 및 실행 (ex) mysql_container 라는 컨테이너 생성 $ docker run --name mysql_container -e MYSQL_ROOT_PASSWORD= -d -p 3306:3306 mysql:latest 4.Docker 컨테이너 리스트 출력 $ docker ps -a 5. MySQL Docker 컨테이너 접속 $ docker exec -it mys..
[Jenkins] CI, CD, 젠킨스에 대해 알아보자
[Git] Git-flow 전략에 대해 알아보자
[내용정리] 모바일 개발자에서 프론트엔드로 전향한 이유 - 드림코딩 엘리 평소에 좋아하는 개발자님인 '엘리'님의 직무전환 스토리를 듣고 태도에서 배울점이 많아 영상 내용을 정리하였습니다. 🙏🏻 www.youtube.com/watch?v=wD8GnE_AJQQ # 결국은 시장성 - 대학생 때부터 시스템 프로그래밍에 대한 관심이 많았음 - 삼성전자에서 근무 시, C와 C++ 임베디드 업무를 하다가 안드로이드가 나오면서 안드로이드 팀으로 반강제적으로 이동하게 됐음 - 미국으로 취업을 준비할 때도, 임베디드 및 스프링 백엔드에 관심이 있었으나 안드로이드에 대한 수요가 높아서 기둥을 세웠던 안드로이드 개발자로 취업함 # 주니어 시절 - 삼성전자에서 근무 시 애플리케이션을 만든 것이 아니어서 실무경력이 부족한 편이었음 - 이를 보충하기 위해 공식사이트에서 다양한 것을 배우고, 운영체제 버..
REST API가 뭔가요? 📍 REST : Representational State Transfer 직역하자면 대표적인 상태 전달 애플리케이션 개발의 *아키텍처 중 하나 (*아키텍처 : 애플리케이션을 설계, 제작하는데 사용하는 패턴과 기술의 총칭) 웹 애플리케이션 상에 존재하는 모든 리소스에 대해 고유의 URI를 부여한 후 HTTP Method(GET, POST, PUT, DELETE)를 이용해 리소스에 대해 *CRUD 명령을 적용 (*CRUD : Create, Read, Update, Delete의 줄임말 ) 📍 REST의 구성요소 3가지 자원 (Resource) - URI : 서버에 존재하는 데이터의 총칭. 모든 자원은 고유의 URI를 가짐 행위 (Verb) - HTTP Method : 클라이언트가 HTTP Method를 이용..
[JAVA] ArrayList가 뭔가요? [ ArrayList ] - 배열을 좀 더 편리하게 사용할 수 있도록 java에서 제공하는 class이다. - 크기를 조정할 수 있는 배열이다. - 배열 크기를 지정하지 않으면, 초기 배열의 크기는 10이다. - 인덱스로 요소를 검색할 수 있다. - 제네릭을 지원한다. - 크기가 고정된 배열과 달리, ArrayList는 새 요소가 추가될 때 자동으로 크기를 늘린다. 그럼 ArrayList는 어떻게 배열의 크기를 조정하는 것일까? add()로 인해 사이즈가 꽉 찼을 시 현재의 1.5배를 증가시켜 새로운 배열을 생성한다. 1.5배 증가시킨 새로운 배열에 현재의 배열을 copy한다. int newCapacity = oldCapacity + (oldCapacity >> 1); is equivalent of mu..