전체 글 51

[WIL] 디자인 역량 향상 프로젝트 - 1회차

1. 개요항목: 인스타그램 웹 콘텐츠, 포스터목적: 디자인 역량 향상, 작업 사이클 테스트기간: 2025.03.17 ~ 2025.03.21활용 프로그램: Adobe Photoshop2. 새롭게 알게 된 점타이포그래피 산세리프체는 왜 깔끔하고 모던한 느낌이 드는가?단순성, 인지적 효율성: 사람의 뇌는 불필요한 요소나 복잡한 디테일을 처리하는 데 많은 에너지를 소모한다. 간결하고 직선적 구조인 산세리프는 인지적 부담이 적어 읽을 때 빠르게 처리할 수 있다.시대적 배경에 따른 심리적 연상: 세리프체(ex. Times New Roman)는 고대 로마의 서체에서 유래했다. 따라서 Serif는 고전적 미학을 반영한, 고풍스럽고 전통적인 느낌을 준다. 산세리프체는 산업혁명, 디지털 혁명 영향 아래 등장했다. 간결하고..

[패러다임] 그런지 Grunge 그래픽 디자인이란

개요 Grunge 디자인은 1990년대 초반 얼터너티브 음악에서 영향을 받아 등장했다. 원래 '그런지'라는 용어는 펑크, 록, 헤비메탈 음악 장르를 지칭하는 말이었다. 디자인 분야에서 그런지는 도시적이고 거친 질감, 왜곡된 이미지, 비정형적인 타이포그래피로 시각적으로 표현되었으며, 반항적이고 비순응적인 특성으로 기존의 전통적인 세련미를 거부하고 날것 그대로의 감성과 무질서를 강조했다. 도심과 산업 현장에서 영감을 받아 급진적인 분위기를 연상시키며, 기존 디자인 규칙을 의도적으로 깨뜨렸다.  특징거친 질감 (Distressed Textures): 찢어진 종이, 스크래치, 구겨진 표면, 흩뿌려진 잉크 등의 텍스처가 빈티지하고 거친 느낌을 강조한다.어두운 색감 (Dark & Moody Colors): 차분하고..

[MySQL] 인덱스를 사용하는 이유, B-Tree 구조 및 동작 방식

개요MySQL InnoDB 엔진이 데이터를 디스크에 읽고 쓰는 방식을 알아보고, 인덱스를 적용하면 왜 성능이 개선되는 것인지 살펴보고자 합니다. 1. 데이터 읽기/쓰기와 디스크 드라이브 데이터베이스에서 작성한 데이터는 디스크 드라이브에 저장되어 영속됩니다. 컴퓨터에서 CPU나 메모리 등의 주요 장치는 전자식 장치지만, HDD는 기계식 장치입니다. 디스크에 데이터를 쓰고 읽는 데 걸리는 시간은 디스크 헤더를 물리적으로 움직이는 단계에서 결정됩니다. 때문에 데이터베이스 서버에서는 데이터를 읽어올 때 하드 디스크 드라이브가 병목지점이 됩니다. 이러한 단점을 개선하기 위해 SSD가 출시되었습니다. 솔리드 스테이트 드라이브는 기존의 HDD에서 플래터(원판)를 제거하고 그 대신 플래시 메모리를 장착하고 있습니다. ..

[BOJ] 백준 1978번 소수 찾기, 2581번 소수 - JAVA 자바 풀이

개요 1978번은 주어진 숫자 N개 중 소수를 찾는 문제이고, 2581번은 주어진 범위 M부터 N까지의 숫자 중 소수(+ 최소값)를 찾는 문제입니다. 두 문제 모두 소수를 찾는 문제로, 저는 두 가지 방법으로 문제를 해결했습니다.O(N^2)의 시간 복잡도를 갖는 단순 구현O(N)의 시간 복잡도를 갖는 에라토스테네스의 체 사실 단계 별로 풀어보기의 문제 설명에는 첫 번째 방법이 작성되어 있습니다.그러나 에라토스테네스의 체 방법으로도 풀이가 가능합니다.  시간과 메모리 상 큰 차이는 보이지 않는 것 같은데, 입력 값의 범위가 작아서 그렇습니다.제출한 코드로 숫자 범위를 넓혀 테스트한 결과 큰 차이가 있었습니다.  단순 구현은 M=1, N=10만에서 약 2초가 걸렸고 M=1, N=100만에서 약 23초가 걸렸..

[네트워크] 쿠키와 세션이란? + 스프링 MVC에서 사용법

1. 쿠키 (Cookie)쿠키란?쿠키는 사용자의 브라우저에 저장되는 데이터입니다. 웹사이트는 쿠키를 사용해 사용자가 이전에 방문했을 때의 정보를 유지할 수 있습니다.장단점장점상태 유지: 사용자가 웹 사이트를 다시 방문할 때 이전 상태를 유지할 수 있습니다.간편한 구현: 브라우저에서 쿠키를 관리하기 때문에 서버 측에서 쿠키를 지정하기만 하면 되어 간단합니다.클라이언트에 저장: 서버 자원을 절약할 수 있습니다.단점보안: 쿠키는 클라이언트 측에 저장되므로 민감한 정보를 암호화하지 않으면 보안 취약점이 생길 수 있습니다.저장 용량 제한: 각 쿠키의 크기는 4KB로 제한되며, 브라우저 당 저장 가능한 쿠키 수에도 제한이 있습니다.브라우저 종속적: 브라우저 설정에 따라 쿠키 사용이 제한될 수 있습니다.사용방법서버에..

