masterpiece-programming의 등록된 링크

키자드에 등록된 총 269개의 포스트를 확인하실 수 있습니다.

Tistory

[Web] 인증(Authentication)과 인가(Authorization)

[Web] 인증(Authentication)과 인가(Authorization) 인증과 인가는 일상생활 속에서도 많이들 듣는 개념이다. 인증은 본인인증, 성인인증 등의 용어에서 많이 보았을 것이다. 내가 '누구인지'를 확인하는 절차를 뜻하는 것으로 일상에서도 사용된다. 한편, 인가의 경우, 법률용어로 활용이 되기도 하는데, '학교 설립 인가', '국토교통부 장관 인가' 등 행정법 상의 용어로 많이 활용된다. 정확히 이야기하면, 행정기관이 어떤 사람이 하려는 행위를 OKay 해주어서 법적으로 효력이 있게 만들어주는 절차라는 뜻을 가진다. 어감에서도 드러나듯, 인증과 인가는 어떤 프로그램을 설계하는데 필요한 것이 아니라, 누군가와 소통을 하는데 있어서 필요한 '확인 절차'에 쓰이는 개념이라고 할 수 있다. h..

Tistory

[Web] OSI 7 Layer

[Web] OSI 7 Layer OSI란, Open System Interconnection으로, 개방형 시스템 상호 연결이라는 뜻을 가지고 있다. 이 모델은 다양한 통신 시스템이 표준 프로토콜을 사용하여 통신할 수 있도록 국제 표준화 기구가 만든 개념 모델이다. 사전적 정의이기 때문에 와닿지 않을 수 있다. 그래서 조금 더 이해를 하고자 재정의를 해보면 다음과 같다. 컴퓨터와 컴퓨터가 통신을 시도할 때, 발생하는 과정을 기능별 일곱 가지로 나눈 것이 OSI 7 Layer라고 보면 되겠다. 다시 말해, 통신을 함에 있어서 어떤 일이 일어나는 지를 정리한 것이 OSI이고, 그것이 7단계여서 OSI 7 Layer라고 하는 것이다. OSI의 계층을 나눌 수 있는 이유는 무엇일까? 계층은 섞이지 않는 기준을 가..

Tistory

[Spring] MVC Pattern

[Spring] MVC Pattern 1. MVC란? 기초적인 동적 웹은 php 파일과 같이 한 형태의 파일 안에서 데이터베이스에 접속하고, html을 구현하고 css를 구현하고 해서 나타낼 수가 있다. 하지만, 간단한 게시판 정도가 아니라 거대한 Naver, Daum과 같은 페이지를 관리해야 한다면? 요소와 기능들이 많아지고 구조가 이것저것 얽히면서 하나의 파일 안에 든 코드들이 난잡하게 되어 버린다. 거대해지고 복잡해질 때는 분리, 모듈화를 해주어야 한다. 하나의 모듈이 하나의 일을 하고 그것들이 합쳐져서 전체적 서비스로 보이게 해야 하는 것이다. 국가의 기능은 입법, 사법, 행정으로 나뉘듯이, 웹 사이트에서는 기능을 "Model, View, Controller" 세 가지로 나눌 수 있다. Sprin..

Tistory

[스터디] 객체 지향 설계 5원칙 - SOLID

[스터디] 객체 지향 설계 5원칙 - SOLID 2주간 객체 지향의 개념과 4대 특성을 완전하게 살펴보았다. 그렇다면 객체 지향 언어를 이용해서 객체 지향을 올바르게 설계해 나가는 방법, 원칙을 배워볼 차례이다. 객체 지향의 설계 중 정수는 SOLID다. SOLID는 위의 그림에서 보이는 것과 같이 두문자를 따서 만들어놓은 개념어이다. 좋은 소프트웨어 설계를 위해서 결합도를 낮추고, 응집도를 높이기 위한 방법들이 SOLID에 응축되어 있다고 보면 된다. SOLID는 개념이다. 다양한 곳(아키텍처, 프레임워크 모듈, 클래스, 속성 등등)에 다양하게 적용되기 때문에 보는 사람의 관점에 따라 다르게 해석될 수도 있다. 그렇기 때문에 개념을 이해만 하고 실제로 어떻게 활용되는 지를 알아보고, 소프트웨어에 자연스..

Tistory

[Spring] Servlet Container

[Spring] Servlet Container 서블릿 컨테이너를 알아보기 전에 복습해야 할 개념이 있다. 웹 서버 개념이다. 2022.07.07 - [IT 지식/Web] - [Web] 웹 서버 : apache, NginX, Tomcat [Web] 웹 서버 : apache, NginX, Tomcat [Web] 웹 서버 : apache, NginX, Tomcat 1. 웹이 우리에게 오기까지 HTML, CSS, JavaScript 등의 파일은 페이지를 구현하기 위해 필요한 문서들이다. 이 문서들은 클라이언트에 있는 것이 아니라, 그 정보를 저 masterpiece-programming.tistory.com 웹 서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다. 웹 서버는 웹페이지 리소스들을 서버 데..

Tistory

[Spring] Observer Pattern

[Spring] Observer Pattern 한 없이 유약한 공격력 0의 유닛이다. 그렇지만 프로토스에게 중반 이후 클로킹을 쓰는 유닛에 대처하기 위해 필수적으로 생산해야 하는 유닛이다. 옵저버는 관찰자이다. 공격을 하지 않고 들키면 뚜드려 맞아야 하고, 가려진 맵과 클로킹 된 유닛을 보여주기만 한다. 그렇다면 옵저버 패턴은 무엇일까? 옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다. Observer Pattern도 옵저버와 ..

Tistory

멋쟁이 사자처럼 백엔드 스쿨 25% 회고

멋쟁이 사자처럼 백엔드 스쿨 25% 회고 현재 글을 쓰는 시점은 7월 24일이다. 백엔드 스쿨이 시작된 지 한 달 하고도 10여 일 정도가 지났다. 그동안 26번의 수업을 들었으며, 그중 결석은 개인적인 사정으로 한 번 정도 했으니 25% 정도를 들은 셈이다. 25%라고 하니까 벌써...? 라는 생각이 먼저 든다. 시간이 뭐 이렇게 빠른가 싶기도 하다. 빠른 시간은 망각을 불러온다... 사라지는 기억들을 붙잡아 놓기 위해 그동안 배웠던 것들과 일상에서 있었던 여러 가지 깨달음들을 정리해보기로 했다. 1. 프로그래밍 학습과 개념에 대한 깨달음과 변화. 1) 개념이나 기술이 생소하지는 않게 되었다. 한 달 간은 생소한 세계에 던져지고 익숙해지는 과정의 연속이었다. 웹과 관련된 용어를 들으면 생소하고, 네트워..

Tistory

[Web] Web Request, Response(웹의 요청과 응답)

[Web] Web Request, Response(웹의 요청과 응답) 웹이라는 단어는 인터넷을 사용하는 우리에게는 참 친숙한 단어이다. 웹 사이트, 웹 서버.... 그렇지만, 정확하게 웹이라는 단어의 의미와 뜻을 알고 있는가에 대해 반성을 해볼 필요가 있다. 웹(World Wide Web, WWW)은 인터넷을 지칭하는 개념이 아니다. 하위 개념이라고 할 수 있다. 컴퓨터와 컴퓨터를 연결하는 기술이 인터넷 기술이고, 웹은 그 인터넷 위에서 동작하는 서비스 중에 하나이다. 인터넷이라는 네트워크 인프라 위에서 동작하는 것이 웹 1. 웹의 존재 이유 그럼 웹은 왜 존재하는 것일까? 무엇을 위해 있는 기술일까? 팀 버너스리는 WWW의 창시자이다. 이 사람은 컴퓨터로 어떤 정보를 공유하고 싶은 마음이 있었다. 그렇..

Tistory

[Spring] Factory-Method Pattern

[Spring] Factory-Method Pattern 팩토리는 공장을 의미한다. 공장은 물건을 생산하는데 객체 지향에서 팩토리는 '객체'를 생성한다. 팩터리 메서드는 결국 객체를 생성하고 반환하는 메서드를 말한다. 여기에 패턴이 붙으면 하위 클래스에서 팩토리 메서드를 오버라이딩해서 객체를 반환하게 하는 것을 의미한다. 팩토리 메서드 패턴은 생성할 객체 타입을 예측할 수 없을 때 활용한다. 객체 생성의 책임을 하위 클래스에게 위임시키고, 어느 하위 클래스에게 위임했는 지에 대한 정보를 은닉할 때 활용한다. 정리하면 다음과 같다. - 팩토리 메서드 패턴은 어떤 클래스가 자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때 사용한다. - 팩토리 메서드 패턴은 생성할 객체를 기술하는 책임을 자신의 서브클..

Tistory

[Spring] Singleton Pattern

[Spring] Singleton Pattern 객체지향 디자인패턴 중 싱글턴 패턴은 객체의 인스턴스를 오직 1개만 생성한다. 이것이 싱글턴 패턴의 정의이다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 것을 인스턴스를 여러 개 만들어 사용하게 되면 불필요한 메모리 자원 낭비가 되는데, 이럴 때 사용하는 것이다. 이런 싱글턴 패턴을 구현하기 위해서는 반드시 객체 생성을 위한 new에 제약을 걸어야 한다. 또한 만들어진 단일 객체를 반환할 수 있는 메서드가 필요하다. 그래서 아래의 세 가지 조건이 필요하다. - new를 외부에서 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다. - 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다. - 유일한 단일 객체를 참조할 정적 참..

Tistory

[Spring] Servlet과 Spring

[Spring] Servlet과 Spring 1. 서블릿이란? 서버 어플리케이션 조각 -> Server Application Let -> Servlet 처음 웹서버는 클라이언트의 요청에 따라 정적인 페이지로만 응답할 수 있었다. 웹 서버에 동적인 프로그램을 붙여서 페이지를 보여주는 것이 서블릿 방식이다. 1) 서블릿이 생겨난 이유 http 요청과 응답은 다음과 같다. //request GET /api/products HTTP/1.1 Content-Type: application/json User-Agent: PostmanRuntime/7.28.0 Accept: */* Postman-Token: abfcbcf8-9317-430c-86b9-c00020eb736e Host: localhost:8080 Acce..

Tistory

[스터디] 객체 지향 원리의 이해(총정리)

[스터디] 객체 지향 원리의 이해(총정리) 스터디가 2주차에 접어들었다. 저번주에는 객체 지향의 전신인 절차/구조적 프로그래밍에 대해서 알아보았다면, 이제는 본격적으로 객체 지향이란 무엇인지, 어디까지 발전해있는지를 알아보는 시간을 가진다. 라는 책은 자바의 객체 지향의 개념을 안다고 생각하는 입문자들에게 '너 확실하게 이해한 것 맞니?' 라는 생각을 하게 만들고, 다시 제대로 이해하게 만든다. 한 달 여간 자바의 여러 면면을 알아왔고, 객체 지향의 개념에 대해서 80% 정도는 이해하고 있다고 생각했는데, 책을 읽으며 반성하게 되었고, 더 나아지는 과정을 얻을 수 있었다. 또한 객체 지향 속의 개념어의 의미를 더 명확히하고 친숙히 하는 데에 있어서 많은 도움이 되었다. 클래스부터 super까지 모두 훑어..

Tistory

백신 접종 1년차의 코로나 확진 격리 일기

