개발 지식(66)
-
(운영체제) 부동 소수점과 이에 따른 문제점(vs 고정 소수점)
오늘은 면접에서 질문 받은 것 중에서 기억에 남는 부동 소수점에 관련된 문제에 대해서 얘기해보려 한다. (사실 카테고리가 운영체제가 맞는지도 의문이다.) 뭐든지 그 세부사항을 알려면 그 단어의 의미를 먼저 파악해야 한다. '부동 소수점'은 무엇을 말하는 것일까? 먼저 '부동'이 뭔지 살펴보자. 🧐 안 움직이는 건가요?한자로는 浮動(Not 不動) 이다. 그러니까 떠다니며 움직인다는 뜻이다. (반대어로는 고정 소수점이 있다.) 안 움직이는 것이 아니다. 왜 '뜰 부'를 써서 표현 했을까?(영어로는 float) 당연하게도 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수이기 때문이다. 소수점의 위치를 고정하지 않는다! 이것은 또 무슨 말인가? 단어가 이해가 가지 않을때는 반대어를 생각하면 좋다. ..
2022.07.21 -
(Java) Interface와 Abstract class의 차이(인터페이스와 추상클래스)
백엔드 개발자이고 면접을 준비하고 있거나, 면접을 봐본 사람이라면 이 질문에 대해서 고민 해봤을 것이다. 언뜻 보면 둘이 비슷하게 생겼다. 외부적으로는 선언된 방식이 interface냐 abstract class냐의 차이가 있지만 말이다. 그럼 각각에 대해서 알아보도록 하자. 🧐Interface 먼저 인터페이스 코드를 보자. public interface Dog { void bark(); void walk(); } Dog라는 interface에는 두가지 메서드가 있다. 하나는 bark(), 하나는 walk() 각각의 메서드는 추상 메서드인가? 앞에 abstract가 없는데도 추상 메서드인가? 그렇다. interface가 가지고 있는 메서드는 모두 추상 메서드이다. 그럼 정말 모두 추상 메서드일까? 다음의..
2022.07.16 -
(Java) JVM 구조와 이해
오늘은 JVM의 구조에 대해서 적어보려 한다. 이전에 간략하게나마 JVM 구조에 대해 적은 것이 있으니 참고하는 것도 좋을거 같다. JAVA - JVM에 대해 알아보자 -1 Java에 대해 알고 있는가? 자바는 썬 마이크로시스템즈의 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.(순수 객체 지향 언어X) 91년 그린 프로젝트라는 이름으 mirrorofcode.tistory.com 오늘은 이런 원론적인 얘기를 하려는 것은 아니고 실제로 JVM이 어떻게 구성되어 있는지를 알아보려고한다. 윗 글을 읽기 귀찮은 분들 위해 간략하게 JVM이 무엇인지에 대해 설명하면 운영체제 위에서 동작하는 자바를 위한 운영체제라고 생각하면 편할거 같다. 일반적으로 계층이 Program - OS - HW ..
2022.07.16 -
(Database) MySQL서버 구조와 스레딩 구조
MySQL을 사용할 때, MySQL은 어떤 방식으로 동작하는지 알고 싶지 않은가? MySQL은 다른 DBMS에 비해서 구조가 상당히 독특하다. Transaction만 봐도 그렇다. Postgresql의 경우, transaction을 적용하고 싶으면, begin과 commit 을 명시해줘야 한다. 하지만 MySQL의 InnoDB의 경우 Transaction을 기본으로 지원하므로, 훨씬 편리하게 사용이 가능하다. 그럼 MySQL 엔진 아키텍처에 대해 알아보자. 🧐MySQL 전체 구조 MySQL은 일반 상용 RDBMS와 같이 대부분의 프로그래밍 언어로 부터 접근 방법을 모두 지원한다. (개꿀) MySQL서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다. MySQL 엔진 MySQL엔진은 커넥션 핸..
2022.07.09 -
(Database) 트랜잭션(ACID)과 무결성
구글에 트랙잭션을 검색하면 가장 많이 나오는 말이 있다. "DB의 상태를 변화시키기 수행하는 단위" 그런데 이것 만으로는 트랜잭션에 관해 전혀 감이 오지 않는다. (나만 그런가?) 나는 이 문장을 접했을 때 드는 생각은 아 DB에 접근하면 다 트랜잭션이구나 트랙잭션 자체의 개념에 대해 이해하지 못하면 스프링 서비스 레이어에 붙이는 @Transactional이나 MySQL에서의 잠금, 동시성에 대한 이해를 할 수 없다고 생각한다. 🧐What is Transaction? 트랙잭션을 이해하는데 가장 도움되는 말은 이것이라고 생각한다. 트랙잭션은 작업의 완전성을 보장해 주는 것이다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생..
2022.07.09 -
(알고리즘) Big-O, 시간복잡도와 공간 복잡도
알고리즘의 시간과 공간을 측정할 때는 시간복잡도와 공간 복잡도라는 말을 많이 쓴다. 그런데 시간 복잡도는 무엇이며, 공간 복잡도는 무엇일까? 시간 복잡도는 '어떤 일을 수행할 때, 그 일이 완료되기까지 걸리는 시간이 얼마나 복잡한가' 라고 생각하면 편하다. 공간 복잡도는 '어떤 일을 수행할 때, 그 일이 완료되기까지 필요한 공간(메모리)가 얼마다 되는가' 라고 생각하면 된다. 복잡도의 개념에 대해 알았으면, 이를 표기할 방법이 필요하다. 얼마나 복잡한지를 어떻게 표현할 것인가? (하늘만큼 땅만큼 복잡해요) 이때 Big-O의 개념이 등장한다. 🧐Big-O만 있는게 아니다?많은 사람들이 시간 복잡도라고 하면 Big-O를 떠올릴 것이다. 하지만 시간복잡도와 공간복잡도를 나타내는 방법에서는 Big-O만 ..
2022.07.08