전체 글
[OS] 컴퓨터는 현재시간을 어떻게 알까?
[OS] 컴퓨터는 현재시간을 어떻게 알까?
2024.07.31컴퓨터의 시계를 보면 꽤 정확하게 시간을 측정하는 시계를 볼 수 있다.그런데 컴퓨터는 이 시간을 어떻게 매번 정확하게 측정할 수 있는걸까? 이를 알기 전에 고등학교 물리 시간으로 돌아가 시간 측정 방법에 대해서 먼저 알아보자. 협정 시계시(UTC)협정 시계시는 국제적인 표준 시간의 기준으로 쓰이는 시각으로, 원자시계와 윤초 보정을 기반으로 표준화 한 시각이다.이 시각은 학교에서 배웠듯이 영국 그리니치 천문대가 기준(UTC+0)이다. 대한민국의 시간은 UTC+9로, 영국이 12시라면 한국은 21시가 된다. 원자시계협정 시계시는 위에서 말했듯, 원자시계를 통해 측정한다.원자시계는 세슘 원자를 이용해 정의하며, 세슘 원자가 절대영도 조건에서 방출하는 특정한 파장의 빛이 9,192,631,770번 진동하는 시..
[Docker] docker의 용량을 차지하는 overlay2는 무엇일까?
[Docker] docker의 용량을 차지하는 overlay2는 무엇일까?
2024.07.28이전에 overlay2에 용량이 가득 차 배포를 실패하는 상황이 발생하여 해결한 적이 있었다. 그런데 이 overlay2라는게 과연 무엇일까? OverlayFS먼저 overlay2를 알기 위해선 OverlayFS를 알 필요가 있다.OverlayFS는 유니온 마운트 파일 시스템으로, 이를 통해 사용자는 한 파일 시스템을 다른 파일 시스템 위에 오버레이(overlay)할 수 있다. (이외에도 AUFS, Devicemapper가 있다)OverlayFS는 overlay 또는 overlay2 중 하나를 사용한다. overlay는 커널 3.18 버전부터 기본적으로 내장되어 있으며, overlay2는 4.0부터 지원된다.Docker를 설치하면 자동으로 사용되도록 설정되며 최신 버전의 Docker는 기본적으로 Ove..
[Docker] 디스크 용량으로 인한 배포 실패 상황
[Docker] 디스크 용량으로 인한 배포 실패 상황
2024.07.27CodeDeploy를 통해 개발 서버에 배포 하던 중 배포가 실패된 상황이 발생했다. No space left on device맞다. 서버에 남은 공간이 없다는 말이다.비용적인 문제로 인해 개발서버를 t2.micro에 띄워 배포하고 있었는데, 프리티어의 경우 storage volumn이 최대 30GB까지만 허용되기 때문에 30GB를 다 사용했다는 말이었다. 그런데, 여태 코드 몇 줄 추가 했다고 30GB가 전부 채워질리는 없었다. 그럼 먼저 용량을 한번 확인해보자.$ sudo df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 4.0M 0 4.0M 0% /devtmpfs 475M 0 475M ..
[Java] System.out.println의 사용을 지양하자
[Java] System.out.println의 사용을 지양하자
2024.06.21개발자는 프로젝트를 진행하면서 요청을 기록 및 관찰하기 위해 logging을 한다. 아마 초반에 토이 프로젝트를 하다보면 요청이 잘 갔는지 확인해보기 위해 System.out.println을 사용하는 경우가 많을 것이다. 이번에 말할 주제는 제목과 같이 System.out.println의 사용을 지양해야 한다는 것이다. 왜 그래야하는지 한 번 살펴보자. logging framework만약 자바/스프링부트 기반의 프로젝트를 진행해봤다면, 스프링부트 프로젝트 생성 시 로깅 프레임워크들(log4j2, logback 등)이 추가되는 것을 볼 수 있다. 이 로깅 프레임워크들을 이용해서 다음과 같이 logging을 할 수 있다.class App { public static void main(String[] ..
[Java] 위도/경도 값에 BigDecimal or double?
[Java] 위도/경도 값에 BigDecimal or double?
2024.04.30위/경도 값을 저장할 때 BigDecimal을 사용하는 것을 본 적이 있다.하지만 BigDecimal을 사용하는 것이 좋은걸까? double을 사용하는 건 좋지 않은 걸까?BigDecimal과 double에 어떤 특징이 있는지, 위경도에 어느 자료형이 적합할지 한 번 살펴보자. double의 부동소수점 문제오늘날 컴퓨터는 대부분 IEEE 754 부동 소수점 방식을 사용하기 때문에 Java에서 double을 사용해 소수를 표현한다면 소수점 약 15자리부터 오차가 발생할 수 있다. 오차를 해결하려면?Java에는 BigDecimal이라는 자료형으로 부동소수점 방식으로 인해 생기는 오차를 막을 수 있다. https://docs.oracle.com/javase/8/docs/api/java/math/BigDec..
[Java] utility class는 무엇으로 구현하는 것이 좋을까?
[Java] utility class는 무엇으로 구현하는 것이 좋을까?
2024.04.15Utility class? utility class(유틸리티 클래스)는 애플리케이션 전체에서 활용할 수 있는 클래스로 정적 메소드(static method)를 통해 구현한다. Interface의 static method 사용? Java 8 이후로, interface에 static method를 사용할 수 있게 되었다. 만약 static method를 사용하여 유틸리티 클래스를 구현한다면 다음과 같이 작성할 수 있다. public interface CalculatorUtils { static int getSumResult(int a, int b) { return a + b; } } 인터페이스로 구현하니 간결하고 실용적이게 보인다. 하지만 인터페이스로 유틸리티 클래스를 구현하는 데에는 몇 가지 단점이 있다...
[Java] 제네릭(Generic)
[Java] 제네릭(Generic)
2024.03.12제네릭(Generic)? 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 객채 타입을 컴파일 타임에 체크하기 때문에 잘못된 형변환으로 인해 오류가 발생하는 상황을 막아주고, 형변환의 번거로움이 줄어들 수 있다. 제네릭 클래스 제네릭은 클래스와 메서드에 사용할 수 있는데, 먼저 제네릭 클래스는 클래스 명옆에 와 같이 타입 변수를 붙여 사용한다. class Box { private T item; public void setItem(T item) { this.item = item; } public T getItem() { return this.item; } } 여기서 T는 임의로 지정한 변수명으로 T가 아닌 다른 명칭으로 지정할 수 있다. 위 코드를 ..
[Java] Mockito
[Java] Mockito
2023.07.31Mockito? Mockito는 실제 객체를 모방한 Mock 객체를 쉽게 생성하여 단위 테스트를 진행할 수 있는 오픈소스 프레임워크이다. 아마 프로젝트에서 테스트 코드를 짜본 경험이 있다면 Mockito를 한 번쯤 써봤을 것이다. Mock 프레임워크는 Mockito이외에도 EasyMock, JMock 등이 있다. 그럼 Mockito를 왜 사용하는 걸까? 먼저 다음 예시 코드를 보며 알아보자. @Service public class PostService { private PostRepository postRepository; public PostService(PostRepository postRepository) { this.postRepository = postRepository; } public Pos..
[Java] hashCode()
[Java] hashCode()
2023.07.02hashCode() hashCode()는 객체, 즉 Object에 정의되어 있다. hashCode()는 객체의 주소 값을 변환하여 생성한 고유한 정수 값이다. 만약 같은 객체를 참조하고 있다면 hashCode 값은 동일하게 나온다. 예시로, 다음과 같이 작성하여 출력해보면 정수값을 확인해볼 수 있다. class Person { } public class Test { public static void main(String[] args) { System.out.println(new Person().hashCode()); // ex) 798154996 } } Java의 모든 객체의 최상위 부모는 Object이므로 hashCode() 메서드를 Override하여 재정의할 수 있다. equals()와 hashCo..
[Baekjoon] 16985: Maaaaaaaaaze
[Baekjoon] 16985: Maaaaaaaaaze
2023.06.14문제 아... 너무 길다 다음 링크를 통해 자세한 내용을 확인해보자. [Baekjoon] 16985: 매애애애애애애애애즈 16985번: Maaaaaaaaaze 첫째 줄부터 25줄에 걸쳐 판이 주어진다. 각 판은 5줄에 걸쳐 주어지며 각 줄에는 5개의 숫자가 빈칸을 사이에 두고 주어진다. 0은 참가자가 들어갈 수 없는 칸, 1은 참가자가 들어갈 수 있는 칸을 www.acmicpc.net 3차원 미로 찾기 문제이다. 여기서 조건은 다음과 같다. 판은 회전할 수 있다. 판은 순서가 바뀔 수 있다. 꼭짓점이면서 1인 곳으로만 들어갈 수 있다. 정반대 꼭짓점으로만 나올 수 있다. 위를 고려하면서 풀면 그냥 풀린다. 스터디원 모두 막판 원큐 세레모니를 보여주고 있다. 풀이 내 풀이 import java.io.Bu..
[Baekjoon] 15732: 도토리 숨기기
[Baekjoon] 15732: 도토리 숨기기
2023.06.14문제 욕심 그득한 다람쥐가 도토리를 나름 머리써서 숨기는 걸 찾는 문제이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class Q15732 { static class Dotori { private int start; private int end; private int gap; public Dotori(String start, String end, String gap) { this.start = Integer.parseInt(start); this.end = Int..
[Baekjoon] 16947: 서울 지하철 2호선
[Baekjoon] 16947: 서울 지하철 2호선
2023.06.14문제 순환선의 특정 역과 순환선이 아닌 역 사이의 거리를 구하는 문제이다. 예를 들면 까치산은 순환선과 거리가 4, 도림천은 거리가 1이다. 풀이 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Q16947 { private static int n; private static List graph; private static boolean[] visited; private static int[] cycle; private static boolean[] check; private static int[] distances; p..