웹 표준웹 표준(Web Standard)이란 웹에서 콘텐츠를 작성하고 서비스하기 위해 지켜야 할 기술적인 규칙과 명세입니다.웹 페이지가 다양한 브라우저, 운영체제, 기기에서 동일하게 작동할 수 있도록 공통된 기술 기반을 제공합니다.이러한 표준은 주로W3C (World Wide Web Consortium)WHATWG (Web Hypertext Application Technology Working Group)같은 기관에서 정의하고 관리합니다.쉽게 말해, 웹 표준은 모든 사용자에게 공평한 웹 환경을 제공하기 위한 글로벌한 약속이라 보시면 될 것 같습니다. 구성웹 표준은 웹을 구성하는 기본 기술들로 이루어져 있습니다:HTML (HyperText Markup Language)→ 웹 콘텐츠의 구조를 정의합니다. ..
Intro집에 굴러다니던 라즈베리파이를 이용해 서버를 하나 구축해봤습니다.서비스를 호스팅하고 싶었지만, 저는 돈이 없는 그지기 때문에 직접 서버를 만들어보기로 했습니다... ㅠ사실 라즈베리파이 하나만 있어도 제법 많은 걸 할 수 있습니다. 라즈베리파이로 개인 서버를 구축하는 과정을 기록하려 합니다.환경제가 서버를 구축한 환경은 다음과 같습니다.라즈베리파이 4B (RAM 4GB)microSD 카드 (16GB 이상)무선 공유기 (저는 iptime 공유기를 사용하였습니다.)Raspberry(기본 세팅은 어느정도 해뒀습니다.)라즈베리파이의 현재 IP 확인아래 명령어를 통해 DHCP가 할당해준 IP를 확인합니다.ifoncig저는 공유기로부터 192.168.0.83 이라는 아이피를 할당받은 상태였습니다. 고정 IP..
IntroSpring Boot 프로젝트 중 JPA 의존성을 추가하고 실행하면 콘솔에 Hibernate라는 키워드가 자주 등장하는 로그를 보신 적이 있을 겁니다.처음에는 “나는 JPA를 쓴다고 했는데, Hibernate는 왜 자꾸 나오지?” 하고 의문이 들 수 있습니다.사실, 우리가 흔히 “JPA를 쓴다”고 말하지만, 실제로는 Hibernate가 모든 걸 처리하고 있다는 사실을 알고 계셨나요?오늘은 우리가 자주 사용하는 JPA의 구조와 그 뒤에서 일하는 진짜 구현체인 Hibernate에 대해 설명해 보려고 합니다.JPA는 뭘까?JPA의 정식 명칭은 Java Persistence API입니다. 말 그대로 "자바 객체를 어떻게 데이터베이스에 저장할 것인가?"를 정해놓은 일종의 표준 명세(인터페이스)입니다.JP..
저는 스프링에서 의존성을 아래와 같이 주입했습니다.@Componentpublic class TilService { @Autowired private TilRepository tilRepository;}간단하고 눈에 잘 들어오죠. 그래서 처음에는 "이게 제일 깔끔한 방식 아닌가?" 싶었습니다.그런데 계속 자료를 찾아보며 공부하다보니 많은 개발자들이 생성자 주입 방식을 권장하고 있다는 걸 알게 됐습니다. 스프링 공식 문서와 여러 커뮤니티에서도 이 방식을 기본으로 추천하더라구요. 그래서 오늘은 필드 주입의 문제점을 알고 왜 생성자 주입을 사용하는지 간단히 정리해보려합니다.필드 주입은 왜 문제가 될까?필드 주입은 겉보기엔 참 간결합니다. @Autowired만 붙이면 되니까요. 하지만 아래와 같은 문제..
자바를 공부하다 보면 "객체를 만들면 어떻게 동작하지?"라는 질문이 자연스럽게 떠오르게 됩니다. 단순히 new 키워드를 써서 객체를 만든다고는 하는데 그게 실제로 메모리 상에서 어떻게 처리되는 걸까? 그리고 그 객체는 언제, 어떻게 사라질까? 이 글에서는 전 포스팅에 이어서 자바의 객체 생성과 메모리 해제 부터 하여 배열과 컬렉션, 상속과 다형성, 예외 처리, 캡슐화와 패키지 구성 등 자바의 핵심 개념들을 정리해보겠습니다.객체는 어디에, 어떻게 만들어질까?자바 프로그램이 실행되면 JVM(Java Virtual Machine)이 등장합니다. JVM은 메모리를 다음과 같이 나누어집니다:Heap: new로 만든 객체들이 저장되는 공간.Stack: 메서드 호출 시 생성되는 지역 변수와 매개변수가 저장됨.Meth..
링크: https://www.acmicpc.net/problem/1516아이디어이전 일이 끝나야지만 다음 일을 할 수 있는 순서가 정해져있는 작업을 다루는 문제 -> 위상정렬을 사용하자아래 리스틀를 선언해두고 사용하자그래프진입 차수(사전에 진행되어야 하는 건물 개수)건물별 걸리는 시간 저장DP (사전 진행되어야 하는 건물 중 가장 늦게 건설되는 건물을 기준으로 코스트 계산)구현import sysfrom collections import dequeinput = sys.stdin.readline# 순서ㅇ가 있는 작업 -> 위상 정렬을 사용하자# 그래프 배열, 진입 차수 배열, 비용 배열, DP 배열 N = int(input())graph = [[] for i in range(N)]indegree = [0] ..
이 글에서는 자바의 기초 개념을 다시 돌아보며 하나씩 정리하려합니다.메서드자바에서 메서드는 클래스 내에 정의되어야 하며 어떤 작업을 수행하는 명령문의 집합입니다. 다른 언어에서 말하는 '함수'와 유사한 개념이지만, 자바에서는 반드시 클래스 내부에 존재하기 때문에 메서드라고 부릅니다.메서드를 정의할 때는 반환 타입, 메서드 이름, 매개변수, 본문으로 구성되며, 예를 들어 다음과 같이 정의할 수 있습니다.public int add(int a, int b) { return a + b;}이 메서드는 두 개의 정수를 받아서 더한 결과를 반환합니다. 반환 타입은 int, 메서드 이름은 add, 매개변수는 a와 b입니다. 반환이 필요 없는 경우에는 void를 사용합니다.또한, 여러 메서드를 하나의 클래스 안에 ..
링크: https://www.acmicpc.net/problem/1717 아이디어초기에 n+1개의 집합이 존재하고, 합집합과 동일 집합 여부 판별 연산을 빠르게 처리해야 한다.입력의 개수가 최대 10만 개이고, 노드 수가 최대 100만 개이므로 DFS나 재귀는시간초과가 발생한다.집합 관리 알고리즘인 유니온 파인드 자료구조를 사용하자.경로 압축 기법을 함께 사용하면 거의 상수 시간 복잡도로 처리할 수 있도록 하자.배열을 만들어 각 원소의 부모 노드를 저장한다.find(x) 함수로 x의 루트를 찾고 경로 압축을 수행해 트리 깊이를 줄인다.union(a, b) 함수는 두 집합을 하나로 합친다.find(a) == find(b)이면 같은 집합에 속해 있다는 의미로 YES 출력구현import sysinput = s..