전체 글

초보 개발자의 공부 블로그입니다.
·DevOps/Docker
도커란 컨테이너를 관리하기 위해 만들어진 소프트웨어이다. 컨테이너는 큰 서버를 효율적으로 나눠서 사용하기 위한 가상화라는 기술이다. 애플리케이션 서버컨테이너를 학습하기 이전에 서버의 개념을 먼저 정리할 필요가 있다. 서버는 하드웨어와 그 위에서 실행 중인 소프트웨어를 포함하는 개념이다. 경우에 따라 하드웨어만을 지칭하거나, 소프트웨어만을 의미하기도 한다. 그렇기 때문에 문맥에 따라 서버가 가리키는 대상을 파악해야 한다."서버의 전원이 꺼졌습니다" → 하드웨어 서버"서버 설치 파일을 다운로드하였습니다" → 소프트웨어 서버일반적으로, 서버는 하드웨어에서 실행 중인 소프트웨어를 통칭하는 경우가 많다. 서버와 클라이언트의 관계서버(Server)라는 단어는 `Serve(제공하다)`라는 접두어에서 유래했다. 이는 ..
·DevOps/Docker
도커는 왜 사용할까?현업에선 도커를 필수라고 생각할 정도로 사실상 안 쓰는 기업이 없다. 도커를 쓰는 이유에는 여러 가지 장점이 있지만, 그중에서 핵심 장점 딱 1가지만 기억하면 된다. 이식성 : 특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행할 수 있는 특성 예시로 확인해보자.친구는 컴퓨터에 MySQL을 아무 에러 없이 설치했다. 하지만 내 컴퓨터에서는 같은 방식으로 설치해도 에러가 발생한다. 버전 차이, 운영체제 차이, 다른 프로그램과의 충돌 등 다양한 원인이 존재한다. 이런 문제는 설치 과정이 복잡할수록 더 번거롭고 귀찮게 느껴진다. 이러한 환경 차이를 깔끔하게 해결해 주는 툴이 `도커(Docker)`이다. 도커를 사용하면 어떤 컴퓨터에서도 동일한 환경을 빠르게 구축하고 에러 없이 MySQL..
·Trouble Shooting
발생컨트롤러 테스트를 위해 `@WebMvcTest` 선언 후 테스트 코드를 실행했을 때 발생하였다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:377) at o..
·Trouble Shooting
.gitignore가 정상적으로 작동하지 않는 이유와 해결 방법.gitignore는 Git에서 특정 파일이나 디렉터리를 추적하지 않도록 설정하는 중요한 도구입니다. 그러나 .gitignore가 제대로 작동하지 않을 때는 다음과 같은 이유가 있을 수 있습니다. Git 캐시를 초기화이런 경우는 대부분 프로젝트를 신규로 만들거나 할때 발생되는데 Git 캐시를 초기화해주면 정상적으로 작동하는 것을 알수 있다. 해결 방법1. 모든 추적된 파일을 캐시를 초기화한다.git rm -r --cached . 이 명령은 모든 파일을 Git의 캐시에서 제거하지만, 실제 파일은 로컬에 남아 있습니다. 2. .gitignore를 적용한 후 변경 사항 추가 git add . 3. 변경 사항 커밋git commit -m "Reapp..
프로세스 간 통신(IPC)프로세스는 기본적으로 자원을 공유하진 않는다고 스레드 학습 때 이야기했었다. 하지만 프로세스 간에서도 자원을 공유받을 수 있는 방법이 존재한다. 이를 프로세스 간 통신(이하 IPC)라고 부른다.  프로세스 간 통신이 이루어지는 방식은 크게 2가지 유형으로 나뉜다. 공유 메모리 : 주고받는 프로세스가 공통적으로 사용할 메모리 영역을 두는 방식 메시지 전달 : 프로세스 간에 주고받을 데이터를 메시지의 형태로 주고받는 방식위의 그림에서 `(a)`가 메시지 전달 모델, `(b)`가 공유 메모리 모델을 나타낸다. 1. 공유메모리`공유메모리(shared memory)`는 프로세스 간에 공유하는 메모리 영역을 토대로 데이터를 주고받는 통신 방식이다. 프로세스의 경우 기본적으로 자원을 공유하지..
https://www.acmicpc.net/problem/2108Problem 💻문제수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.산술평균 : N개의 수들의 합을 N으로 나눈 값중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값최빈값 : N개의 수들 중 가장 많이 나타나는 값범위 : N개의 수들 중 최댓값과 최솟값의 차이N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을..
https://www.acmicpc.net/problem/1012Problem 💻문제차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추 흰 지렁이를 구입하기로 결심한다. 이 지렁이는 배추 근처에 서식하며 해충을 잡아먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추 흰 지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해 있는 것이다. 한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어 놓았다. 배추들..
https://www.acmicpc.net/problem/1697Problem 💻문제수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력수빈이가 동생을 찾는 가장 빠른 시간을 출..
스레드스레드(thread)란 프로세스를 구성하는 실행의 단위이다. 그리고 하나의 프로세스는 여러 개의 스레드를 가질 수 있다. 스레드라는 개념은 하드웨어, 소프트웨어를 망라하고 다양한 곳에서 사용된다. 여기서 사용될 스레드는 소프트웨어 관점에 스레드이다.  프로세스와 스레드앞서 학습했듯이 프로레스는 한 번에 하나의 일을 처리한다고 했다. 웹 브라우저, 게임, 워드 프로세서 프로세서가 있을 때 각각 하나의 부분(기능)만 실행된다면 해당 프로세스는 `실행의 흐름 단위가 하나`라고 할 수 있다. 그러한 프로세스를 `단일 스레드 프로세스`라고 칭하게 된다.  하지만 현재의 프로세스를 생각해보면 각각의 프로세스들이 여러 개의 기능들이 구현되어 있는 경우가 많다. 그렇기 때문에 하나의 프로세스에서 한 번에 여러 일..
이진탐색(Binary Search)이진탐색이란 `정렬된 배열에서 특정 값을 효율적으로 찾는 알고리즘`이다. 탐색 범위를 절반씩 줄이며 찾는 값이 포함된 범위를 좁혀간다. 선형탐색보다 빠른 속도를 보장하지만 배열이 정렬되어 있어야지만 한다. 1. 이진탐색 과정이진 탐색은 중간값이 타겟값보다 크면 왼쪽, 작으면 오른쪽을 탐색한다. 1. 배열의 **중간값(mid)**을 기준으로 타겟값과 비교한다.2. 중간값이 타겟값보다 크면, 탐색 범위를 왼쪽 절반으로 줄인다.3. 중간값이 타겟값보다 작으면, 탐색 범위를 오른쪽 절반으로 줄인다.4. 이 과정을 반복하며 탐색 범위를 좁혀 나간다.  이진 탐색이 선형 탐색의 차이점이진 탐색에 대한 코딩테스트 문제의 예제를 보면 선형 탐색이 더 나아보이는 예제들이 있다. 그래서 ..
JH_DEV77
JH’s 개발블로그