백신 접종 1년차의 코로나 확진 격리 일기 그렇다. 슈퍼 면역자인줄 알았다. 하지만, 작년 7월, 8월에 맞았던 백신은 유효기간이 지난 것일까. 몇 번의 드립에도 살아남았던 나는, 저번주 12일, 화요일에 확진판정을 받았다. 그 주 금요일에 서울대입구에서 맛있게 조개구이를 먹고 달려달려 2차 3차를 갔다가 온전히 걸려온 것 같다. 주말 동안은 괜찮았지만, 월요일 아침에 일어나자마자 코로나와의 동거를 시작할 수 밖에 없었다. 7월 11일(월), 아침 8시 30분 알람이 3번째 울리고 있다. 하지만, 일어날 수가 없다. 평소와는 다르게 몸이 2배는 무겁고 머리도 미칠듯이 아프기 때문이다. 느낌인 것 같지만 열도 나는 것 같고, 목도 갑자기 뜨겁게 아프다. 그렇지만, 온라인 수업에 결석을 할 수는 없어 일단 ..

Tistory

[Java] equals()와 ==의 차이점

[Java] equals()와 ==의 차이점 equals()는 Object 클래스의 메소드이다. public boolean equals(Object obj) { ... } equals()는 리턴값으로 boolean 형식을 가진다. 모든 객체를 인자로 받을 수 있다. 자바에서는 두 객체를 동등 비교할 때 equals() 메서드를 사용한다. equals()는 두 객체를 비교해서 논리적으로 동등하면 true를 리턴하고, 그렇지 않으면 false를 리턴한다. 여기서 논리적 동등성은 같은 객체든 다른 객체든 객체가 저장하고 있는 데이터가 동일함을 의미한다. 즉, 객체의 메모리 번지를 비교하는 것이 아니라, 문자열이나 숫자가 같은지를 비교하는 것이다. == : 동치성 비교. 달이라고도 하고 moon이라고도 하지만,..

Tistory

[C언어] 구조체 배열, 구조체 포인터 배열

[C언어] 구조체 배열 1. 구조체 배열의 필요성 만약 2차원 좌표를 10개 만들어야 한다면? struct Point2D{ int x; int y; }; // 구조체 변수 10개 선언 struct Point2D p1; struct Point2D p2; ... struct Point2D p10; 이렇게 반복 노가다를 하는 방법도 있겠지만, 수 천개의 구조체는 만들다가 인생이 다 가버릴지도 모른다. 일반 자료형과 같이 배열로 구조체를 만들면 되는 일을 굳이 이렇게 할 필요가 없다. struct Point2D p[3000]; // 요소가 3,000개인 구조체 배열 선언 2. 구조체 배열 선언하기 #include struct Point2D { int x; int y; }; int main() { struct P..

Tistory

[Java] Wrapper 클래스

[Java] Wrapper 클래스 1. Wrapper Class 기본 자바는 기본 타입(byte, char, short, int, long, float, double, boolean)의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 래퍼 객체라고 하는데, 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문이다. 이런 포장 객체는 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다. 만약 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다. 기본 타입별 포장 클래스는 다음과 같이 매칭된다. 기본 타입 포장 클래스 byte Byte char Character short Short int Integer long Long float Float double Double boolean Boole..

Tistory

[스터디] 자바와 절차적/구조적 프로그래밍

[스터디] 자바와 절차적/구조적 프로그래밍 5주간 라는 책을 가지고 스터디를 진행하게 되었다. 기본적인 자바 사용법을 알고 있지만, 객체 지향의 개념이라던지, 디자인 패턴이라던지 하는 것이 와닿지 않고 실제 프로그램의 코드를 계획하고 직접 쓸 때 전반적인 개념을 활용하지 못하는 사람에게 적절한 책이다. 1장은 서문과 같은 느낌이다. 다만, 좀 더 상세한 부분이 있다. 이번 글에서는 2장 절차적/구조적 프로그래밍을 중심으로 다룰 예정이지만, 짤막하게 정리하고 넘어가고자 한다. 1. 1장 간략 정리 1) 기술의 발전사 기술은 사람이 필요한 것들을 품으면서 발전해왔다. 기계어에서 어셈블리어, 어셈블리어에서 C언어 계열, C언어에서 C++, C++에서 Java 여기에 빠진 언어들이 있겠지만 대표적인 언어들로 하..

Tistory

[Java] ArrayList의 정의, 직접 구현해보기

[Java] ArrayList의 정의, 직접 구현해보기 1. ArrayList에 대하여 1) Array와의 차이 ArrayList는 List 인터페이스의 구현 클래스이다. ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다. 일반 배열과 ArrayList는 인덱스로 객체를 관리한다는 점에서는 유사하다. 하지만, 배열은 생성될 때의 크기로 고정되는 반면, ArrayList는 저장 용량을 초과한 객체가 들어오면 저장 용량이 자동으로 늘어난다. 객체 생성 시 다음과 같은 구조로 힙에 데이터 공간이 확보되게 된다. 2) ArrayList 생성하기 생성을 위해서는 저장할 객체 타입을 “타입 파라미터”로 표기하고 기본 생성자를 호출하면 된다. List list new ArrayList(); 이렇게 하면, ..

Tistory

[C언어] 문자열을 활용한 여러 함수 만들기

[C언어] 문자열을 활용한 여러 함수 만들기 1) 주어진 문자열이 원래 문자열의 시작점부터 일치하는 지 확인하는 함수 구현 // start_with #include // c언어의 타입 정의 typedef int bool; // 이렇게 하면 타입을 정의할 수 있다. #define true 1 // 값에 대한 별명 #define false 0 int get_length(char* b){ int length = 0; while(1){ if(b[length] != '\0'){ length++; continue; } break; } return length; } bool starts_with(char* a, char* b){ for(int i = 0; i < get_length(b); i++){ if(a[i] !..

Tistory

애써 힘 주지 않아도 되는 부분

[생각정리] 애써 힘주지 않아도 되는 부분 (feat. 인스턴스와 객체의 차이) 주말을 맞아 토요일 하루를 쉬고 일요일 아침, 한 주간 공부했던 것을 정리하고, 포스팅할 것들을 다듬고 있을 때였다. 객체와 인스턴스라는 단어를 치다가, 과연 내가 이것에 대해 정확하게 쓰고 있는지 의문이 들었다. 데이터화 된 것이 인스턴스, 현실로 이야기할 수 있는 것이 객체라고 했던가...? 그러니까 변수에는 인스턴스가 담기는 것이 맞는 이야기가 되는 거지...? 슬쩍 자신이 없던 나는 코리안 티스토리를 뛰어넘어 스택 오버플로우로 흘러들어 갔다. difference between an Instance and an Object? 약 12년 전, 이런 생각을 하고 있던 개발자가 있었을 것이다. 짧은 질문에 대한 답변 중 가장..

Tistory

[C언어] C언어 구조체(struct)

C언어 구조체(struct) Goal. : 구조체의 기본 활용방법부터 포인터를 이용한 구조체 값 변경방법까지 이해한다. 1. 구조체가 만들어진 이유. C언어는 자료를 체계적으로 관리하기 위해 구조체라는 문법을 사용한다. 코드를 구현하다보면 많은 변수들이 선언이 되는데, 이 중 중복적으로 사용되는 코드들이 있다. void introduce(int age, char* name, char* hometown, char* favorite_food); void talk(int age, char* name, char* hometown, char* favorite_food); int main() { int person1_age = 20; char* person1_name = "홍길동"; char* person1_hom..

Tistory

[CS] 결합도와 응집도

[CS] 결합도와 응집도 좋은 도구를 가지고 요리를 하는 방법은 너무나도 많다. 직접 화로에 고기를 굽는 방법도 있고, 스테인리스 팬에 고기를 튀기듯 굽는 방법도 있다. 그런데 멀쩡히 가스레인지가 있음에도, 화로를 피워서 그 위에 스테인리스 팬을 두고 고기를 굽는 것은 정말 비효율적인 방법이라고 할 수 있다. 도구를 올바르게 사용하는 법이 있듯, 객체 지향의 특성을 올바르게 사용하는 방법, 즉 객체 지향 언어를 이용해 객체 지향 프로그램을 올바르게 설계해나가는 방법이 있다. 많이 알려진 원칙은 SOLID(객체 지향 설계 5원칙)이다. 이것을 알아보기 이전에 결합도와 응집도를 먼저 알아보고자 한다. 다섯 가지의 원칙들도 결합도를 낮추고 응집도를 높이는 과정에서 모두 만들어진 것이라고 볼 수 있다. 그렇기 ..

Tistory

[Java] 생성자와 NullPointerException

[Java] 생성자와 NullPointerException 생성자를 공부하다가 NullPointerException을 만났다. 초보 개발자들은 누구나 이 예외문을 만나보았을 것이다. 그렇다면, 이 예외를 어떻게 해야 만나지 않을 수 있을까. 어떤 부분을 신경써서 보아야 하는 것일까? 1. NullPointerException의 정의 실제 값이 아닌 null을 가지고 있는 객체 또는 변수를 호출할 때 발생하는 런타임 오류이다. null 값을 가지고 있는 것을 가지고 toString을 한다 던지, 어떤 객체 안에 있는 null 값을 가지고 있는 변수를 호출한다던지 할 때 발생한다. String data = null; System.out.println(data.toString()); // ~~~~(NullPo..

Tistory

[C언어] 문자열 활용하기

[C언어] 문자열 활용하기 1. 문자와 문자열 C언어에서 문자와 문자열은 다른 자료 구조이다. 문자(character) : ‘a’, ‘b’, ‘$’ ‘@’ 등과 같은 단일의 기호를 말한다. 작은따옴표 안에 기호를 쓴다. 정수나 실수 데이터도 작은따옴표 안에 있으면 문자로 인식된다. ‘13’은 문자 처리가 되지 않아 오류가 생길 수 있다. 문자열(String) : “nice”, “안녕” 등과 같이 두 개 이상의 문자 결합 구조를 가진다. 큰따옴표 안에 기호를 쓴다. 1) 문자의 선언 방법 C언어의 문자 자료형은 메모리 한 칸에 하나의 문자만 삽입될 수 있다. char 변수명 = '변수값'; 메모리 안에 변수의 값이 들어가게 된다. 2) 문자열의 선언 방법 메모리 한 칸에 하나의 문자만 들어갈 수 있기 때문..

Tistory

[Java] 접근제한자(public, default, protected, private)

[Java] 접근 제한자(public, default, protected, private) 객체 지향적 설계를 할 때 개발자들은 메인 메소드를 가지지 않는 클래스를 만들어낼 것이다. 외부 클래스에서 이용할 목적으로 설계되었기 때문에 외부 클래스에서 쓰지 않아야 하는 변수도 있을 수도 있고, 섞이면 곤란한 메소드들도 있을 것이다. 객체 생성을 막기 위해서 생성자를 호출하지 못하게 하거나, 특정 데이터를 보호하기 위해 필드에 접근하는 것을 막아야 할 때도 있다. 이럴 때, 접근 제한자를 사용한다. 접근 제한자는 네 가지 종류가 있다. public 접근 제한자는 외부 클래스가 자유롭게 사용할 수 있는 공개 멤버를 만든다. protected 접근 제한자는 같은 패키지 또는 자식 클래스에서 사용할 수 있는 멤버를..

Tistory

[Java] Random 함수의 작동원리

