Stay Hungry Stay Foolish
728x90

전체 글 498

[Spring] Spring AOP

🌱 Spring AOP (관점 지향 프로그래밍) 개념목차1. AOP란? (횡단 관심사의 분리)2. AOP 주요 용어 및 Advice 종류3. 코드 예시 (@Aspect)4. Spring AOP의 원리 (Proxy & Weaving)1. AOP란? (Aspect-Oriented Programming)AOP는 관점 지향 프로그래밍으로, 핵심 비즈니스 로직과 공통적으로 사용되는 횡단 관심사(Cross-Cutting Concerns)를 분리하여 모듈성을 높이는 패러다임입니다.횡단 관심사 예시로깅(Logging), 트랜잭션 관리, 보안, 성능 측정, 예외 처리 등AOP가 필요한 이유중복 제거: 여러 메서드에 흩어진 공통 로직을 한 곳에서 관리합니다.변경 지점 단일화: 공통 로직 수정 시 Advice 하나만 변경..

[Web 기초] 웹 프로그래밍(Web Programming)

💻 웹 프로그래밍(Web Programming)의 구조와 언어목차1. Front-End vs Back-End2. 웹 프로그래밍의 3대 언어 (HTML, CSS, JS)3. 역할 비유 및 정리1. Front-End vs Back-End웹 개발은 사용자가 보는 영역과 보이지 않는 영역으로 나뉩니다.Front-End (프론트엔드)사용자가 직접 보고 상호작용하는 화면(UI) 개발HTML로 뼈대를 구성하고 CSS로 스타일링JavaScript로 동적인 웹 페이지 구성Back-End (백엔드)서버, 데이터베이스, 비즈니스 로직 등 눈에 보이지 않는 영역 개발주요 언어: Java, Python, Ruby, PHP 등데이터 관리용 SQL 언어 사용2. 웹 프로그래밍 언어HTML (HyperText Markup Lang..

🌐 CS & Infra/Web 2026.03.31

[Web 기초] HTTP 프로토콜

🔄 HTTP 프로토콜과 웹 통신 구조목차1. HTTP란? (요청과 응답)2. 웹 서버와 클라이언트의 동작 과정3. 웹 페이지와 브라우저의 역할4. 웹 표준 기구 W3C1. HTTP란?HTTP(HyperText Transfer Protocol)는 요청(Request)과 응답(Response)의 형태로 이루어진 웹 통신 규약입니다.웹 서버(Web Server): 클라이언트의 요청을 처리하여 적절한 데이터를 응답합니다.클라이언트(Client): 웹 서버에 원하는 정보를 요청하는 주체(주로 브라우저)입니다.2. 웹 통신 동작 과정우리가 웹 페이지를 보는 과정은 크게 3단계로 나뉩니다.요청(Request): 클라이언트가 웹 서버에 특정 파일(예: index.html)을 요청합니다.응답(Response): 웹 서..

🌐 CS & Infra/Web 2026.03.31

[Web 기초] 인터넷(Internet)과 웹(Web)의 차이

🌍 인터넷(Internet)과 웹(Web)의 차이목차1. 인터넷 vs 웹: "도로와 자동차"2. 타임라인으로 보는 역사 (이메일이 형님?)3. 웹의 아버지, 팀 버너스리1. 인터넷 vs 웹: "도로와 자동차"많은 사람이 '인터넷과 웹은 같다'고 생각하지만, 이 둘은 엄연히 다릅니다.인터넷 (Internet)전 세계의 컴퓨터들을 연결하는 거대한 통신망(인프라)입니다. 정보를 실어 나르는 '도로'와 같습니다.웹 (World Wide Web)인터넷이라는 도로 위를 달리는 서비스 중 하나입니다. 도로 위를 달리는 '자동차'나 '버스' 같은 존재입니다.인터넷 위에는 웹 말고도 이메일(Email), 파일 전송(FTP), 온라인 게임 등 다양한 서비스가 존재합니다.2. 타임라인으로 보는 역사사실 이메일은 웹보다 훨..

🌐 CS & Infra/Web 2026.03.31

[Network] IP(Internet Protocol)

🔢 IP(Internet Protocol) 주소 체계목차1. IP란 무엇인가? (IPv4와 형식)2. 공인 IP vs 사설 IP (NAT와 포트포워딩)3. 고정 IP vs 유동 IP (및 DDNS)4. 차세대 주소 체계 IPv61. IP란 무엇인가?IP는 컴퓨터가 네트워크상에서 서로를 식별하는 주소입니다. 인터넷에 연결된 기기의 위치를 나타냅니다.특징: 네트워크상의 위치이므로 접속 장소에 따라 자주 바뀔 수 있습니다.비유: 컴퓨터가 '이동식 트레일러'라면, IP는 그 트레일러가 현재 머물고 있는 '도로명 주소'와 같습니다.IPv4 형식예: 123.234.135.2480~255 사이의 숫자 4개로 이루어진 형식입니다.약 46억 개의 주소를 표현할 수 있으며, 현재 가장 널리 사용되는 규약입니다.2. 공인..

[Network] DNS(Domain Name System)

📡 DNS(Domain Name System) 개념 정리목차1. DNS란 무엇인가?2. DNS 동작 과정 (www.tistory.com 접속 예시)3. DNS 보안과 로컬 DNS 설정4. A Record vs CNAME1. DNS란 무엇인가?DNS(Domain Name System)는 도메인 이름을 IP 주소로 바꿔주는 시스템입니다. 우리가 사용하는 www.tistory.com 같은 주소를 도메인이라고 부릅니다.www: 호스트명(host name) 또는 서브도메인(subdomain) 라벨입니다. (mail, blog, api 등으로 변경 가능)필요성: 서버에 접속하려면 IP 주소가 필요하지만, 모든 사이트의 IP를 외우는 것은 불가능합니다. DNS는 마치 전화번호부처럼 도메인을 통해 IP를 찾아주는 역..

[Programmers/알고리즘 고득점 KIT] 같은 숫자는 싫어

[Programmers] 같은 숫자는 싫어Level 1 | #스택/큐문제 바로가기 🔗1. 문제 요약배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 반환하는 문제이다.단, 제거된 후 남은 수들을 반환할 때는 원래의 순서를 유지해야 한다.2. 접근 방식 및 포인트배열의 원소를 하나씩 순회하며 가장 최근에 추가된 숫자와 비교하여 중복 여부를 판단한다.✅ 스택 활용: 새로운 배열(스택)을 만들고, 마지막 요소(stack[-1])가 현재 숫자와 다를 때만 추가한다.✅ 예외 처리: 스택이 비어있는 초기 상태에서는 비교할 대상이 없으므로 무조건 숫자를 추가해야 한다.3. 구현 코드 (Python)def solution(arr): stack = [] for num in arr: ..

[JavaScript] Event Loop

브라우저 이벤트 루프(Event Loop) 정리목차1. 이벤트 루프란?2. 브라우저 환경의 구조 (런타임)3. 태스크 큐의 종류와 우선순위4. 이벤트 루프의 동작 과정1. 이벤트 루프란?자바스크립트는 싱글 스레드(Single Thread) 언어입니다. 한 번에 하나의 작업만 처리할 수 있음에도 불구하고, 브라우저에서 여러 작업을 동시에 처리하는 것처럼 느껴지는 이유는 바로 이벤트 루프 덕분입니다. 이벤트 루프는 호출 스택이 비어있는지 확인하고, 기다리고 있는 비동기 작업들을 적절한 시점에 실행해주는 역할을 합니다.2. 브라우저 환경의 구조Call Stack: 현재 실행 중인 함수들이 쌓이는 공간 (LIFO 구조)Web APIs: 브라우저에서 제공하는 API (setTimeout, DOM, AJAX 등)...

[JavaScript] 메모리 관리

JavaScript 메모리 관리 정리목차1. 메모리 생명 주기2. 스택(Stack) vs 힙(Heap)3. 가비지 컬렉션 (GC)4. V8 엔진의 가비지 컬렉션 최적화1. 메모리 생명 주기할당 → 사용 → 해제JavaScript는 엔진이 메모리를 자동 관리합니다.참고: C언어는 malloc(), free()를 통해 개발자가 직접 할당과 해제를 수행해야 합니다.2. 스택(Stack) vs 힙(Heap)스택 (Stack)원시값, 참조 주소 저장고정 크기 (정적 메모리)속도가 매우 빠름실행 컨텍스트, 렉시컬 환경과 관련됨힙 (Heap)객체, 배열 저장가변 크기 (동적 메모리)스택에 비해 상대적으로 느림3. 가비지 컬렉션 (GC)Reference Counting (참조 횟수 계산)참조 횟수를 세서 0이 되면 메..

[JavaScript] 비동기 처리

JavaScript 비동기 처리 정리 목차 1. 동기 vs 비동기 2. 비동기 처리 방식의 진화 (Callback, Promise, Async/Await) 3. Promise 유틸리티 메서드 4. 핵심 정리 및 요약 1. 동기 vs 비동기 동기(Synchronous) 코드가 순차적으로 실행되며, 하나의 작업이 완료될 때까지 다음 작업이 대기 이전 작업이 끝나야 다음 작업 시작 비동기(Asynchronous) 특정 코드의 완료를 기다리지 않고 다음 코드를 즉시 실행 블로킹(Blocking) 없음: 실행 흐름이 멈추지 않음 실행 순서 보장 안 됨: 코드 작성 순서와 실행 완료 순서가 다를 수 있음 ..

[Programmers/알고리즘 고득점 KIT] 베스트앨범

[Programmers] 베스트앨범Level 3 | #해시 #정렬문제 바로가기 🔗1. 문제 요약스트리밍 사이트에서 장르별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시한다.노래 선정 기준은 다음과 같다: 속한 노래가 많이 재생된 장르 → 장르 내에서 많이 재생된 노래 → 재생 수가 같다면 고유 번호가 낮은 노래 순서이다.2. 핵심 포인트✅ 데이터 그룹화: defaultdict를 사용하여 장르별 총 재생 수와 곡 정보를 한 번에 정리한다.✅ 다중 조건 정렬: Python의 sorted 함수와 lambda를 활용하여 복잡한 정렬 우선순위를 처리한다.3. 구현 코드 (Python)from collections import defaultdictdef solution(genres, plays): ..

[Programmers/알고리즘 고득점 KIT] 의상

[Programmers] 의상Level 2 | #해시 #조합문제 바로가기 🔗1. 문제 요약스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때, 서로 다른 옷의 조합의 수를 구하는 문제이다.각 종류별로 최대 1개의 의상만 착용할 수 있으며, 최소 한 개의 의상은 입어야 한다.2. 핵심 아이디어: "안 입는 것도 선택이다"각 의상 종류(머리장식, 상의, 하의 등)에서 하나를 고르는 경우의 수 외에 '아무것도 입지 않는 경우'를 선택지에 추가하는 것이 포인트이다.예를 들어, 머리장식이 [안경, 선글라스] 2개라면 선택지는 총 3가지가 된다.안경을 쓴다.선글라스를 쓴다.아무것도 쓰지 않는다.3. 수학적 공식(n + 1) × (m + 1) × (k + 1) ... − 1📌 +1을 하는 이유: ..

[Programmers/알고리즘 고득점 KIT] 전화번호 목록

[Programmers] 전화번호 목록Level 2 | #해시문제 바로가기 🔗1. 문제 요약전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하는 문제이다.접두어가 존재하면 False를, 그렇지 않으면 True를 반환한다.2. 풀이 1: 정렬(Sorting) 활용def solution(phone_book): phone_book.sort() # 문자열 기준 정렬 for i in range(1, len(phone_book)): if phone_book[i].startswith(phone_book[i - 1]): return False return True📌 정렬 시 인접 원소만 비교하는 이유: 문자열 정렬은 사전순으로 이루어..

[Programmers/알고리즘 고득점 KIT] 포켓몬

[Programmers] 포켓몬Level 1 | #해시문제 바로가기 🔗1. 문제 요약N마리의 포켓몬 중에서 N/2마리를 가져갈 수 있다. 이때 최대한 다양한 종류의 포켓몬을 선택하는 것이 목표이다.포켓몬의 종류 번호가 담긴 배열 nums가 주어질 때, 선택할 수 있는 포켓몬 종류 개수의 최댓값을 구하는 문제이다.2. 접근 방식 및 포인트가장 많은 종류를 선택하려면 중복된 종류를 제거한 뒤, 내가 가져갈 수 있는 수(N/2)와 비교해야 한다.✅ 자료구조: 중복을 허용하지 않는 set을 사용하여 포켓몬의 종류를 파악한다.✅ 로직: 포켓몬 종류의 수(len(set(nums)))가 내가 가질 수 있는 수(len(nums) // 2)보다 크면 N/2를 반환하고, 작으면 종류의 수를 그대로 반환한다.3. 구현 코..

[Programmers/알고리즘 고득점 KIT] 완주하지 못한 선수

[Programmers] 완주하지 못한 선수Level 1 | #해시문제 바로가기 🔗1. 문제 요약수많은 마라톤 선수들이 마라톤에 참여하였다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였다.참가자 명단(participant)과 완주자 명단(completion)이 주어질 때, 완주하지 못한 선수의 이름을 반환하는 문제이다.2. 접근 방식 및 포인트참가자 중 동명이인이 있을 수 있다는 점이 핵심이다. 단순히 존재 여부만 체크해서는 안 되며, 각 이름별 인원수를 관리해야 한다.✅ 자료구조: Python의 dict(Hash Table)를 활용하여 이름별 인원수를 저장한다.✅ 시간 복잡도: O(n) 이내에 해결해야 한다. participant와 completion을 각각 한 번씩 순회하므로 O(n..

728x90