전체279 심플한 소프트웨어를 진심으로 고민해본 적이 있나요? - [심플 소프트웨어] 책을 읽고 심플 소프트웨어 책을 읽고, 내가 회사에서 하고 있던 행위가 떠올랐다. 한 때는 아키텍쳐 내에서 강한 의존이라는 버그를 끊어내기 위해 온갖행위를 했다. 과거에 했던 프로젝트 중에 Notification 프로젝트가 기억에 남는다. 이 프로젝트는 유저에게 메세지 채널을 통해 메세지를 전달하는 프로젝트이다. Slack, Email, MMS 등 메세지 채널이 될 수 있는 컴포넌트가 있고, 프로젝트 안에서 MMS 을 받지 못한다면, 카카오톡으로 메세지를 전달하도록 한다. 카카오톡으로 메세지를 읽지 않는다면, 메일로 전달한다. 내결합성에 대해서 고민했었다. Update 가 아니라 Append 만 할 수 있는 코드 만들기 이 책에서 '복잡성은 감옥이다' 부분에서 재밌는 일화를 이야기한다. 이미 퇴사한 사람에게 코드에.. 2023. 3. 1. Java Regex 정규표현식 사용시 java.lang.StackOverflowError 가 발생하는걸까 자바에서 정규표현식을 활용하다보면, BuiltIn 클래스인 Pattern 과 Matcher 이 두 가지를 사용하는 경우가 많다. Pattern 과 Matcher 을 사용할 때 주의해야될 점이 있다. 바로 재귀로 인해 무한한 루프에 빠질 수 있다는 것이다. 이로인해 위에서 말하 StackOverflowError 가 발생한다. public class RegexTest { public static void main(String[] args) { // 재귀적으로 일치하는 패턴 Pattern pattern = Pattern.compile("(a|b)*c"); Matcher matcher = pattern.matcher("aaa" + "aaa"); System.out.println(matcher.matches()).. 2023. 2. 25. 개발DB 꼭 필요한가요? 진짜 필요한거예요? 배경 회사를 옮기고 적응하는 과정에서, 개발 DB 대한 고찰을 하게 되었다. 스타트업 회사는 제한적인 리소스에서 최고의 효율을 내야만 했던 회사였으며, 이번에 옮긴 회사는 리소스가 풍부했기 때문에 무엇이든 할 수 있었다. 그 과정에서 '개발 DB는 무엇을 위해 필요로 하는가?'에 대한 생각을 하게 되었다. 들어가기 개발자가 일하는 대부분의 환경은 다음과 같은 형태로 일을 하게 된다. 프로덕트 DB(Product DB) ----- 개발 DB(DevelopDB) ----- 로컬(LocalDB) 이런 형태는 하나의 기능을 개발하고 테스트해서 최종적으로 릴리즈 되기 까지 3가지 타입의 DB을 활용하게 된다. 동작되고 있는 프로덕트에 릴리즈하기 직전까지 개발자들끼리 기능 구현시 활용하는 DB는 개발 DB. 기능을.. 2023. 2. 24. [퍼스널브랜딩 구축기] 6주간의 퍼스널 브랜딩 워크숍을 마치며 NextStep 에서 진행하는 퍼스널브랜딩 워크숍 에서 진행한 내용을 담은 포스팅입니다. 6주간 워크숍을 책임감을 갖고 이끌어주신 문수민님, 김민석님에게 감사합니다. The scariest moment is always just before you start. After that, things can only get better. - Stephen King 가장 두려운 순간은 시작하기 직전입니다. 시작 후에는 모든 상황은 나아질 수밖에 없습니다. To be yourself in a world that is constantly trying to make you something else is the greatest accomplishment. - Ralph Waldo Emerson 끊임없이 당신을 바꾸려고.. 2023. 2. 18. [퍼스널 브랜딩 구축기] 사람을 보고 배우자(feat 임성현, 임동준) 이번주 퍼스널 브랜딩 워크숍에서는 특별한 연사를 모시고 진행했다. AWS 의 임성현님, 우아한형제들의 임동준님 두 연사를 모시고 어떻게 퍼스널 브랜딩을 할 수 있는지 본격 진지한 대화를 나눴다. 본격 진지한 대화는 뭔가 연사가 발표하는 그런 방식보다는 자연스럽게 워크숍에 참여한 사람들과 대화를 나누며, 스스로 가졌던 고민에 대해서 이야기 나눴다. Q. 나는 쿽스타터가 되고 싶다. 그러나 늘 고민하는 단계에서 벗어나기 어렵다. A. 임동준: 자신이 사용할 수 있는 도구를 만드는 것에 초점을 맞쳐보면 어떠할까? 아무도 쓰지않을 도구를 만들기 보단 쓸 수 있는 도구를 만들어 피드백도 받고, 사용된다면 더 동기부여가 될 것이다. Q. 요즘 트랜드에 속하는 개발자 성향은 어떠한가요? A. 임성현, 임동준 사람을 .. 2023. 2. 13. [퍼스널 브랜딩 구축기] 3. 나라는 브랜드를 '견고하게' 만들자 NextStep 에서 진행하는 퍼스널브랜딩 워크숍 에서 진행한 내용을 담은 포스팅입니다. 나라는 브랜드를 '견고하게' 만들자 Q. 나라는 사람을 한 줄로 표현한다면? 이 질문을 처음 받았던건 사실 트레바리 근무 중 복지차원에서 했던 워크숍에서 질문을 받아본 적이 있었다. 당시에 뭐라고 작성했더라.. '도전하고 성취하기를 좋아하며 책 읽기를 좋아하는 개발자' 라고 했었던 것 같다. https://bit.ly/3RxcfDK '내 스토리 w. 최원준 클럽장' 후기 내 자신이 원하는 것을 들여다 보는 기회가 얼마나 있을까? 좋은 기회로 회사에서 나의 스토리을 찾을 수 있도록 도와주는 프로그램에 참여했다. 트레바리 내에서 클럽장을 하고 계신 케이타운 happy-coding-day.tistory.com 이후로 진지.. 2023. 2. 2. 성장에 대해서 - [개발자 원칙] 책을 읽고. '개발자 원칙'은 골든레빗에서 출판한 책으로 우리나라에서 유명한 테크리더 9명의 개발자 원칙에 대해서 이야기하고 있다. 이 책을 읽으면서 성장이라는 키워드에 대해서 궁금증이 들었다. 더 나은 개발자로 살아가기 위한 원칙이라는 키워드로 9명의 테크리더는 자신들의 이야기를 한다. 그 과정에 성장이라는 키워드가 포함된다. 서로 다른 관점에서의 9가지 방식의 성장을 책 속에서 찾을 수 있다. 한편으로는, 우리는 어떤 것을 보고 성장했다고 판단하는 걸까? 라는 물음표가 생겼다. 자신만의 방법론을 통해서 이루고자 하는 것을 이루는 것. 마이너한 법칙을 만들어 꾸준히 지키는 것. ‘의존 할 수 없는 것에는 의존하지 말아야 한다‘ 라는 원칙으로 개발자 인생을 사는 테크리더, 이직을 통해 자신이 원하는 목적을 달성하는 .. 2023. 1. 31. 그 누구도 궁금해하지 않을 나의 이직 이야기 지난 1년하고도 4개월간의 트레바리에서의 여정이 끝이 났다. 트레바리에서의 여정은 글을 쓰는 이곳에 담을 수 없을 정도로 버라이어티하지 않았나 싶다. 언제나 첫경험은 강렬 한 것 처럼, 다시는 트레바리에서의 근무 경험을 하지 못할 것이라 단언한다. 이 부분에 대해서는 미래의 어느날 의미있게 다뤄볼까 한다. 2022년 12월 20일 트레바리에서 퇴사했다. 그 이유에 대해서는 언급하기 어렵지만- 요즘 스타트업은 꽤 겨울이라는 사실은 명확하다. 그리고 트레바리에서 근무하던 중, 내가 존경하는 CTO님이 퇴사했다. CTO님을 개발자로서 그리고 인간적으로도 진심으로 존경하는 분이지만, 스타트업 이라는 공간은 그 분에게도 처음일 수 있고 맞지 않을 수 있으니까 퇴사할 수 있다고 생각한다. 문제는 그 이후부터 였던것.. 2023. 1. 29. [퍼스널 브랜딩 구축기] 2. '나'는 어떤 색깔을 가지고 싶나요? NextStep 에서 진행하는 퍼스널브랜딩 워크숍 에서 진행한 내용을 담은 포스팅입니다. 시작하기 앞서 숙제가 있었다. 바로 외부에서 바라보는 나의 특색은 무엇인가? 위 내용은 구글 폼으로 주변 지인에서 물어본 내용이다. 위 설문내용은 https://www.viacharacter.org/ 여기서 강점 테스트를 해본 결과다. 주변에서 바라보는 나와 내가 생각하는 나에 대해서 테스트를 해본 내용에 흥미로운 부분이 일부 있었다. 연차가 쌓이면서 중요한건 나의 '가치관' 이다. 라고 외치고 다녔는데, 아니나 다를까 첫번째가 공평성 정의이다. 그리고 다른 사람이 본 나의 내용에도 확고한 신념이 있다는 말이 있다. 2023. 1. 29. [퍼스널 브랜딩 구축기] 1. 나는 누구인가? NextStep 에서 진행하는 퍼스널브랜딩 워크숍 에서 진행한 내용을 담은 포스팅입니다. 퍼스널 브랜드란 무엇인가? 위키디피아에 따르면, 퍼스널 브랜딩은 개인을 업계의 권위자로 위치시키고, 경쟁업체와 차별화함으로써 개인에 대한 대중의 인식을 만들고 영향을 미치기 위한 의식적이고 의도적인 노력입니다. 퍼스널 브랜딩 프로세스에는 자신의 독특함을 찾고, 자신이 알려지고 싶은 것에 대한 평판을 쌓은 다음, 자신을 알리는 과정에 포함됩니다. 궁극적으로, 목표는 메시지를 전달하고 수익을 창출할 수 있는 무엇가를 만드는 것입니다. 즉, 경쟁자와 구분되는 이미지를 구축하는 것이다. 최근 NextStep 에서 진행하는 퍼스널브랜딩 워크숍 에 참여중에 있다. 퍼스널 브랜딩 워크숍에 참여하게 된 근본적인 원인은 어떤 개발자.. 2023. 1. 23. 비관적 잠금, 낙관적 잠금 그런 동시성 이슈 해결하기 우리가 개발하는 프로덕트에 동시성 이슈는 어떤 것이 있을까? 사실은 그다지 많지 않을 수 있을 것 같다. 특히, 트래픽은 적은 회사에서는 더욱 그러지 않을까 싶다. 그래서 언제든 맞닥뜨리더라도 당황하지 않았으면 좋겠다. 먼저 동시성 이슈가 무엇인지부터 살펴보자. 하나의 Table Row 을 Client 1과 Client 2가 서로 업데이트를 하려고 하다보니, 동시성 이슈가 발생한다. 좀 더 구체적으로 어떤 상황에서 동시성 이슈가 발생하는가? 참고 할 만한 예시 테스트 코드는 다음과 같다. https://github.com/take-small-steps/understanding-concurrency-Issue/blob/9eea5414c1a35ec09484f2281e51e1b18380dd93/src/test.. 2023. 1. 11. [린치핀]책을 읽고 린치핀 그거 너만 몰랐던거야? 린치핀이라는 책을 읽으며, 여러 가지 감정이 교차했다. 실타래처럼 꼬인 생각을 하나씩 풀어보면서 이야기해볼까 한다. 린치핀을 왜 이야기해야 할까? '린치핀'이라는 도구는 자동차나 수레에 바퀴가 빠지지 않도록 축에 끼우는 핀으로 핵심이나 구심점을 의미한다. 세스 고딘은 린치핀에 대해서 왜 언급했을까? 질문을 던져보자. 이 책이 나온 시점은 2010년이다. 특정 시점에서는 린치핀 책이 중고가가 10만 원에 팔리기도 했다고 한다. 그 시점에서만큼은 사람들의 니즈에 부합했던 책이라 할 수 있을 것이다. 2010년에는 분명 개발자라는 직업이 3D로 취급되던 시절임이 명확했었다. 그러나, 2023년이 곧 도달하는 지금은 어떠할까? Youtube, 숨고, 탈잉 등의 플랫폼이 린치핀을 더.. 2022. 12. 26. 조영호님과 객체지향에 대해서 이야기하기 트레바리에서 (전) CTO님 덕분에 오브젝트 저자 조영호님과 티타임을 가질 수 있는 기회가 생겼습니다. 티타임 자리에서 물었던 질문에 대해서 기록을 남깁니다. 아쉽게도 사진은 찍지 못했지만, 관련해 이야기 나눈 부분에 대해서 공유하기 위해 기록합니다. 대화했던 내용을 녹음했던 것은 아니였기 때문에, 정확하지 않을 수 있습니다. Q. 추상화란 무엇인가? A. 추상화는 필요없는 것을 없애는 것이다. 동시에 추상화는 용도와 의도가 명확해야 한다. 처음부터 추상화를 발견할 수는 없다. 절차지향으로 코드를 작성하고 난 뒤에 중복이 발견될 때, 추상화 될 가능성이 농후하다. 그러므로, 리팩토링을 통해 추상화를 만들어내자. 추상화는 어쩔 수 없이 탑-다운 방식이 아닌 바텀-업 방식에서 나타날 수 밖에 없다. Q. 추.. 2022. 12. 22. [관점을 디자인 하라] 책을 읽고 관점을 디자인하라고? 뭘 어떻게? 이 책의 목차만 봐도 이 책에 대한 내용을 한눈에 알 수 있을 것 같다. 심지어 그 안에 내용은 읽어보지 않아도 될 정도로. (우리 회사에서 이 책의 목차만 따로 전사 공유된 적이 있다)목차에 표현된 많은 내용이 '관점을 디자인하라'라는 책 제목과 유기적으로 연결되어 있는지는 잘 모르겠다.이건 저자 마음이니까. 읽으면서 개인적으로 약간의 취사선택을 하지 않았나 싶다. 마치 100개의 맛있는 음식이 진열되어 있더라도, 그중 내가 소화할 수 있는 양은 1~2개 정도의 음식이 있는 것처럼 말이다. 파트별로 카테고리를 나눠서 설명하고 있는데, 카테고리의 의미가 잘 이해되지 않았고, 파트별 작은 주제 하나하나가 파트와 같은 카테고리처럼 느껴졌다. 왜 그렇게 느껴졌는지 생각해보면,.. 2022. 12. 4. '내 스토리 w. 최원준 클럽장' 후기 내 자신이 원하는 것을 들여다 보는 기회가 얼마나 있을까? 좋은 기회로 회사에서 나의 스토리을 찾을 수 있도록 도와주는 프로그램에 참여했다. 트레바리 내에서 클럽장을 하고 계신 케이타운포유 대표 최원준님. 자신이 (고1 딸에게 뺏길수 없을 만큼) 제일 좋아한다던 하얀 후드티에 청바지을 입고 반가운 얼굴로 맞이해주셨는데, 그 분이 바로 케이타운포유의 최원준 대표님이셨다. 최원준 대표님이 자신이 근무하던 펑타이회사에서 약 30번넘게 '내스토리' 라는 주제로 같은 프로그램을 운영하셨다고 한다. 그 때문인지 모든 것이 스무스하게 이어져 좋은 경험을 할 수 있었다. '내 스토리' 라는 것은 사실 거창하고 대단한 것이 아니다. 내면에 가진 생각을 끄집어 낼 수 있도록 하는 것. 거창하고 대단한 것은 아니지만 쉬운 .. 2022. 11. 17. 왜 테스트 코드를 작성하는 걸까? 트레바리에서 혼자 3주라는 아주 짫은 시간에 구독 서비스을 만들었다. 낮밤, 주중/주말을 가리지 않고 정해진 기한 내에 개발을 마치고 싶었다. 여유 없이 기한내에 개발을 하다보니, 스스로 끊임없이 일정을 핑계삼아 올바른 길보다는 빠른 길을 찾으려는 타협점을 끊임없이 찾으려 했다. 트레바리의 개발 문화는 테스트 주도 개발 이라는 (사실 거창한건 아니지만) 문화을 CTO님이 최우선을 둔다. 나 또한 CTO 님의 영향 덕택에 테스트 코드을 마치 습관처럼 작성한다. 테스트 코드의 장점은 CTO 님 덕택에 직접 몸소 느끼고 있다. (장점에 대해서 중심으로 이야기하지는 않을 예정이다.) 구독 서비스을 만들면서 빠른 길을 찾기 위해서 습관처럼 작성하던 테스트 코드을 중간부터는 스킵하고 넘어가기 일쑤였다. 그러다 보니.. 2022. 10. 29. DB AutoIncrement 가 아니라, 왜 굳이 IDGenerator Server 을 만들었을까? 추가) 관련 IDGenerator 오픈소스을 만들었습니다. ( github link ) 배경 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; } 위 코드는 어떤 코드인지 짐작이 가는가? JPA 을 학습한 사람이라면 한번에 인지했을 것이다. 데이터베이스에 어떤 데이터을 저장시키기 위해서 데이터베이스에게 오름차순의 숫자을 요청하여 식별자 을 생성해내는 코드이다. 포스팅 제목에서 보았던 IDGenerator 종류의 하나이다. 이 쯤에서 제목에서 말하는 IDGenerator 는 무엇인지 이해할 필요가 있다. 앞에서 이미 언급된 '식별자' 을 만들어 주는 것이 IDGenerator 의 역할.. 2022. 10. 5. Mockito을 왜 쓰는지 모르겠다? (with. Test Double) 안녕하세요. 렌입니다. 오늘은 우리가 테스트 코드 작성할 때마다 Mockito 을 사용하는데, 왜 사용하는지 대해서 조금 더 깊게 이야기해볼까 합니다. 테스트하고자 하는 객체의 의존성을 격리한다. 라는 것이 우리가 흔히 아는 왜 사용하는지에 대한 답인데요. 여기서 Mocktio 는 Test Double 라는 큰 개념 안에 있는 하나입니다. Test Double에 대해서 알게 된다면 Mocktio 을 왜 사용하는지 조금은 이해할 수 있지 않을까요? When we are writing a test in which we cannot (or chose not to) use a real depended-on component (DOC), we can replace it with a Test Double. The .. 2022. 9. 22. 좋은 테스트에 대해서 이야기 하기 좋은 테스트에 대해서 이야기해볼까 합니다. 여기서 '좋은' 이라는 말은 개발자에게 언제나 고민의 시작이지 않았을까 싶습니다. 직접 테스트 코드를 작성하며 이 책(이펙티브 유닛 테스팅)에서 말하는 좋은 테스트에 대해서 공감이 되는 부분이 몃년이 지나서야 드디어 조금씩 알게되는 것 같습니다. 다음과 같은 주제로 이야기해보려 합니다. _2.1 읽기 쉬운 코드가 유지보수도 쉽다. _2.2 구조화가 잘 되어 있다면 이해하기 쉽다 _2.3 엉뚱한 걸 검사하는 건 좋지 않다 _2.4 독립적인 테스트는 혼자서도 잘 실행된다 읽기 쉬운 코드가 유지보수도 쉽다. 여기서 말하는 읽기 쉬운 코드란 어떤 코드를 말하는 걸까요? 그 가독성은 어떻게 채울 수 있을까요? 가독성 높은 코드? 가독성 이라는 단어는 눈으로는 이해할 수 .. 2022. 9. 18. 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. 9. 11. 이전 1 2 3 4 5 6 ··· 14 다음