최신 글
- "기본만 해라, 질문의 출발점" - 생각의 주도권을 디자인하라 인간은 역시 생각하는 동물이다.최근에 ‘배구감독 김연경’이라는 예능 프로그램에 빠져 있다. 예능이지만 다큐멘터리를 보는 듯한 느낌을 주는 프로그램이다. 이제 막 2회차를 지나고 있는 신생 예능인데, 출연하는 선수 대부분은 은퇴한 여자 배구 선수들이다. 이들이 프로 선수팀과 경기를 치르는 장면 중, 김연경 감독이 작전 타임에서 했던 말이 떠오른다.“기본만 해라. 딱 기본만 해라.”내가 읽은 책과 연결된 장면이 바로 이 대목이었다. 왜 ‘기본만 해라’라는 말이 인상 깊게 남았을까?ChatGPT를 처음 사용할 때가 떠올랐다. 단 한 줄의 프롬프트만 입력해도 의도한 결과를 얻어낼 수 있다는 점이 매력적이었다. 처음에는 무엇이든 물어보며 탐구했지만, 시간이 지나면서 점점 프롬프트가 단순해졌다. 어느 순간부터는 “.. 2025.10.08
- 『직업으로서의 소설가』를 읽고: “아무튼 하지 않으면 안 되는 일” 최근 무라카미 하루키의 에세이 『직업으로서의 소설가』를 읽으면서 여러 인상 깊은 구절들이 있었지만, 특히 두 가지 키워드가 마음에 오래 남았다. 하나는 오리지널리티, 다른 하나는 아무튼 하지 않으면 안 되는 일이라는 표현이다.오리지널리티에 대해 다시 생각하다.책을 읽으며 흥미롭게 느꼈던 부분 중 하나는 바로 오리지널리티에 대한 하루키의 생각이다. 이 단어를 처음 접했을 때, 올리버 색스의 다음과 같은 인용문이 함께 소개된다.창조성에는 지극히 개인적이라는 특징이 있으며, 강고한 아이덴티티와 개인적인 스타일이 있어서 그것이 재능에 반영되고 녹아들어 개인적인 몸과 형태가 된다. 그런 의미에서 창조성이란 새롭게 만들어내는 것. 기존의 견해를 타파하고 상상의 영역에서 자유롭게 날갯짓하면서 마음속으로 완전한 세계를.. 2025.05.05
- 레디스를 DB 처럼 쓴다고 하는데, 정말 믿어도 될까? - 백업, 복제 1. Redis 란 무엇인가? 1. Redis란 무엇인가?메모리 기반의 NoSQL Key-Value 저장소빠른 읽기/쓰기 속도, 다양한 자료구조 지원 (String, List, Set, Hash, Sorted Set 등)일반적으로 캐시로 많이 사용되지만, **데이터 저장소(DB)**처럼 사용하는 사례도 늘어남→ 그렇다면, “데이터를 잃지 않고” 안정적으로 저장하는 데에 Redis는 믿을만한가? 2. 가용성이란 무슨 뜻인가? 가용성(Availability): 서비스가 얼마나 지속적으로 동작 가능한지를 나타내는 지표(Availability = 사용 가능 시간 / 전체 시간) 그러니까, 가용성 99.9% 라고 한다면, 100분 중에 단 1분만이 문제가 발생했다는 것을 의미한다.Redis 는 가용성을 높이기 .. 2025.05.04
- 객체지향 프로그래밍에서 왜 역할/책임/협력을 계속 이야기할까? 우리가 ERD를 먼저 설계하고, 속성 중심으로 객체를 정의한 뒤 개발을 시작하면 어떤 문제가 발생할까?가장 큰 문제는 해당 객체가 어떤 문맥(context)에서 사용될지를 고려하지 않은 채 데이터를 설계하게 된다는 점이다. 이렇게 되면 이후 개발 과정에서 억지로 데이터를 껴맞추는 상황이 발생하게 된다. 예를 들어, 복잡한 조인을 포함한 2중, 3중의 SQL을 작성하고 있다면 이미 냄새가 풍기고 있는 셈이다. 객체를 똑똑하게 만들기 위해서는 객체가 사용될 문맥, 즉 사용 시나리오를 고려해야 한다. 이 지점에서 책임(responsibility)이라는 개념이 등장한다.그렇다면 여기서 말하는 문맥(context)이란 무엇일까? 이를 이해하기 위해 절차지향 방식의 문제점부터 다시 짚어보자.절차지향 프로그래밍의 한.. 2025.04.01
- AI 시대의 문해력, 프롬프트로 시작하다 - '최고의 프롬프트 엔지니어링 강의'를 읽고 지난주, 구글에서 제미나이 2.5를 발표했다. 구글은 이번 모델이 지금까지 출시된 모든 생성형 AI를 압도하는 성능을 보여준다고 대대적으로 홍보했다. 이 책이 처음 출간된 시점은 2024년 6월로, 당시만 해도 OpenAI의 ChatGPT가 시장을 주도하고 있었다. 그러나 1년도 채 지나지 않아, 또 다른 강력한 성능의 LLM(대규모 언어 모델)이 등장한 것이다.이처럼 시간이 흐르는 동안, 발전한 건 LLM만이 아니었다. 동영상 생성, 이미지 생성, 코드 리뷰 등 다양한 분야에서 특화된 AI들이 잇달아 출시되었고, 사용할 때마다 놀라움을 금치 못했다. 특히 SORA의 동영상 생성 기술을 봤을 때는 ‘이게 정말 가능한 일인가?’ 싶을 정도로 입이 다물어지지 않았다.LLM의 중요성은 날이 갈수록 커지고 있으.. 2025.03.31
- 설계의 함정 - 소프트웨어 설계의 정석을 읽고 소프트웨어 설계란 무엇일까? 개발자는 개발에 앞서 설계라는 과정을 충분히 수행하고 있을까?소프트웨어 설계의 목적은 무엇일까?‘설계’란 공학 분야에서 제품을 어떻게 만들지에 대한 계획을 세우는 일이다.그렇다면 소프트웨어 설계란 코드를 작성하기 전, 미리 계획하고 준비하는 일련의 과정이라 할 수 있다.그렇다면 우리는 이 과정을 잘하고 있을까? 여러 회사를 경험하거나 이야기를 듣다 보면, 이 질문에 확신 있게 ‘그렇다’고 답할 수 있는 경우는 그리 많지 않다. 그렇기에 우리는 소프트웨어 설계에 대해 더 깊이 고민하고, 비평해볼 필요가 있다.이 책에서 말하는 ‘소프트웨어 설계를 잘하기 위해 필요한 요소’는 세 가지다. 1. 설계의 목적을 명확히 파악할 것2. 설계에 필요한 최소한의 테크닉을 습득할 것3. 그리고.. 2025.03.16
- 내가 테스트 코드를 작성하지 못하는 이유에 대해서 테스트 코드의 중요성을 배워도, 실질적으로 잘 작성하는 건 또 다른 문제입니다.내가 작성하는 테스트 코드는 정말 의미가 있을까?잘 작성된 테스트 코드는 어떻게 다음 할 일을 알려준다는 걸까?테스트 코드가 개발 과정에서 길을 잃었을 때 나를 도와준다는 말이 무슨 뜻일까? 이처럼 많은 이야기를 들어도 테스트 코드를 잘 쓰지 못했던 이유가 있었습니다. 내가 테스트 코드를 잘 쓰지 못하는 이유테스트 코드를 제대로 작성하지 못하는 이유를 세 가지로 정리해 보았습니다.1. 너무 빠르게 작성하려고 한다테스트 코드를 작성하다 보면, 자연스럽게 프로덕션 코드와 테스트 코드 사이를 끊임없이 오가게 됩니다. 문제는 이 과정에서 코드의 본질을 충분히 이해하지 못한 채, 테스트를 “통과”시키는 데만 집중하게 된다는 점입니다.테.. 2024.12.01
- 스프링에서 제공하는 XXTemplate 은 무엇일까? (RestTemplate, JdbcTemplate, TransactionTemplate, HibernateTemplate, SqlSessionTemplate...) 인프런의 토비 스프링 강의 일부 내용을 좀더 딥다이브한 내용입니다.Template 이란 무엇일까? 템플릿이란 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀. 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 사용하도록 만들어진 오브젝트입니다. 우리가 아는 템플릿 메소드 패턴또한 템플릿을 사용합니다.템플릿 메소드 패턴이란?템플릿 메소드 패턴은 고정된 틀의 로직을 가진 템플릿 메소드를 슈퍼클래스에 두고, 바뀌는 부분을 서브클래스의 메소드에 두는 구조로 이뤄진다. 스프링에서 제공하는 `XXTemplate`은 특정 프로세스의 공통 부분을 재사용하면서, 세부적으로 다른 로직을 쉽게 확장할 수 있도록 지원하는 클래스입니다. 이 클래스는 Template 메서드 패턴을 활용하여 변경되는 부분과 고정된 부분을 분리해 줍니다.. 2024.11.08
- (수정)DB 에서 하는 동시성제어와 애플리케이션에서 하는 동시성 제어는 어떤게 다른걸까? 데이터베이스에서 하는 동시성 제어와 애플리케이션에서 하는 동시성 제어는 모두 동시성 문제를 해결하는 방법이지만,적용되는 레벨과 사용되는 기술에서 차이가 있다. 이 둘은 각각 다른 목적으로, 다른 상황에서 사용되며, 서로 보완적인 역할을 할 수 있다.1. 데이터베이스에서의 동시성 제어 데이터베이스에서의 동시성 제어는 트랜잭션 관리를 통해 여러 클라이언트가 동시에 동일한 데이터에 접근할 때 발생하는 데이터 무결성과 일관성을 보장하는 것을 목표로 한다. 그래서 자주 사용하는 것은 잠금(Locking), 격리 수준(Isolation Level) 등의 기술을 사용한다.트랜잭션 기반이라는 말은, 데이터베이스는 트랜잭션 단위로 동시성을 제어한다. 트랜잭션은 하나 이상의 쿼리가 실행되며, 트랜잭션이 완료될 때까지 데.. 2024.10.08
- Java 에서 패키지(Package) 라는 것을 왜 사용해야만 할까? 자바에서 사용하는 패키지는 왜 사용할까? 일단 Java 에서 Package 라고 하면 다음과 같이 생각하는 것이 일반적이다.패키지(Package) 패키지란? 클래스의 묶음으로 클래스를 용도별이나, 기능별로 그룹화 [참고 - https://wikidocs.net/231]이것을 고민했던 이유는 다음과 같습니다.이걸 보면, Zzzz 클래스는 아무런 패키지없이도 만들 수 있습니다. 그런데 패키지가 왜 필요한거지?멘토링을 진행하면서 '이렇게 패키지 구조를 만들었는데, 적절한가요?' 라는 질문을 정말 많이 받았는데요. 이 질문에 답변을 하는 과정에서 패키지 구조만 보고 내가 어떻게 적절하다고 판단을 하지? 라는 생각을 했습니다. 적어도 옛날에 읽었던 클린 소프트웨어 책에서 패키지는 이렇게 하는거야! 라는 내용을 읽.. 2024.10.03
- 왜 사람들은 빈약한 도메인 모델을 만들어 활용할까? 왜 사람들은 빈약한 도메인 모델을 만들까?조영호님의 인프런 강의를 들으며 좋은 인사이트를 많이 얻을 수 있었는데, 강의를 모두다 수강한 뒤에 궁금한 것이 있었다.우리 선배개발자님들은 왜 빈약한 도메인 모델을 관례처럼 만들까? 왜그럴까?도메인 계층에는 객체지향 프로그래밍을 해야된다는 것을 머리속으로는 알고는 있지 않을까? 궁금함을 찾을 수 없어, 조영호님에게 직접 물어보았다.왜 선배개발자님들은 빈약한 도메인 모델과 트랜잭션 스크립트 패턴을 작성하게 되었을까?현 시점에 우리의 선배개발자님이 이렇게 된 배경에는 2가지가 있을 수 있다고 조심스럽게 조영호님께서 말씀해주셨다.하나는 개발을 배우거나 실무에서 참고하는 기존 코드들이 이미 절차적으로 작성되어 있기 때문에 많은 사람들이 이 방식을 그대로 답습하고 있기 .. 2024.09.22
- RDB의 FTS 를 적용하면서 부딪힌 부분들 개요기준 Postgres 기준으로 ts_vector, ts_query 를 활용하여 Full Text Search 을 실행할 수 있음.함께 읽어보면 좋은 내용 - RDB 의 FTS(Full Text Search) 이해하기 RDB 의 FTS(Full Text Search) 이해하기RDB 의 FTS(Full Text Search) 란?배경이 글의 목적은 FTS(Full Text Search) 로 RDB(Relational Database) 적당한지 판단합니다. 검색엔진으로서 대부분 ElasticSearch 를 사용하는데요. 간단한 검색엔진으로서는 다happy-coding-day.tistory.com 배경SpringBoot와 JPA 를 활용하여 개발하는 경우가 다수이다.흔히 Repository 를 활용한 영속.. 2024.09.16
- RDB 의 FTS(Full Text Search) 이해하기 RDB 의 FTS(Full Text Search) 란?배경이 글의 목적은 FTS(Full Text Search) 로 RDB(Relational Database) 적당한지 판단합니다. 검색엔진으로서 대부분 ElasticSearch 를 사용하는데요. 간단한 검색엔진으로서는 다소 과한 오버스펙일 수 있어, 조사하는 과정에서 PostgreSQL, MySQL 도 Full Text Search 기능이 있어 기술조사를 진행했습니다. 그 과정에서 RDB 의 FTS 에 대해서 이해하는 것을 목적으로 합니다.아래 내용은 postgresSQL 기준으로 설명합니다. 왜냐하면 MySQL 보다 기본으로 제공하는 기능이 좀더 많습니다.비교 기준PostgreSQLElasticSearch일반 검색 (LIKE/정규 표현식)아키텍처 및 .. 2024.09.16
- Java의 비동기(Async) 프로그래밍을 제공하는 JDK를 다시는 무시하지 말자! 개발을 하다보면, 어깨너머 듣는 이야기가 '비동기 언제 사용해요?', 'Redis 의 스핀락 사용해보셨어요?', '메세지 큐를 활용한 비동기 프로그래밍' 등등의 뭔가 어려운 것들을 나한테 묻곤 하는데, 잘 사용해본 적도 없을 뿐더러, 이미 Java JDK 에서 충분히 제공되고 있다고 생각했다. 이래서 한번 언젠가는 정리해봐야지- 라고 생각만하다가 드디어 알아본다.알아볼 Java의 비동기 프로그래밍1. Thread2. ExecutorService3. CompletableFuture4. Flow상황은 다음과 같습니다. SomethingCounter 가 있습니다. 해당 객체는 다음과 같이 count 를 가집니다.final class SomethingCounter { // 횟수 Integer cou.. 2024.07.28
- [똑똑한 사람은 어떻게 생각하고 질문하는가?] 리뷰 - 이시한 이 책을 선택하게 된 이유'똑똑한 사람은 어떻게 생각하고 질문하는가.' 책 제목에서부터 머릿속에 물음표를 만들어주는 질문을 던진다.이 책에 흥미가 갔던 첫번째 이유는 나의 행동 패턴에 있었다. 개발을 하며, 모르는 부분에 대해서 구글링하던 나의 모습에서 점차 ChatGPT 에게 질문을 하고 있는 패턴에서 비롯되었다. 처음 ChatGPT 가 나올적에는 할루미네이션이 심해 아무말대잔치였으나, 지금은 꽤 신뢰도 높은 대답을 해주곤 한다. 행동 패턴이 변화됨에 따라 이 책을 읽어보고 싶다는 마음이 들었다.두번째 이유는, 질문을 잘 못하는 나의 모습이 속상해 이 책을 선정하게 되었다. 회의할 적이나 컨퍼런스에 참여 할 때 항상 끝에 이런말을 한다. '~ 혹시 질문 있으신가?' 라는 주변 분위기가 급격하게 고요함.. 2024.07.21
인기 글
- 그 누구도 궁금해하지 않을 나의 이직 이야기 지난 1년하고도 4개월간의 트레바리에서의 여정이 끝이 났다. 트레바리에서의 여정은 글을 쓰는 이곳에 담을 수 없을 정도로 버라이어티하지 않았나 싶다. 언제나 첫경험은 강렬 한 것 처럼, 다시는 트레바리에서의 근무 경험을 하지 못할 것이라 단언한다. 이 부분에 대해서는 미래의 어느날 의미있게 다뤄볼까 한다. 2022년 12월 20일 트레바리에서 퇴사했다. 그 이유에 대해서는 언급하기 어렵지만- 요즘 스타트업은 꽤 겨울이라는 사실은 명확하다. 그리고 트레바리에서 근무하던 중, 내가 존경하는 CTO님이 퇴사했다. CTO님을 개발자로서 그리고 인간적으로도 진심으로 존경하는 분이지만, 스타트업 이라는 공간은 그 분에게도 처음일 수 있고 맞지 않을 수 있으니까 퇴사할 수 있다고 생각한다. 문제는 그 이후부터 였던것.. 2023.01.29
- Mock 객체란 무엇일까? 왜 써야될까? 아래 내용은 위 책에서 말하는 4장 TDD with Mock 에서 내용을 발췌했습니다. TDD를 공부하면서 Mock 이라는 용어는 너무나도 많이 나오고, 실제로 테스트 프레임워크를 사용하면 Mock 객체를 많이 사용되게 된다. 그놈의 Mock! Mock 객체를 사용해서, 테스트를 용이하게 만들수 있고, 아직 만들어지지 않은 개념을 활용해 내가 만들고자 하는 객체를 구체화시킬 수 있는 도구라는 사실은 알았다. 그러나 문제점은 여기에 있었다. 주로 Mockito 프레임워크를 사용하는데, 각 Mock 객체가 어떤 역할을 하는지 이해하기 어려웠다. 더하여, 어떻게 활용해야 하는지도, 이해하기 어려웠다. 이번 장에서는 다시한번 Mock을 써야하는 이유, 그리고 Mock 객체가 어떤 역할을 하는지, 마지막으로 어떻.. 2021.03.11
- postgresSQL의 Idle in transaction 이란 무엇인가? Node.js 에서 발생한 Transaction 이 부족해서 문제가 발생했고, 해결하는 과정에서 Idle in transaction에 대해서 알게 되었습니다. Idle in transaction 이란 무엇인가? 문서에 따르면 다음과 같은 의미를 가집니다. idle in transaction (waiting for client inside a BEGIN block) 클라이언트가 시작을 열어놓고 기다리고 있다. 즉, 클라이언트가 정상적으로 트랜잭션을 닫지 않았다. 대부분의 Application은 ConnectionPool 을 통해 N개의 Connection 을 쥐고 있습니다. N개의 Connection이 모두다 정상적으로 동작하지 않을 경우에는 다음 Connection 이 열리지 않아 문제가 발생합니다. 그.. 2022.09.11
- HTTP 304 Not Modified의 이해 및 예제(with. spring) 1. HTTP 상태 코드 1.1 응답 메시지 & 상태라인 After receiving and interpreting a request message, a server responds with an HTTP response message. 요청 메시지를 받고 해석한 뒤에, 서버는 HTTP 응답 메시지를 보낸다. Example: HTTP/1.1 304 Not Modified Date: Fri, 07 Sep 2012 14:51:43 GMT Server: Apache/2.2.22 (Win32) mod_jk/1.2.37 Connection: Keep-Alive Keep-Alive: timeout=5, max=94 ETag: "d00000001f216-1e7-4c908f1fc4d6e" The first line o.. 2020.11.14
- 이벤트 스토어(?) 이벤트 소싱(?) 를 활용한 View 를 반복적으로 만들고 부수면서 느낀 점 결론부터 말씀드리면 '이벤트스토어를 활용해 내가 원하는 View 를 만들어 내기란 여전히 턱없이 내공이 부족하다.' 입니다. 먼저 이벤트스토어에 대한 이야기부터 해보려 합니다. 그 다음 반복적으로 만들고 부수면서 느낀 점 이야기 해볼까 합니다. 이벤트 스토어란 무엇일까? 이벤트 스토어가 없던 시절의 우리는 데이터베이스에 어떤 행위의 결과값만 포함시켜왔습니다. Actor에 의해 만들어진 어떤 결과물을 의미합니다. 그렇다면 이벤트란 무엇일까요? 사내에서 이벤트라는 용어를 비개발자분들에게 설명하기 위해 사용된 장표를 가져왔습니다. 이벤트는 특정시점에 발생한 어떤 사건을 의미합니다. 그러므로, 이벤트 스토어는 특정시점에 발생한 사건을 저장하는 것을 의미합니다. 이것이 가져다는 주는 이점은 무엇일까요? 1. 바로.. 2022.07.03
- [우아한테크코스Pro] 인수 테스트 기반 TDD - 1 [5/9] 5주차 인수테스트 기반 TDD에서는 3주차에서 했던 인수테스트 주도 개발 에서 말하는 인수 테스트 이후 개발 흐름에 대해서 미션이 주어졌습니다. 이번 미션에서는 총 4단계로 구성되어 각 단계마다 많은 코드 작성이 요구되었습니다. 이번 미션 목표 테스트 주도 개발 접근 방법을 이해할 수 있습니다. 단위 테스트에 대한 이해를 높일 수 있습니다. 테스트 주도 개발을 접근하는 방법으로 크게 2가지가 있습니다. 1. Outside In 일반적으로 TDD는 Inside-Out 의 방식을 말합니다. 그러므로, Outside-In는 Top Down으로 진행하고, London School TDD라고도 부르고, Mockist Approach라고도 불린다고 합니다. 아래 그림 1 에서 보여지는 것과 같이 최상위 레이어에서 .. 2021.07.01
- SpringMVC 에서 말하는 MessageConverter 코드로 이해하기 SpringMVC는 어떻게 내가 보낸 요청 메세지를 찰떡같이 알아듣고 Json 등의 내가 원하는 값으로 반환해주는걸까? HTTP 메시지 컨버터에 대해서 조금더 자세히 알아보려고 합니다. 총 2가지로 나눠서 살펴볼 예정입니다. POST 방식의 Request 보낼시, @RequestBody 가 어떻게 Converter 되는지. GET 방식으로 Request 조회시, @ResponseBody가 어떻게 Converter 되는지 확인해볼 예정입니다. MessageConverter 종류 MessageConverter 의 종류를 이해하기 위해서는 먼저 HttpMessageConverter 가 무엇인지 알아봅니다. SpringMVC 에서는 인터페이스로 존재하는데, 아래와 같습니다. package org.springfr.. 2021.08.15
- 빠르게 실패하기(fail-fast) VS 안전하게 실패하기(fail-safe) 이 주제에 대해서 "엘레강트 오브젝트-조영호 번역" 책에서 다루고 있습니다. 이론상으로만, 이해하고 있었습니다. 그러나, 최근 사내 서비스를 트러블 슈팅하며, 다른 분의 코드를 리뷰하며 이 주제에 대해서 말할 수 있었던 기회가 있었습니다. 그러나, 역시 이론과 코드에는 거리감이 있었고, 그 상황에서 저또한 명확하게 설명하기 힘들었습니다. 저 스스로는 빠르게 실패하기 를 실천하기 위해서 코드 상에서 노력하고 있는데, 이것을 누군가에게 설명하려니 잘 안되더군요. 그래서 팀원분에게 이 부분을 설명해주면서 헀던 이야기를 공유합니다. 먼저 빠르게 실패하기와 안전하게 실패하기에 대해서 이론으로 살펴보고 난 뒤에, 코드로서 살펴보겠습니다. 이 두 가지는 적절한 상황에 잘 활용하는 것이 중요하지만-, 만약 코딩 중에 .. 2021.04.16
- Template Pattern(템플릿 패턴) VS Strategy Pattern(전략 패턴) Photo by Mike Meyers on Unsplash 들어가기 대부분의 디자인 패턴 책에서는 이 두가지를 비교해서 설명합니다. 왜 일까요? 이 두가지 패턴은 데이터를 은닉화 시켜 구현될 수 있도록 도와주는 패턴입니다. 각각의 쓰이는 상황은 다르지만, 결론부터 이야기하면 잘 짜여진 코드는 템플릿 패턴에서 전략 패턴으로 손쉽게 전환할 수 있고, 반대로 전략패턴에서 템플릿 패턴으로 손쉽게 변경가능하다고 합니다. 그럼 왜 그런지 한번 살펴봅시다. 템플릿 패턴이란 무엇인가? 하위 클래스에서 구체적으로 처리하는 디자인 패턴 개인적으로 패턴을 어렵게 생각하면 끝없이 어렵고 쉽게 생각하면 너무 쉽게 생각하는 경향이 있다고 생각합니다. 그런 예시로 템플릿 패턴도 포함됩니다. 부주제로 '하위 클래스에서 구체적으로 처.. 2020.09.27
- docker 에 올라온 postgres 에 접속해, Database 확인하는 방법 InteliiJ 의 편리함에 속아, 실제 DB 작업할 때는 어버버한 저를 위해 남깁니다. 먼저, 작성하기 전에 데이터베이스의 목적은 영속성입니다. 그러나 Docker는 쉽게 지우고 설치할 수 있습니다. DB의 영속성과 Docker? 사실 말이 안맞긴 합니다만... 😳 우리는 개발환경을 빨리 세팅하고 싶으니까...ㅎㅎ 참조문서 - https://hub.docker.com/_/postgres 아래 명령어를 실행했다고 가정하겠습니다. docker run --rm --name mypg -d \ -v ${PWD}/app/src/main/resources:/docker-entrypoint-initdb.d \ -p 5432:5432 \ -e POSTGRES_PASSWORD="password" \ -e POSTGRES.. 2021.07.09
- JVM 이해하기 - 2 (자바의 바이트 코드) Write Once, Run anywhere(WORA) 자바의 바이트 코드 WORA를 구현하기 위해 JVM은 사용자 언어인 자바와 기계어 사이의 중간 언어인 자바 바이트코드를 사용합니다. 이 자바 바이트코드가 자바 코드를 배포하는 가장 작은 단위입니다. JVM을 이야기 할 때에는 자바 바이트코드를 빼놓을 수 없다. JVM은 자바 바이트코드를 실행하는 실행기이다. 자바 컴파일러는 C/C++등의 컴파일러처럼 고수준 언어를 기계어, 즉 직접적인 CPU명령으로 변환하는 것이 아니라, 개발자가 이해하는 자바 언어를 JVM이 이해하는 자바 바이트코드로 번역한다. 따라서 자바 바이트코드는 플랫폼 의존적인 코드가 없기 때문에 JVM이 설치된 장비라면 CPU나 운영체제가 다르더라도 실행할 수 있고, 컴파일 결과물의 크기.. 2020.11.24
- [나만의 라이브러리 제작기-1] JCenter, MavenCentral 은 무엇인가? 들어가기 이번에 같이 스터디하는 햇님들과 함께 이야기를 나누다, 우리가 프로젝트를 진행시 자주 사용되는 Utility 성격의 Module은 라이브러리로 만든다면 어떠할까? 라는 질문으로 라이브러리를 제작하게 되었습니다. Assertion 이라는 라이브러리를 만들기 위한 여정으로, 그 시작은 JCenter, MavenCentral 등 흔히 Repository 라 불리는 것이 무엇인지에 대해서 이해해보려 합니다. 'Repository라 불리는 것은 무엇인가?' , 'gradle을 사용하지만, Maven Repository에 올릴 수 있는것인가?' 'Repository에 어떻게 올리는 것인가?' 등등 궁금한 부분이 많았습니다. 궁금증도 해결할 겸 나중에 이런 행위를 했었다는 것을 기억하기 위해 포스팅합니다. .. 2020.09.12
- RDB 의 FTS(Full Text Search) 이해하기 RDB 의 FTS(Full Text Search) 란?배경이 글의 목적은 FTS(Full Text Search) 로 RDB(Relational Database) 적당한지 판단합니다. 검색엔진으로서 대부분 ElasticSearch 를 사용하는데요. 간단한 검색엔진으로서는 다소 과한 오버스펙일 수 있어, 조사하는 과정에서 PostgreSQL, MySQL 도 Full Text Search 기능이 있어 기술조사를 진행했습니다. 그 과정에서 RDB 의 FTS 에 대해서 이해하는 것을 목적으로 합니다.아래 내용은 postgresSQL 기준으로 설명합니다. 왜냐하면 MySQL 보다 기본으로 제공하는 기능이 좀더 많습니다.비교 기준PostgreSQLElasticSearch일반 검색 (LIKE/정규 표현식)아키텍처 및 .. 2024.09.16
- Layered Architecture 의 단점이 무엇이라고 생각하는가? 들어가기 이전 포스팅의 내용이였던 DDD-Lite 동영상 시청 리뷰 의 내용을 정리하다가 문득 궁금증이 생겼습니다. 정명주 강사님께서 `Layered Architecture 의 단점으로 인해, Hexagonal(Onion) Architecture 가 나왔다.` 그럼 어떤 단점이냐? 바로 ~ 계층형 아키텍쳐의 단점은 무엇이냐면? 결국에는 도메인이 인프라에 의존하게 됩니다. 이 말은 즉, 도메인 관심사와 기술적 관심사가 섞이게 된다는 것을 의미합니다. 라고 동영상 중간에 말했습니다. 여기서 저는 왜? 도데체 왜 섞이지? 라는 생각을 하게 되었습니다. LayeredArchitecture 가 무엇인가? 우리가 흔히 알고 있는 LayeredArchitecture 는 여러 군데에서 사실 발견할 수 있습니다. 제가 .. 2021.07.26
- @Fetch(FetchMode.SUBSELECT) 과 IN subquery 는 왜 느릴까? 들어가기 JPA 를 활용하다가 문제를 하나 맞딱뜨렸습니다. 퇴근하기 10분전, 동료분의 호출로 위 그림처럼 시간이 오래걸리는 경우가 발생했습니다. 처음 보는 코드에서 어디서 발생했는지 알 수 없는 상황에서 겉으로 보기에는 아무런 문제가 없었습니다. 그러던 중, 코드를 살펴보던 중 처음 보는 어노테이션 @Fetch(FetchMode.SUBSELECT) 가 있었습니다. @Fetch(FetchMode.SUBSELECT) 이란? JPA를 활용하다보면, N+1 문제는 늘 발생할 수 있는 문제입니다. N+1 문제를 해결하기 위해 다양한 방법 있습니다. 그리고, 그 가운데 Fetch(FetchMode.SUBSELECT) 이 있습니다. 그럼 이 애노테이션은 어떻게 N+1 문제를 해결할까요? 백기선님의 블로그를 참고하.. 2020.10.14