최근에 가장 생각을 많이 하는 고민이다. 성공 경험을 해본 사람과 안 해본 사람의 차이는 당면한 어려운 문제에 대해서 대처하는 방법이 다르다고 생각한다. 지금 이 문제를 해결 할 수 있는 문제인가? 아니면 해결 할 수 없는 문제인가? 작은 성공 경험들 그리고 큰 성공 경험을 가지고 있다면, 어려운 문제가 눈 앞에 닥쳐도 "하면 돼지"라는 마인드로 그 문제를 해결해 나갈 수 있다고 생각한다.대학 사물놀이 동호회에서 대회 연습을 하고 있었다. 상모를 돌리면서 각 악기를 쳐야하는 고난도 미션이 주어졌었다. 연습을 하다가 대회를 준비하는 선배가 나에게 벚꾸수(상모 수)를 해보는게 어떻냐고 제안을 했다. 그 때 나의 실력은 상모를 이제 막 돌릴 수 있는 단계였는데, 훨씬 더 어려운 제안이 왔었다. 그 제안 이 후..
재민님, 향로님, 토비님이 스프링 테스트에 대한 @Transactional 사용에 대한 의견들을 남겨주셨다. 모두 너무 정성들여 적으글들이라 한번에 모아서 읽어 보시면 Spring Test 시 @Transactional 사용에 대한 다양한 의견을 통해 DB 를 이용한 통합테스트에 대한 시각이 넓힐수 있을 것이다. 저도 몰랐던 사실을 많이 알게 되어 블로그와 영상으로 공유해주신 분들에게 감사한 말씀을 드립니다. :) 재민님의 '테스트에서 @Tansactional을 사용해야할까' https://youtu.be/PDhN6aiF7QQ?si=4Go7aqNAAL9wGrY8 향로님 '테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각' https://jojoldu.tistory.com/761 ..
자바나 다른 새로운 프로그래밍 언어를 배우면서 사용자 정의 타입을 만들고 사용하는 기법을 배우게 됩니다. 자바에서 가장 쉽게 사용할 수 있는 것은 클래스(class)입니다. 자바는 모든 것이 클래스로 구성되어 있습니다. 그렇다면, 사용자 정의 타입(이하 클래스)을 어떻게 활용할 수 있을까요? 자바의 클래스를 사용하여 어떻게 신뢰성 있는 프로그램 코드를 작성할 수 있을까요? 이제 이러한 개념을 실제 코드 예제를 통해 더 자세히 살펴보겠습니다. 계좌번호, 전화번호, 카드번호 등은 실무에서 반드시 암호화하여 데이터베이스에 저장해야 하는 정보입니다. 따라서 개발 시 많은 개발자들이 평문으로 된 계좌번호 등을 암호화하여 사용하게 됩니다. 아래 코드에서는 cardNumber가 암호화된 상태인지, 복호화된 상태인지 ..
혹시 String createdAt 로 선언하지 사용하지 않으신가요? DateTimeParseException 으로 고통받고 있지 않으신가요? 하지만 String 타입으로 데이터를 처리하고 있다면 버그나 Exception 이 발생하는 코드를 작성할 확률이 높아진다. 강타입 언어를 사용하는 장점을 전혀 활용하고 있지 못하기 때문에 적절한 타입을 사용하는 게 중요하다. 왜 도움이 되는지는 찬찬히 설명해 보려고 한다. java 표준 API 사용되는 타입을 사용한다면 데이터에 대한 유효성 검증을 library level (정확히는 Type 이 생성되는 시점) 에서 검증이 된다. Exception Handling이나 validation check를 코드를 작성하는 개발자가 직접 하지 않아도 된다는 뜻이다. 그렇다..
Prisma의 주요 단점 중 하나는 JOIN 절이 지원되지 않았던 것이었다. 이 문제는 최근 5.7 버젼에서 FeaturePreview로 추가되었고, 이 소식을 듣고 반가운 마음에 즉시 적용을 시작했다. 이렇게 고민 없이 적용할 수 있는 이유는 바로 테스트에 있다. 일반적으로 대부분은 주요 라이브러리의 버전 업데이트를 하지 않거나, 할 경우에도 매우 보수적으로 진행하는 경향이 있다. 그럼 어떻게 진행했는지 진행과정을 공유해 보겠다. 1. 패키지 업데이트 & 전체 테스트 수행 패키지 매니져를 통해서 업데이트를 하고 모든 테스트를 수행했지만, 실패하는 테스트 케이스는 없었다. 일단은 안심이다. 아직 추가된 Feature를 사용하지 않아서 쉽게 성공했을 수도 있다. 2. 기능 리팩토링 이제 가장 중요한 Rep..
최근에 작성한 테스트 관련 글이 조회수가 상당히 높았다. 그러나 처음부터 테스트 코드를 잘 작성했던 것은 아니었다. 이번 기회에 과거를 돌아보며 어떻게 공부했는지 나누고자 한다. 나도 'TDD by Example'이라는 책을 통해 테스트와 처음 만났다. 회사에서 진행한 스터디에 참여하며 테스트에 대한 이해를 높였다. 테스트가 프로그램의 스펙이라는 개념은 새롭게 다가왔다. Java에서는 Junit과 Test 키워드에 익숙했지만, Ruby나 다른 언어 및 테스트 프레임워크에서는 'Spec'을 사용하는 것도 흥미로웠다. 또한, 테스트 코드에 능숙한 동료가 복잡한 부가세 계산을 위한 테스트 케이스를 작성하며 그 실행 과정을 보여주었는데, 이는 매우 인상 깊었다. 당시 CTO께서는 빠른 피드백을 통해 즐거운 개발..
사진: Unsplash의Edu Lauton 성공이란 당신 삶의 목 적을 깨닫고, 당신의 잠 재력을 전부 발휘하고, 남들에게 도움이 되는 씨를 뿌리는 것이다. 오늘 아침 알라미 앱에서 기상미션을 하다가 알게 된 글귀이다. 성공을 어떻게 정의해야 할까? 오늘 본 이 내용이 가슴을 울리게 만드는 내용이라 내 생각을 적어보려 한다. 삶의 목적 나의 삶의 목적은 재밌는 일을 하는 것이다. 시기에 따라 행복한 삶일 때도 있었지만, 바뀐다고 무슨 문제가 있겠나. 삶의 대부분을 집과 회사에서 보내는데, 가족과의 행복, 일터에서 재밌게 보내려고 한다. 삶의 목적을 고민해 보라. 그렇다면 선택에 있어서 더 쉬워진다. 잠재력을 전부 발휘 나의 잠재력의 끝은 어디일까. 나의 잠재력의 한계를 알고 눈을 감을 수 있으려나? 나는..
예전 메모했던 내용을 소개해보고자 한다. 여러 가지 일로 바쁠 때는 작은 것 때문에 큰 것을 잃을 수 있습니다. 80세가 되어 인생을 뒤돌아볼 때 1994년도 1년 중 하필 왜 보너스 받는 시기를 앞두고 그 순간에 사직서를 냈을까 하고 후회하지는 않을 겁니다. 나중에 나이가 들어 중요하게 생각할 일은 그런 것들이 아니지요. 동시에, 인터넷이 세상을 바꿀 혁명적 사건임을 알면서도 여기에 뛰어들지 않는다면 정말 후회하게 될 것이라 믿었습니다. 이러한 각도에서 생각해보니…… 결정을 내리기가 매우 쉬워졌어요." 사진: Unsplash의Vladislav Babienko 배민을 퇴사했을 때 배민을 퇴사한걸 후회하지 않냐고 묻는 사람이 많았었다. 그때마다 위 내용을 이야기해 준다. 지나간 건 지나간 것일 뿐 나의 선..
주변상황 때문에 불평불만을 자주 하고 있진 않나요? 또는 본인의 생각과 다른 방향 때문에 이직을 고려하고 있진 않으신가요? 주도적인 인재란 무엇일까요? 내가 다녔던 회사 중 하나는 ‘업무 주도성’을 인재상으로 삼은 회사가 있었다. 이러한 추상적인 용어는 처음에는 잘 와닫지 않았다. 리더십 교육에서 강사님이 주도성을 가진 인재의 의미에 대해 질문을 했을 때, 많은 이들이 정확히 대답하지 못했다. 인터넷에 검색이나 ChatGPT를 통해 멋진 답변을 얻을 수도 있지만, 나의 경험을 바탕으로 이를 정리해 보겠다. 어려운 환경에 대한 불만들. 테스트 코드 작성이나 코드리뷰, 코딩 컨벤션등이 정립되지 않은 환경에서 일하는 개발자 동료들의 불만을 들을때가 있습니다. 나는 그럴 때마다 이렇게 조언을 한다. “팀원들과 ..
사진: Unsplash의Jared Rice 가끔은 일이 잘 풀리지 않고, 일상이 무기력함으로 가득 찰 때가 있을 것이다. 직장생활이든 사업이든 삶을 살다 보면 누구나 한 번쯤은 슬럼프를 겪게 되어 있다. 제 경험을 말해 보자면, 직장 생활 7년 차에 처음으로 큰 슬럼프를 경험했다. 프로젝트가 중단되고 여러 어려움을 겪었는데 그때 정말 일할 때 의욕도 없고 전혀 삶이 즐겁지가 않았다. 팀의 선배 개발자, 그리고 비슷한 연차의 동료와 함께 셋이서 슬럼프에 대해 이야기하는 티타임을 가졌다. 다양한 이야기들 나왔지만 동료와 나와의 공통점은 일과 삶이 하나가 되어 일이 곧 나의 삶이었던 것이다. 일이 잘 풀리면 행복하고 의욕이 넘쳤고, 반대로 일이 잘 풀리지 않으면 나의 기분은 다운되고 슬럼프에 빠졌던 것이다. ..