개발/네트워크 2024.07.01

[MySQL] 서버 구조와 동작 원리 - MySQL 엔진, 스토리지 엔진

1. MySQL 서버 전체 구조MySQL 엔진MySQL 엔진은 커넥션 관리, SQL 명령어 처리, 캐시 & 버퍼 관리, 스레드 관리 등을 담당합니다.커넥션 핸들러: MySQL 서버 사용자인 응용 프로그램과 커넥션을 체결합니다.SQL 인터페이스: 사용자가 작성한 SQL 명령어를 DBMS 서버 내부로 전달합니다.SQL 파서: SQL 명령어를 분석해 Syntax Tree를 형성한 뒤 옵티마이저에게 전달합니다.SQL 옵티마이저: SQL 명령어를 최적화해 실행 계획을 세웁니다.캐시 & 버퍼: 데이터를 메모리에 저장하여 성능을 향상시킵니다. 스토리지 엔진데이터 저장 방식을 관리하고 실제 물리적 디스크에 접근합니다.InnoDB와 MyISAM 등이 대표적인 스토리지 엔진입니다. 핸들러 APIMySQL 엔진과 스토리지 ..

[Java] 자바 입출력 - 바이트 스트림과 문자 스트림이란?

1. 바이트 스트림 & 문자 스트림바이트 스트림Byte Stream은 데이터를 Byte 단위로 처리합니다.모든 종류의 파일 (텍스트, 이미지, 비디오 등) 데이터를 처리합니다.InputStream, OutputStream 클래스는 모든 바이트 기반 입출력 스트림의 최상위 추상 클래스입니다.문자 스트림Character Stream은 데이터를 Character 단위로 처리합니다.주로 텍스트 파일 데이터를 처리합니다.Reader, Writer 클래스는 모든 문자 기반 입출력 스트림의 최상위 추상 클래스입니다. 2. InputStreamReader & OutputStreamWriterInputStreamReader는 바이트 입력 스트림을 문자 입력 스트림으로 변환합니다.OutputStreamWriter는 바이트..

개발/Java 2024.06.25

[Java] 익명 클래스, 익명 객체란?

1. 익명 클래스란익명 클래스란, 이름이 없는 클래스입니다.이름이 없는 이유는 클래스의 정의(선언)과 인스턴스화가 동시에 진행 되기 때문입니다.public class People { ...} 우리가 일반적으로 선언하는 명명 클래스는 위과 같은 .java 파일을 별도로 작성합니다.아래 클래스의 경우 People이 클래스 이름이 됩니다. 그렇다면, 익명 클래스는 왜 이름이 없는지 사용법을 통해 알아보겠습니다. 2. 어떻게 사용하는가익명 클래스는 선언과 동시에 인스턴스화 된다고 말씀 드렸는데요, 그렇기에 익명 객체라고도 불립니다.익명 객체가 구현할 수 있는 대상은 추상 클래스 또는 인터페이스입니다.AbstractClass extendedObj = new AbstractClass() { @Override ..

개발/Java 2024.06.18

[BOJ] 백준 11725번 트리의 부모 찾기 - JAVA 자바 풀이

접근법트리는 그래프의 일종입니다. 문제에서 입력으로 주어지는 노드의 연결 정보는 그래프의 간선 정보나 다름 없습니다.간선 정보로 그래프를 구성한 뒤 트리의 루트인 1번 정점에서 부터 그래프 탐색을 하면 됩니다. 그래프 초기화입력으로 주어진 간선 정보를 토대로 그래프를 초기화 하는 코드입니다.각 정점에 연결된 인접 정점들을 표기하기 위해 Map> 자료구조를 사용했습니다.static Map> tree = new HashMap();public static void initTree(int v, int w) { if(!tree.containsKey(v)) { // 정점 v를 최초로 입력 받았을 경우 LinkedList list = new LinkedList(); list.add(w)..

[BOJ] 백준 1991번 트리 순회 - JAVA 자바 풀이

접근법트리 자료구조를 표현하기 위해 배열을 선언합니다. 배열의 타입은 Node[] 입니다.트리의 각 노드를 표현하기 위해 왼쪽, 오른쪽 자식을 가리킬 수 있는 Node 클래스를 선언합니다.'A' 'B' 'C' 등 각 Node의 값은 배열의 인덱스로 표현할 수 있습니다. Node 클래스class Node { int left; // 왼쪽 자식의 인덱스 int right; // 오른쪽 자식의 인덱스 public Node(int left, int right) { this.left = left; this.right = right; }} 왼쪽 자식의 인덱스와 오른쪽 자식의 인덱스를 포함하는 Node 클래스를 생성했습니다.Node 배열을 생성하고, 알파벳 A를 기준으로 ..