[Java] Random 함수의 작동원리 갑자기 그런 생각이 들었다. Random은 정말 랜덤하게 난수를 생성할까? Java에서 랜덤을 활용하는 방법은 대표적으로 두 가지가 있다. Math 클래스의 random() 메소드를 활용하는 것과 Random 클래스의 next 메소드 시리즈를 사용하는 것. 숫자 놀이가 재미있어서 여기까지 오게 되었다... 이전에 만들어본 자바 로또 번호 추출기를 이용해서 Random 클래스의 작동원리에 대해서 알아보겠다. import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; import java.util.Random; public class Lotto { public static voi..

Tistory

[CS] 객체지향 디자인패턴

[CS] 객체지향 디자인패턴 Java의 객체 지향을 공부하다 보면, 어떻게 객체 지향 프로그램을 잘 '설계'하고 개발해나갈 것인가를 고민하게 된다. 이 때 우리에게 답을 주는 것이 "객체 지향 디자인패턴"이다. 그림을 그리는 것 같은 디자인도 사람의 영감을 받아 어떤 디자인이나 기호, 캐릭터를 만들어내는 것 같지만, 그림을 그리는 디자인에도 일정한 패턴이 존재한다. 다른 말로 하면, '성공의 공식' 같은 것....! 마찬가지로 소프트웨어 설계 부분에서도 일정한 성공의 공식 패턴이 있다. 프로그램을 설계할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴을 의미한다. 디자인 패턴을 참고하여 개발을 할 경우 개발의 효율성과 유지보수성, 운용성 등의 품질이 높아지며, 프로그램의 최적화에 도움이 된다. 구성..

Tistory

[CS] 테스트와 TDD

[CS] 테스트와 TDD 개발자의 필수 역량은? 기능을 빠르게 구현하는 것. 기능에 해당하는 테스트를 작성하는 것. 두 가지라고 할 수 있다. 빠르게 구현을 했다 하더라도, 그것이 신뢰가 없는 코드면 개발자는 쓸모 없는 에너지 드링크를 마시며 쓸모 없는 시간을 낭비한 것이라고 봐도 될 듯하다. 내가 쓸모 없는 시간을 보내지 않기 위해 나를 도와주는 것, 구현을 하고 나서 그것이 신뢰가 있는지를 확인해 볼 수 있는 것. 그것은 바로 '테스트 케이스'이다. 테스트란 무엇인가? 개발자 세상에서 테스트란, 소프트웨어 테스트를 말한다. 제품(함수, 특정기능, UI, 성능, API 스펙 등)이 예상하는 대로, 원하는 대로 동작 하는지 확인하는 것이다. 제품 또는 서비스의 품질을 확인하고 소프트웨어의 버그를 찾는 것..

Tistory

[Java] static 활용

[Java] static 활용 intelliJ를 사용하다보면, psvm이라는 단축어를 쓸 때가 있다. 메인 메소드를 만들 때 쓰는 것이다. 메인 메소드는 다음과 같은 코드를 써야 만들 수 있다. public static void main(String[] args){ } public은 그렇다 치고, main은 메소드 이름이고, void는 메소드 타입이고, 그럼 static은 무엇인가? static은 ‘고정된’이라는 의미를 가지고 있다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 의미한다. 각각 정적 필드, 정적 메소드라고 부른다. 정적 멤버는 객체에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고도 한다. 쉽게 이야기하면, 하나의 클래스..

Tistory

로또 번호 추출기 3탄(자바)

로또 번호 추출기 3탄(자바) 인간의 욕심은 끝이 없고 무한한 성능 향상을 꿈꾼다. 자바의 문법들을 다시 상기하고, 메모리 구조에 대한 것들을 하나씩 배우는 요즘, 공부를 하다가 잠깐 쉬고 싶어서 딴 짓을 하고 싶어졌다. 현재 그냥 무난하게 장난 치면서 가지고 놀 수 있는 것은 로또 추출기다... python에서 루프의 횟수가 1억번인 것을 10억번으로 늘려서 해보기로 했다. '더 빠르지 않을까...?'라는 생각에 import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; public class Lotto { public static void main(String[] args) { System.out.println(..

Tistory

[Java] 상위 클래스의 타입으로 변수 선언을 하는 이유

[Java] 상위 클래스의 타입으로 변수 선언을 하는 이유 - 다형성 추가. 1. 다형성에 대한 의문점 발동 이전에 다형성에 대해 알아본 적이 있다. 그 때는 이해했지만, 무엇인가 알기 어려운 '왜'라는 질문을 자꾸 품게 되었다. 2022.06.13 - [프로그래밍 언어/Java] - [Java] 다형성(Polymorphism) 알아보기 [Java] 다형성(Polymorphism) 알아보기 [Java] 다형성(polymorphism) 알아보기 칼은 참 다양한 종류가 있다. 요리할 때만 해도, 과일칼, 채소자르는 칼, 고기 다지는 칼, 빵칼 등등등.. 요리 용도가 아니라 도축, 수술 등등 많은 곳에서 쓰는 masterpiece-programming.tistory.com (1) 굳이 상위 부모클래스의 타입으..

Tistory

[Web] 웹의 진화과정(SSR, CSR, SSG, JAM Stack)

[Web] 웹의 진화과정(SSR, CSR, SSG, JAM Stack) 20여년 간 웹 기술은 폭발적으로 성장해온 것 같다. 위와 아래를 비교해보면 우리는 그 변화를 실감할 수 있다. 예전에는 서버에서 모든 문서를 가지고 있고, 구현을 할 것이 있으면 구현을 해서 사용자의 컴퓨터에 그 데이터를 쏴주었다면, 지금의 애플 공식 홈페이지와 같은 것은 서버단에서 구현을 해서 보내주는 것이 아니라, 이런 식으로 브라우저에서 구현을 하라는 코드를 쏴준다. 기술이 많이 발전했기 때문에, 무엇인가 스르륵 움직이는 것도 구현이 가능해진 것이다. 어케했냐를 물어볼 때에는, 과거를 살펴보고 발자취를 들여다보는 것이 좋을 때가 있다. 웹의 발전사가 그러하다. 이번 포스팅에서는 SSR SSG JAM Stack(CSR, SEO,..

Tistory

[Web] 웹 서버 : apache, NginX, Tomcat

[Web] 웹 서버 : apache, NginX, Tomcat 1. 웹이 우리에게 오기까지 HTML, CSS, JavaScript 등의 파일은 페이지를 구현하기 위해 필요한 문서들이다. 이 문서들은 클라이언트에 있는 것이 아니라, 그 정보를 저장하고 있는 어느 서버에 들어있다. 자사 서비스를 제공하는 네이버의 경우 네이버의 서버실에 그 문서가 들어있을 것이고, 어떤 클라우드에 그 문서를 올려놓았을 경우, 예를 들어 깃허브 저장소를 사용할 경우 깃허브 서버 어딘가에 그 문서가 들어있는 것이다. 그 서버에 있는 문서 파일들은 특정 디렉토리에 넣어두는데, 이 디렉토리를 외부에서 접근 가능하도록 개방해서 서버에 지정된 웹 사이트 주소로 접속하면 이것들을 받아갈 수 있도록 하는 것이 웹 서버이다. 이 구동 방식은..

Tistory

[Web] Content Delivery Network(CDN)

[Web] Content Delivery Network(CDN) 1. CDN의 필요성 CDN는 컨텐츠를 서버에서 사용자에게 전송하는 네트워크이다. CDN이 없이도 온라인 서비스들이 동작은 하지만, 서버도 결국 컴퓨터다. 어떤 클라이언트가 사이트에 접속하면, 그 요청에 따라 서버는 컨텐츠를 찾아 보내주는 어떤 '일'을 해야한다. 그것의 트래픽이 엄청나게 증가한다면...? 서버의 용량 또는 성능이 좋지 않고서는 주저 앉고 말 것이다. 그렇다 컴퓨터도 컴퓨터다! 자기 자신의 능력만큼만 일할 수 밖에 없는 기계! 이것의 과부하를 줄여주기 위해서 CDN이 있는 것이다. 현재 사용자가 10명이어도, 잠재적 사용자는 이 순간에도 늘어나고 있다. 우리 나라에서 만들어진 서비스여도, 다른 곳에서 그 서비스를 원할 수도 ..

Tistory

백엔드 초보 개발자 공부 순서

백엔드 초보 개발자 공부 순서 어디로 가야할 지 모르는 개발자 나는 컴퓨터공학과는 전혀 관련이 없는 학과를 전공했고, 1년 전까지만 해도 컴퓨터를 잘 다루긴 했지만, 프로그램이니 데이터베이스니 하는 것은 들어보기나 했지 할 줄은 전혀 몰랐다. 여기서 들어보았다는 것도, 그 '이름'을 들어봤다는 것이지, 그것이 무엇이고 어떻게 작동하는 것인지는 관심도 없었고 알아볼 생각도 전혀 하지 않았다. 이유야 어찌됐든 직업으로서 백엔드 개발자를 생각하고 공부하는 나는 무엇을 할 지 모르고 이것 저것 찾아보다가 python을 알게 되었고, print("hello world")를 따라 적어보았다. 데이터 타입과 반복문, 조건문 등을 학습하며 VS Code에서만 돌아가는 은행 입출금 프로그램을 만들었고, 로또 번호 추출기..

Tistory

[C언어] 배열과 포인터의 관계

[C언어] 배열과 포인터의 관계 배열과 포인터는 매우 긴밀한 관계를 맺고 있다. 어떤 부분에서는 서로를 대체할 수도 있다. 일반적으로 다른 언어를 배우면 배열이 다음과 같다는 것을 이미 알고 있을 것이다. int arr[5] = {1, 2, 3, 4, 5}; int b = arr[1]; // b는 2라는 값을 가지게 된다. 변수들이 모여 있는 것이 배열이 아닌가? 라고 생각할 것이다. 맞다. 그것도 옳은 말이다. 그런데 그 근본에는 '포인터'가 있다. 배열에 인덱스로 접근하는 자바의 문법도 '포인터'를 쉽게 사용하게끔 바꾸어 놓은 것에 불과하다. 아래에서는 포인터 상수 개념과 포인터로 배열에 접근하는 방법에 대해 알아볼 것이다. 1. 포인터 상수(배열의 이름) 포인터 상수(Constant Pointer)..

Tistory

예술이란 무엇인가....!

예술이란 무엇인가....! 박물관은 현장체험학습으로 다녀보았지만, 미술관이라고는 다녀보지도 않았고, 예술이라는 것과는 거리가 멀었던 사람이... 아니 예술에 대한 모독을 입에 담고 달던 사람이... 미술과 관련된 학과에 몸을 담게 되었고, 어찌하다 보니 졸업을 하게 되었다. 그런데, 전혀 다른 길을 걷게 되었고, python을 흡수하고, java를 흡수하며 웹이라는 공간에서 새로운 삶을 찾아나가고 있다. 나는 정말 미술, 예술과는 정말 동떨어진 삶을 대학 입학 전까지는 살았었다. 아니 저게 무슨 예술이야, 점 하나 찍어놓은 것이 무슨 예술이냐고. 내가 똥 싸놓고 미술작품이라고 하면 미술 작품이냐고. 앤디 워홀은 이런 말을 한 적이 있다. "일단 유명해져라. 그러면 당신이 똥을 싸더라도 사람들은 박수를 칠..

Tistory

갤러리에서 작품을 바라볼 때.

[제목] 갤러리에서 작품을 바라볼 때. 문화생활을 즐길 때, 어떤 전시 공간에 갔다. 당신은 그 전시 공간에 있는 작품들을 보면서 어떤 생각을 하는가? 당신이 예술에 대한 조예가 없어도 예술 작품을 즐길 수 있다. 우리는 아래와 같은 생각을 전시장에서 하지 않는가?! (지루하다는 현재 상태에 대한 생각 제외하고...) 예쁜 작품이다...! 우와 엄청나게 역사적 가치가 있는 작품이네...! 인스타그램 스토리에 딱인 게시물이다...! 옛날에 내가 했던 생각이 떠오른다...! 이 작가는 왜 이런 작품을 만들었을까...? 나는 모든 생각을 다 해보았다. 하얀 벽 또는 어떠한 벽, 천장, 바닥으로 되어 있는 전시 공간은 우리가 이런 생각을 하게끔 만들어 준다. 그런데 그 공간에서 느껴야 할 생각, 더 가치있게 즐..

Tistory

[C언어] scanf가 변수의 주소(&)를 매개변수로 넘겨주는 이유

[C언어] scanf가 변수의 주소(&)를 매개변수로 넘겨주는 이유 키보드로 프로그램 내에 어떤 변수를 첨가하는 함수. java에는 대표적으로 Scanner, BufferedReader가 있고, python에는 input(), sys.stdin.read~~() 시리즈가 있다. C언어에는 scanf가 있는데, 이것이 어떻게 작동하는 지 알아볼 것이다. int main(){ int input; printf("정수를 입력해주세요. :"); scanf("%d", &input); return 0; } 위의 코드는 아래와 같이 콘솔창을 만들 수 있는 코드이다. input이라는 변수 안에 사용자가 키보드로 입력한 값을 담는 것이다. scanf의 첫번째 인자는 받아올 데이터의 타입을 입력하고, 두번째 인자에는 변수의 ..

Tistory

[C언어] call-by-reference vs call-by-value

[C언어] call-by-reference vs call-by-value 정말 배우면 배울 수록 멱살을 잡고 흔들어 재끼고 싶은 C언어. 포인터 변수 / 포인터 상수 / 상수 포인터 등등등 무슨 비슷한 말은 많고 뜻은 전혀 다르고 처음들어보고... 하지만 살살살 알아가는 것이 공부의 재미 아니겠나... 이번 포스팅은 저번에 scanf를 다루다가 알게된 call-by 시리즈에 대해 알아보고자 한다. ️ call by value는 값에 의한 호출이라고 하며, ‘인자’로 받은 값을 ‘복사’하여 처리한다. ️ call by reference는 참조에 의한 호출이며, ‘인자’로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 그림으로 쉽게 보는 두 가지 개념 Call by value(값에 의한 호출) 실제..

Tistory

[CS] 프로세스와 스레드

프로세스와 스레드 1. 프로세스의 개념 어떤 작업을 위해 실행할 수 있는 파일을 '프로그램'이라 한다. 그 프로그램이 컴퓨터에서 연속적으로 실행될 때, 그것을 프로세스라고 한다. 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스를 가리키기도 한다. 프로세스는 CPU 시간, 운영되기 위해 필요한 주소공간, code-data-stack-heap의 구조로 된 독립된 메모리 영역을 자원으로 할당받는다. 여러 프로세스를 함께 돌리는 작업은 동시적, 병렬적, 또는 이 둘의 혼합으로 이루어 진다. 동시성은 프로세서 하나가 이거 조금 하고 이거 조금 하고 이거 조금 하고, 이렇게 여러 작업을 돌아가면서 일부분씩 진행하는 것이다. 이 과정이 빠르게 돌아가면 사람들은 이 프로세스들이 동시에 진행되는 것처럼 느낄 수 있다..

Tistory

[Web] 쿠키(cookie), 세션(session) 캐시(cache)의 정의

[Web] 쿠키(cookie), 세션(session) 캐시(cache)의 정의 2022.07.01 - [IT 지식/Web] - [Web] HTTPS와 HTTP의 차이 이전 글에서 HTTP는 stateless 하다는 이야기를 했다. 이전에 접속한 것과는 별도로 HTTP가 통신을 한다는 이야기였는데, 일반적으로 홈페이지 안에서는 매번 페이지가 바뀔 때마다 로그인을 할 수는 없는 노릇이다. 또한 장바구니에 담아놓은 상품들이 없어지고 하는 등의 불편을 겪을 수 있다. 그래서 쿠기와 세션, 캐시가 사용되는 것이다. 1. 쿠키(cookie) 사용자의 브라우저에 저장되고, 통신할 때 HTTP 헤더에 포함되는 텍스트 파일이다. 이름, 값 만료기간, 경로 정보가 있고 키와 벨류로 구성이 되어 있다. 사용자의 컴퓨터를 사..

Tistory

[Web] REST API와 GraphQL

[Web] REST API와 GraphQL ~목차~ RESTful API GraphQL REST API와 GraphQL의 비교 1. RESTful API 1) REST API 간단 요약 RESTful API는 HTTP 요청을 사용하여 데이터에 액세스하고 사용하는 애플리케이션 프로그램 인터페이스(API)의 아키텍처 스타일이다. GET, PUT, POST 및 DELETE 등의 메소드를 활용하여 서버에 있는 리소스에 접근하고, 그것을 json 등의 파일 형태로 받아오는 방식인 것이다. 하는 데 데이터를 사용할 수 있다. 쉽게 설명하면 다음과 같다. 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 API(Application Programming Interface)라고 한다..

Tistory

[JavaScript] Scope란 무엇인가?

[JavaScript] Scope란 무엇인가? 자바스크립트를 하다 보면 스코프라는 단어를 많이 접할 수 있다. 스코프는 우리말로 '범위'라는 뜻을 가지고 있다. 즉, 스코프는 변수에 접근할 수 있는 범위를 의미한다. global(전역)과 local(지역)이 그 예가 될 것이다. 전역 스코프는 전역에 선언되어 있어 어느 곳에서든지 해당 변수에 접근할 수 있다는 의미이고, 지역 스코프는 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에서는 참조 또는 접근 할 수 없다는 의미이다. 함수 스코프가 지역 스코프의 한 예이다. 이것은 자바의 특수한 변수 체계 때문에 더욱 알아야 되는 개념인데, 아래에서는 var, let의 차이점을 중심으로 Scope가 무엇인지를 알아볼 것이다. 1. 레벨 스코프 var a = 1..

Tistory

[CS] 동기와 비동기의 개념 차이

[CS] 동기와 비동기의 개념 차이 우리는 이 개념어를 처음 들어보았을 수 있다. 하지만, 이 개념은 우리 일상속에 깊숙히 자리하고 있다. 평일 동안 열심히 일을 하거나 학교를 다니거나, 열심히 학원을 다니거나 해서 집안일에 소홀해져 집안이 엉망이 되었다고 하자. 주말을 맞이해서 우리는 집안을 원래대로 복구시켜 놓아야 한다. 밀린 빨래부터 널부러져 있는 옷가지, 수북히 쌓인 설거지 더미, 버리지 않아 초파리가 하나 둘 씩 생겨가고 있는 음식물 쓰레기 봉투, 방바닥에 널린 머리카락... 생각만 해도 3시간은 치워야 할 것 같다. 집안일은 어려운 것이 아니라 귀찮은 것이다. 그렇다면 귀찮은 일은 후딱 해치우고 다른 여가생활을 즐겨야 하지 않겠는가. 그럼 집안일을 시작해보자. 집안일을 빨리하고자 하는 사람은 ..

Tistory

[Web] HTTPS와 HTTP의 차이

[Web] HTTPS와 HTTP의 차이 ️ HTTPS란 무엇인가? (Hyper Text Transfer Protocol Secure) HTTP에 S, 즉 데이터 암호화가 추가된 프로토콜이다. HTTPS를 설명하기 위해서는 전신인 HTTP를 설명하지 않을 수가 없다. HTTP는 클라이언트(사용자)가 요청(request)을 서버에 보내면 서버는 HTTP 응답(response)을 해주는 구조에서 작동한다. 그리고 stateless 한데, state(상태)를 저장하지 않는다는 뜻이다. 바늘로 찌르면 그 부분의 몸이 움찔할 뿐, 다른 부분을 움찔하지는 않는 것 처럼, 어떤 요청이 오면 어떤 요청에만 응답을 하고, 다른 응답과는 연관되어있지 않다는 이야기이다. 이 때문에 클라이언트가 요청을 보내고 응답을 받은 후..

Tistory

[Web] 암호화 해시함수에 대한 이해

[Web] 암호화 해시함수에 대한 이해 이전에 해시 테이블 포스팅에서 해시 함수에 대해 다루어 본 적이 있다. 2022.05.15 - [프로그래밍/자료구조] - [자료구조] hash table(해시 테이블) python class 구현하기 [자료구조] hash table(해시 테이블) python class 구현하기 [자료구조] hash table(해시 테이블) python class 구현하기 살펴볼 주요 개념: 더보기 - 해시 테이블의 개념, 특징, 용도 - 해시 함수 - 해시 충돌 회피 - 해시 테이블 클래스 구현(python) 1. 해시 테이. masterpiece-programming.tistory.com 해시는 자료구조에만 쓰이는 것이 아니라, 보안이 필요한 통신에서도 사용이 된다. 해시 함수는..

Tistory

Homebrew not in your PATH 오류 해결 방법

Homebrew not in your PATH 오류 해결 방법 homebrew를 설치 했는데도 brew -v를 하면 버전이 뜨지 않거나 아래와 같은 오류문이 뜬 적이 있을 것이다. Warning: /opt/homebrew/bin is not in your PATH 패스 설정이 되어 있지 않아서 발생하는 오류이다. 패스를 설정하면 되는 부분이기 때문에, 간단한 명령어 하나면 충분하다. vim 에디터에 들어가서 수정을 해주면 되지만, echo 명령어 한 줄로 더 간단하게 등록할 수 있다. echo 'export PATH=/opt/homebrew/bin:$PATH' >> ~/.zshrc 이거 한 번이면 등록이 된다. 바로 이제 버전 명이 뜨는 것을 알 수 있다.

Tistory

[Git 블로그] 블로그 제작 시 볼 수 있는 오류

[Git 블로그] 블로그 제작 시 볼 수 있는 오류 "Generating development JavaScript bundle failed" 어떤 개발 환경이 npm run start가 된 상태에서 바뀐 다음, 정지를 시키고 다시 run start를 하면 자주 일어나는 오류이다. 그럴 경우, 아래의 터미널 명령어를 입력해주면 해결될 수 있다. npm rebuild node-sass 블로그 제작을 위해 IDE 상에서 npm run start를 해놓은 상황이라면, 버전 업데이트라던지, 설정 변경, 새로운 개발 도구 설치 등을 지양해야 할 것이다. 안 그러면 이러한 충돌 또는 오류가 일어난다.

Tistory

[C언어] 배열 기초개념과 포인터로 배열 참조하기

[C언어] 배열 기초개념과 포인터로 배열 참조하기 C언어의 변수와 포인터를 알았다면, 이제 배열에 대해 알아나가고 배열을 활용하여 자료구조도 공부하고 데이터도 공부하고... 막 그러는 것이 아닐까 싶다. 생기초를 들여다 보았다면, 배열부터는 이제 정말 기초 개념이라고 할 수 있다. 아래에서는 배열을 사용하는 이유와 포인터로 배열을 참조하는 방법, 그리고 C언어의 배열이 메모리를 어떻게 사용하는 지에 대해 알아볼 것이다. (배열 문법을 사용하는 것은 여타 다른 언어들과 다른 점이 거의 없기 때문에 다루지는 않을 것이다.) ️ 배열을 사용하는 이유 순서있는 데이터 관리 관련된 데이터를 모아서 관리 변수 1개로 공간 여러 개를 컨트롤 할 수 있다. index로 접근하여 빠르게 탐색을 할 수 있다. ️ 포인..

Tistory

[C언어] 포인터를 사용하는 진짜 쉬운 이유.

[C언어] 포인터를 사용하는 진짜 쉬운 이유. 포인터는 초급 개발자의 뇌를 심각하게 트레이닝 시킨다. 이중 삼중으로 들어가는 포인터에 메모리 구조를 상기시켜야 하고, 이게 어디들어가는지, 누구를 참조하는 지 참 복잡하고 헷갈릴 때가 많다. 현재 나 또한, 그 과정 어디엔가 있는 것 같다. 이번 포스팅에서는 이전까지 다루어왔던 메모리 구조, 포인터의 정의에서 나온 말들을 하나씩 디스크 조각모음을 하여 왜 우리가 포인터에 대해서 알고, 어떻게 활용해야 할 지를 이야기 해 볼 것이다. C언어는 개발자가 원하는 대로 메모리를 관리할 수 있다고 누구든 이야기를 한다. 그런 이점을 활용해서 메모리를 아낄 수 있고, 효율적인 프로그램을 개발자가 만들 수 있다고 많은 사람들은 결론을 짓는다. 그렇다. 그렇기 때문에 '..

Tistory

[C언어] 다중포인터 구현해보기

[C언어] 다중포인터 구현해보기 포인터는 이제 어느 정도 이해를 하고, 어떤 것을 가리키든 그것이 무엇인지 알 수 있다면? 다중포인터를 알아보는 것이 좋겠다. 다중 포인터는 다른 것이 없다. 그냥 포인터가 여러 개 겹겹이 쌓인 것이라고 할 수 있다. p -----> a -----> b -----> 10 이렇게 변수들이 서로를 가리키고 있다고 하자. int b = 10; int *a = &b; int *p = &a; 이렇게 있다고 볼 수 있다. 하지만 이런 식으로 코드를 작성하면 오류를 경험할 수 있다. int b = 10; int *a = &b; int **p = &a; == int *(*p) = &a; 이렇게 나타내야 한다. (*p)가 가리키는 곳이 &a이다라고 설정을 해주어야 한다. 그래서 **이 쓰..

Tistory

Xcode 애플 개발자 페이지에서 다운로드, 설치하기(m1)

Xcode 애플 개발자 페이지에서 다운로드, 설치하기(m1) 깃을 요즘 한참 배우다가 깃허브 블로그를 만드는 수업을 들었다. gatsby를 활용한다고 하여 이것 저것 챙겨보던 중에 xcode의 무엇인가를 필요로 한다는 내용을 보았다. https://www.gatsbyjs.com/docs/tutorial/part-0/#nodejs Part 0: Set Up Your Development Environment | Gatsby Introduction Welcome to the Gatsby Tutorial! We’re excited you’re here. Before you start building your first Gatsby site, you’ll need to familiarize yourself wi..

Tistory

[Java] 자바의 메모리 사용 구조

[Java] 자바의 클래스와 메모리 사용 구조 자바는 메모리를 관리해준다. Garbage Collector가 개발자가 만들어놓고 사용하지 않는 객체들을 수거하고 stack은 변수가 들어왔다 나갔다 하면서 stackoverflow가 일어나지 않게 만들어준다. 그렇지만, 내가 만든 변수가 어디에 저장되고 어떤 식으로 동작을 하는지는 알아야 한다. 그래야 컴퓨터의 성능을 최대한 활용하는 프로그램을 만들 수 있으니까. 이번 포스팅에서는 아래와 같은 클래스와 변수들이 존재할 때, 자바는 메모리를 어떻게 사용하는 지를 알아본다. 상속, 다형성의 개념도 함께 다룰 것이기 때문에, 상속 또는 다형성이 잘 이해가 되지 않는다면, 아래의 이전 글을 참조하는 것이 좋을 것 같다. 2022.06.13 - [프로그래밍 언어/J..

Tistory

zsh, bash 그리고 shell script

zsh, bash 그리고 shell script 쉘은 리눅스에서 명령어와 프로그램을 실행할 때 사용하는 인터페이스이다. 커널과 사용자 사이에 위치하면서 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 돌려주는 아주 고마운 친구이다. 쉘은 커널에서 분리된 별도의 프로그램이어서 다양한 종류의 쉘이 존재한다. 각각의 쉘 들은 제공하는 기능이 살짝식 다르다. 1) bash(배쉬) 리눅스의 표준 쉘이다. 우분투와 페도라도 배쉬 쉘을 사용한다고 한다. sh(Bourne Shell, 유닉스 쉘의 오리지널)을 전신으로 두고 있어서 sh와 호환되어 쓰일 수 있다. 맥 OS X, 그리고 윈도우에도 이식이 되었으며 mac의 경우 최근 기본 제공을 zsh로 하고 있다. 배쉬는 프로그래밍 언어이긴 하지만, 유닉스 운영체제의..

Tistory

[C언어] 포인터 기본 개념 알아보기

[C언어] 포인터 기본 개념 알아보기 c는 매뉴얼이 많다. 자바가 일반 자동변속기 승합차라면, c는 90년대 대형버스라고 할 수 있다. 많은 것들을 내가 스스로 조작할 수 있다. 변속이라던지, 가속이라던지, 문을 열고 닫는다던지, 저단 기어를 넣어서 느리지만 힘을 가지고 갈 지 등등, 많은 것들을 개발자가 조종할 수 있다. 그래서 Low 레벨 언어라고도 한다. 포인터는 메모리 주소와 연관되어 있는 문법이다. 메모리는 이전 글에서 살펴봤듯, 힙과 스택 영역에 위치한다. 이전글 : 2022.06.27 - [프로그래밍 언어/C\C++] - [C언어] C언어의 메모리 관리 그 스택 영역은 고유한 주소값을 가지고 있고, 포인터를 쓰면 변수가 저장된 메모리 주소를 불러올 수 있다. 메모리 주소를 불러온 것을 가지고..

Tistory

운영체제 32비트와 64비트의 차이점

운영체제 32비트와 64비트의 차이점 운영체제의 비트(32bit, 64bit) 32비트 os, 64비트 os의 차이가 무엇일까? 32비트 os는 32비트 cpu에 맞춰진 os이고, 64비트 os는 64비트 cpu에 맞춰진 os이다. 레지스터가 cpu에서 사용하는 기본 저장 단위이다. 16, 32, 64비트 등이 있는데, 메모리 주소 레지스터라고 있다. 메모리의 주소를 담는 레지스터가 있는데, 이 크기의 차이인 것이다. 메모리 주소의 기본 단위가 다른 것이다. 2022.06.27 - [분류 전체보기] - [컴퓨터구조] CPU와 운영체제 그리고 메모리 램은 hdd와 cpu간의 속도 차이를 보완해준다. 램은 하드디스크로부터 일정량의 데이터를 임시로 저장하고 느린 하드디스크를 대신해서 램과 cpu과 데이터를 교..

Tistory

[C언어] C언어의 메모리 관리

[C언어] C언어의 메모리 관리 함수가 사용될 때 메모리가 얼마나 필요한가? 메인 함수를 구성하고 있는 지역변수와 사이즈를 보면 된다. 운영체제는 메인함수가 실행될 때, 메모리 공간을 확보해둔다. 몇 바이트가 필요한지는 실행해봐야 알 수 있을까? 소스코드 -> 컴파일 => 실행파일 => OS에 의해 실행 컴파일 타임 런타임 컴파일에 의해 미리 알 수 있다. 컴파일러는 정적 분석을 통해 int가 몇 개 있는지를 확인할 수 있다. 그렇기 때문에 런타임 시에 그 함수가 실행될 때, 메모리 안에 그 함수가 필요한 크기 만큼의 집을 마련해준다. 함수라는 집 공간 안에 int i, int j 등의 방이 만들어진다. 그러고 printf 라는 함수가 더해진다고 하면, printf를 위해 만들어 지는 집이 따로 만들어진..

Tistory

[Java] 클래스 제대로 알아보기

[Java] 클래스 제대로 알아보기 앞선 포스팅에서 클래스 변수와 인스턴스 변수만 이야기하고, 클래스에 대한 이야기는 하지 못했다. 그래서 다음 포스팅인 메모리 사용구조와 더불어서 클래스에 대해 알아보는 시간을 가지려고 한다. 클래스는 사용자가 자주 활용하는 변수, 메소드, 생성자 타입 등을 모두 보관해놓은 문서이다. 메인 클래스 하나로만 코딩을 하는 것은 절차 지향이고, 클래스를 여러 개 나누어서 모듈화시켜 놓은 것을 객체 지향 프로그래밍이라고 한다. 만약, ‘비빔밥 식사’라는 행위를 ‘프로그래밍’에 비유한다고 하면, 비벼놓은 비빔밥이 절차지향이고, 비빔밥들의 재료들만 깔끔하게 손봐놓은 것이 객체지향 방식의 취식 방법이라고 할 수 있겠다. 클래스는 아래와 같이 따로 존재한다. ++ : 보통 클래스는 다..

Tistory

[HTML/CSS] SPA가 무엇인가?

[HTML/CSS] SPA가 무엇인가? react, vue, angular 등 요즘 핫한 프레임워크 들이 많다. 동적 웹을 구현할 때 사용하는 도구들이다. 하나의 페이지를 가지고 동적으로 화면이 바뀌면 서버에서 어떤 화면을 클릭해서 탭을 넘기지 않아도, 유려하게, 즉각적으로 반응하는 UI를 만들 수 있다. 그럼 모두 SPA를 쓰면 되지 않을까? 실버 불렛은 없는법,,, 장단점을 알아보자! SPA(Single Page Application) 어떤 웹 사이트의 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 바꿔가며 표현하는 것. 무엇인가를 클릭하거나 스크롤하면, 상호작용하기 위한 최소한의 요소만 변경이 일어난다. 복잡한 UI 구현 시에 사용한다. react, vue, angular가 SPA 프레임워크로..

Tistory

[HTML/CSS] Flex 활용방법

[HTML/CSS] Flex 활용방법 플렉스는 정렬을 위한 CSS 도구이다. 줄을 바꾸어 배치할 지 등을 선언하고, 내 마음대로 위치를 바꾸어 쓸 수 있다. 예전에는 float를 어떻게 해서 XX발광을 하면서 코드를 스파게티로 만들었다가 씻어서 짜장면으로 만든 다음에 짜장 튀김을 만드는 과정을 겪고 크기가 다른 사진들을 아주 보기좋게 가운데에 차례로 정렬한다던지 했는데, 플렉스는 그게 필요없다. 모든 요소들이 다 들어가있다.사진 1개만 특별한 위치에 가있다던지 하는 것이 가능한 것이다. (align-self) (처음 나왔을 때 프론트 개발자들은 저러지 않았을까...) 아래에서 활용법을 자세히 알아보자. Flexible box 레이아웃 배치 전용 기능으로 고안되었다. display: inline-block..

Tistory

[컴퓨터구조] CPU와 운영체제 그리고 메모리

[컴퓨터구조] CPU와 운영체제 그리고 메모리 1. CPU의 구조 CPU는 Control unit, ALU, 레지스터 세 가지로 구성되어 있다. Control unit은 어떤 일을 진행하는 것을 계획하는 등 총괄하는 것 ALU는 계산만 한다. 빠르게 처리. 레지스터는 기억력을 담당한다. cpu에 내장되어 있는 용량이 작은 기억장치이라고 보면 된다. 상세 구성, 비유 Control Unit : 매니저 ALU : 계산 레지스터, 프로그램 카운터 : 현재 실행중인 소스코드 라인을 가리킴. 레지스터, 명령어 레지스터 : 현재 실행중인 명령어를 실질적으로 가져온다. 레지스터, 메모리 주소 레지스터 : 타켓(목표하는 데이터가 있는 메모리의 주소) 레지스터, 메모리 데이터 레지스터 : 타겟에서 가져온 데이터 혹은, ..

Tistory

[Web]정적 웹과 동적 웹(static web, dynamic web)

[Web]정적 웹과 동적 웹(static web, dynamic web) 정적웹, 동적웹 각각의 개념과 두 가지 방식의 차이를 알아볼 것이다. 정적 웹 : 언제 접속해도 같은 리소스를 건네주는 웹사이트. 서버는 프로그래머가 작성해놓은 파일들을 브라우저에 전달해준다. 자바스크립트를 활용해서 현재 시간 등을 받아와서 실시간의 것을 구현을 해주는 것도 있다. 그렇지만, 정적 웹의 기준은 접속할 때마다 받게 되는 문서들이 항상 같은지를 판단해보면 된다. 회사 홈페이지의 소개글이 정적 웹 중에 하나이다. 동적 웹 MVC 모델인 정적 웹의 한계를 극복하기 위해 만들어졌다. 즉각적인 반응이 가능하다(아이폰 imessage를 전송할 때 화면 깜빡임이 없이 모션이 나타나면서 바로 보내지는 것 처럼) 정적 웹은 사용자의 ..

Tistory

[HTML/CSS] 드롭다운 2차메뉴 만들기

[HTML/CSS] 드롭다운 2차메뉴 만들기 홈페이지를 들어가보면 메뉴 탭에 마우스를 가져가면 하위 메뉴가 아래로 내려가면서 보이는 탭이 있다. 위의 메뉴는 디자인이 되지 않아 볼품없지만, 오늘 다룰 코드들을 활용해서 모든 페이지들이 만들어진다고 보면된다. 자바스크립트를 이용해서 더 유연하게 내려온다던지 하는 것을 아래의 코드들을 변형 또는 발전시켜서 만드는 것이다. 아래에서는 html과 css만 사용해서 메뉴를 구현하였다. 코드들을 살펴보자. 1. html 구성 1차 메뉴 아이템 1 2차 메뉴 아이템 1 2차 메뉴 아이템 2 2차 메뉴 아이템 3 1차 메뉴 아이템 2 2차 메뉴 아이템 1 2차 메뉴 아이템 2 2차 메뉴 아이템 3 1차 메뉴 아이템 3 2차 메뉴 아이템 1 2차 메뉴 아이템 2 2차 메..

Tistory

[C언어] 사용자 정의 함수, void와 return

[C언어] 사용자 정의 함수, void와 return 기본 기능만 주구장창 사용할 것이 아니라면, 사용자 정의 함수를 알아야 한다.그렇게 해야 내가 원하는 대로 코드를 마음대로 가지고 놀고 일부 코드를 가지고 엄청난 계산 괴물을 만들어 낼 수도 있다.아니면 서비스 공룡을 만들어낼 수도 있고. 사용자 정의 함수는 그러기 위해 만들어졌다. '더 간편하고', '복사하기 붙여넣기를 하지 않고', '더 고도의 능력을 구현하기 위해' 아래에서는 C언어에서 사용자 함수를 정의하는 법과 실행하는 법, 그리고 void형 함수와 void가 아닌 함수의 차이점을 알아볼 것이다. 1. 기본 정의 방법 /* 함수 타입 함수명(매개변수){ 실행 코드 return 0; } */ void a() { for(int i = 0; i <..

Tistory

[C언어] 데이터 타입별 메모리 크기

[C언어] 데이터 타입별 메모리 크기 메모리 관리는 아주 중요하다. 변수에 담고자 하는 값의 크기에 따라 변수의 타입을 선언해주는 것이 좋다. 속도에 있어서 민감하기 때문이다(그렇지만 요즘은 기술이 워낙 발달해서 대충.. 쓰기도 한다고...). 아무튼 타입별 메모리 크기를 알아야 많은 에러에서 벗어날 수 있다. 더불어 다른 언어도 이와 메모리 크기, 이름은 같거나 비슷하니 여기서 알아놓으면 된다. 아래에서는 자료형 별로 차지하는 메모리의 크기를 알아볼 것이다. 1) 정수형 타입 정수형 자료형 크기 자료형 값의 범위 char 1byte -128이상 +127이하 short 2byte -32,768이상 +32,767이하 int 4byte -2,147,483,648이상 +2,147,483,647이하 long 4..

Tistory

[C언어] char 타입으로 배열 만들기

[C언어] char 타입으로 배열 만들기 char 형식은 -128부터 127까지의 정수를 표현할 수 있는 정수 형식이다. char 형식은 문자 하나를 표현할 때 많이 사용한다. 형식 지정자는 ‘%c’이다. char 자료형은 1바이트로, 한 글자만 저장된다. 여러 글자를 담기 위해서는 배열을 이용해야 한다. ex) char a = ‘ab’; => b만 변수에 담기게 된다. int i = ‘a’ 도 된다. ‘a’가 아스키코드로 값이 97이기 때문이다. 여러 글자를 변수에 담기 위해서는 char ch[5] = {‘a’, ‘b’, 0, ‘c’, ‘d’}; 이런 식으로 문자를 담아야 한다. c에서는 끝을 알려주는 것이 0인데, 컴퓨터가 0을 보면 문자열의 끝이라고 인식하게 된다. (c, d)는 출력되지 않는다. ..

Tistory

컴퓨터의 기본 메모리 구조(순차접근, 임의접근)

컴퓨터의 기본 메모리 구조(순차접근, 임의접근) 순차접근(sequential access) vs 임의접근(random access) 순차접근 리스트에 접근하는 것처럼 순차적으로 접근을 한다. 1~100번의 주소가 있다면, 1부터 시작해서 읽어나가는 것이다. 하드디스크(Hard Disk Drive)가 순차접근의 방법을 취한다. 임의접근 램의 경우 이름에 걸맞게 임의접근의 방법을 취한다(Random Access Memory). 그렇기 때문에 전원이 꺼지면 데이터가 유실된다. SSD(Solid State Drive)의 경우, 임의접근을 해서 필요한 공간의 데이터를 바로 가져올 수 있다. 그러나 HDD 보다는 덜 안정적이다. 데이터를 연속적으로 받아올 때 HDD보다 효율이 떨어진다. ++ 디스크 조각모음 요..

Tistory

[Web] IP란 무엇인가?(공인, 사설, 고정, 유동)

[Web] IP란 무엇인가?(공인, 사설, 고정, 유동) 1. IP란? 컴퓨터가 연결된 네트워크의 끝단의 주소. 기기가 인터넷에 접속한 곳의 네트워크상 위치이다. 그렇기 때문에 아이피는 바뀔 수도 있다. 컴퓨터가 트레일러이면, 아이피는 이 트레일러가 자리잡은 곳의 도로명 주소이다. 이동할 때 아이피가 바뀌지만, 가만히 있어도 바뀌기도 한다. 그 이유는 다음과 같다. 우리는 IPv4형식의 ip를 쓰고 있다. ~~~.~~~.~~~.~~~ 이런식으로 세 자리수가 4번 반복되는 숫자들을 가지고 주소를 부여하고 통신을 진행하는 것이다. 이렇게 하면 42억여 개 정도의 주소가 만들어지는데, 지금 인구와 가지고 있는 스마트기기를 생각해보면 턱없이 부족하다. 그래서 사람들은 하나의 ip 개념을 더 생각하는데, 공인 i..

Tistory

[C언어] 반복문 활용하기(while, for)

[C언어] 반복문 활용하기(while, for) 반복문은 코드 라인을 획기적으로 줄여준다. 반복해서 실행해야 할 함수들을 삽입해서 일정 조건이 일어날 때 종료하는 방법으로 조건문을 종료할 수 있다. 아래에서는 C언어에서 쓸 수 있는 while문과 for문의 기본형에 대해 알아본다. 1. while 1) 기본구조 #include int main(){ while(조건문){ 수행 코드 } return 0; } while은 조건문 특별한 변수가 조건문 안의 조건을 만족할 때까지 반복을 수행하는 것이다. 일반적으로 반복의 횟수를 알지 못할 때, 고정하기 애매할 때 사용한다. 조건문 안에 true를 써놓으면 무한 반복문을 만들 수 있으며, 수행 코드 내에서 조건문을 두고 break;를 통해서 while문을 탈출할 ..

Tistory

[Web] 서버란 무엇인가?

서버란 무엇인가? ‘서버 점검 중입니다.’ 서버도 하나의 컴퓨터이다. 서버는 ‘역할’의 의미를 가지고 있다. 한 컴퓨터가 다른 컴퓨터와 내 컴퓨터를 연결해주는 역할을 하면 서버 역할을 한다고 볼 수 있다. 아니면, 어떤 컴퓨터에서 어떤 정보를 나(클라이언트)에게 내려주면 서버 역할을 한다고 볼 수 있다. 클라이언트 - 서버 - 클라이언트의 구조가 된다. 서버도 클라이언트가 될 수도 있다. 다른 서버에서 정보를 가져온다면, 정보를 가져오는 서버의 경우, 클라이언트가 될 수도 있다. 내 컴퓨터도 서버로 만들수 있다. 예를 들면 P2P 서비스. 내 컴퓨터가 서버처럼 되어서 다른 사람에게 특정 파일을 전송해주게 된다. AWS와 같은 클라우드 서비스를 활용하면 더 쉽게 내 컴퓨터를 서버화 할 수 있다.

Tistory

[Web] DNS가 뭘까? 도메인, A Record, CName

[Web] DNS가 뭘까? 도메인, A Record, CName (Domain Name System) www.naver.com naver.com이 도메인이다. www는 호스트네임이라고 한다. 호스트 네임은 mail, blog 등 다양하게 있을 수 있다. 도메인은 IP 주소를 쉽게 활용하기 위해서 만들어진 네임 태그와 같은 것이다. 도메인과 IP 주소는 매칭되어서 숫자로 어딘가로 전송이 된다. 그렇다면, 특정 IP - 특정 도메인 쌍이 어딘가에 데이터로 저장이 되어야 브라우저에 도메인으로 쓸 때 IP로 변환이 되어서 서버에 연결될 것이 아닌가? 그 쌍은 어디에 저장되어 있는가? 바로 DNS에 저장되어 있다. system이라는 말을 자세히 생각해보면, 어디 한 군데에 모두 저장되어 있는 것이 아니고 분산 저..

Tistory

[HTML] 태그와 엘리먼트의 차이

[HTML] 태그와 엘리먼트의 차이 한 줄 요약 : 태그는 '' 하나를 의미하고 엘리먼트는 즉 태그 쌍을 의미한다. 1. 태그(tag) 다음과 같이 생긴것을 태그라고 한다. 즉""로 묶인 일련의 명령어이다. 태그에는 세 가지 종류가 있다. 시작태그 : 종료태그 : 빈태그 : , , 등 태그의 구성 시작태그는 "속성(attribute)"과 "값(value)"을 가질 수 있다. 위에서 시작태그는 속성과 값을 가지고 있는데 "href"는 속성이라고 하며 "https://masterpiece-programming.tistory.com/"를 값이라고 한다. 2. 엘리먼트(element) 다음과 같이 생긴것들을 엘리먼트라고 한다. 내용이다. 즉 내용을 포함해 시작태그와 종료태그까지를 엘리먼트라고 합니다. 또 이런것..

Tistory

[CSS] 가상선택자, 에밋(emmet)

[CSS] 가상선택자, 에밋(emmet) 1. 가상 선택자(가상 클래스 or 추상 클래스) 선택자 뒤에 ':가상이벤트'를 붙이면 특정 이벤트마다 적용 할 스타일을 설정 할 수 있으며, 이를 가상 (추상)클래스라 한다. 가상 선택자를 쓰면 CSS와 HTML의 코드의 양을 줄이며 가독성을 향상시킬 수 있는 장점이 있다. nav > div:nth-child(N){ color: red; } 이렇게 있다고 하면, css는 nav의 N번째 자식만 골라서 효과를 주는 것이다. 만약 N의 자리에 1을 넣는다면, 첫번째 div 엘리먼트만 폰트 색깔이 빨간색으로 바뀐다. 가장 필수적으로 알아야 하는 요소 :nth-child(N) = 부모안에 모든 요소 중 N번째 요소 A:nth-of-type(N) = 부모 안에 A라는 요..

Tistory

[HTML/CSS] 노멀라이즈(normalize)

[HTML/CSS] 노멀라이즈(normalize) : 브라우저 간 유저 에이전트 스타일의 오차를 줄이고 HTML 요소의 기본 스타일을 브라우저 별이 아닌 공통으로 일관되게 유지하도록 돕는 CSS 파일이다. 버그만 줄이는 방향으로 스타일을 재지정하는 것. body에는 기본 css가 설정되어 있다. body에는 기본 css가 설정되어 있다. 마진, 패딩의 기본값은 0으로 들어가있으며, width 등이 auto로 설정되어 있다. 태그 별로 문서 시작 전에 노멀라이즈를 해주는 것이 좋다. 공통적으로 그 태그의 형식을 지정해주면 브라우저 별로 다르지 않게 형태가 나올 수 있으니 해주는 것이 좋다. 노멀라이즈 시 CSS 값 설정시 유의할 하나의 정보(노멀라이즈 내용은 아님) ++ auto와 직접 값 설정의 차이점 ..

Tistory

컴퓨터의 기본 구성 장치와 동작 원리

컴퓨터의 기본 구성 장치와 동작 원리 20세기의 천재 폰 노이만은 현대 컴퓨터의 구조를 만들었다. 이전 까지의 컴퓨터(계산기라고 하는 것이 더 맞음)는 인풋, 아웃풋 디바이스의 경계도 모호했다. 이전까지는 CPU와 메모리가 같이 합쳐져 있었다. 그렇지만, 폰 노이만의 설계에 의해 새롭게 탄생된 컴퓨터는 현재 70년이 지난 지금에 있어서도 기본 컴퓨터 구조로 사용되고 있다. 알아볼 것들 1. 컴퓨터의 기본 구성 장치 2. 운영 체제와 부팅 과정 3. 이진법의 활용 1. 컴퓨터의 기본 구성 장치 CPU cpu는 중앙처리장치이다. 프로그램의 명령어를 해석하고 돌아가도록 제어하는 부분, 칩이다. 컴퓨터에서 기억, 해석, 연산, 제어라는 4대 주요 기능을 관할한다. 우리 뇌의 기억과 사고를 담당하는 부분이 있다고..

Tistory

[HTML/CSS] display 속성 알아보기

[HTML/CSS] display 속성 알아보기 display 종류 정리 종류 inline-block, inline block none 너비 너비가 설정되어 있지 않다면, 최소한으로 줄어든다. 너비가 설정되어 있지 않다면, 최대한으로 넓어진다. 없어진다. 높이 높이가 설정되어 있지 않다면, 최소한으로 줄어든다. 높이가 설정되어 있지 않다면, 최소한으로 줄어든다. 없어진다. 본질 글자화 블록화 - line 사용 한 줄에 최대한 여러개가 나온다. 한 줄을 무조건 혼자 쓴다. - 정렬 부모의 text-align에 의해서 정렬 스스로 margin-left, margin-right를 사용해서 정렬 - 대표되는 태그 img(inline-block 종류) a, span(블록 아닌 inline 종류) div, nav(..

Tistory

[GIT] github 저장소 원격 연결하기(CLI)

[GIT] github 저장소 원격 연결하기(CLI) git은 버전관리, 백업, 협업이 가능한 툴이다. github는 유명하고도 유명한 백업저장소이다. 그렇다면, 우리는 여기에 어떻게 접근할 수 있을까? GUI 환경으로 github에 접근할 수도 있고, 터미널과 같은 CLI 환경으로도 접근할 수 있다. GUI 환경으로 접근하는 방법으로는 VS Code로 커밋을 하고, 백업, 협업을 하는 방법이 있다. 하지만 로컬이 아닌 다른 장소에서 작업을 할 때 터미널을 사용하는 것이 더 간편하다. 개발환경과 무관하게 터미널로 커밋하는 방법은 모든 곳에서 공통적으로 사용할 수 있기 때문이다. 컴퓨터에 git이 설치되어 있는지는 터미널에서 git --version 명령어를 입력해보면 확인할 수 있다. 설치가 안 되어 있..

Tistory

html5up 템플릿으로 나만의 페이지 만들기

[HTML/CSS] html5up 템플릿으로 나만의 페이지 만들기 html 페이지를 만들어 놓은 것이 여러 개 있어서 그것을 묶어보는 복습활동을 하고 싶었다. 그렇지만, 제대로 만들기에는 아직 초기 버전의 홈페이지 밖에 못만들 것 같았다. 더 나은 디자인, 인터페이스를 가진 홈페이지로 나의 결과물을 보고 싶다...는 열망은 "html5up"을 만나게 해주었다. html5up? html5up은 다양한 홈페이지 템플릿을 무료로 제공한다. 상업적으로도 활용할 수 있다. https://html5up.net HTML5 UP Responsive HTML5 and CSS3 site templates designed by @ajlkn and released under the Creative Commons license..

Tistory

은탄환은 없다.

은탄환은 없다. 개발 공부를 시작한지 얼마되지 않은 나는 처음 들어본 말이었다. 소프트웨어 개발을 하는 사람 사이에서는 유명한 말이라고 한다. 새로운 기술, 방법을 활용해 문제점을 모두 해결할 수 있다고 생각하는 것이 잘못되었다는 이야기이다. 소프트웨어는 복잡하다. 100% 완결성을 가지고 있는, 신뢰성있는 소프트웨어는 없을 것이다. 결점은 0.01%라도 가지고 있고, 거기에서 언젠가는 버그나 결점이 발생할 수 있다. 소프트웨어 개발 과정이 탑다운 형식이라고 생각하면, 그 최정상의 설계점은 완벽할 수 없다. 완벽하려고 하면, 끝이 없고 결국에는 시작하지 못하고 문제를 해결하지 못한다. 설계도와 그 하위에서 쓰여지는 각종 개발 도구는 우리가 직면할 수 있는 '문제'를 완벽하게 없애지 못하는 것이다. 문제는..

Tistory

[jQuery] jQuery 기본 문법 이해하기

[jQuery] jQuery 기본 문법 이해하기 1. jQuery 정의 : HTML 클라이언트 사이드 조작을 단순화 하도록 설계된 크로스 플랫폼의 자바스크립트 라이브러리. : 부트스트랩도 의존도를 줄여간다고 하고, 요즘은 점유율이 낮아지고 있는 추세이다. 2. jQuery 호출 html 문서 내부에 script로 추가한다. jQuery 홈페이지에서 코드를 복사할 수 있는데, 그것을 html 문서 내에 붙여넣기 하면 jQuery를 사용할 수 있다. 3. 기초 문법 1) 선택자 : DOM을 통해 HTML 요소를 선택하여 가져와서 쉽게 제어할 수 있다. $(선택자).메소드(); id 선택을 위해서는 ‘#id', class 선택을 위해서는 ‘.class’로 쓰면된다. 지정 태그와 일치하는 요소를 선택하기 위해서..

Tistory

[Bootstrap] Bootstrap이란?

[Bootstrap] Bootstrap이란? 정말 기본만 알아볼 것이다. Bootstrap이란? : HTML, CSS, JS 프레임워크 : 프론트엔드 개발을 빠르고 쉽게 할 수 있는 프레임워크이다. : HTML과 CSS 기반의 템플릿 양식, 버튼, 네이게이션 및 기타 페이지를 구성하는 요소를 포함한다. : 자바스크립트를 선택적으로 확장 할 수 있다. Bootstrap의 특징 드롭다운 메뉴, 버튼, 탭, 리스트 등등 웹 페이지에서 많이 쓰이는 요소를 내장하고 있다. 관련 이미지만 설치하고 미리 지정된 CSS 클래스나 JavaScript 함수만 불러오면 디자인이 완성된다. Bootstrap의 활용 반응형 웹 디자인을 만들 때 쓰는 것이다. 반응형 웹 디자인 : 장치의 종류에 상관없이 모든 브라우저에서 잘 보..

Tistory

새로운 것을 받아들인다는 것은...

새로운 것을 받아들인다는 것은... 익숙하지 않은 그림이다. 우리는 익숙한 대상을 가지고 낯설게 바라볼 수 있다. 이렇게 우리는 때때로 익숙하지 않은 새로운 무엇인가를 만난다. 새로운 사람, 장소, 업무 분야, 학습 분야, 취미, 도구와 같은 것들. 심지어 익숙했던 대상에 대해 새로움을 느끼기도 한다. 갑자기 머리를 싹둑 자른 연인, 군대를 다녀오고 나서 무엇인가 변한 친구, 단골 맛집에서 새로운 메뉴에서 느껴지는 맛과 같은 것들 말이다. 새로운 것 속에서 해방과 긴장을 동시에 느낀다. 새로움을 마주할 때, 기존의 삶의 경계에서 한 발 짝 더 나아갔다는 해방감을 가짐과 동시에 무엇인지 모르기에 조심스러운 긴장감을 함께 가진다. 이렇게 삶의 외연의 확장을 통해서 기존의 루틴에서 가졌던 권태를 극복하기도 하..

Tistory

[Markdown] README.md 작성하는 방법

[Markdown] README.md 작성하는 방법 요즘 Notion에 수업 들은 것을 집어넣고 있는데, markdown을 접하고 있었다. 마침 또 내가 만들어 놓은 페이지들을 깃허브를 통해서 배포하고 싶었고, 이것도 프로젝트라면 프로젝트라 readme가 필요해졌다. readme를 markdown으로 작성하는 방법을 알아보자. 1. README란? 프로젝트를 소개하는 문서이다. 관련된 링크, 개발을 위해 갖춰야 되는 실행환경, 사용 라이브러리, 가이드라인, 특정 코드 설명 등등을 쓴다. 이 프로젝트를 진행한 구성원이 아니라도 이것을 보고 수정, 보완을 할 때 도움이 될 수 있도록 도움이 되는 설명서와 같은 것이다. 2. Markdown 문법 '#'과 '>', '*', ''' ~~~ ''', 등을 활용하면..

Tistory

[VS Code] Live Server로 html 문서 확인하기

[VS Code] Live Server로 html 문서 확인하기 VS Code에서는 html, css, js 작성 편집이 가능하다. 하지만 IDE 안에서 코드를 바꾸었을 때, 즉각적으로 바뀐 부분을 확인하기 어렵다. 물론 새로고침을 하면서 localhost를 활용하는 방법도 있지만, VS Code를 쓰고 있다면, extension 하나를 설치하는 것만으로도 편리함을 얻을 수 있다. 우클릭 후 'Open with Live Server'를 누르거나, cmd + l -> cmd + r을 누르는 것으로 html 문서를 열어볼 수 있다. 아래에서는 Live Server로 html 문서를 확인하는 방법과 기본 브라우저 세팅을 바꾸는 방법에 대해 알아볼 것이다. 1. Live Server extension 설치 2...

Tistory

[JavaScript] DOM(Document Object Model) 이해하기

[JavaScript] DOM(Document Object Model) 이해하기 DOM(Document Object Model)의 정의 : XML이나 HTML 문서에 접근하기 위한 일종의 인터페이스이다. : 문서 내의 모든 요소를 정의하고 각각의 요소에 접근하는 방법을 제공한다. : W3C의 표준 객체 모델이며, 다음과 같은 계층구조로 표현된다. DOM 활용 자바스크립트는 이러한 객체 모델을 이용하여 다음과 같은 작업을 할 수 있다. : 새로운 HTML 요소나 속성을 추가 : 존재하는 HTML 요소나 속성을 제거 : HTML 문서의 모든 HTML 요소를 변경 : HTML 문서의 모든 HTML 속성을 변경 : HTML 문서의 모든 CSS 스타일을 변경 : HTML 문서에 새로운 HTML 이벤트를 추가 : ..

Tistory

[JavaScript] JavaScript 기본 문법

[JavaScript] JavaScript 기본 문법 console 창으로만 확인할 수 있는 언어를 학습하고 있었는데, 수업을 따라가다가 JavaScript를 마주하였다. 이전까지는 신기한 생각을 가지고 있었다. '이건 나에게 '필요없는 언어'이다.' 나중에 안하니까? 전혀 잘못된 생각을 하고 있었다. 일단 전체가 대강이라도 어떻게 돌아가는지, 내가 구현한 코드가 어디에 써먹히는지, 눈으로는 어떻게 나와서 서비스가 어떻게 나오는지를 알아야 되지 않나. 전문가는 아니더라도 '알고는' 있어야 하는 것인데 외면하고 있지 않았나 하는 반성을 해본다. (물론 뭐 지금까지 얕은 공부를 했기 때문에 필요가 없다고 느꼈을 수도 있다) 아무튼 이번에는 자바스크립트 문법에 대한 기초적인 것을 파악해보겠다. 정말 생기초! ..

Tistory

[VS Code] C/C++ 개발환경 세팅, 리셋하기(Mac)

[VS Code] C/C++ 개발환경 세팅하기 수업에서 manual 본좌 C를 만나게 되었다. https://replit.com/으로 코드를 쓰고 하는 것이 익숙하지가 않아서 기존에 쓰던 VS Code를 IDE로 쓰고 싶어졌다. 세팅하는 과정이 순탄치 않았다. 리셋도 한 번 했더니 기존에 쓰던 서체와 글꼴색이 다 날아가서 다시 만져주기도 했다. 여기서는 개발환경 세팅과, 리셋하는 방법을 알아보겠다. 1. C/C++ 개발환경 세팅 (1) VS Code 설치 VS Code 세팅을 위해서는 당연히 VS Code가 있어야 한다. visualstudio.microsoft.com/ko/ Visual Studio: 소프트웨어 개발자 및 Teams용 IDE 및 코드 편집기 Visual Studio 개발 도구 및 서비스..

Tistory

[VS Code] Java 개발환경 구축(Mac)

[VS Code] Java 개발환경 구축 Mac에서 이클립스를 쓸 때면 느끼는 불편함이 있다. 바로 한글 주석을 달 때, 백스페이스를 하고 나면 글자가 하나씩 사라지는 것. 아니 백스페이스를 안해도 한글자씩 사라지는 문제가 있다. 구글링을 한 결과 해결 방법이 없다고 한다. 이클립스로 처음 자바 클래스 문서를 생성하고 작성해왔지만, python, c, c++, java를 하나의 IDE로 돌려보고 싶다면 VS Code를 추천한다. (나는 근데 곧 IntelliJ를 쓸거다...) 아래에서는 VS Code로 자바 개발환경을 세팅하고 클래스를 만드는 것 까지 해볼 것이다. 1. VS Code Java 개발환경 세팅 (1) JDK 설치 https://www.oracle.com/kr/java/technologies..

Tistory

[Python] 기념일 계산기

[Python] 기념일 계산기 그 날로부터 얼마나 지났을까를 어떻게 계산할 수 있을까가 문득 궁금해졌다. python으로 그것을 구현하는 방법을 알아보자. import datetime birth = list(map(int, input().split())) today = datetime.date.today() target_date = datetime.date(birth[0], birth[1], birth[2]) d_day = today - target_date print(f"오늘은 일자로 부터 {int(d_day.days) + 1}"+"일 째 입니다.") datetime을 활용해서 그 날로부터 오늘이 몇 일 째인지를 계산해주는 식이다. 그 혹시 그녀와 함께한 날, 혹은 내가 살아온 날이 얼마나 지났는지를 ..

Tistory

[HTML/CSS] HTML 태그 모음

[HTML/CSS] HTML 태그 모음 html의 대부분의 태그는 여는 태그와 닫는 태그가 있다. 로 시작하면 닫는 이 꼭 있어야 한다. 하지만 과 같이 닫는 태그가 없는 태그도 있다. 잘 구분해서 쓰면 좋을 것 같다. 태그 기능 활용방법 or 비고 웹 문서의 유형을 html로 지정 태그 위(문서 최상단)에 씀 문서를 html로 시작한다는 선언 라고 하면 언어를 한국어로 지정한다는 뜻 브라우저의 정보를 입력 , , 등이 주로 이 부분에 들어감. 메타데이터 입력 이라고 하면 문서 내에서 한글을 사용할 수 있음. 문서 제목 브라우저 탭 상에 나타나는 제목 외부 문서 참조 다른 문서를 참조할 때 사용(CSS 파일 등) 형식으로 씀. 문서의 내용을 입력 페이지의 모든 태그들을 body 라인 내에 입력함. 헤더 ..

Tistory

[HTML/CSS] 필수 CSS 선택자, CSS 속성 모음

[HTML/CSS] 필수 CSS 선택자, CSS 속성 모음 CSS에는 선택자와 속성이 있다. div { font-size: 20px; } 여기서 div가 '선택자'가 되는 것이고, font-size가 속성이 된다. 속성은 특정한 값을 가진다. 선택자 { 속성: 값; } 이런 식으로 CSS 문서가 구성이 된다. 아래에서는 아주 잘 쓰이는 CSS 선택자와 속성을 알아볼 것이다. 1. CSS 선택자 선택자 설명 상세 설명 * 페이지 전체 요소 스타일시트 전체가 요소를 공유한다. .X X class의 요소 class는 여러 번 쓸 수 있다. #X X id의 요소 id는 한 번만 쓸 수 있다. X X 태그의 요소 html 문서의 특정 X 태그가 요소를 공유한다. X Y X 태그 내부의 모든 Y 태그의 요소 Des..

Tistory

[HTML/CSS] github hosting

[HTML/CSS] github hosting HTML의 태그와 CSS 선택자, 속성을 정리하고 대강 페이지를 만들어보았다. 한 장 짜리 HTML 문서이지만, HTML/CSS를 모르는 사람에게도 보여주고 싶다면, Hosting을 해야 한다. github는 commit한 자료들을 hosting 해주는 써어비스를 해주고 있다. git 활용법을 어제 대강 습득한 나는 두 가지 지식을 융합시켜보고자 호스팅 방법을 탐구하였다. 커밋을 마치고 push를 하면 위와 같이 repository에 파일들이 저장된다. 이 때 주의할 것은, html 파일의 경우, index.html 파일이 꼭 있어야 한다. 브라우저는 이 파일을 우선적으로 읽고 나머지 html 파일을 들여다보는데, 이것이 없다면 404 not found를 만..

Tistory

[GIT] Branch, Merge, Rebase 기본 개념

[GIT] Branch, Merge, Rebase 기본 개념 동일한 소스 코드를 활용해서 여러 개발자가 각자의 업무를 진행할 때가 있다. 어떤 개발자는 버그를 수정하고, 어떤 개발자는 새로운 기능을 만드는 역할을 하는 것처럼 말이다. 이 때 서로 다른 작업을 할 때는 서로 다른 버전의 코드가 생겨날 수 밖에 없다. 이럴 때 여러 개발자들이 동시에 다양한 작업을 할 수 있게 만들어주는 기능이 깃의 '브랜치(Branch)'이다. 각자 독립적인 저장소 안에서 마음대로 소스코드를 변경하고, 분리된 작업 영역에서 변경된 내용은 원 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있다. 이번 포스팅에서는 세부 기술적인 부분이 아니라, 전반적인 깃의 브랜치와 머지, 충돌을 이해하기 위해 개괄적으로 개념을 살펴보..

Tistory

[HTML/CSS] HTML/CSS란?

[HTML/CSS] HTML/CSS란? HTML/CSS는 생각을 컴퓨터에 구현하는 시각화 도구이다. 자바스크립트, 자바, 파이썬 등등으로 만들어진 로직들을 직접 눈에보이게 끔 구현하는 도구인 것이다. (작가가 그린 그림이 HTML/CSS로 구현된 페이지, 그것을 움직이게끔 하는 것이 자바스크립트 등이다.) HTML/CSS만 들어간 페이지는 정적이다. 마우스를 위에 올려놓으면 움직이는 모션들은 자바스크립트 등의 언어를 통해 로직을 구현해줄 때 동적으로 구현이 가능하다. HTML/CSS로 만들어진 페이지는 누구나 접속이 가능하다. Chrome, Safafi, firefox, edge 등등 다양한 웹 브라우저 또는 모바일 기기를 통해 누군가의 생각이 들어간 컴퓨터 언어를 하나의 그림과 같이 볼 수 있는 것이다..

Tistory

[Java] throws

[Java] throws 메서드 안에서 예외가 발생할 수 있는 코드를 작성할 때, try-catch 블록으로 예외를 처리하는 것이 기본이지만, 경우에 따라서는 그 메서드를 호출할 곳에서 예외를 처리하도록 예외를 떠넘길 수도 있다. 이때 사용하는 것이 throws이다. throws 뒤에는 쉼표로 구분하여 처리해야 하는 예외 클래스를 병기할 수도 있다. public void method1() throws Exception{ } 이제 method1()은 예외를 자기 자신이 책임지지 않는, 아주 무책임한 메소드가 되었다. 이런 무책임한 메소드를 부른 method2()는 다음과 같은 행위를 해야 한다. public void method2(){ try{ method1(); catch(Exception e) { } ..

Tistory

[Linux] POSIX CLI 명령어

[Linux] POSIX CLI 명령어 portable operating system interface command line interface 평범한 컴퓨터의 사용자라면 터미널을 사용해서 컴퓨터를 조작할 일이 많이 없다. GUI OS가 브라우저 실행 파일까지 친절하게 안내해주고, 그 창을 띄워줘서 인터넷에 접속할 수 있게 해주니까. 또한 어떤 텍스트 문서를 만든다고 할 때에도 윈도우는 메모장, 맥은 텍스트 편집기를 활용해서 내용을 입력하고 저장을 하면 파일이 만들어진다. GUI 환경이 아닌 터미널에서 명령어로 파일을 조작하는 이유는 무엇일까? GUI 환경이 아닌 곳에서 활용할 일이 있기 때문이다. 서버를 조작한다던지 할 때 사용이 되는 것이다. 그렇다면 이러한 대용량의 서버들은 GUI 환경을 쓰지 않는..

Tistory

[GIT] 버전 관리의 개념과 필요한 명령어 알아보기

[GIT] 버전 관리의 개념과 필요한 명령어 알아보기 깃의 가장 큰 존재이유 중 하나인 버전 관리. 버전을 관리하기 위해서는 로컬에서 진행해야 하는 과정이 있고, 원격으로 쏘기 위해 해야하는 과정이 있다. 그 전에 위의 그림부터 살펴보자. 로컬 영역에서는 세 가지로 분류를 해서 볼 수 있다. working area / : 버전으로 만들기 전 단계(수정한 파일들) staging area / : 수정 한 것 중 선별된 단계(버전을 만들려고 하는 파일들) repository : 버전으로 만들어진 파일들 이렇게 보면 되는데, 하나의 공간을 올려가면서 commit에 대한 준비를 하고 그 다음 로컬 repository에 올라갔을 때, push를 할 수 있게 된다. 막연히 그냥 폴더 안에 있는 것을 push 해서 깃..

Tistory

[Java] 인터페이스의 다형성

[Java] 인터페이스의 다형성 인터페이스를 만들어놓고 클래스를 만들 때, 원래 설정해놓은 함수와는 다른 매개변수를 주고 싶다면...? 원래 2개를 설정할 수 있게 인터페이스에 써놓았는데, 매개변수를 3개 설정하고 싶다면 어떻게 해야할까? 메소드를 그대로 물려받았기 때문에, 원래 함수를 구현하지 않고도 오버로딩이 가능할까? 라는 생각에 이번 포스팅을 진행하게 되었다. 긴 이야기 필요없이 바로 인터페이스를 만들어보고 인터페이스를 implements한 클래스를 만들어보겠다. 1) 인터페이스 package exercise; public interface Calculate { int sum(int v1, int v2); } Calcutate라는 인터페이스를 만들었고, 그 안에는 sum()이라는 함수가 들어있다...

Tistory

[Java] Error와 Exception, 예외 처리

[Java] Error와 Exception, 예외 처리 에러는 숙명, 예외는 운명 초보 개발자에게 누군가는 이렇게 이야기를 한다. 숙명은 static한 것, 운명은 dynamic 한 것이다. 어떠한 것을 집어넣는다고 해도, 숙명은 바뀌지 않고, 운명은 내가 어떤 변수와 로직을 넣느냐에 따라 좌지우지 할 수 있다. 오류는 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미한다. 개발자가 예측하여 방치할 수 없는 것이다. 위의 블루스크린도 그와 같다. 반면 예외는 개발자가 구현한 로직에서 발생한 것이거나 사용자가 이렇게 사용할 것이라고 생각 못하고 개발해놓은 것에서 발생된다. 개발자가 미리 방지할 수 있기 때문에, 상황에 맞게 예외 '처리'를 해주어야 한다. 1. 예외 클래스의 계..

1 2 3