본문 바로가기

전체 글112

[Tech 면접] 시스템을 설계해보라는 질문을 받는다면? 개요 특정 시스템의 요구사항을 명세하고, 해당 시스템을 지원자에게 설계해보라고 하는 질문은 지원자의 커뮤니케이션 능력과 기본적인 CS지식의 깊이를 동시에 확인할 수 있는 질문입니다. 큰 종이 한 장을 주며 시스템의 전체적인 아키텍처를 그리라고 하는 질문을 받았을 때 꽤나 난감하기도 합니다. 시스템 설계에 대한 질문에서 중요한 포인트는 두 가지입니다. 지원자의 커뮤니케이션 능력 전체적인 아키텍처 지식 물론 더 중요한 것을 꼽으라면 지원자의 커뮤니케이션 능력이 더 중요하다고 볼 수 있겠네요. 지원자는 요구사항에 대해 끊임없이 질문자와 소통하며 시스템을 하나하나 구성해야 합니다. 주어진 요구사항은 설계하기에 충분하지 않을 가능성이 높습니다. 나머지 확실하지 않은 부분은 질문자와 계속해서 소통하며 채워 나아가야.. 2020. 6. 12.
[Java] Multi Thread환경에서 동시성 제어를 하는 방법 스레드(Thread)란 무엇일까요? 스레드가 무엇인지 설명하기 위해서는 그 상위 단위인 프로세스에 대해 이해할 필요가 있습니다. 일반적으로 특정 작업을 수행하는 소프트웨어를 우린 프로그램이라고 부릅니다. 이러한 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당받으면 이를 프로세스라고 부릅니다. 스레드는 이 프로세스를 구성하는 하나의 단위입니다. 하나의 프로세스에는 여러 스레드가 작동하고 있을 수 있겠네요. 스레드는 작업의 한 단위입니다. 프로세스는 독자적인 메모리를 할당받아서 서로 다른 프로세스끼리는 일반적으로 서로의 메모리 영역을 침범하지 못합니다. 하지만 프로세스 내부에 있는 여러 스레드들은 서로 같은 프로세스 내부에 존재하고 있기 때문에 같은 자원을 공유하여 사용할 수 있습니다. 같은.. 2020. 6. 6.
Kubernetes(쿠버네티스)를 소개합니다 들어가며 이 글은 쿠버네티스가 무엇이고, 뭐가 좋은지 소개하는 글입니다. 자세한 내부 구조나 구현 방법보다는 쿠버네티스에 입문하는 분들을 대상으로 하고 있습니다. 도커와 컨테이너가 무엇인지 안다는 가정 하에 소개를 진행합니다. 컨테이너가 무엇이지? 도커가 뭐야?라는 생각이 드신다면 제 이전 소개글인 Docker를 소개합니다 를 참고해주세요. 쿠버네티스의 가장 큰 진입장벽은 용어입니다. Pod(파드), Service(서비스), Ingress(인그레스)등 처음 보는 생소한 단어가 튀어나오니 당황하게 되고 어떤 역할을 하는지도 파악하기가 참 어려웠습니다. 이번 포스팅에서는 이러한 용어들을 정리해서 쿠버네티스와 관련된 글을 읽을 수 있는 레벨까지 소개해드리는게 목표입니다. 쿠버네티스가 뭘까요? 도커와 컨테이너가.. 2020. 5. 31.
Docker를 소개합니다 들어가며해당 글은 실전 Docker 사용법보다는, Docker가 무엇인지 소개하는 것을 목표로 하고 있습니다. 자세한 Docker 명령어와 사용법을 알고 싶다면 Docker Doc를 참고해주세요! Docker 개념 잡기Docker란 무엇일까요? 개발자라면 꼭 알아야 한다고 하는 이야기도 들리고 도커가 뭔지 어떻게 감을 잡을지 모르겠다고 하는 도커 입문자에게는 Docker의 개념을 잡기가 참 어렵습니다. 도커에 대해 검색하고 공부할 때 컨테이너, 패키징, 이미지 등등 낯선 단어의 등장에 머리부터 아파지기 쉽습니다. 이 글은 Docker가 뭔지 감을 못 잡고 계신 분들, "그래서 Docker 왜 써야 하는데?"라는 의문을 가지고 계신 분들을 대상으로 하고 있습니다. 저는 새로운 개념을 공부할 때는 우선 공식.. 2020. 5. 23.
TDD를 소개합니다 일반적인 개발 프로세스 지금까지 만들던 기능 개발은 기능이 어떤 것인지 추출하고, 이를 우선 구현부터 했습니다. 테스트가 필요하다면 테스트 코드는 작성했고 테스트가 통과하지 못한다면 다시 코드를 수정하거나 테스트 코드를 수정하기도 했었죠. 문제는 바로 '우선 돌아가는 코드를 작성' 하는 부분이었습니다. 분리해야 할 기능들이 한 메서드에 모여있고 강한 결합도를 가지며 점점 테스트하기 힘든 코드가 되었던 것이죠. 결과적으로 테스트 코드 작성이 어려운 수준까지 코드 품질이 떨어졌고 테스트 코드 작성보다는 직접 서버를 띄운 후 하나하나 테스트를 해야 했습니다. 이렇게 개발을 하던 도중, 인프런에서 강의하시는 백기선님의 개발 스타일을 보고 꽤 감명받은 기억이 납니다. 강의에서는 원하는 기능에 대해 테스트 코드를 .. 2020. 5. 15.
동기/비동기와 블로킹/논블로킹 동기, 비동기 그리고 블로킹, 논블로킹은 프로그램을 개발할 때 중요한 개념 중 하나입니다. 기초 프로그래밍을 배우고 응용 파트인 병렬 프로그래밍을 익힐 때 나오는 개념이고 익히기 쉽지 않은 개념이기도 합니다. 동기와 비동기 개념과 블로킹과 논블로킹은 혼용하여 사용하는 경우가 있지만 엄연히 서로 다른 개념입니다. 흔히 '동기' == '블로킹', '비동기' == '논블로킹'으로 헷갈리기도 합니다. 하지만 실제로는 두 개념은 서로 크게 연관관계가 없는 별개의 개념입니다. 동기/비동기는 작업을 수행하는 주체가 두 개 이상이어야 합니다. 이 때 작업의 시간(시작, 종료 등)을 서로 맞춘다면 이를 동기라고 부르고, 서로 작업의 시간이 관계없다면 이를 비동기라고 부릅니다. 반면 블로킹/논블로킹은 작업의 대상이 2개 .. 2020. 5. 8.
Spring boot에서 Redis Cache 사용하기 모든 소스코드는 아래 github에서 더 편하게 보실 수 있습니다. https://github.com/yyy9942/redis-cache-exam yyy9942/redis-cache-exam Contribute to yyy9942/redis-cache-exam development by creating an account on GitHub. github.com 설정 시작하기 pom.xml에 spring-boot-starter-web, spring-boot-starter-data-redis를 추가해주세요. org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-web applicat.. 2020. 5. 4.
브라우저에 URL을 입력했을 때 발생하는 일들 지금부터 제 인터넷 브라우저에 www.daum.net을 입력해보고 어떤 일이 일어나는지 과정을 알아보겠습니다. 웹 통신의 큰 흐름에 대해 간략하게 알아보겠습니다. 1. 브라우저의 URL 파싱 URL을 입력받은 브라우저는 일단 이 URL의 구조를 해석합니다. 어떤 프로토콜로 어느 도메인으로 어떤 포트로 보낼지 해석하게 되는 것이죠. 기본적으로 URL의 구조는 아래와 같습니다. - 어떤 프로토콜을 통해 해당 URL에 요청할 것인지 - 어떤 URL로 요청할 것인지 - 어떤 포트로 요청할 것인지 브라우저에서 각각 프로토콜, URL, 포트를 해석하여 분석합니다. "잠시만요, 저는 프로토콜과 포트를 입력한 적이 없어요" 명시적으로 포트를 선언하지 않았다면 브라우저에서는 설정된 기본값을 이용해 요청하게 됩니다. HT.. 2020. 4. 25.
Git 기본 명령어 init, add, status 정리 git init git init [-q | --quiet] [--bare] [--template=] [--separate-git-dir ] [--shared[=]] [directory] -q, --quiet 오류, 경고 메시지만 출력합니다. --bare 워킹 디렉토리가 없는 bare 저장소를 생성합니다. --template= 템플릿을 사용하여 저장소를 제작합니다. --separate-git-dir .git 디렉터리가 저장될 위치를 변경합니다. --shared[=] 여러 사용자가 해당 repository를 공유할 수 있도록 합니다. permissions에는 다음과 같은 옵션 사용이 가능합니다. (false|true|umask|group|all|world|everybody|0xxx) 해당 디렉터리에 git .. 2020. 4. 21.