반응형

Backend 언어 22

Java 복귀 기념 영접 잡기 (주니어 자바 개발자를 위한 100가지 질문)

거진 5년 경력동안 노드 및 파이썬으로 경력 잘 쌓았고 이제 탈노드를 위해 진행 예정인 사이드프로젝트 백엔드 서버는 java로 구성하기로 마음 먹었다. 이를 위해 커리어리의 주니어 자바 개발자를 위한 100가지 질문에 대해 답을 정리하면서 영접을 잡아보고자 한다. (진행 중) (고마워요 커리어리) JDK와 JRE의 차이점은 무엇입니까? JDK : Java Development Kit / JRE : Java Runtime Environment JRE는 자바 실행 환경으로 실행시키는데 필요한 라이브러리 JVM(자바 가상 머신)이 포함되어있다. JDK는 JRE를 또 포함한 개념으로 개발자들이 개발할 때 필요한 도구들을 지칭하는 개념(개발할 때 실행도 시켜야하니 JRE가 포함되는 것) ==와 equals의 차이..

Backend 언어/Java 2023.05.31

[이펙티브 타입스크립트] 몽키 패치보다는 안전한 타입을 사용하기

> 43장 몽키 패치보다는 안전한 타입을 사용하기 몽키 패치란? 런타임 중에 property object를 직접적으로 수정하는 일련의 작업들을 말한다. (JS 기준) 이러한 몽키 패치는 일반적으로 안티 패턴 (비효율적이거나 비생산적인 패턴)으로 인식된다. 가끔 옛 버전 기준으로 적용해야하는 케이스를 위해 커스터마이징을 하는 용도로 사용하는 것을 제외하고는 당연히 이러한 패치들은 런타임 중에 특정 시점에 적용되는 것인데도 불구하고 전역 변수로 적용이 되기 때문에 다른 코드에도 영향을 주고 부작용을 발생시킬 수밖에 없음 (아래 케이스 기준으로) 그리고 이렇게 처리하면 Typescript에서는 type에 반영이 안 되기 때문에 type checker에서 걸려 에러가 난다. 예시 window.monkey = '..

2021 ECMAScript (ES12) 신규 변경점

2021년 JS 신규 기능으로 그렇게 크게 변경된 점은 없고 크게 4가지만 기억하면 될 듯하다. 1. replaceAll 기능 추가 > 기존에 replace() function은 첫번째 글자만 치환하였고 전부 바꾸려면 정규식을 사용하거나 그렇게 처리를 했어야했다. > 이에 대해서 이제 replaceAll()을 사용하면 전부 바꿔주는 신규 함수가 생겼다. const testString = "test is just test" const resultReplace = testString.replace("test", "dev") const resultReplaceAll = testString.replaceAll("test", "dev") console.log(resultReplace) // dev is just ..

[aws-sdk] aws sdk 3이 나왔다.

express로 이루어진 프로젝트에서 발송 관련된 기능들을 nestJs 기반으로 분리하는 작업을 하고 있는데 하다가 aws-sdk3이 나왔단 사실을 알고 뜯어보고 비교할 것없이 바로 이번 플젝에 적용시키고자 한다. 일단 AWS 피셜 달라진 점 한줄 요약 : 최상급 Typescript 지원, 새로운 미들웨어 스택 및 각 서비스에 대해 개별 패키지를 갖추고 있는 모듈식 아키텍쳐가 적용되었다. 개별 패키지로 모듈화 되었단 것 때문에 이번에 바로 적용시키고자 함. 이번에 특히 세팅 중인 발송 관련된 서버는 aws-sdk에서 SES, SNS 밖에 안 쓰고 있기 때문에 전부 가져올 필요가 없었다. 너무 커.. aws-sdk > 모듈은 '@aws-sdk/client-' 뒤에 기존에 자신이 aws-sdk에서 사용하던 ..

[nestjs] nestjs를 시작하며

> 새로 싱가폴 서비스 및 신규 서비스들이 오픈을 하면서 기존 서비스 안에 깔려있던 Email, SMS 발송을 담당하던 코드를 분리할 필요성이 생겼고 이 때 새로 Notification Server를 만드는데 여기 framework는 nestjs를 사용해보고자 여기 정리하면서 시작해본다. > express는 웹 프레임워크이기 때문에 지금 개발하는 Notification API server는 더 적합하다 생각했음. 그래서 추후 리팩토링 과제로도 express -> nestjs로 변경하는게 남아있는거 > 일단 가장 먼저 '어? 이게 있구나'하고 느꼈던 강점이 module의 유무였다. nestjs 공부를 더 하고 더 개발을 하다보면 다르게 느낄 수 있겠는데 기존 typescript express로 개발을 할 ..

Jest 'JavaScript heap out of memory'에서 시작된 리팩토링 - (1)

