
프롤로그: 출항하지 못한 배를 위한 변명어떤 프로젝트는 단순한 과업이 아니라, 하나의 세계를 창조하는 일과 같다. 백지 위에 도시를 계획하고, 강줄기의 방향을 정하며, 보이지 않는 곳에 전기와 수도관을 묻는다. 개발자에게 코드란 그 세계를 지탱하는 물리 법칙이자, 사용자들이 거닐게 될 거리의 이름이다. 내가 몸담았던 'AI 디지털 교과서' 프로젝트는 그런 의미에서 한 국가의 미래 세대를 위한 새로운 대륙을 발견하는 일과 다르지 않았다. 낡은 칠판과 분필 가루의 시대를 넘어, 모든 학생이 자신만의 속도와 지도를 가지고 지식의 바다를 항해하게 하자는 원대한 비전. 그 비전의 무게는 개발자의 어깨에 묵직한 사명감으로 내려앉았다. 그 거대한 항해의 시작점에서 나는, 솔직히 말해, 외딴섬에 가까웠다. 이전 팀에서..

서론: 소크라테스적 거래모든 이야기가 항상 거창한 계기에서 시작되는 것은 아니다. 때로는 인류의 역사만큼이나 오래되고 사소한, 그러나 지극히 절박한 결핍이 이야기의 물꼬를 튼다. 21세기를 사는 한 평범한 백수였던 나의 경우가 바로 그랬다. 오랜 직장 생활에 마침표를 찍고 만끽하던 자유의 시간은, 통장 잔고가 줄어드는 속도와 정확히 반비례하며 그 빛을 잃어가고 있었다. 자유라는 고상한 가치는 매달 빠져나가는 월세와 보험료 앞에서 속수무책이었고, 그중에서도 가장 먼저 타격을 입은 것은 인류의 가장 오래된 과업 중 하나인 구애 활동, 즉 데이트 비용이었다. ‘어떻게 하면 최소한의 비용으로 최대한 그럴듯한 주말을 보낼 수 있을까?’ 이 숭고하고도 처절한 질문에 대한 답을 찾아 인터넷을 헤매던 내 눈에, 운명처..

서론: 서버실의 유령소프트웨어 시스템의 광활한 우주에는 명백한 버그와는 다른 종류의 존재들이 떠다닌다. 이들은 시스템을 무너뜨리는 소행성 충돌(System Crash)을 일으키지도, 시끄러운 경고 로그(Warning Log)라는 비명을 지르지도 않는다. 그저 항성 간의 어두운 빈 공간처럼, 조용히 시스템의 에너지를 빨아들이고 효율이라는 행성의 궤도를 미세하게 뒤트는 그림자 같은 존재들이다. 나는 이런 문제들을 '유령'이라 부르곤 한다. 거대한 신규 프로젝트라는 우주 탐사를 마치고, 안정적인 시스템 운영과 신입 교육이라는 비교적 평온한 행성 기지에서의 일상에 접어들었을 때, 우리 시스템의 보이지 않는 공간에도 그런 유령 하나가 출몰하기 시작했다. 매일 아침, 어김없이 특정 시간에 시작되는 배치(Batch)..

서론: 고장 난 나침반이 가리키는 곳성공적인 비즈니스 시스템은 종종 잘 계획된 도시와 비견되곤 한다. 초창기에는 명확한 청사진 아래 효율적으로 성장하지만, 세월이 흐르며 증축과 개축이 반복되고 초기 설계 사상은 점차 희미해진다. 누구도 모르는 지름길과 기록에 없는 골목이 생겨나고, 도시의 중요한 조례들은 이제는 잊힌 방언으로 쓰인 고문서처럼 변해간다. 결국 도시는 거대한 미궁, 즉 누구도 전체 구조를 파악하기 힘든 레거시 시스템이 되고 만다. 이러한 시스템은 비즈니스 확장을 저해하고, 혁신을 늦추며, 고객의 불만을 먹고 자라는 심각한 제약으로 작용한다. 내가 몸담았던 회사는 소프트웨어를 팔았지만, 그 방식이 조금 독특했다. 마치 일류 셰프가 자신의 요리뿐 아니라 그 요리를 담는 특별 제작 그릇까지 함께 ..

