- 삶 2022년 회고(AWS Korea 이직, 아내의 복직, 육아 전쟁) #1 AWS Korea Solutions Architect로 이직하다 올해 4월 링크드인을 통해서 AWS 채용 담당자에게 연락이 왔다. 링크드인 특유의 스팸성 채용 연락은 적당히 필터링 하고 있어서 이번에도 무시하려고 했지만 내용을 읽어보니 채용 포지션 자체는 꽤 흥미로웠다. 국내 스타트업 고객을 담당하는 SA(Solutions Architect) 역할이었다. 사실 역할 자체보다는 "백엔드 개발 경험"과 "스타트업 근무" 경험을 가진 대상으로 연락을 드렸다는 부분이 재밌었다. 일단 채용 담당자에게 조금 설명을 들어볼 수 있는지 회신을 했다. 답장은 거의 바로 왔고 유선으로 연락을 준다고 편한 시간을 전해달라고 했다. 생각보다 급하게 진행되는 느낌에 당황했지만 유선 연락을 통해 궁금한 것을 물어보고 준비한..
- Spring Boot [10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (7) 단위 테스트(Unit Test) JUnit5 적용하기 Kotiln과 Spring Boot을 모르더라도 10분씩 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목표입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 이번에는 Service의 함수들에 대한 단위 테스트를 작성하는 방법을 소개한다. 단위 테스트란 기존의 작성된 코드를 검증하는 자동 테스트를 말한다. 단위 테스트는 TDD(테스트 주도 개발)에 아주 중요한 도구가 되기도 한다. 보통 단위 테스트를 작성할 때 몇 가지 프레임워크를 함께 사용하는데 대표적으로 JUnit과 MockK 프레임워크이다. JUnit은 자바의 단위 테스트를 위한 프레임워크 도구로 Assert 단정문을 통해서 테스트 수행 결과를 판별하여 결과를 리포트해준다...
- 삶 경제적 자유를 꿈꾸는 사람들 최근에 경제적 자유, 조기 은퇴를 꿈꾸는 사람들이 많아졌다. 노동 소득보다 금융 소득이 앞서는 시대가 오면서 이런 꿈은 자연스럽게 모든 성인들 마음 속에 자리잡은 것 같다. 사실 예전부터 "부자 아빠, 가난한 아빠"와 같은 책이 한참 인기가 많았던 시절에도 부동산 투자, 금융 투자 및 기타 레버리지를 활용한 투자를 성공하여 은퇴 후 풍족한 삶을 준비하자는 컨텐츠는 꽤나 유행하긴 했지만, 당시에는 부동산이 아닌 주식 투자와 같은 금융 투자는 절대 하면 안되는 도박이라는 생각을 가진 사람들이 대다수였다. (특히 부모님들이 다른건 다 되도 주식 투자만 하지 말라며 말렸던 기억이 다들 있을 것(?) 같다.) 하지만 기분이 좋은 것은 잠시, 현실적인 현재의 내 상황을 생각해보자. 경제적 자유와 조기 은퇴. 상상만..
- ETC 성능 테스트, 부하 테스트, 스트레스 테스트란? 얼마 전 회사에서 만든 gRPC 서비스의 성능 테스트를 진행했다. 이유는 현재 시스템 상태에서 특정 조건의 DB 데이터를 count 하는 기능이 있었는데, count 쿼리 특성 상 DB 데이터가 많아지면 많아질수록 쿼리 속도가 선형적으로 증가하기 때문이다. (이런 경우는 Index로 해결되지 않는다.) 이런 경우에는 Workaround로 현재 DB 환경에서 count 의 쿼리가 데이터 양이 어느 정도의 수준까지 먼저 허용될지 확인하는 것이 중요하다. 그리고 해당 데이터가 적재되기 전까지 적절한 방법을 고민해서 시스템 업데이트를 해야한다. 아무튼 성능 테스트를 진행하면서 테스트 관련된 용어가 조금 헷갈렸는데, 그 이유는 평소 성능 테스트와 부하 테스트 용어를 별 생각없이 비슷한 개념으로 섞어서 사용했기 때..
- Spring Boot [10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (6) Service Layer 적용하기 Kotiln과 Spring Boot을 모르더라도 10분씩 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목표입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 보통 Spring Boot로 Web Application을 만들다보면 대부분의 프로젝트가 pakage 구조를 controller, service, repository로 나누고 있는 것을 발견할 수 있다. 대부분의 프로젝트가 이런 일관된 구조를 가지는 이유는 Spring에서 지향하는 계층 구조인 3 Tier Architecture(3계층 구조 - Presentation Layer, Business Layer, Persistence Layer)를 반영하기 위해서라고 생각하면 된..
- 엔지니어 내적요소(R.A.M.P) Self Check 하기 R.A.M.P 란? 현재 조직에서의 나 자신의 내적요소를 측정하는 대표적인 4가지 요소로 R.A.M.P가 있다. 각각 Relatedness(관계성), Autonomy(자율성), Mastery(숙련), Purpose(목적)을 의미하는데 이 요소를 각각 수치화해서 비교를 해보면 내가 현재 어느 부분에서 갈증을 느끼는지 확인할 수 있다. 나는 각 요소를 5점 만점으로 측정했는데 사실 이렇게 측정하는 수치는 남들과 비교하는 값이 아닌 나 스스로 어느 요소가 다른 요소에 비해서 떨어지는지 확인하는 것이 목적이기 때문에 점수의 분포를 확인하는 것에 의미를 두면 된다. 개인적으로는 A(Autonomy), P(Purpose)의 값이 매우 낮게 평가됐고 M은 그나마 높았다. 각각의 요소에 대해서 짧게 회고를 해봤는데, ..
- ETC Gradle Wrapper란? Gradle 빌드에 권장되는 사용 방법은 Gradle Wrapper를 사용하는 것이다. Wrapper는 미리 선언된 버전의 Gradle을 호출하고, 필요한 경우 미리 다운로드한다. Java 프로젝트를 CI 환경에서 빌드할 때 CI 환경을 프로젝트 빌드 환경과 매번 맞춰줄 필요가 없는 이유가 바로 Gradle Wrapper를 사용하기 때문이다. 즉, 환경에 종속되지 않고 프로젝트를 빌드할 수 있는데 이런 점이 Gradle이 가진 강력한 특징중 하나이다. gradle wrapper 명령어를 실행하면 아래처럼 파일들이 생성된다. $ gradle wrapper BUILD SUCCESSFUL in 545ms 1 actionable task: 1 executed $ tree . ├── gradle │ └── wra..
- ETC 임의(Arbitrary)값과 무작위(Random)값은 어떻게 다를까? 각각 Arbitrary는 '임의의'라는 Random은 '무작위'라는 사전적인 의미를 지니고 있다. 일상생활에서 두 단어는 보통 구별없이 사용해도 큰 무리가 되지 않는다. 하지만 컴퓨터과학이나 수학 영역에서는 이 두 단어의 미묘한 차이는 결코 작지 않다. 임의(Arbitrary) Arbitrary는 any의 의미를 가진다. 대상이 되는 것들 중에서 무엇을 선택해도 아무런 상관이 없다는 뜻이다. 무엇을 선택하더라도 선택에 따른 비용은 동일하다. 예를 들어 1부터 100까지의 숫자 중에서 1개를 선택하는 경우, 그냥 선택하는 행위 자체가 중요하다. 즉, 무엇을 선택해도 상관없으며 실제 선택의 행위로 인한 비용도 동일하다. 보통 여러 가지 경우의 수를 통해서 무언가를 테스트하는 경우 임의 값을 통해서 검증하는 ..
- Spring Boot [10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (5) Spring Data 적용하기 Kotiln과 Spring Boot을 모르더라도 10분씩 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목표입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 대부분의 Web Application은 데이터베이스(DB)에 저장된 데이터의 CRUD를 함께 수행하면서 비지니스 로직을 처리하는 경우가 많다. 이런 데이터베이스 저장소(MySQL, Redis, MongoDB 등)의 종류가 매우 다양하기 때문에, 만약 특정 저장소에 강합 결합도를 가진 Web Application이 있다면 상황에 따라서 언제든지 변경될 수 있는 Storage Layer의 변경이 매우 어려워진다. 이런 이슈를 해소하기 위해서 Spring은 Storage Laye..
- Spring Boot [10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (4) Spring MVC 적용하기 Kotiln과 Spring Boot을 모르더라도 10분씩 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목표입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 전에 지금까지는 spring-boot-starter를 사용해서 Spring Boot Application을 만들어봤다. 앞에서 우리가 만든 Application은 실행시키면 Logging만 수행하고 바로 종료되는 단순한 Java Application이다. 여기서 우리가 주의해야하는 점은 Spring과 Spring Boot는 그 자체로는 Web Application 프레임워크가 아닌, Java 개발을 쉽게 사용할 수 있게 도와주는 Java Application 프레임워크이라는..