매 년 회고 포스팅을 작성할때면 연말이 되었음을 실감하곤 합니다. 2024년은 다양한 경험들을 바탕으로 인간적인 성숙함을 많이 기를 수 있었던 한 해 였던 것 같습니다. 올 한 해를 돌이켜보면서 2025년 역시 어떻게 헤쳐나갈지 고민해보도록 하겠습니다. 1. 2024년 회고[ 2024년의 학습과 자기개발 ]2024년에는 다음과 같은 학습을 진행했다.1월: 자바 웹 프로그래밍 next step & 김영한의 실전 자바 기본편 & 책은 도끼다2월: 코틀린 쿡북 & 백명석의 클린 코더스 & 행복의 기원3월: 코틀린 인 액션4월: 이펙티브 코틀린5월: 구글 엔지니어는 이렇게 일한다 & 1만 시간의 재발견6월: 좋은 코드, 나쁜 코드 & 조영호님 DDD의 사실과 오해7월: 오브젝트8월: 프로그래머, 열정을 말하다..
아래 포스팅 내용의 대부분은 당근 마켓 테크 블로그 포스팅을 참고하여 작성되었습니다. 1. 실무 사례로 살펴보는 VARCHAR와 TEXT의 차이[ 문제의 상황 공유 ]개발자가 다음과 같은 DDL 요청을 DBA에게 부탁한 상황이다.alter table allowancemodify tx_id varchar(1000) not null comment '거래 내역 ID'; 해당 요청을 보고 개발자와 DBA가 나눈 대화는 다음과 같다.DBA: tx_id가 1000자나 되나요? 1000자면 한글 기준으로 3000byte에 해당하고, 2KB가 넘는 사이즈라서요.개발자: 요러요러한 비즈니스 구현 사항으로 인해 tx_id는 1000자가 될 수 있습니다.DBA: 그렇군요, 이해했습니다. 혹시 숫자와 문자 데이터를 분리..
1. 값 객체(Value Object)와 불변성(Immutablity)[ 값 객체(Value Object) 와 참조 객체(reference object) ]프로그래밍을 하다 보면, 사물을 복합적으로 표현하는 것이 유용한 때가 있다. 예를 들어, 좌표는 x 값과 y값으로 표현될 수 있고, 금액은 숫자와 통화로 구성될 수 있다.class Point( val x: Int, val y: Int,) 이때 두 객체가 동일한지를 판단해야 하는 경우가 있는데, 예를 들어 두 Point 객체가 모두 (2, 3)이라는 좌표를 나타낸다면, 이를 동일하게 취급하는 것이 합리적일 수 있다.val p1 = Point(2, 3);val p2 = Point(2, 3);check(p1 == p2) 이렇듯 속성 값에 의해..
1. 소프트웨어 엔지니어링이란?구글에서는 이따금 “소프트웨어 엔지니어링은 흐르는 시간 위에서 순간순간의 프로그래밍을 모두 합산한 것이다”라고 말하곤 합니다. 소프트웨어 엔지니어링에서 프로그래밍이 큰 비중을 차지하는 건 틀림없지만 프로그래밍은 결국 새로운 소프트웨어를 제작하는 수단입니다. 여러분이 이 차이를 받아들인다면 자연스럽게 프로그래밍 작업(개발, development)과 소프트웨어 엔지니어링 작업(개발, development + 수정, modification + 유지보수, maintenance)의 차이도 궁금할 것입니다. 시간이라는 요소가 더해지면서 프로그래밍에는 중요한 차원이 하나 늘어서 더 입체적으로 바뀝니다. 정육면체는 정사각형이 아니고 거리는 속도가 아니듯, 소프트웨어 엔지니어링은 프로그래밍..
1. 자바 스레드의 여러 가지 상태들[ 여러 종류의 스레드 상태들(Thread State) ]자바 공식 문서(자바 23 기준)에 따르면 다음과 같은 자바 스레드 상태가 존재한다.NEW스레드가 생성되었으나 아직 시작되지 않은 상태아직 OS 스레드는 아직 존재하지 않으며, Thread.start()를 호출해야 OS가 실제로 스레드를 생성하도록 신호를 보냄RUNNABLE스레드가 실행 가능하여 운영 체제의 자원(예: 프로세서)을 기다리고 있거나 JVM 내에서 실행중인 상태운영체제의 스케줄러가 각 스레드에 CPU 시간을 할당하여 실행하므로, Runnable 상태의 스레드는 스케줄러의 실행 대기열에 포함되어 있다가 차례로 CPU에서 실행됨BLOCKED스레드가 모니터 락(동기화 락)을 기다리며 블록된 상태이 상태의 ..