뜻밖의 지명: 위기라는 바다에 던져진 구명조끼전 세계가 숨을 죽였던 2020년 말, 내가 몸담고 있던 이커머스 기업의 물류 부문은 인류의 활동이 멈춘 세상에서 유일하게 가속 페달을 밟고 있는 듯했다. 팬데믹은 더 이상 먼 나라의 뉴스가 아니었다. 그것은 매일 수만 명의 직원이 드나드는 전국 수십 개의 물류센터 동맥을 끊어버릴 수 있는, 코앞에 닥친 실존적 위기였다. 전시 상황실을 방불케 하는 경영진 회의실에서 내려온 지시는 단순한 업무 지시가 아니라, 거의 물리 법칙에 가까운 절대적이고 시급한 명령이었다. "전국에 흩어진 무류센터에서, 수천 명에 달하는 인원의 건강 상태와 출입동선을 실시간으로 확인하고 통제하는 비대면 시스템을 구축하라. '지금당장'." 긴급히 소집된 팀 회의실의 공기는 압축된 산소처럼 ..

Gradle은 JAVA 개발에 엄청난 도움을 주는 강력한 Build Tool이지만 생소한 groovy 문법과 설정 파일, 사용방법 때문에 오히려 신입 개발자 들을 헷갈리게 하기도 합니다. 다행인 점은 gradle 을 사용하기 위한 학습 곡선이 높지 않고 대부분의 팀에서 gradle을 어렵게 사용하지 않는다는 점입니다. 이 포스트에서는 웹 개발에 필요한 최소한의 gradle 지식을 알아 보도록 하겠습니다. Build Tool Gradle 은 일종의 build tool(빌드 도구) 입니다. 여기서 말하는 빌드라는 개념은 단순히 프로그램을 컴파일하여 애플리케이션을 생성하는 작업만을 의미하지는 않습니다. 개발한 소프트웨어가 제품으로 만들어지는 일련의 과정, 즉, 컴파일, 테스트, 배포, 문서화 등의 작업을 포함..

이전에 서블릿 보안과 관련된 포스트(링크)를 작성했던 적이 있습니다. 서블릿 기반의 웹 애플리케이션에서 인증과 인가 과정을 간단하게 설명했습니다. 스프링에서는 마찬가지로 이런 인증과 권한등 보안에 관한 기능을 제공하는 프레임워크인 스프링 시큐리티(Spring Security)가 있습니다. 스프링 시큐리티는 보안과 관련되어 수행해야 하는 다양한 작업들을 지원해 줍니다. 하지만 저와 같은 신입 개발자들이 스프링 시큐리티와 같은 보안기술을 이해하는 것은 쉬운 일이 아닌 것 같습니다. 여전히 모르는 것이 더 많고 어렵게 느껴지는 부분이지만, 최근 진행한 팀 프로젝트에서 스프링 시큐리티와 관련된 기술을 쓰며 알게된 사실들과 코드를 포스팅해 보려고 합니다. 인증(Authentication)과 권한(Authoriza..

IPv4 는 32비트로 구성된 프로토콜입니다. 32비트로 표현할 수 있는 IP 주소는 대략 42억개 정도로 이미 공인 IP는 2011년 부터 고갈되어 아주 제한적으로 할당이 이루어지고 있습니다. 그러나 인터넷이 연결된 개인용 컴퓨터와 모바일 디바이스는 끊임없이 늘어나고 있습니다. 당연히 존재하는 공인 IP만으로 이 모든 장치들을 커버하는 것은 불가능 한 일입니다. 사설 IP 사설IP는 부족한 공인 IP 숫자를 보완하기 위한 하나의 수단이 될 수 있습니다. 인터넷 서비스 제공자(ISP, Internet Service Provider)가 부여하는 공인 IP는 외부 인터넷망과 연결된 라우터(공유기)에 부여되고 라우터(공유기)에 연결된 내부 네트워크의 디바이스들은 내부 네트워크에서만 사용되는 가상의 IP주소를 ..
- Total
- Today
- Yesterday
- DP
- 코딩의 기술
- Count
- 마르코프 연쇄
- REST API
- html
- Markov
- 전략패턴
- 야근
- 클린코드
- GROUP BY
- 몰라서망신
- CONVENTIONS
- Warning
- markov chain
- 크롬
- 디자인패턴
- restful api
- 동적계획법
- 자바스크립트개론
- RESTful
- 경고
- 로그
- was
- 자바스크립트 개론
- 마르코프
- Spring in Action
- 유지보수
- 문장 생성기
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |