Judy Life 🐰
최신 글
- 금융 용어 정리 경제 뉴스를 읽고 있는데 읽다보니 모르거나 생소한 단어가 많아서 정리해보자!계속 여기에 추가해야지!한국은행에서 제공하는 경제금융용어집과 한경경제용어사전을 활용하자! 미국 소비자물가지수(CPI)소비자물가지수(CPI)는 소비자 관점에서의 상품 및 서비스 가격 변동을 측정한다.소비자들이 가장 많이 지출하는 상품을 대상으로 각 가격을 가중 평균 방식으로 계산하여 구하는 대표적인 물가 지수이디. 구매 동향 및 인플레이션의 변동을 측정하는 중요한 방법이다.실제 수치가 예상치보다 높은 경우 미달러화 가치 및 전망이 긍정적이라는 뜻이며, 낮은 경우 부정적임을 의미합니다. 워크아웃워크아웃(workout)은 기업 독자적으로 이행하기 어려운 기업 내부의 구조조정작업을 채권 금융기관이 주도하여 진행하며 그..
- [전산 공부] 소프트웨어 개발 보안 🔹 소프트웨어 개발 보안 ✔️ Secure SDLCCLASP: SDLC의 초기 단계에서 보안을 강화하기 위해 개발된 방법론Seven Touchpoints: 소프트웨어 보안의 모범사례를 SDLC에 통합한 방법론 ✔️ 소프트웨어 개발 보안 요소1) 기밀성(Confidentiality)시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용됨정보가 전송 중에 노출되더라도 데이터를 읽을 수 없음2) 무결성(Integrity)시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있음 3) 가용성(Availability)인가받은 사용자는 시스템 내의 정보와 자원을 언제라도 사용할 수 있음 4) 인증(Authentication)시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지를 확인하는 모든 행위..
- 다시 돌아온 병아리 신입 주디 #1 Batch 처리에 대해 알아보자 🫧 휴.. 금융권에서 풀스택 하게 될걸 각오하고 왔는데 정말 운 좋게도 모바일 팀에 들어가게 되어서 서버 개발을 하고 있다..! 정말 자바 쓸 수 있는 것만으로도 행복🕺✨ /** 실제로 동기들은 자바 쓰는 팀이 거의 없다. tmi로 금융it를 준비한다면 쿼리 짜는 거!! 진짜 중요!! 별표 다섯 개⭐️⭐️⭐️⭐️⭐️ 🐰: SQLP도 따고 싶은데.. 아 너모 어려와여.. SQLD랑 난이도 격차가 너모 큰 거 아니오? 🤖: 변명이야!!! 공부해!!! 🐰: 넵.. **/ 그래도 혹시나 하는 마음으로 최근엔 프론트 코드도 보면서 공부하고 있었는데 완전 서버 개발로 직무를 주셔서(?) 안심하고 다시 서버 공부로 돌아왔당..! 아직 크게 업무가 많지는 않아서 이럴 때 많이 많이 공부해 두자!! 회사 내부 배치 시스템을..
- [전산공부] 소프트웨어공학 + 최신기술 * 소프트웨어 공학: 소프트웨어의 위기를 극복하기 위한 방안으로 연구된 학문이며, 여러 가지 방법론과 도구, 관리 기법들을 통하여 소프트웨어의 품질과 생산성 향상을 목적으로 한다. 1) 프로세스와 방법론✔️ 요구사항 개발 프로세스도출 > 분석 > 명세 > 확인 * 요구사항: 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는데 필요한 제약조건4가지 유형: 기능, 비기능, 사용자, 시스템 요구사항 기능적 요구사항 Vs 비기능적 요구사항기능적 요구사항 : 시스템이 실제로 어떻게 동작하는 지에 관점을 둔 요구사항비기능적 요구사항 : 시스템 구축에 대한 성능, 보안, 품질, 안정 등에 대한 성능, 보안, 품질, 안정성등으로 실제 수행에 보조적인 요구사항 [ 요구사항 도출 ]..
- [전산공부] 데이터베이스 1) 데이터베이스 시스템✔️ 스키마외부 스키마 : 프로그래머나 사용자의 입장에서 데이터베이스 정의여러 개의 외부 스키마가 존재 O (공용 가능)전체 논리적 일부분 표현 → Subschema라고 한다.개념 스키마 : 범 기관적인 입장에서 데이터베이스 정의조직 전체 데이터베이스의 논리 구조하나만 존재개념 스키마와 외부 스키마 사이에는 논리적 데이터 독립성이 있어야 한다.데이터베이스 내에는 하나의 개념 스키마 존재개체, 관계, 제약조건, 접근 권한, 보안 정책, 무결성 규칙에 관한 명세내부 스키마 : 물리적 저장 형태를 기술하는 것개념 스키마에 대한 저장구조를 정의 - 논리적 데이터 독립성: 데이터의 논리적 구조가 변경되어도 응용프로그램은 변경되지 않는 속성- 물리적 데이터 독립성: 내부 스키마(물리적 구조)..
- 광기의 직장인🐰, 알차게 하루를 채워나가자 여전히 도파민 중독에 허우적거리는 주디는 하루를 좀 더 알차게 보내고 싶다. 그러다 보니.. 광기의 직장인이라는 소문이 퍼지게 되고..👥웅성👥웅성웅성👥 🐰 요랬는데 😈 요래됐슴돠~ 평소에 갓생살기, 미라클모닝이라는 단어에 거부감을 가지고 있었다. 내 루틴에 이런 단어를 붙이기에는 나는 갓생이 아니라고 생각하기도 했고 꼭 해내야 한다는 강박을 가지고 싶지 않았다. 운동을 할 때나 루틴을 시작할 때 강박을 가지지 않는 게 가장 중요하다고 생각하고 지금까지 강박을 가지지 않았기 때문에 나에게 꾸준히 해낸 일이 하나씩 쌓여가고 있다고 생각한다. 그런데 취업을 하고 내가 하고 싶은 공부, 취미, 운동, 약속을 모두 소화하기엔 직장인의 일주일은 절대적으로 너무나 짧았다. 2023년까지만 해도 모든 일을 퇴근 후에 ..
- [전산공부] 운영체제 1) 개념운영체제 발달 과정일괄처리 → 시분할 → 다중모드 → 분산처리커널(Kernel): 메모리에 상주하면서 하드웨어 자원 관리, 여러 자원을 배분하고 관리하는 핵심 역할 수행하는 운영체제 모듈C언어 컴파일 과정전처리기 → 컴파일러 → 어셈블러 → 링커 → 로더원시 프로그램 → 목적 프로그램 과정원시 프로그램 → 어휘 분석 → 구문 분석 → 의미 분석 → 중간코드 생성 → 코드 최적화 → 목적 코드 생성 → 목적 프로그램스풀링CPU와 입출력 장치의 속도 차이를 줄이기 위해 보조기억장치(HDD, SDD)의 일부를 버퍼처럼 사용한다.버퍼링CPU와 입출력 장치의 속도 차이를 줄이기 위해 주기억장치(DRAM)의 일부를 버퍼처럼 사용한다.2) 프로세스와 스레드[ 메모리 ]데이터 영역: 정적 변수, 전역변수스택 ..
- [전산 공부] 데이터 통신 1) 개념[ 통신 방법 ]Bluetooth: 휴대폰과 그 주변장치를 연결하는 무선 솔루션, IEEE 802.15.1 표준으로 채택된 통신 방법10m 안팎의 근거리 무선 통신 기술ISM 주파수 대역인 2,400 ~ 2,483.5HZ를 사용한다.기기 간 마스터와 슬레이브 구성으로 연결된다.RFID: 무선주파수를 이용하여 반도체 칩이 내장된 태그와 리더기로 구성된 인식시스템NFC: 13.56MHz의 대역을 가지며, 아주 가까운 거리 무선 통신 기술, 교통, 티켓, 지불 등 여러 곳에서 사용된다.ZigBee: IEEE 802.15.4 기반 PAN 기술로 낮은 전력을 소모하면서 저가의 센서 네트워크 구현에 최적의 방안을 제공하는 기술 [ 네트워크 토폴로지 ]스타: 각 장치는 허브라는 중앙 제어기와 point-to..
- [전산 공부] 자료구조 1) 연결리스트(Linked List)각 노드는 데이터 필드 + 링크 필드(포인터)로 구성되어 있다.포인터가 다음 노드를 가리키는 구조로, 전체 노드는 서로 연결되어 있다. Q. 새로운 노드 삽입 (1 -> 2 사이에 3 삽입)- 3 노드의 링크가 2를 가리키게 한다.- 1의 링크가 3을 가리키게 한다. (즉, 1이 원래 3을 가리키고 있는 링크를 3 노드가 가져오면 된다.)newNode(3 노드) -> link = preNode(1 노드) -> link; 2) 스택(Stack)[ 수식의 표기법 변환 ] 연산 우선순위에 따라 괄호를 묶어서 그것을 한 묶음으로 보고 변환해주고 그걸 또 하나의 덩어리로 보고 전환 Q. 예시 문제 문제 해설전위 표기법(prefix)-연산자가 앞에중위 표기법(infix)-연산..
- [전산 공부] 컴퓨터 구조 소프트웨어 기초도 공부하는 주디!개인 공유용으로 기록!1) GPUGPGPU(General-Purpose computing on Graphics Processing Units) 기술GPU에서 그래픽 연산 이외의 목적을 가진 프로그램을 실행할 수 있도록 해주는 기술많은 수의 단순 ALU가 있어 높은 수준의 병렬 처리가 가능하고, 이로 인해 CPU에 비하여 프로그램 병렬 처리 속도가 높아진다.OpenCL을 이용하여 프로그래밍할 경우 다양한 제조사의 GPGPU 기기에서 실행 가능한 프로그램을 작성할 수 있다.GPU는 CPU에 비해서 대량의 간단한 연산을 병렬로 빠르게 처리하는 데 적합한 구조이다. 2) CPU : 중앙처리장치[ 제어 CPU 레지스터 ] 1. 명령어 레지스터(IR, Instruction Regi..
- 신입직원 공동연수 후기 회사나 취업 후기 같은 글들은 기존에 비공개로 많이 작성했는데 이번 후기 글에서는 연수 내용에 대한 글은 작성하지 않고 연수원 활동에서 느낀 점, 새로 지어진 연수원 후기로 글을 작성해보고자 한다. 💙 신입직원 공동 연수 💙 일시: 2023.12.26(화) ~ 12.29(금) (3박 4일) 장소: 신한은행 블루캠퍼스 대상: 하반기 공채 입사자 최근 3박 4일 동안 그룹사 공동연수를 다녀왔다. 우리 회사는 1년에 보통 한 번 공채를 진행한다. 그리고 나는 9월에 입사하여 하반기 입사자로 분류됐다. 9월에 따로 계열사 연수는 받았고, 이번에 다녀온 연수는 공동 연수다! 어린 학생 시절에는 회사 연수에 대한 로망이 있어서 꼭 연수하는 회사에 가고 싶다는 생각도 있었는데 이번에 원 없이 다녀와서 로망 하나 실현..
- [금융, 경제 알아가기] #1 금융기관과 캐피탈 그룹 공동연수를 마치고 돌아온 박주디. 도착하자마자 공부를 시작하는데!! 도착하자마자 노트북 켠 정윤. 매우 칭. 찬. 해. 👏 🐰 : 절대 절대 벌금 때문에 그런거 아님. 🙅♀️ 🤖 : 확실함? 🐰 : 넘어가 넘어가~ 유익한 강의를 듣고 의지가 뿜뿜한 시점에서 아직 서툴고 전문적이지 않더라도 차근차근 하나씩 알아가자는 취지에서 글을 시작한다! 1. 금융기관이란금융기관들은 은행법 등 관련 법 적용 여부에 따라 공식적인 용어는 아니지만 제1금융권, 제2금융권, 제3금융권으로 나뉜다. 여기서 은행업은 예금 등을 통해 자금을 조달하여 다수의 기업에 대출하는 사업이다. 예금이자보다 대출이자를 높게 받아서 그 차이로 수익을 내는 것을 예대마진이라고 한다. 수신: 금융소비자로부터 자금이나 신용을 받는 것여신: 돈..
- [DB] Lock을 활용한 Concurrency Control 기법 다시 돌아온 CS 공부하는 주디! 블로그 포스팅 스터디를 하고 있지만 이미 벌금 12000원을 납부한 그녀.. 🤖 : 야 너 취업하더니 의지가 다 어디 갔냐 🐰 : 칼퇴해도 운동하고 집 가면 하루가 없다고!!! 🤖 : 변명이야!!! 열공해라 주디 🐰 : ㄴ ㅔ . . . 오랜만에 CS 공부하러 출~발~ ⛄️ DB Locking 오늘은 Lock을 활용한 Concurrency Control 기법을 공부해보려고 한다. Concurrency Control 기법?! 오!! 이거 주디 블로그 시리즈물 아닌가? 맞다!! 아래 내용을 참고하면 된다! [DB] 트랜잭션 #1 | 개념과 ACID 속성 [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) [DB..
- [알고리즘] 최소 공통 조상(LCA) 알고리즘 🧩 최소 공통 조상(LCA) 알고리즘 최소 공통 조상(LCA): 두 노드의 공통된 조상 중에서 가장 가까운 조상을 찾는 문제 여기서 3번 노드와 11번 노드의 공통 조상 노드는 1번이다. ✔️ 동작 과정 모든 노드에 대한 깊이(depth)를 계산 최소 공통 조상을 찾을 두 노드를 확인 먼저 두 노드의 깊이(depth)가 동일하도록 거슬러 올라간다. 이후에 부모가 같아질 때까지 반복적으로 두 노드의 부모 방향으로 거슬러 올라간다. 모든 LCA(a, b) 연산에 대하여 2번의 과정을 반복한다. 1) 모든 노드 깊이 계산 우선 DFS를 이용해서 루트 노드에서부터의 깊이를 구한다. 2) 공통 조상을 구할 노드 선택 두 노드의 깊이를 맞춰주고, 거슬러 올라간다. 그렇게 2번 노드가 공통 조상임을 찾을 수 있다! ..
- [Oracle] 날짜 데이터 가지고 놀기 📆 📄 TO_CHAR DATE 타입의 데이터를 가지고 원하는 형식으로 출력할 수도 있고 연도, 월, 요일만 추출해서 따로 사용할 수도 있다. 숫자와 날짜 타입을 문자로 변경해주는 형변환 함수이다. ✔️ 날짜, 시간 변환 TO_CHAR(SYSDATE,'YYYY') AS YYYY /* 년도 */ TO_CHAR(SYSDATE,'MM') AS MM /* 숫자 월 표시 */ TO_CHAR(SYSDATE,'MONTH') AS MONTH /* 긴 영문 월 표시 */ TO_CHAR(SYSDATE,'MON') AS MON /* 짧은 영문 월 표시 */ TO_CHAR(SYSDATE,'DDD') AS DDD /* 365일 형태로 일 표시 */ TO_CHAR(SYSDATE,'DD') AS DD /* 31일 형태로 일 표시 */ ..
- [Oracle] 🚂 쿼리 열차 출발합니다~ 시간대 별로 데이터 개수 세기 최근에 쿼리 작성할 일이 많았는데 (다시 시작된 일 찾아서 하는 대견한(?) 주디🐰 하나씩 내 이름으로 올리는 거 제법 재밌단 말이지~?!) 근데 뭔가 검색하면서 쿼리를 작성하니 나중에는 또 까먹고 다시 검색할 것이 눈에 보여 하나하나 간단한 예제로 정리해보려고 한다! (근데 이 정도면 금융권은 알고리즘보다 SQL 문제를 더 내야 한다!!!! 재밌는데 어려워!! 튜닝은 더 모르겠어) 그럼 쿼리 열차 출발~~🚂🚂 비키세요 비키세요 폭주 기관차 주디 지나갑니다 🐰🚂 이 글은 Oracle 기준으로 작성된 글입니다. 🌱 시간대 별로 데이터 개수 세기 ▶️ 요구사항 1시부터 24시까지 각 시간대 별로 데이터의 개수를 출력 데이터가 없는 시간대에도 0이라고 표시해서 데이터 출력 흔히 통계 데이터 조회에서 1시부터 ..
- 드디어 업무를 받을 위기(?)의 주디. Maven+MyBatis로 간단한 예제 만들어보기 (몇 주 전에 올렸는데 왜 노출이 안 됐지..ㅠ) 연수가 끝난 후 본격 부서에 배치된 박주디. 첫 주는 하루에 3잔씩 음료를 얻어먹고, 매일매일 인사하기 바쁘다. 다행히 나는 하루 만에 개발망 피씨를 받았다. 딱히 하는 일이 없었는지 어언 3주. 그리고 그녀에게 곧 서버 개발이 주어질 것이라는 예고장이 날아오는데.. 🥷 : 다음 주에 간단한 개발 건 정리해서 드릴게요. 프로젝트 많이 해보셨어요? 🐰주디 : ㅇ..예..! 자.. 자신 있습니다..! 🤖 : 야! 너 개발 환경 세팅받아서 코드 본 지 2시간이고, 권한 받은 지도 2시간이잖아. 그리고 너 MyBatis 해봤어? JPA만 했잖아. 너 Maven 써봤어? Gradle 썼잖아. 너 SVN 써봤어? 너 Git만 썼잖아. 너 폐쇄방에서 개발해 봤어? 너..
- [AWS S3+Lambda] 이미지 처리 2탄: Image Resizing으로 썸네일 이미지 만들기 📷 이미지 처리1탄에서는 pre-signed URL을 이용해서 이미지 업로드를 구현했다. 근데 실제로 우리가 화면에서 이미지를 보여줄 때 원본 이미지 파일을 전부 보여주기엔 파일이 너무 크다. 그래서 리사이징을 함으로써 데이터를 전송하는 과정에서도 더 효율적으로 서버를 운영하고, 프론트에서 이미지를 렌더링 할 때의 시간도 줄여보자. 📑 목차[AWS S3] 이미지 처리 1탄: Pre-signed URL로 파일 업로드 구현 [AWS S3+Lambda] 이미지 처리 2탄: Image Resizing으로 썸네일 이미지 만들기 - 현재 포스팅 💭 고민이미지 리사이징을 어떻게 구현할지 고민했다. [ 리사이징 시기 ]Resize during UploadOn-demand Resize 이미지를 요청할 때 리사이즈해 줄지..
- [AWS S3] 이미지 처리 1탄: Pre-signed URL로 파일 업로드 구현 📷 이미지 처리 📑 목차 [AWS S3] 이미지 처리 1탄: Pre-signed URL로 파일 업로드 구현 - 현재 포스팅 [AWS S3+Lambda] 이미지 처리 2탄: Image Resizing으로 썸네일 이미지 만들기 프로젝트에서 이미지 업로드 기능을 구현해 본 경험이 있을 것이다. 나는 예전 프로젝트에서 Form data로 서버에 파일을 전송하면, 서버에서 S3에 파일을 업로드하고 해당 URL를 반환해 주는 Flow로 구현했다. ✔️ 서버를 통해서 업로드 1. Client에서 Server로 Form Data로 Image 파일 전송 2. Server는 AWS S3에 이미지 업로드 3. 저장된 URL 받음 4. Server에서 이미지 URL 반환 이 방식은 서버에서 AWS Key 정보를 가지고 있고,..
- [JPA] 1차 캐시(First-Level Cache), 2차 캐시(Second-Level Cache) 이번주 스터디 주제는 JPA 캐시이다!! 역시 일단 캐시가 뭔지 알아야겠징?! 캐시부터 알아보자! (CS 면접 준비 중이라면... 주디의 스터디로 놀러오세용~ 7개월 동안 꾸준히 하고 있답니당) ✅ 캐시 (Cache) 캐시란? '사용되었던 데이터는 다시 사용될 가능성이 높다'는 개념을 이용하여 데이터나 값을 미리 복사해 놓는 임시 장소 우리가 생각하는 것보다 네트워크를 통해 데이터베이스에 접근하는 시간 비용은 애플리케이션 서버에서 내부 메모리에 접근하는 시간 비용보다 훨씬 비싸다. 아래 메모리 계층 사진을 보아 알 수 있듯이 위로 올라갈수록 용량이 적고 가격이 비싸지만, 속도가 빠른 것을 알 수 있다. Secondary Memory는 SDD, HDD이다. 즉, 데이터베이스는 Secondary Memory..
- [Spring] @Valid로 DTO 검증하기 1. 검증은 왜 필요할까? 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 🤖 : 근데 클라이언트에서 잘못된 요청은 걸러주지 않아? 🐰 : 그럼 클라이언트를 거치지 않은 요청은 다 받아줄겨? 클라이언트 검증은 조작할 수 있어 보안에 취약하다. 또한 서버에서도 잘못된 요청을 검증하는 로직을 필요하다. 그리고 나는 그 중 DTO에서 데이터를 검증하는 방법을 알아보려고 한다. 2. Bean Validation Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. 즉, 검증 애노테이션과 여러 인터페이스의 모음이다. Bean Validation을 구현한 기술중에 일반적으로 사용하는 구현체는 하이버네이트 Valid..
- [Spring] Spring Security 개념과 처리 과정 👮♀️ (+근데 상황극을 곁들인) 오늘도 노드 마을에서 온.. 토끼는 낯선 기술에 울고 있다..(?) 그렇다.. 유저가 있는 서비스라면 인증과 인가 처리는 필수이다. Spring에서는 Spring Security라는 프레임워크로 관련 기능을 제공하고 있다. 꽤 넓고 내용이 많은 파트이다. CS 스터디를 동기 삼아 건드리기 무서웠던 파트를 한 번 공부해 보자. 오늘은 Security 개념과 처리 과정에 대해서 알아보려고 한다. 👮♀️ Spring Security /** 평화로운 토끼 마을 */ 토끼 마을에 입장하기 위해서는 신원을 입증해야 한다. 🐰 : 안녕하세요. 토끼입니다. 저는 토끼마을 주민이에요. 딱 봐요? 토끼상이됴? 🤖 : 삐빅. 박.주.디. 신원이 입증되었습니다. 방금 주디가 한 것이 인증(Authentication)이다. ..
- [Git] 개발 생산성 향상을 위한 Git Hooks 활용 (with. Spotless) 🎣 🖇️ 관련 글 : 코딩 컨벤션 설정 | Spotless, Checkstyle ⚙️✨ 지난 글에서 Spotless 설정을 했다. 하지만 매번 Spotless Apply / Spotless Check를 통해 컨벤션을 적용하고 확인하는 작업이 번거롭다는 생각을 했다. 컨벤션이 지켜지지 않을 때 build가 실패하게 되는데 만약 적용하는 것을 깜빡하고 커밋을 하게 된다면? CI workflow에서 체크해 줘서 머지할 때 오류는 없겠지만.. 그래도 커밋할 때부터 이 오류를 잡아줄 순 없을까? 이런 휴먼 에러를 방지하고, 반복되는 작업을 Git Hooks를 활용하여 자동화함으로써 개발 생산성을 높이려고 한다.⚙️ 프로젝트 환경java : 11Spring Boot : 2.7.11멀티 모듈 프로젝트Build Tool:..
- [Java] Gradle.. Gradle 말입니다. 자바 빌드 도구 🐘 자바 프로젝트를 진행하면서 빌드 도구를 많이 접해볼 것이다. 최근에 프로젝트 세팅을 하면서 Gradle, 이 친구 설정을 많이 변경하고 사용했다. 그런데 말입니다.. 빌드 도구는 여러 가지 있단 말이됴? 그리고 Gradle을 사용하면서 왜 사용하는지, 어떻게 사용하는지 알고는 있나요?! 🤖 : 거.. 살살 하세요. 지금 공부하려고 하잖쇼? 🐰 : 뭐야.. 웬일로 내 편을 들어주니? (떠오르는 과거의 기억..) 1. Build Tool (소프트웨어 개발에서) 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구 소스코드의 빌드 과정을 자동으로 처리해주는 도구 외부 소스 코드 (외부 라이브러리) 자동 추가, 관리 종류: APACHE ANT, Maven, Gradle [ Ant(앤트) ] 설정을 위해 XM..
- [Gradle] Jacoco 적용하고, Codecov로 테스트 커버리지 관리하기 난 지금까지 프로젝트에서 테스트 코드를 열심히 작성하지 못했다.. 크흡 우리 팀 고수 개발자분... 커버리지 80% 이상으로 작성한다고 하셔서.. 리스팩 👏 🤖 : 너도 할 수 있지? 🐰 : 8%? ㅎㅎ.. 농담.. (진짜?) 이번에 열심히 작성해 보기로 했으니... 파이팅~! (후후.. 어서 와 JUnit은 처음이지?) 그리고 프로젝트에서 Jacoco와 Codecov를 적용하려고 한다. 근데 잠깐!! 코드 커버리지는 뭐고, 저 도구들은 뭐야? 그리고 왜 필요해? 🤖 : 그말 왜 안 하나 했다. 해당 도구들의 사용법을 익히기 전에 개념부터 살펴보자. 0. Test Code 테스트 코드는 왜 작성해야 할까. 예전 프로젝트에서는 시간이 부족하다는 이유로 테스트 코드 작성을 소홀히 했다. 하지만 테스트 코드가..
- [Git] Submodule로 민감 정보 관리하기 (.yml 파일) 프로젝트를 진행할 때 보안상 문제로 Git에 올리지 못하는 데이터가 있다. 대표적으로 DB 인스턴스의 정보를 저장하는 .yml 파일이 있다. 서브모듈을 활용하면 민감 정보를 더 편리하게 관리할 수 있다. 📂 Submodule Git 레포지토리 하위에 다른 저장소를 관리하기 위한 도구 Git 저장소 안에 다른 Git 저장소를 디렉터리로 분리해 넣는 것이 서브모듈이다. 다른 독립된 Git 저장소를 Clone 해서 내 Git 저장소 안에 포함할 수 있으며 각 저장소의 커밋은 독립적으로 관리한다. 이때 상위 레포지토리를 상위 레포지토리를 부모 저장소, 슈퍼 프로젝트(superproject), 하위 레포지토리를 자식 저장소, 서브 모듈(submodule)이라고 부른다. ✨ 주의할 점 부모-자식 관계라고 부모가 자..
- 코딩 컨벤션 설정 | Spotless, Checkstyle ⚙️✨ 여러 개발자들이 작업을 할 때 코딩 컨벤션을 정하게 된다. 컨벤션을 정하게 되면 가독성을 높일 수 있다. Spotless 적용하는 방법과 네이버 코딩 컨벤션을 Code Style Formatter로 설정하고, Checkstyle 적용하는 방법 두 가지에 대해서 알아보자. 1️⃣ Spotless Keep your code spotless 여러 개발자가 협업하는 환경에서 코드 컨벤션을 지키기 위해 사용하는 플러그인이다. 컨벤션이 지켜지지 않을 경우 build가 실패한다. ✔️ Install Guide build.gradle plugins { id 'com.diffplug.spotless' version '6.11.0' } ✔️ Setting Guide 이 부분은 팀 컨벤션에 맞춰 설정해 주면 된다. buil..
- Github Actions를 이용한 CI 빌드, 테스트 자동화 Github Actions는 Github에서 제공하는 CI/CD 툴이다. 예전에 스터디에서 CircleCi, ArgoCD를 공부한 적이 있다. (Travis Ci도 Github 연동이 편해서 많이 쓰더라) 이때 개인 프로젝트에서 위와 같은 CI/CD 툴은 공부하기 어려웠고, CircleCi는 ㅎ 실습하다가 망해서 github repo에 private으로 영원히 묻어뒀다. 언젠간 열어줄게. 댕청해 보여서 마음에 드는 argo와 circleci에 고통받는 나의 모습을 본 스터디원.. 👤 : 정윤님!! Github Actions가 세상 편한데! 이걸로 하면 금방 하실 수 있어요!! 🐰 : CI/CD 늪에서 꺼내줘!!! 그렇게 작년부터는 계속 Github Actions를 쓰고 있다! 오늘은 Github Acti..
- [Java] Mutable, Immutable, 방어적 복사, unmodifiableList 🎇 Mutable, Immutable 자바는 new 연산자로 객체를 생성힐 수 있고, 이때 heap 영역에 할당되고 stack 영역에서 참조 타입 변수를 통해 데이터에 접근한다. 이때 자바의 객체의 타입은 두 가지 있다. Mutable(가변) 객체와 Immutable (불변) 객체이다. ✔️ Immutable(불변) 객체 불변 객체 : 객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체 불변 객체 종류: String, Boolean, Integer, Float, Long 등 String을 제외하고 원시 타입의 wrapper 타입이다. 🤖 : 오잇! 나 String 타입 변경한 적 있는 거 같은데? 🐰 : 오.. 이 상황을 말하는 거야? String name = "정윤"; name = "jeongyoon"..
- [AWS Cloud Practitioner] 스터디 2주차 정리 "AWS Certified Cloud 전문가 시험 합격을 위한 모든 것" 강의 내용의 포함되어 있습니다. * 🧚 : 시험 출제 포인트 🪣 S3 S3 (Simple Storage Service) : 오브젝트 스토리지, 무한 확장 스토리지 S3 콘솔은 글로벌 콘솔이다. 하지만 버킷을 생성할 때에는 특정 리전에 할당해야 한다. ✔️ 사용 사례 백업, 저장 재해 복구 보관 비용 절감 하이브리드 클라우드 스토리지 핵심은 객체를 저장! [ S3 Object와 Bucket ] ✔️ Object (객체) : 데이터를 담기 위한 단위 Key - Value 구조 Key는 전체 경로, 접두사 + 객체 이름으로 구성 ex. s3://my-bucket/my_file.tx ✔️ Bucket (버킷) : Object를 담기 위한 ..
- [Git] 한 repository 여러 프로젝트 월세주기 🏡 🐰 주디 요구사항 많은 사람들의 (👤1명). 뜨거운 관심 속에 스프링 놀이터를 만들고만 주디.. 기존에 각각의 레포를 만들어서 여러 실습도 진행해 보고 강의 코드도 정리하고 있었다. 갈수록 많아지는 레포는 찾아보기 힘들고 놀이터도 만들었겠다. 놀이터에서 놀아줘야지. 주디는 아래의 요구사항을 가지고 있다. 빈 레포로 기존 깃에 있는 레포를 옮기고 싶다. 당연히 소중한 커밋 기록도 들고 가고 싶다. 한 레포에 여러 프로젝트를 관리하고 싶다. 자 그러면 지금 이사가보자!! 뚠뚠~ 🐜 0. 초기 세팅 1) 부모 repository 부모 역할을 할 레포지토리를 만든다. 2) 자식 repository 자식 역할을 할 레포지토리를 생성하거나 선택한다. 1. 부모 repository를 로컬에 clone 한다. $ gi..
- [AWS Cloud Practitioner] 스터디 1주차 정리 "AWS Certified Cloud 전문가 시험 합격을 위한 모든 것" 강의 내용의 포함되어 있습니다. * 🧚 : 시험 출제 포인트 ☁️ 클라우드 컴퓨팅이란? ✔️ 클라우드 컴퓨팅 : 컴퓨터 성능과 데이터베이스 스토리지, 애플리케이션과 다른 IT 리소스를 on-demand로 제공하는 것이다. 즉, 필요할 때 해당 서비스를 이용할 수 있다. 또한 요청한 만큼만 비용을 지불하여 컴퓨터 리소스의 정확한 유형과 크기를 프로비저닝 할 수 있다. [ 클라우드 배포 유형 ] Public Cloud MS Azure, Google Cloud, AWS Private Cloud (OpenStack) 클라우드를 사용하기 원하는 기업에서 자체적으로 전용망을 이용하여 구축하는 클라우드 Multi Cloud 멀티 클라우드는 2곳..
- [자료구조] hashing, hash function, map, hash table, hash set | 종합 선물 세트..? 모의면접에서 hash 파트 정확하게 잘 모르는 걸 어떻게 알았는지... 해시(스터디원)가... 자꾸 해시를 물어봤다... 가만안도오. 😫 이번엔 제대로 대답한다.. 가보자 해시 나라로. 자료구조 공부에서 기본은 해당 자료구조의 특징과 문제점. 그리고 구체적으로 어느 곳에서 사용되는지(use case)를 아는 것이다! 거기서 추가적으로 대답의 깊이를 가져가기 위해서는 hash 자료구조 같은 경우에는 hash function을 만들 때 고려할 점과 collision 상황 해결 방법에 대해서 알면 좋다! DFS : 좁고 깊게 vs BFS : 얕고 넓게 10개의 질문에 BFS로 대답하는 것보다 1개라도 DFS로 대답하자!!! 다시 한 번 다짐하며! 정말 출~발~ 💫 hash 대략적인 개념들부터 살펴보자. [ 해..
- 멀티 모듈, 그게 뭔데? 그거 어떻게 하는건데? 🧐 때는.. 바야흐로 일주일 전... 디프만 OT.. 👥 우리 서버팀 : 웅성👥 웅성 👥 웅ㅅ멀티 웅성성 모듈 웅성👥 🐰 주디박 : 뭔데?!! 멀티??? 모??? 뭐라고요?? 멀티 모듈??? 그게 모지!!? DDD???? 👥 우리 서버팀 : 한 프로젝트에 여러 모듈 개발하는 방법이 있어요!! 🐰 주디박 : 예??? 아~~~~ 그렇구나~~~ (모르겠음) 우리 서버팀에서 도전하고 싶어 하고 궁금해하는 멀티 모듈!!! 그게 뭘까? 팀에 도입하고 싶은데 우선 나는 궁금해졌다. 그게 뭔데? 그게 왜 필요한데??? 그래서 공부를 시작했다. 두둥 탁 1. 멀티 모듈 프로젝트✔️ 모듈Oracle Java 문서에서 모듈이란 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹이라고 정의하고 ..
- [디프만 13기] 최종 합격 및 OT 후기 디자이너와 프로그래머가 만났을 때 🔗 공식 홈페이지 : https://www.depromeet.com/ 🔗 인스타그램 : https://www.instagram.com/depromeet/ 🔗 깃허브 : https://github.com/depromeet 🔗 비핸스 : https://www.behance.net/Depromeet 📝 서류: 2023.03.06 ~ 03.12 👩💼 면접(온라인): 2023.03.25 ~ 03.26 (나는 26일!) 🎉 최종 결과: 2023.04.03 👨👩👦👦 OT(오프라인): 2023.04.08 오랜만에 프로젝트를 시작했다!! 그것도 디프만에서~🎉 🤖 : 삐빅. 당신. 후기가 늦은 거 아닙니까? 🐰 : 아~ 원래 취준생이 제일 시간 많은데 제일 바쁜 거요~~ 0. 개요..
- [웹개발자 필수2] HTTPS 작동 원리 우리는 웹으로 많은 일을 할 수 있다. 그 중 웹 사이트에서 신용카드로 물건을 구매한 경험이 있을것이다. 이때 우리의 브라우저와 서버 간의 통신은 거의 확실하게 TLS 위에서 사용하고 있을 것이다. (URL이 https:로 시작한다면 TLS를 사용하고 있는 것이다.) 금융 정보나 메일 등 중요한 정보를 보호하기 위해서 가장 기본적인 기술이 HTTPS라고 할 수 있다. 지금부터 HTTPS에 대해서 알아보자. 🔒 HTTPS (Hypertext Transfer Protocol Secure) 인터넷 상에서 정보를 암호화하는 TLS 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 평문 텍스트, 즉 암호화되지 않은 텍스트를 전송하는 TCP 프로토콜의 일종이다. 여기에 S(Se..
- 컨테이너(Container) 너 좀 멋있다? 작년에 데엔/데옵 스터디를 하면서 인프라에 대해서 많이 공부했다. 그런데... 사람의 기억력이란.. 실습했던 자료는 남아있어서 괜찮은데 개념은 가물가물.. 작년에 깃허브 TIL, 블로그, 노션 여기저기 정리해서 찾아보기도 헷갈렸당 다시 공부해 보자! 출발~ 1. Virtualization (가상화) 넓은 의미: 컴퓨터 리소스(CPU, MEM 등)의 추상화 좁은 의미: 단일 컴퓨터의 리소스를 가상 머신(VM)이라고 하는 다수의 가상 컴퓨터로 분할하는 것 장점 리소스 효율성: 새로운 서비스를 위해 서버를 구매하지 않아도 된다. VM을 위한 컴퓨터는 필요. 관리 편의성: Infrastructure as Code(Iac), 자동화 가동 중단 시간 최소화: VM을 여러 개 두어, High Availability를..
- [자료구조] Red-Black 트리 [ 이진 탐색 트리(BST, Binary Search Tree)의 단점 ] 균등 트리 : 노드 개수가 N개일 때 O(logN) 편향 트리 : 노드 개수가 N개일 때 O(N) 이진 탐색 트리는 최악의 경우 한쪽으로 편향된 트리일 때 O(N) 시간이 걸린다. 이 말은 모든 노드를 한 번씩 다 확인해줘야 한다는 의미이다. 이러한 단점을 개선한 균형 트리인 Red-Black 트리에 대해서 알아보자. 🔴 Red-Black 트리 ⚫️ 이진 탐색 트리의 단점을 개선하기 위한 자료구조 이진 탐색 트리(BST)의 한 종류 스스로 균형(balancing) 잡는 트리 BST의 worst case의 단점을 개선해서 모든 경우에 O(logN) 모든 노드는 red 혹은 black ✔️ 5가지 속성 모든 노드는 red 혹은 bla..
- [DB] 인덱스 (index) 🔖 인덱스 (index) 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 즉, index는 데이터의 주소값을 저장하는 별도의 특별한 자료 구조이다. index를 활용해서 빠르게 원하는 데이터를 찾을 수 있다. ✔️ Point 1 : DB 테이블에 인덱스(index)가 필요한 이유 🧐 만약 table에 index를 걸지 않으면 어떻게 될까? SELECT * FROM customer WHERE first_name = "Jeongyoon"; 원하는 데이터를 찾고 싶을 때 table 전체를 full scan 해야 한다. 즉, first_name에 index가 걸려있지 않다면 "Jeongyoon"을 찾기 위해서는 모든 데이터를 하나씩 확인해야 한다. full ..
- [DB] 트랜잭션 #3 | Isolation level(격리 수준)과 이상 현상 (+면접 질문) 🔎 트랜잭션 (Transaction) 2부에서 concurrency control(Serializability, Recoverability)에 대해서 알아봤다. 트랜잭션의 Isolation이 제대로 유지되려면 복수의 트랜잭션을 동시에 실행할 경우, 이상 현상이 일어나지 않도록 한다. 이것을 보장하기 위한 중요한 속성이 Serializability과 Recoverable이다. 즉, 이 두 가지 속성이 보장될 수 있도록 해야 한다. 하지만 이때 동시에 처리할 수 있는 트랜잭션의 수가 줄어들어서 DBMS의 퍼포먼스가 하락한다는 단점이 있다. 이를 해결하기 위해 DBMS의 concurrency control은 여러 종류의 Isolation level을 제공해서 개발자가 데이터 정합성과 성능 사이에서 어느 정도 ..
- [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) 🔎 트랜잭션 (Transaction) 1부에서 트랜잭션에 대한 개념과 속성에 대해서 알아봤다. ACID 중 'Isolation'은 복수의 트랜잭션을 동시에 실행할 경우, 이상 현상이 일어나지 않도록 한다. 이것을 보장하기 위한 중요한 속성이 Serializability과 Recoverable이다. * 참고로 DBMS의 concurrency control(동시성 제어)이 이 두 가지를 제공해야 한다. 📑 목차 [DB] 트랜잭션 #1 | 개념과 ACID 속성 [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) - 현재 포스팅 [DB] 트랜잭션 #3 | Isolation level(격리 수준)과 이상 현상 (+면접 질문) concurrency c..
- [DB] 트랜잭션 #1 | 개념과 ACID 속성 🔎 트랜잭션 (Transaction) 대용량 데이터 동기화 등을 처리하다 보면 개발자가 트랙잭션을 어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다. 그래서 백엔드 개발자로서 트랜잭션은 중요한 개념이다. 트랜잭션과 관련된 내용은 많기 때문에 3부로 걸쳐 살펴보자. [DB] 트랜잭션 #1 | 개념과 ACID 속성 - 현재 포스팅 [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) [DB] 트랜잭션 #3 | Isolation level(격리 수준)과 이상 현상 (+면접 질문) 개념과 ACID 속성 - 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며 데이터베이스에 접근하는 방법은 쿼리이므로, 즉..
- 예비 개발자는 어떻게 CS 스터디할까 지금까지 내가 성장해 온 과정을 떠올리면 나는 스터디를 통해 성장해 왔다. 공동 학습을 추구한다. 공유의 가치와 함께 하는 것의 시너지를 믿고 그것이 내 성장 원동력이다. 내가 참여했던 스터디들은 코테스터디(3번), 데이터분석 & 머신러닝 스터디, 데엔 & 데옵 스터디, 1D1P 스터디(2번), CS 스터디(2번) 등이 있다. 작년 6개월 동안 교육을 수료했지만 백엔드 교육은 2주뿐이었고 필요한 내용은 항상 스스로 학습해서 습득해 왔다. 지금까지 스터디 중 최근에 진행 중인 CS 스터디를 어떻게 시작했고 진행하고 있는지 기록해 보자. 신입 개발자 CS 면접 대비 및 지식 공유 👩💻 🔥 👉 Repository (구독, 좋아요, 알림 설정은 없고 별 ⭐️ 눌러주세용😏) 🚀 등장배경(?) [ 1:1 암기는 ..
- [OS] 동기화(Synchronization) | 스핀락, 뮤텍스, 세마포어 [ 데이터 접근 ] 데이터가 저장되어 있는 위치로부터 데이터를 읽어와서 연산한 뒤, 연산한 결과를 이전에 저장되어 있던 그 위치에 다시 저장한다. 데이터를 읽기만 하면 문제가 없는데, 데이터를 연산하고 수정하게 되면 누가 먼저 읽어 갔는지에 따라 결과가 달라질 수 있다. 이때 발생할 수 있는게 Synchronization(동기화) 문제이다. load X, reg1 inc reg1 store X, reg1 🤼♂️ Process Synchronization 공유 데이터(shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제(inconsistency)를 발생시킬 수 있다. 따라서 일관성(consistency) 유지를 위해서는 협력 프로세스(cooperating proce..
- [OS] Process | Context Switching (컨텍스트 스위칭) 0. 개요 개발은 프로그램을 만드는 것이다. 그리고 그렇게 만들어진 프로그램이 컴퓨터에서 실행되면, 실행 중인 프로그램을 프로세스라고 부른다. 프로그램 (program) : 컴퓨터가 실행할 수 있는 명령어들의 집합 ✔️ 프로세스 (process) “Process is a program in execution” / 컴퓨터에서 실행 중인 프로그램 : 각각의 프로세스는 독립된 메모리 공간을 할당받는다. 그리고 명령어들과 데이터를 가진다. CPU (central processing unit) : 명령어를 실행하는 연산 장치 메인 메모리 (main memory) : 프로세스가 CPU에서 실행되기 위해 대기하는 곳 I/O (input/output) : 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것 :..
- [OS] 교착상태 (Deadlock) 락(lock)은 동기화를 보장하는 툴(tool)이다. 락을 사용하여 동기화를 수행하다 보면 필연적으로 데드락(Deadlock)이라는 부작용이 생길 수 있다. 데드락 상태가 되면 더 이상 프로세스나 스레드가 진행하지 못하기 때문에 이를 잘 파악하는 것은 중요하다. + 또한 데드락 개념은 DB에서 '분산 서버 동시성 이슈 해결 방안'으로 비관적인 락을 사용할 때 등장하기도 한다. 비관적인 락 : 동시에 연산이 실행되지 않도록 Lock(잠금)을 걸어서 다른 연산이 끼어들지 못하도록 한다. 단점으로는 성능이 느려지고, 데드락 상태에 걸릴 수 있다. 🚗 교착상태 (Deadlock) (두 개 이상의) 일련의 프로세스 혹은 스레드들이 서로가 가진 자원(resource)을 기다리며 block된 상태 자원(resourc..
- [Network] 웹 통신의 흐름 ✔️ Point 1 : DNS 사람은 고정 길이의 주민등록번호와 이름으로 식별할 수 있다. 컴퓨터는 주민등록번호를 선호할 것이고, 일반 사람들은 이름을 선호할 것이다. 이와 같이 www.google.com와 같은 호스트 이름은 사용자들이 기억하기 좋아 선호한다. 하지만 이 호스트 이름으로는 호스트 위치에 대한 정보도 얻을 수 없고, 가변 길이로 라우터가 처리하는 데도 어려움이 있다. 그래서 IP 주소로 식별된다. 즉, 호스트를 식별하는 방법은 호스트 이름과 IP 주소로 두 가지이다. [ DNS (Domain Name System Server) ] 사람과 라우터는 서로 선호하는 식별자가 다르다. 이를 절충하기 위해서 호스트 이름을 IP 주소로 변환해줄 필요가 있는데, 이때 DNS를 이용한다. DNS는 도메..
- 실패에 대처하는 자세 나는 두 달간의 도전에서 결국 실패했고 극복한 경험을 가지게 되었다. 작은 실패로 보일 수 있다. 하지만 그 작은 실패에서 '넘어지고 상처 입었지만 다시 일어날 용기를 가진 경험'은 나에게는 특별하다 생각한다.여기서 말하는 실패: [우아한테크코스 5기 백엔드] 지원 및 최종테스트 후기 [ 체력 ] 나는 개발을 하면서 체력의 중요성을 깨달았다. 안 되는 것에도 포기하지 않는 강한 마음. 그것이 체력이라고 생각한다. 살다 보니 모든 일이 물 흘러가듯 쉽게 흘러가지 않는다. 2022년. 열심히 한 결과를 돌려받은 해라고 생각했고 내 계획대로 탄탄대로일 줄 알았다. 하지만 2023년 계획이 사라졌다. 개발에서 배운 포기하지 않는 자세를 떠올리자. 지금까지 키운 체력으로 다시 일어나자. 후회 없이 했으니 결과도 ..
- [우아한테크코스 5기 백엔드] 지원 및 최종테스트 후기 우아한테크코스 5기 (백엔드) 📝 자소서: 2022.10.17 ~ 10.24 🤸♀️ 프리코스: 2022.10.31 ~ 11.23 🏋️ 최종 테스트 대비: 2022.11.24 ~ 2022.12.16 🎉 최종 테스트(오프라인): 2022.12.17 + 해당 과정을 정리한 Repo 결론부터 말하자면 나는 두 달간의 여정 끝에 최종 코딩테스트를 보았고 모든 구현을 완료했지만 결국 '탈락'이라는 결과를 받았다. 비록 결과는 '탈락'으로 남겠지만 두 달간의 나의 '과정'은 사라지는 것이 아니기 때문에 그동안의 나의 도전을 기록하고 마무리해보고자 한다. 1. 자기소개서 문항은 총 6가지로 핵심은 4문항이다. 1. 고등학교/대학교 전공을 포함하여 프로그래밍 교육 이력을 작성해 주세요. (200자 이내)* 전공, 부전..
- [웹개발자 필수] HTTP 진화 과정 (HTTP/1.0부터 HTTP/3까지)(+관련 면접 질문) 기본적으로 HTTP는 전송 계층 위에 있는 애플리케이션 계층으로서 웹 서비스 통신에 사용된다. 이런 웹은 어떻게 시작되었을까. [ World Wide Web의 발명 ] HTTP는 World Wide Web에 내재된 프로토콜이다. 팀 버너스리가 1989년부터 1991년에 발명하였고 초기에 Mesh라고 불리다가 1990년에 구현 과정에서 World Wide Web(WWW)으로 이름을 바꿨다. World Wide Web(WWW) : HTTP라는 프로토콜을 이용해 HTML 파일을 주고받을 수 있는 공간 HTTP/0.9 원-라인 프로토콜 HTTP/0.9는 정말 단순한 서버-클라이언트 구조를 따른다. 요청: 단일 라인으로 구성 리소스 경로: GET 메서드만 가능 GET /mypage.html Simple HTML ..
- [우아한테크코스] 숫자 야구(baseball) 리팩토링 확실히 4주 프리코스 뒤 다시 2주 차 미션을 보니 더 좋은 방식으로 구현할 수 있을것 같다. 그렇다는 건 내가 발전하고 있다는 시그널🌟 📌 리팩토링할 미션 [우아한테크코스] 프리코스 2주차 : 숫자 야구(baseball) 1. 리팩토링 필요한 부분 분석 📂 기존 폴더 구조 ├─main │ └─java │ └─baseball │ │ Application.java │ │ │ ├─controller │ │ BaseBallGame.java │ │ │ ├─domain │ │ GameLogic.java │ │ RandomNumbers.java │ │ │ ├─validator │ │ NumbersValidator.java │ │ NumberValidator.java │ │ │ └─view │ InputView.ja..
- [우아한테크코스] 객체를 객체스럽게 사용하도록 리팩토링해라. 우테코 프리코스가 끝나고... 평화가 찾아온 정윤's 자바 마을에는.. (물론 아직 학기 중인 게 흠이지만) 리팩토링 열풍이 부는데... 3주차 로또를 리팩토링하며 4주 차 구현에 바빠 제대로 반영 못한 3주 차 피드백을 펼쳐 보는데.. 피드백 한 번 보고 내 코드 한 번 보고 뜨아익.. 순살 공격 그때 생각난 과거.. 어릴 때 로마 여행을 간 적이 있는데 그때 박물관이나 미술관에 가는 길에 가이드 분이 아는 만큼 작품이 보일 거라며 역사(?)를 엄청 재밌게 들려주셨다. 그리고 정말로 알고 보니 유적지나 미술관 갈 때 설명이 떠오르면서 보이더라.. 그렇다.. 아는만큼 보인다. 알고 보니 눈물난다. 이 코드 과거의 너? 누가 쓴 거냐 와 서론이 길다. 시작해보자. 리팩토링 오늘 리팩토링할 내용은 ' [우아..
- [우아한테크코스] 프리코스 4주차 : 다리 건너기 (bridge) 이 글은 '프리코스' 과정에 작성한 글이며 현재 레포지토리에 있는 코드와 다를 수 있습니다. (리팩토링함) 🚩 4 주차 목표 1. 클래스(객체)를 분리하는 연습 2. 리팩터링 이 두 가지에 익숙해지는 것을 목표로 하고 있다. [4주 차] 미션 - 다리 건너기 🪜 🏃 리팩토링 전 프리코스 제출 코드 시점 👉 미션 저장소 📎 Source Code (PR) 📆 기간: 2022.11.16(수) 15:00 ~ 2022.11.22(화) 23:59 1. 구현 과정 ⚙️ 기능 구현 목록 작성 👉 기능 구현 목록 박굴렁쇠... 일단 코드가 돌아가게 구현해보자. 그런데 행복하지 않다.. 찝찝해 찝찝한 부분을 확인해보자. 1️⃣ 인스턴스 변수의 수를 줄이기 위해 노력한다. 현재 BridgeGameController에서 생성..
- [우아한테크코스] 프리코스 3주차 : 로또 (lotto) 이 글은 '프리코스' 과정에 작성한 글이며 현재 레포지토리에 있는 코드와 다를 수 있습니다. (리팩토링함) 🚩 3 주차 목표 1. 클래스(객체)를 분리하는 연습 2. 도메인 로직에 대한 단위 테스트를 작성하는 연습 이 두 가지에 익숙해지는 것을 목표로 하고 있다. [3주 차] 미션 - 로또 🎰 🏃 리팩토링 전 프리코스 제출 코드 시점 👉 미션 저장소 📎 Source Code (PR) 📆 기간: 2022.11.09(수) 15:00 ~ 2022.11.15(화) 23:59 + 프리코스 이후 리팩토링 포스팅 객체를 객체스럽게 사용하도록 리팩토링해라. 1. 구현 과정 미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있다. 일단 처음엔 기능 요구 사항을 채우는데 집중한다. ..
- [Java] 람다와 스트림 (Lambda & Stream) 람다식 (Lambda Expression) 함수(메서드)를 간단한 '식(expression)'으로 표현하는 방법 익명 함수(이름이 없는 함수, anonymous function) 함수와 메서드의 차이 근복적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적 // 반환 값이 있는 경우 (int a, int b) -> a > b ? a : b // 매개변수의 타입이 추론 가능하면 생략가능(대부분 경우 생략가능) (a, b) -> a > b ? a : b ✔️ 함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음 MyFunction f = (a, b) -> a > b ? a : b; ..
- [Java] 코딩테스트 대비 정리 (2) 처음부터 다 알려고 하지 말자! 문제 풀면서 새로 알게 된 개념. 기억하고 싶은 개념을 기록하자. 형변환 ✔️ String -> int 1) Integer.parseInt(String s) int 타입을 리턴한다. 2) Integer.valueOf(String s) parseInt와 다르게 Integer Object를 리턴한다. 그리고 .intValue()를 사용하여 int 타입으로 형변환할 수 있지만 붙이지 않아도 자동으로 형변환이 된다. ✔️ String -> char[] 1) str.toCharArray() 이때 str은 String 타입이다. ✔️ int -> String 1) Integer.toString(int i) 2) String.valueOf(int i) 3) i (int타입의 값) + ..
- [우아한테크코스] 프리코스 2주차 : 숫자 야구(baseball) 이 글은 '프리코스' 과정에 작성한 글이며 현재 레포지토리에 있는 코드와 다를 수 있습니다. (리팩토링함) 🚩 2 주차 목표 1. 함수 분리 2. 각 함수 별로 테스트를 작성하는 것 이 두 가지에 익숙해지는 것을 목표로 하고 있다. [2주 차] 미션 - 숫자 야구 ⚾ 🏃 리팩토링 전 프리코스 제출 코드 시점 👉 미션 저장소 📎 Source Code (PR) 📆 기간: 2022.11.02(수) 15:00 ~ 2022.11.08(화) 23:59 + 프리코스 이후 리팩토링 포스팅 [우아한테크코스] 숫자 야구(baseball) 리팩토링 1. 구현 과정 1주 차 과제에서는 한 클래스 내에 필요한 메서드와 클래스를 구현해서 사용했다. 이때 메서드를 수정 및 테스트 하기가 불편했고 비슷한 역할을 하는 메서드끼리, 클..
- [Java] 코딩테스트 대비 정리 (1) 동적 타입 언어인 파이썬과 자바스크립트에 적응한 나란 몸.. 정적 타입 언어 자바를 쓰려니 참 어렵다... 휴 자바 미션과 코딩테스트를 대비해서 헷갈렸던 개념을 정리하면서 공부해보자! List 클래스 자바에서 List를 만들때 List 인터페이스를 구현한 ArrayList나 LinkedList와 같은 객체를 생성하게 되는데 Arrays.asList()와 List.of() 메소드로도 생성할 수 있다. 1) Arrays.asList() List strList = new ArrayList(Arrays.asList(splitArray)); 2) List.of() List.of() 메서드는 JAVA 9 부터 지원하는 메서드이다. char 배열과 String 클래스 차이 코드를 짤 때 문자열 저장은 String 타..
- [우아한테크코스] 프리코스 1주차 : 온보딩 (onboarding) 드디어 프리코스가 시작되었다. 선발 과정에 대해서 알아보자. 📌 우아한 테크코스 5기 백엔드 선발 과정 지원서 작성: 10월 17일 ~ 10월 24일 프리코스: 10월 26일 ~ 11월 22일 1차 합격 발표: 12월 14일 2차 코딩테스트: 12월 17일 최종 합격 발표: 12월 28일 다음과 같이 이번 모집은 이전 기수와 달라진 점은 코딩 테스트 없이 서류 접수한 전원이 프리코스에 참여하는 것이다. 프리코스는 강의 기반 교육이 아닌 주어진 미션(과제 형식)을 해결하기 위해서 스스로 필요한 내용을 학습하고 터득해서 적용하는 것이다. 과정 자체에도 '성장'할 수 있고 앞으로 우테코의 교육과정을 맛볼 수 있는 기회이다. 내가 지향하는 프로그래밍 공부 방식과 너무 잘 맞아서 감동받을 정도였다. [1주 차] ..
- [알고리즘] 최단 경로 알고리즘 (다익스트라, 플로이드 워셜) 🧩 최단 경로 알고리즘 최단 경로 알고리즘: 가장 짧은 경로를 찾는 알고리즘 문제 상황 한 지점에서 다른 한 지점까지의 최단 경로 한 지점에서 다른 모든 지점까지의 최단 경로 모든 지점에서 다른 모든 지점까지의 최단 경로 [그래프] 노드(각 지점) / 간선(지점 간 연결된 도로) 다익스트라 최단 경로 알고리즘 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산 음의 간선이 없을 때 정상적으로 동작 그리디 알고리즘 매 상황에서 가장 비용이 적은 노드를 선택해 임의의 과정 반복 ✔️ 동작 과정 출발 노드 설정 최단 거리 테이블 초기화 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드 선택 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블 갱신 위 과정에서 3번, 4번 ..
- [IntelliJ] project마다 JDK 버전 관리하기 나는 기존에 JDK 8을 사용하고 있었고 스프링 강의에서는 JDK 11을 사용한다. 엇.. 그러면 IntelliJ 버전은 어떻게 해야할까. Project A Project: Gradle Project Language: Java Java: 11 Project B Project: Gradle Project Language: Java Java: 8 Project Setting (CTRL+ALT+S, CMD+,) ✔️ Gradle JVM 변경 Build, Execution, Deployment > Build Tools > Gradle 여기서 Gradle JVM을 변경한다. 내가 원하는 JDK 버전을 추가해줬다. ✔️ Project bytecode version 변경 Build, Execution, Deploym..
- [Java] 예외처리 예외처리 (exception handling) 프로그램 오류 컴파일 에러(compile-time error): 컴파일할 때 발생하는 에러 런타임 에러(runtime error): 실행할 때 발생 하는 에러 에러(error): 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception): 프로그램 코드에 의해서 수습될 수 있는 미약한 오류 -> 예외는 처리하자!! 논리적 에러(logical error): 작성 의도와 다르게 동작 예외 처리 정의: 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것 목적: 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것 방법: try-catch문, 예외 선언하기 ✔️ Exception Exception 클래스들: 사용자..
- 내가 그린 그림 [ 삶의 방향을 찾아가며 ] [ 일단 달리고 있는데 잠시 멈춰서 생각할 시간이 필요해 ] 나는 작년 12월 말 종강 후에 1월부터 7월까지 엘리스 부트 캠프를 수료했고 8월까지 계속 여러 스터디를 진행하고 있었다. 교육과 스터디만 진행하다 보니 대외활동 경험이 부족했고 공모전이나 해커톤을 하고 싶다는 생각이 들었다. (코로나 때문에 오프라인 행사가 없었기도 했고) 마침..! 백엔드 코치님의 소개로 기획자, 디자이너, 프론트엔드 개발자, 백엔드 개발자 30명을 뽑는 구름톤(해커톤)에 합격하여 참여했다. (작년보다 성장했잖아? 뿌듯해~) 종강 후 쉴 틈 없이 달려오다 보니 스스로 생각해보고 고민할 시간을 가지지 못하고 뛰고 있었다. '개발'이라는 길을 시작할 때 나는 앞으로의 길을 어떻게 계획하고 설계했더라..
- [MySQL 8.0] 초기 세팅 이번에 MySQL 세팅을 다시 하면서 다시 검색하는 번거로움을 줄이고자 정리해본다! 1. 서버 접속 $ mysql -u root -p 이때 -u 옵션은 user를 뜻하고 -p 옵션은 password를 뜻한다. 이때 접속하고자 하는 사용자를 선택한다. 2. 사용자 추가 CREATE USER 'user-name'@'localhost' IDENTIFIED BY 'user-password' FLUSH PRIVILEGES; 이렇게 수정을 해주고 FLUSH PRIVILEGES; 명령어를 사용하게 되는데 FLUSH는 버퍼 내용을 지우고 버퍼링된 데이터를 파일에 저장해준다. 그래서 위에서 변경한 내용이 적용시켜 주는 명령어이다. 3. 유저 정보 확인하기 SELECT USER, HOST FROM mysql.user; 3..
- 잃고나니 보이는 것들... 랜섬웨어 평화롭던 어느날.. 이전 프로젝트에서 인공지능 파트 서버를 실행시켰는데 엥 디비가 왜 없지? 🤔 급하게 mysql 서버에 접속해봤다. 🤔 골드? 아 아니네. 갓? 래...랜..서엄??????? 원래 내 사랑스러운 테이블이 없더라.. 내 자식들은 사라지고 남의 자식이 이사와 있네? 누구냐 넌 그래 내 데이터 훔쳐가고 너 뭐 넣어놨니? 정성스럽게도 적어놨다... 그래... 데이터 빼앗긴 기념으로 랜섬웨어가 무엇인지 공부해보자! ^_^ 공부할 기회다! 랜섬웨어 몸값을 의미하는 랜섬(Ransom)과 소프트웨어(Software)의 합성어로 시스템을 잠그거나 데이터를 암호화하고 잠금 해제나 복호화를 빌미로 금전을 요구하는 악성프로그램이다. 위에서는 데이터를 빌미로 비트코인을 달라고 했다; 이때, 랜섬웨어 공격수법은..
- [Java] 알아두면 좋을 것! (JDK, JRE, JVM, build, run) 자바 기본 자바와 스프링 공부를 함께 하고 있는데 기본 원리를 놓치고 공부하고 있다는 생각을 했다. 그래서 오늘은 기본적인 Java 원리를 정리하고 이해해보자. 1. JAVA 언어를 컴퓨터가 이해하는 과정 1) 코드 작성 .java public class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World"); } } 기계는 Java Source code를 이해할 수 없다. 2) 컴파일러(Compiler)가 컴파일(Compile) 함. 0과 1의 코드로 바꿔줌. 3) 바이트 코드 (바이너리 코드) 컴퓨터가 이해함. [ 정리 ] 컴파일: 인간이 이해하기 쉬운 언어를 기계어로 번역하는 과정 컴파일러: ..
- [Java] 다형성(polymorphism), 추상 클래스, 인터페이스, 내부 클래스 다형성 (polymorphism) 여러 가지 형태를 가질 수 있는 능력 (하나의 객체가 여러개의 자료형 타입을 가질 수 있는 것) 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다. 조상: TV, 자손: SmartTV Tv t = new SmartTV(); // OK SmartTv s = new TV(); // 에러 멤버의 개수가 7가진데 5가지만 참조변수로 사용할 수도 있다. ✔️ 참조변수의 형변환 사용할 수 있는 멤버의 개수를 조절하는 것 조상 자손 관계의 참조변수는 서로 형변환 가능하다. 자손타입 -> 조상타입(up-casting) : 형변환 생략가능 조상타입 -> 자손타입(down-casting) : 형변환 생략불가 FireEngine ..
- [Java] package와 import, 제어자 패키지 (package) 서로 관련된 클래스의 묶음 클래스의 실제 이름(full name)은 패키지를 포함. (java.lang.String) ✔️ 패키지의 선언 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다. 패키지 선언이 없으면 이름없는 (unnamed) 패키지에 속하게 된다. package com.codechobo.book; src 아래에서 New -> Package 로 패키지를 생성할 수 있다. 패키지를 생성하면 class를 생성할 수 있다. 다음과 같이 패키지 선언이 자동으로 삽입된다. 패키지 사용 이유 클래스의 분류가 용이하다. (비슷한 것 끼리 묶는다) 패키지가 다르다면 동일한 클래스명을 사용할 수 있다. import문 클래스..
- [Java] 상속 (Inheritance), 오버라이딩, super, super() 상속 (Inheritance) 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. (코드의 재사용) 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화 블록 제외) 자손의 멤버 개수는 조상보다 적을 수 없다. class Parent { int age; } class Child extends Parent {} : 이때 부모 멤버 1개를 모두 상속받았기 때문에 자식 또한 멤버 1개이다. 자손의 변경은 조상에 영향을 미치지 않는다. 예시 class Point { int x; int y; } class Point3D extends Point { int z; } ✔️ 포함 관계 클래스의 멤버로 참조변수를 선언하는 것 작은 단위의 클래스를 만들고, 이들을 조합해서 클래스를 만든다. 예시 class Poi..
- [Python] 정규 표현식 (Regular Expressions) 코딩 테스트를 보면서 정규식을 알았다면 간단하게 해결될 수 있는 문제를 푼 적이 꽤 있다. 하지만 너무 어려울 것 같아 미루던 정규식을 스터디를 기회로 조금이라도 공부해보고자 한다. 전부를 알 수는 없기 때문에 이번에는 스터디 문제에서 해결했던 아이디어 위주로 알아보자! 정규 표현식(Regular Expressions): 복잡한 문자열을 처리할 때 사용하는 기법으로, 파이썬만의 고유 문법이 아니라 문자열을 처리하는 모든 곳에서 사용 1. 메타 문자 . ^ $ * + ? { } [ ] \ | ( ) 1) 문자 클래스 [ ] "[ ] 사이의 문자들과 매치"라는 의미 [a-zA-Z] : 알파벳 모두 [0-9] : 숫자 2) ^ 이 문자를 헷갈리지 않고 사용해야 된다. [^0-9] : 문자 클래스 안에서는 ^는..
- [CI/CD] GitHub Actions + AWS Elastic Beanstalk를 활용한 자동화 파이프라인 구축 (정성가득♥️) 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스인 AWS Elastic Beanstalk를 만드는 법을 포스팅으로 따로 정리한 적 있다. 👉 [AWS] Elastic Beanstalk(EB) 사용해서 웹 애플리케이션 배포하기 또한 이전에 CI,CD 중 Jenkins와 Circle CI를 공부한 적이 있다. 젠킨스는 아래와 같은 이유로 공부했는데 따로 호스팅을 해야하는 등 서비스 운영을 위한 리소스 비용을 발생하여 부담이 되었다. 무료 사용 방대한 양의 플로그인 다양한 적용사례 및 풍부한 레퍼런스 🍀 그래서 이번에는 최근 현업에서 많이 사용하는 GitHub Actions를 이용하여 CI/CD 파이프라인을 구축하고 AWS Elastic Beanstalk로 배포 및 관리해보겠다. 1. A..
- [SQL/Programmers] GROUP BY 프로그래머스 문제집을 풀며 GROUP BY 절을 마스터해보자. https://school.programmers.co.kr/learn/courses/30/parts/17044 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr GROUP BY 절 FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별 통계 정보를 얻을 때 추가로 사용한다. SELECT DISTINCT 칼럼명 ALIAS명 FROM 테이블명 WHERE 조건식 GROUP BY 칼럼/표현식 HAVING 그룹의 조건식; 🔺 GROUP BY에 사용된 컬럼 이외의 컬..
- [Node.js] Nest.js 폴더 구조 설계하기 0. 개요 [ 기존의 구조 ] 보통 express에서는 컨트롤러, 서비스 별로 쭈욱 파일이 모여있다. 아래는 과거에 진행한 프로젝트 구조이다. 프로젝트를 진행하면서 mvp가 많아질수록 컨트롤러와 서비스는 많아졌고 점점 도메인 별로 코드를 찾기 어려워졌다. 이 구조는 서비스가 확장되면 도메인 별로 흩어져 있기 때문에 파일을 찾아서 개발하는 것이 힘들다. 그래서 좀 더 대규모 서비스의 폴더 구조는 어떻게 설계하는지 궁금해졌고, 이번에는 nest에서 최대한 DDD할 수 있는 폴더 구조를 알아보려 한다. ┣ 📂controllers ┃ ┣ 📜bookMarkController.ts ┃ ┣ 📜checklistController.ts ┃ ┣ 📜scheduleController.ts ┃ ┣ 📜subscribeContro..
- [AWS] Elastic Beanstalk(EB) 사용해서 웹 애플리케이션 배포하기 0. 개요 AWS Elastic Beanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker를 사용하여 Apache, Nginx, Passenger, IIS와 같은 친숙한 서버에서 개발된 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스이다. 👍 이점 빠르고 간편한 시작 개발자 생산성 적절한 규모 유지 완벽한 리소스 제어 📌 AWS Elastic Beanstalk에서 웹 앱 배포 를 보고 배포해보자! 1. 웹 애플리케이션 구축 1) 배포할 앱 생성 간단하게 nest app을 생성했다. 2) 로컬에서 실행 작동 여부를 확인했다. 2. AWS Elastic Beanstalk ✔️Create Application Elastic Beansta..
- [Java] 클래스와 객체, 변수와 메서드, 오버로딩, 생성자 1. 객체지향언어 ✔️ 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. ✔️ 특징 코드의 재사용성이 높다. 코드의 관리가 용이하다. 신뢰성이 높은 프로그래밍을 가능하게 한다.(캡슐화) ✔️ 핵심개념 캡슐화 상속 추상화 다형성 자바 언어 자바 언어의 다형성을 활용 역할 = 인터페이스 구현 = 인터페이스를 구현한 클래스, 구현 객체 객체를 설계할 때 역할과 구현을 명확히 분리 객체 설계시 역할(인터페..
- [Node.js] Nest.js에서 프로젝트 시작하기 0. 개요 [ 왜 Nest.js 인가 ] 이전 프로젝트에서는 Node.js에 express 프레임워크를 사용해서 개발을 해왔다. 하지만 express가 불편하다는 생각을 가지고 있었다. 명확하게 정해져 있는 구조가 없다보니 개발자마다 폴더 구조 등이 자유로웠고 가끔은 이런 것들이 꼬이기도 했다. (그리고 나는 프로젝트 문서화를 중요하게 생각하는데 Express에서는 하나하나 yaml 파일로 작성하고 있었다. 물론 express에서도 좀 더 자동화할 수 있지만 nest에서는 좀 더 간편하게 swagger 문서를 자동으로 달 수 있었다.) ( 참고 ) express에서 nest.js처럼 사용할 수 있는 방법도 있다. expresss 서버 구조 : https://jhyeok.com/node-backend-st..
- [AWS] Storage 서비스 [ 스토리지 종류 비교 ] S3 (Simple Storage Service) : 오브젝트 스토리지 REST 용량 무한 분산저장 데이터 저장 : 객체(Object) 객체는 버킷(Bucket) 리소스에 저장 EBS (Elastic Block Store) : 블록 스토리지 EFS (Elastic File system) : 파일 스토리지 이때, EBS와 EFS는 EC2에 마운트 시켜서 자신이 가진 볼륨처럼 보이는 스토리지다. S3는 HTTP나 HTTPS 프로토콜을 사용해서 REST API 방식으로 데이터를 저장하는 방식이다. 1. AWS RDS AWS에서 RDBMS 구성하는 방식 EC2 인스턴스에서 설치형으로 구성 AWS 완전 관리형 DB 서비스 : RDS 특징 자유롭게 확장 및 축소 가능 여러 AZ(Avail..
- [kakao x goorm] 구름톤(9oormthon) 후기 📌 지난 포스팅 : 링크 지난 포스팅에서 작성했듯이 카카오 구름톤에 합격했다! 그것도 400명이 넘게 지원한 해커톤에서 30명 안에! 백엔드는 총 6명이었는데 나는 그중 한 명에 들었다. 와~~ 박수👏 1️⃣일차 : 기술 교육 입구에서 출석 명단을 작성하고 머그컵과 명찰을 받는다. 귀여웡 첫날부터 옆자리에 같이 앉은 디자이너 분이 너무 재밌고 유쾌하셔서 금방 친해졌다♥️ (그리고 서로 분야를 물어봤는데 디자이너냐고 물어봐주셔서 감격했다..(?) 별 의도 없이 자연스럽게 물어본 거 겠지만 일단 기분이 좋았다(?) 큼큼) 그리고 구름톤은 진짜 의외로 I가 희귀하다. (나 개발 시작하고 E들이 이렇게 많은 거 처음이야~ 다들 재질이 비슷해~) 모두 모이면 해커톤에 대한 안내를 받고 간단한 아이스브레이킹을 한다..
- [kakao x goorm] 구름톤(9oormthon) 지원부터 합격, 준비까지 https://9oormthon.goorm.io/?utm_source=community&utm_medium=social&utm_campaign=goormthon&utm_content=init&utm_term=1st 첫 번째 구름톤에 초대합니다! #카카오 #구름 #제주 #해커톤 #K-Digital Platform 9oormthon.goorm.io 우선 해당 글은 해커톤 후기가 아닌 해커톤 '지원 ~ 참가 준비'까지의 제가 준비한 과정에 대해서 설명한 글입니다! 해커톤 후기는 업로드될 예정입니다! (만관부😗) 개인 회고랑 정보가 함께 포함되어 있는 글입니다. 내용이 길기 때문에 정보를 얻길 원하시는 분은 1번은 넘겨주세요. 0. 구름톤 (9oormthon) 우선 '구름'이라는 회사에 대해서 알아보자. (첫날..
- [SQL/Programmers] 집계함수 | MAX, MIN, COUNT, SUM, AVG, STDDEV, VARIAN 프로그래머스 문제집을 풀며 대표적인 집계함수 몇 가지를 간단히 사용해보았다. https://school.programmers.co.kr/learn/courses/30/parts/17043 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 집계함수 (Aggregate Function) 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수 집계함수명 (ALL | DISTINCT 칼럼/표현식) - Defualt = ALL 주로 숫자 유형에 사용하며 MAX, MIN, COUNT 함수는 문자, 날짜에도 적용 가능하다. 1. MAX ([ALL|DISTINC..
- [자료구조] 서로소 집합 (Disjoint Sets), 사이클 판별 알고리즘 서로소 집합: 공통 원소가 없는 두 집합을 의미한다. 1. 서로소 집합 자료구조 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조이다. 합치기 찾기(Union-find) 자료구조라고 부르기도 한다. ✔️연산 합집합(Union): 두 개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산 찾기(Find): 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산 ✔️ 동작 예시 1) 합치기 연산 1. 합집합(Union) 연산을 확인하여, 서로 연결된 두 노드 A, B를 확인한다. 1) A와 B의 루트 노드 A', B'를 각각 찾습니다. 2) A'를 B'의 부모 노드로 설정합니다. 2. 모든 합집합(Union) 연산을 처리할 때까지 1번의 과정을 반복합니다. ✔️ 기본 소스 코드 예제 #..
- [알고리즘] 그래프 탐색 알고리즘 DFS / BFS 탐색(Search): 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 ex) 선형 검색, 이진 검색, 너비우선탐색(BFS), 깊이우선탐색(DFS) 1. DFS (Depth-First Search) 깊은 부분을 우선적으로 탐색하는 알고리즘이다. - 스택 자료구조(혹은 재귀 함수) 이용 ✔️ 동작 예시 최대한 깊게 들어가는 형태로 동작한다. * [Step1] 시작 노드인 '0'을 스택에 삽입하고 방문 처리를 한다. * [Step2] 스택의 최상단 노드인 '0'에 방문하지 않은 인접 노드 '1', '4'가 있다. 이 중 가장 작은 노드 '1'를 스택에 넣고 방문 처리한다. * [Step3] 스택 최상단 노드인 '1'에 방문하지 않은 인접 노드 '2'를 스택에 넣고 방문 처리한다. 0->1->2->3->4 ..
- [자료구조] 그래프(Graph) 1. 그래프(Graph) - 연결되어 있는 객체 간의 관계를 표현하는 자료 구조 - 그래프는 정점(Vertex)과 이들을 연결하는 간선(Edge)들의 집합으로 구성된다. - N:N 관계 표현이 용이하다. ✔️ 종류 : 간선(edge)의 종류에 따라 구분 무향 그래프 (Undirected Graph) 양 방향으로 이동 ex) (A,B) (B,A) 유향 그래프 (Directed Graph) 간선의 방향으로만 이동 가능 ex) 가중치 그래프 (Weighted Graph) 간선에 비용(cost) 또는 가중치(weight)가 할당된 그래프 ex) 네트워크 사이클 (Cycle) 시작 정점과 종료 정점이 동일한 그래프 비순환 그래프 (Acyclic Graph) 사이클이 없는 그래프 완전 그래프 (Complete Gr..
- [Linux] 파일 시스템 1. 파일 시스템 운영체제가 파일을 시스템의 디스크상에 구성하는 방식 🔺디렉토리 : 리파일과 다른 디렉토리들을 분류하기 위해 붙이는 이름 공간 : 파일과 하위 디렉토리들을 그룹으로 묶은 개념 🔺 파일 : 컴퓨터에서 의미가 있는 정보를 담는 논리적인 단위 : 주기억장치나 디스크처럼 물리적인 하드웨어 저장 공간에 저장되는 데이터의 집합 ✔️ 종류 FAT, NTFS, EXT ✔️ 디렉토리 구조 : 리눅스 파일 시스템의 디렉토리 구조는 트리(tree) 구조 $ tree 2. 소유권과 권한 ✔️ 파일 속성 ✔️ 파일의 권한 [ 권한 변경: chmod ] chmod [파일권한] [변경할 파일 위치 또는 이름] 읽기(4) 쓰기(2) 실행(1) : 777 권한은 모든 사용자가 모든 권한을 얻는다는 의미 [ 소유권 변경..
- [자료구조] 트리 (Tree) 비선형 구조, 그래프의 특수한 형태 중 하나이다. 1. 개념 그래프 정점(vertex)과 간선(edge)로 이루어져 있는 자료구조 방향이 있는 간선을 포함한 그래프를 유향 그래프 처음 시작한 정점으로 다시 돌아오는 경로를 '사이클' 트리 특별한 성질을 갖는 그래프를 트리로 각 노드가 하나의 부모 노드와 간선으로 연결되어있는 자료구조 가계도와 같은 계층적인 구조를 표현할 때 사용할 수 있는 자료구조 트리의 크기가 N일 때, 전체 간선의 개수는 N-1개. • 트리의 간선들은 모두 방향성을 갖는다. • 어떤 정점을 가리키는 정점의 개수는 최대 1개이다. • 어떤 정점에서 다른 정점으로 이동할 수 있는 경로는 1개다. • 트리는 사이클을 갖지 않는다. 디렉터리(폴더) -> 트리 구조 예시 이진 탐색 트리 (Bi..
- 리눅스 기초 1. 소개 리누스 토발즈(Linus Torvalds)에 의해 만들어진 컴퓨터 운영 체제이다. ✔️ GNU 프로젝트 GNU = Gnu is not Unix 유닉스 운영체제를 여러 회사에서 각자 개발하며 소스코드를 공유하지 않는 문화에 대한 반발로 생겼다. 오픈 소스를 지향한다. kernel : 하드웨어를 제어하는 코드를 통해 소프트웨어와 커뮤니케이션을 하며 시스템의 모든 자원을 통제 관리하는 역할을 수행한다. 프로세스/메모리/파일시스템/장치관리등 컴퓨터의 모든 자원 초기화 및 제어가능 shell : 명령어 해석기라고 불리며 사용자가 입력한 명령어를 커널에게 전달하는 역할을 수행한다. 2. 종류 패키지 형식 패키지 관리자 운영체제 이름 레드햇 .rmp yum centOS 페도라(Fedora) 데비안 레드햇 ..
- [자료구조] 연결 리스트 (Linked list) 0. 개요 순차 리스트 연결 리스트 장점 i 번째 원소의 값 접근이 빠름 연속된 값 읽기가 빠름 원소의 삽입 / 삭제가 빠름 단점 원소의 삽입 / 삭제가 느림 i 번째 원소의 값 접근이 느림 연속된 값 읽기가 느림 ✔️ 메모리 컴퓨터에는 3가지 중요한 부품 CPU 메모리(memory) : RAM 스토리지(storage) : HDD/SSD 메모리 : 속도 빠르다. 용량이 작다. 전기를 끄면 데이터가 사라진다. 스토리지 : 속도 느리다. 용량이 크다. 전기를 꺼도 데이터가 남아있다. 따라서 데이터는 기본적으로 스토리지에 저장되고 프로그램을 실행할 땐 프로그램과 데이터는 메모리로 옮겨져 CPU는 메모리에 로드된 데이터로 작업을 한다. 🚩 자료구조를 공부하는 이유: 메모리의 효율적인 사용 1. 구조 node (..
- [StudyJam][#3] Kubernetes로 클라우드 Orchestrating 하기 본 포스팅은 구글 스터디 잼에 참가하여 유료 플랫폼인 '퀵랩'을 무료로 제공받아 학습한 내용을 정리한 글입니다. 📚 오늘 공부할 내용 Kubernetes Engine을 사용하여 완전한 Kubernetes 클러스터를 프로비저닝 kubectl을 사용하여 Docker 컨테이너를 배포하고 관리 Kubernetes의 디플로이먼트 및 서비스를 사용하여 애플리케이션을 마이크로서비스로 분할 ✔️ 프로젝트 설정 $ gcloud config set project $PROJECT_ID ✔️ 컴퓨팅 리전 설정: 리전 내에 대략적으로 클러스터와 리소스가 존재하는 위치 $ gcloud config set compute/zone us-central1-b 한국 리전을 사용할 때는 다음 리전을 사용할 수 있다. compute/zone..
- [StudyJam][#2]Kubernetes Engine: Qwik Start 본 포스팅은 구글 스터디 잼에 참가하여 유료 플랫폼인 '퀵랩'을 무료로 제공받아 학습한 내용을 정리한 글입니다. GKE는 Google 인프라를 사용하여 컨테이너식 애플리케이션을 배포, 관리 및 확장할 수 있다. 📚 오늘 공부할 내용 GKE를 사용하여 직접 컨테이너를 생성하고 애플리케이션을 배포 1. 컴퓨팅 리전 설정 ✔️ 컴퓨팅 영역: 리전 내에 대략적으로 클러스터와 리소스가 존재하는 위치 gcloud config set compute/zone us-central1-a 한국 리전을 사용할 때는 다음 리전을 사용할 수 있다. compute/zone asia-southeast1-c 2. GKE 클러스터 생성 - 클러스터: 1개 이상의 클러스터 마스터 머신과 노드라는 다수의 작업자 머신으로 구성 - 노드: 클..
- [StudyJam][#1] Docker 소개 본 포스팅은 구글 스터디 잼에 참가하여 유료 플랫폼인 '퀵랩'을 무료로 제공받아 학습한 내용을 정리한 글입니다. Docker 컨테이너는 Kubernetes에서 직접 사용할 수 있으므로 Kubernetes Engine에서 쉽게 실행할 수 있다. 📚 오늘 공부할 내용 Docker 컨테이너를 빌드, 실행 및 디버그하는 방법. Docker Hub 및 Google Container Registry에서 Docker 이미지를 가져오는 방법. Docker 이미지를 Google Container Registry에 푸시하는 방법. 🐾 여기서 간단하게 설명하자면 (말하다보니 전혀 안간단함) Docker Hub와 Google Container Registry 모두 Docker image를 저장하는 저장소이다. 이 둘의 차이는..
- [StudyJam][#0] '클라우드 스터디 잼 쿠버네티스 입문' 시작! 0. 개요 엘리스 1차 프로젝트 이후에 데브옵스 스터디를 하며 인프라에 대한 관심이 많아졌다. 그래서 쿠버네티스도 혼자 공부했지만 아직 이해가 부족해서 깊이 있게 공부하고 싶었다. 그러던 중 2022 Google Cloud Study Jam Kubernetes 입문반 수업을 알게 되었고 해당 내용을 공부하면서 내용을 보충하고 실습하면서 포스팅할 예정이다. 구글 클라우드 스터디 잼에 참여하면 유료 플랫폼 퀵랩을 무료로 제공받을 수 있다! 수강할 강의는 다음 강의이다. (공부하고 실습해서 포스팅 후 링크를 추가하겠다.) 📌 [Qwiklabs] Kubernetes in the Google Cloud [StudyJam][#1] Docker 소개 [StudyJam][#2]Kubernetes Engine: Qwik..
- [Kubernetes] 쿠버네티스란? 1.쿠버네티스 시작하기 01. VM vs Container [서버 관리] 다른 버전의 node.js 를 같은 서버에서 써야한다. 등등 한 서버에서 여러가지 버전을 잘 돌리고 싶다. 그래서 등장! VM (가상머신) : 서버 하나에 가상머신 여러개. But 여러가지 클라우드 환경에서 (multi) 사용하기 어렵고, 느리다. Hypervisor 존재 그런데!! 뚜둥 Docker 등장 🐳 [도커 등장] 모든 실행환경을 컨테이너로 환경을 격리화 시키는 방법이다. VM과 비교해서 Guest OS가 없어서 OS 가상화 보다 오버헤드가 적고, 효율적으로 동작한다. 어플리케이션을 OS 환경에 종속적이지 않게 동작할 수 있다. [컨테이너 특징] - 가상머신과 비교하여 컨테이너 생성이 쉽고 효율적 - 컨테이너 이미지를 이용..
- [Java] 비트연산자(bitwise operator) "& | ^ ~ << >>" 비트 연산자는 피연산자를 비트단위로 논리 연산한다. 비트 연산의 우선순위: 논리 연산 (쉬프트 연산자) ex) 7 > ..
- TypeScript + node.js에서 Jest로 단위테스트 하기 0. 개요 [ 내가 TDD를 하게 된 이유 ] 엘리스 2차 프로젝트의 개발 기간은 3주였다. 3주라는 시간 내에 기획과 개발, 배포, 발표 준비를 해야 한다는 부담감에 테스트 코드 작성을 우선순위에서 미루고 바로 비즈니스 로직을 구현했다. 하지만 점점 로직이 쌓이면서 새로운 기능 코드를 작성할 때 기존 코드에 영향을 주지 않고 작성을 해야 하는데 테스트 코드가 없어 내가 생각하지 못한 사이드 이펙트가 터졌다. '코드 작성 -> 사이드 이팩트 -> 코드 수정 -> 사이드 이팩트 -> 코드 수정' 과정이 반복되니 2가지 불편함이 생겼다. 코드 생산성 감소 코드에 대한 자신감 하락 내 코드에 대한 자신감이 떨어졌다. 프론트에서 문제가 생겼다고 물어볼 때 백엔드 API 기능의 문제가 없다는 것을 증명하기 어려웠..
- Cloud Computing 0. 개요 주요 구성 요소 컴퓨팅 기능, 초고속 네트워크망, 가상화 기술 서버 가상화 기술 자유도의 차이 클라우드 응용 SW SaaS (Software as a Service) 클라우드 플랫폼 PaaS (Platform as a Service) 클라우드 인프라 IaaS (Infrastructure as a Service) Public/Private/Hybrid Private Cloud (OpenStack) 클라우드를 사용하기 원하는 기업에서 자체적으로 전용망을 이용하여 구축 하는 클라우드 Multi Cloud 멀티 클라우드는 2곳 이상의 클라우드 벤더가 제공하는 2개 이상의 퍼블릭 또는 프라이빗 클라우드로 구성된 클라우드 접근 방식 1. Cloud ..
- [💊Pill my rhythm] 21~25일 차 회고 📖 2022년 06월 28일 ~ 07월 02일 ✔️ 오늘 내가 한 일 연령대, 나이대 영양제 추천 테이블 생성 및 데이터 저장 마이페이지 영양제 추천 API ssl 인증서 적용 main 서비스 python server fix & refact 💡 TIL ( Today I Learned ) [ Docker를 깎는 장인 ] 도커 파일을 작성 -> 빌드실패 시 도커 파일 수정 -> 빌드성공 과정을 거치면서 서버를 배포한 후 생길 수 있는 서비스 장애를 미리 확인하여 수정할 수 있었다. 서버 코드화로 서버 제작이 견고해졌고 유연해졌다. 빌드 오류가 반복되면 원인을 찾기 힘들기 때문에 우선 서버 이미지 먼저 띄운 뒤 도커파일에 작성할 명령어를 먼저 실행해보는 것도 좋은 방법이다. [ 왜 계속 에러야~ 메인 서버야 ..
- [프로그래밍 언어] Java 이 게시글은 Java 알고리즘 풀이에 필요한 내용을 공부하며 계속 추가할 예정이다. 1. 입출력 ✔️ Scanner import java.util.Scanner; public class Ex1000 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); sc.close(); System.out.println(a+b); } } Scanner 클래스는 생성자의 입력으로 System.in, 즉 콘솔입력인 InputStream을 필요로 한다. in.next() : 문자열 입력시 공백 전 까지 in.nextLine() : 문자열 입력시 Enter 입..
- React app build 해서 배포했는데 CSS 적용 안되는 에러 해결 방법 우선 build 후 css 적용이 안되는 것의 원인은 다양하다. 그 중 내가 겪은 에러와 해결 방법에 대해 포스팅하고자 한다. 1. 문제 상황 배포된 사이트에서 main.css를 확인해본 결과 build된 css는 모두 잘 적용이 되었고, 스케줄 페이지의 css가 빌드되지 않은 것을 확인했다. 이유를 알고 보니..! 2. 문제 원인 💡 front의 GlobalStyle.js의 코드 중에서 아래 코드가 있는 것이 문제였다. @import url('https://webfrontworld.github.io/SCoreDream/SCoreDream.css%27'); npm run build나 yarn build를 통한, 웹팩(WebPack)을 이용한 번들링을 통해 build 폴더를 만들게 된다. 이 과정에서 위 ..
- React build해서 배포할 때 sourcemap 제거 때는... React 프로젝트를 배포하기 위해 build 하던 중.. 힘차게 yarn build를 실행시키는 동시에 찝찝한 컴파일 warning 메세지를 보았다..! 콘솔에 뭐가 이렇게 찍히지?? 콘솔에 찍힌 source map 은 어떤 것일까?! 지금부터 알아보자! 😊 1. webpack CRA로 React 프로젝트를 구성하는 경우는 webpack에 의해 번들링 되어 난독화되고 압축된다. 이렇게 압축되면 디버깅하기가 힘들어진다. 그래서 source map이 필요하다. 2. source map 일반적으로 React App을 배포할 때는 배포를 위해서 Build를 하게 된다. 이때 source map은 빌드한 파일과 원본 파일을 연결시켜준다! Build 파일은 성능을 위해서 압축되어 있는데 이때 오류가 생..
- [Flask] AttributeError: module 'jwt' has no attribute 'decode' 오류 해결 방법 🥺 문제 상황 local에서 테스트 한 다음 배포를 했을 때 로그인 후 서비스를 이용하면 500 에러가 나왔다. 아니!! 왜 안돼??? 침착하게 로그를 확인해보자. Docker로 배포했기 때문에 아래 명령어로 컨테이너 로그를 확인했다. $ docker logs 로그를 확인해보니 jwt 모듈 에러였다. 💡 문제 해결 JWT와 PyJWT가 모두 설치된 경우 문제가 발생한다. 나는 분명 PyJWT만 install 했는데 함께 설치된 것이다. 그래서 import 할 때 다른 라이브러리 JWT를 가져와서 생긴 문제이다. requirements.txt를 확인하면 두가지가 함께 설치된 것을 볼 수 있다. 기존에 설치된 패키지를 모두 삭제하고 다시 PyJWT를 설치하면 문제를 해결할 수 있다. $ pip uninsta..
추천 글
- [Spring] Spring Security 개념과 처리 과정 👮♀️ (+근데 상황극을 곁들인) 오늘도 노드 마을에서 온.. 토끼는 낯선 기술에 울고 있다..(?) 그렇다.. 유저가 있는 서비스라면 인증과 인가 처리는 필수이다. Spring에서는 Spring Security라는 프레임워크로 관련 기능을 제공하고 있다. 꽤 넓고 내용이 많은 파트이다. CS 스터디를 동기 삼아 건드리기 무서웠던 파트를 한 번 공부해 보자. 오늘은 Security 개념과 처리 과정에 대해서 알아보려고 한다. 👮♀️ Spring Security /** 평화로운 토끼 마을 */ 토끼 마을에 입장하기 위해서는 신원을 입증해야 한다. 🐰 : 안녕하세요. 토끼입니다. 저는 토끼마을 주민이에요. 딱 봐요? 토끼상이됴? 🤖 : 삐빅. 박.주.디. 신원이 입증되었습니다. 방금 주디가 한 것이 인증(Authentication)이다. ..
- Github Actions를 이용한 CI 빌드, 테스트 자동화 Github Actions는 Github에서 제공하는 CI/CD 툴이다. 예전에 스터디에서 CircleCi, ArgoCD를 공부한 적이 있다. (Travis Ci도 Github 연동이 편해서 많이 쓰더라) 이때 개인 프로젝트에서 위와 같은 CI/CD 툴은 공부하기 어려웠고, CircleCi는 ㅎ 실습하다가 망해서 github repo에 private으로 영원히 묻어뒀다. 언젠간 열어줄게. 댕청해 보여서 마음에 드는 argo와 circleci에 고통받는 나의 모습을 본 스터디원.. 👤 : 정윤님!! Github Actions가 세상 편한데! 이걸로 하면 금방 하실 수 있어요!! 🐰 : CI/CD 늪에서 꺼내줘!!! 그렇게 작년부터는 계속 Github Actions를 쓰고 있다! 오늘은 Github Acti..
- [웹개발자 필수2] HTTPS 작동 원리 우리는 웹으로 많은 일을 할 수 있다. 그 중 웹 사이트에서 신용카드로 물건을 구매한 경험이 있을것이다. 이때 우리의 브라우저와 서버 간의 통신은 거의 확실하게 TLS 위에서 사용하고 있을 것이다. (URL이 https:로 시작한다면 TLS를 사용하고 있는 것이다.) 금융 정보나 메일 등 중요한 정보를 보호하기 위해서 가장 기본적인 기술이 HTTPS라고 할 수 있다. 지금부터 HTTPS에 대해서 알아보자. 🔒 HTTPS (Hypertext Transfer Protocol Secure) 인터넷 상에서 정보를 암호화하는 TLS 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 평문 텍스트, 즉 암호화되지 않은 텍스트를 전송하는 TCP 프로토콜의 일종이다. 여기에 S(Se..
- [자료구조] Red-Black 트리 [ 이진 탐색 트리(BST, Binary Search Tree)의 단점 ] 균등 트리 : 노드 개수가 N개일 때 O(logN) 편향 트리 : 노드 개수가 N개일 때 O(N) 이진 탐색 트리는 최악의 경우 한쪽으로 편향된 트리일 때 O(N) 시간이 걸린다. 이 말은 모든 노드를 한 번씩 다 확인해줘야 한다는 의미이다. 이러한 단점을 개선한 균형 트리인 Red-Black 트리에 대해서 알아보자. 🔴 Red-Black 트리 ⚫️ 이진 탐색 트리의 단점을 개선하기 위한 자료구조 이진 탐색 트리(BST)의 한 종류 스스로 균형(balancing) 잡는 트리 BST의 worst case의 단점을 개선해서 모든 경우에 O(logN) 모든 노드는 red 혹은 black ✔️ 5가지 속성 모든 노드는 red 혹은 bla..
- [DB] 트랜잭션 #3 | Isolation level(격리 수준)과 이상 현상 (+면접 질문) 🔎 트랜잭션 (Transaction) 2부에서 concurrency control(Serializability, Recoverability)에 대해서 알아봤다. 트랜잭션의 Isolation이 제대로 유지되려면 복수의 트랜잭션을 동시에 실행할 경우, 이상 현상이 일어나지 않도록 한다. 이것을 보장하기 위한 중요한 속성이 Serializability과 Recoverable이다. 즉, 이 두 가지 속성이 보장될 수 있도록 해야 한다. 하지만 이때 동시에 처리할 수 있는 트랜잭션의 수가 줄어들어서 DBMS의 퍼포먼스가 하락한다는 단점이 있다. 이를 해결하기 위해 DBMS의 concurrency control은 여러 종류의 Isolation level을 제공해서 개발자가 데이터 정합성과 성능 사이에서 어느 정도 ..
- [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) 🔎 트랜잭션 (Transaction) 1부에서 트랜잭션에 대한 개념과 속성에 대해서 알아봤다. ACID 중 'Isolation'은 복수의 트랜잭션을 동시에 실행할 경우, 이상 현상이 일어나지 않도록 한다. 이것을 보장하기 위한 중요한 속성이 Serializability과 Recoverable이다. * 참고로 DBMS의 concurrency control(동시성 제어)이 이 두 가지를 제공해야 한다. 📑 목차 [DB] 트랜잭션 #1 | 개념과 ACID 속성 [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) - 현재 포스팅 [DB] 트랜잭션 #3 | Isolation level(격리 수준)과 이상 현상 (+면접 질문) concurrency c..
- [DB] 트랜잭션 #1 | 개념과 ACID 속성 🔎 트랜잭션 (Transaction) 대용량 데이터 동기화 등을 처리하다 보면 개발자가 트랙잭션을 어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다. 그래서 백엔드 개발자로서 트랜잭션은 중요한 개념이다. 트랜잭션과 관련된 내용은 많기 때문에 3부로 걸쳐 살펴보자. [DB] 트랜잭션 #1 | 개념과 ACID 속성 - 현재 포스팅 [DB] 트랜잭션 #2 | concurrency control(Serializability, Recoverable) [DB] 트랜잭션 #3 | Isolation level(격리 수준)과 이상 현상 (+면접 질문) 개념과 ACID 속성 - 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며 데이터베이스에 접근하는 방법은 쿼리이므로, 즉..
- [OS] 동기화(Synchronization) | 스핀락, 뮤텍스, 세마포어 [ 데이터 접근 ] 데이터가 저장되어 있는 위치로부터 데이터를 읽어와서 연산한 뒤, 연산한 결과를 이전에 저장되어 있던 그 위치에 다시 저장한다. 데이터를 읽기만 하면 문제가 없는데, 데이터를 연산하고 수정하게 되면 누가 먼저 읽어 갔는지에 따라 결과가 달라질 수 있다. 이때 발생할 수 있는게 Synchronization(동기화) 문제이다. load X, reg1 inc reg1 store X, reg1 🤼♂️ Process Synchronization 공유 데이터(shared data)의 동시 접근(concurrent access)은 데이터의 불일치 문제(inconsistency)를 발생시킬 수 있다. 따라서 일관성(consistency) 유지를 위해서는 협력 프로세스(cooperating proce..
- [웹개발자 필수] HTTP 진화 과정 (HTTP/1.0부터 HTTP/3까지)(+관련 면접 질문) 기본적으로 HTTP는 전송 계층 위에 있는 애플리케이션 계층으로서 웹 서비스 통신에 사용된다. 이런 웹은 어떻게 시작되었을까. [ World Wide Web의 발명 ] HTTP는 World Wide Web에 내재된 프로토콜이다. 팀 버너스리가 1989년부터 1991년에 발명하였고 초기에 Mesh라고 불리다가 1990년에 구현 과정에서 World Wide Web(WWW)으로 이름을 바꿨다. World Wide Web(WWW) : HTTP라는 프로토콜을 이용해 HTML 파일을 주고받을 수 있는 공간 HTTP/0.9 원-라인 프로토콜 HTTP/0.9는 정말 단순한 서버-클라이언트 구조를 따른다. 요청: 단일 라인으로 구성 리소스 경로: GET 메서드만 가능 GET /mypage.html Simple HTML ..
- [CI/CD] GitHub Actions + AWS Elastic Beanstalk를 활용한 자동화 파이프라인 구축 (정성가득♥️) 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스인 AWS Elastic Beanstalk를 만드는 법을 포스팅으로 따로 정리한 적 있다. 👉 [AWS] Elastic Beanstalk(EB) 사용해서 웹 애플리케이션 배포하기 또한 이전에 CI,CD 중 Jenkins와 Circle CI를 공부한 적이 있다. 젠킨스는 아래와 같은 이유로 공부했는데 따로 호스팅을 해야하는 등 서비스 운영을 위한 리소스 비용을 발생하여 부담이 되었다. 무료 사용 방대한 양의 플로그인 다양한 적용사례 및 풍부한 레퍼런스 🍀 그래서 이번에는 최근 현업에서 많이 사용하는 GitHub Actions를 이용하여 CI/CD 파이프라인을 구축하고 AWS Elastic Beanstalk로 배포 및 관리해보겠다. 1. A..
반응형