엄청 간헐적으로 'JavaScript heap out of memory'이라고 말하며 test가 죽어버리는 일이 발생하기 시작 > 간헐적으로 발생하고 다른 개발자분들도 동일하게 발생. 다시 돌리면 사라짐 메모리 누수 때문인거 같아서 시작하였다. + 기존 전체 커버리지 테스트 (Service단의 전체 테스트)를 돌리면 너어어어어어무 오래 걸리는게 항상 걸렸다. 평균 테스트 커버리지는 80% 내외로 총 테스트 갯수는 900정도 됨 > 최근 토스 세션에서 말하길 해당 개발자는 약 1400개의 테스트가 걸리고 1분이 넘어가서 리팩토링을 시작하였다고 하였다. 즉 우린 무조건 손을 봐야하는 수준인거 (4/30일 기준 914개 2분 35초) 이렇게 오래걸리는 이유와 상당한 연관이 있어보였음. > 누군가가 테스트를 무..

[jest] expect를 정리해보자

- TDD의 핵심 expect에 대해서 얼마나 다양하게 많은지, 각각의 함수에 대해 어떤 상황이 적합한지 정리해보자 expect().toBe() : 인스턴스 비교를 할 때보단 값을 비교할 때 사용하는 것이 더 적합하다. 인스턴스를 인스턴스 내부의 property값들이 전부 같은지 비교하기 위해 toBe를 쓰게 된다면 서로 다른 객체라고 결과를 내보냄 expect().toEqual() : 인스턴스 값들을 체크하고자 한다면 toEqual이 적합하다 test('dummy test', () => { const data = {id : 3}; data['content'] = 'test case'; expect(data).toEqual({id: 3, content: 'test case'}); }) expect().t..

[jest] mocking 사용하기

- jest의 장점 중에 하나인 모킹(mocking)에 대해 정리한다. mocking이란 : ' mock = 모조품 ' 뜻 그대로 받아드리면 된다. 즉 테스트하고자 하는 코드가 의존하는 function이나 class에 대해 모조품을 만들어 '일단' 돌아가게 하는 것이다. 대표적인 예로 내가 테스트해야하는 코드 속에 전부 완료되고 나서 이메일을 발송해야하는 기능이 있다면? 테스트를 돌릴 때마다 이메일 발송하는 부분이 실행이 되어서 찐으로 이메일을 보내거나 이메일 발송에 문제가 있으면 내가 테스트 하고자 하는 부분과 상관없이 계속 테스트 결과는 Fail이 떨어질꺼 그래서 이럴 때 email보내는 부분을 '모킹'한다~ 라고 함 mocking 처리 : 함수를 개별적으로 모킹할 땐 jest.fn(), 모듈 덩어리..

TDD를 하는 이유

- 이제 3년차 개발자가 되어가는 시점인 지금 바빠 죽을 것 같은 시기에 피토하면서 이렇게 TDD 강의를 듣는 이유 (이렇게 정리해야 나중에는 제대로된 개발을 할 수 있을 것 같다. ) - 일단 개발한 다음에 테스트 코드를 구현하자 절대 되지 않는다.. > 회사에서 일단 가만히 냅두질 않는다. 테스크 다 끝내면 바로 다음 테스크를 줄 것이고 그 중 반은 기존 코드와 기능이나 데이터가 연관되어 있는 테스크일 것이다. 그럼 더욱더 테스트 코드는 멀어진다. - 코드 구조도 달라진다. Production code가 중심이 된 개발 코드와 Test code가 중심이 된 개발 코드는 구조적으로 달라질 수 밖에 없음 (사실 둘다 극한의 객체지향적으로 개발하면 달라질 것은 없음. 필요한 function의 차이만 있을 ..

2주차 Q&A

- 3~5년차 개발자가 갖춰야할 역량은? : 어떤 하나의 업무가 맡겨지면 혼자 할 수 있다 판단이 되는 경력이다. 개발 외적으로는 후임들이 들어오는 시기이기 때문에 후임에게 영향력을 발휘해서 알고 있는 것을 공유하고 도와주고 동기부여를 하는 그런 역할이 중요하다 생각한다. 나중에 하려고 하면 기회는 없다. 나만 개발을 잘 한다고 시니어가 되는건 아니라 생각한다. 블로그나 이런 곳에 글을 쓰면서 지식 공유에 대한 연습을 하고 경험을 쌓는다. 알려주는 만큼 내 지식이 된다 . - 시키는 대로 개발하는 것이 아닌 개발에 대한 자신의 철학, 가치관에 따라 일하고 주도적으로 일하는, 즐겨서 일하는 직원을 원한다. - 어떤 서비스를 맡겼을 때 얼마나 자기가 집중해서 일을 하는가 ~ 난 아쉬웠던게 스타트업이다 보니 ..

반응형