오브젝트 세미나 참여 이유? 요즘 클린 코드책과 소프트웨어 장인을 읽으면서 비록 개발팀 규모는 작지만 우리도 이러한 좋은 품질의 코드를 추구하고 변경되기 전보다 변경된 후가 더 깔끔해진 코드를 보고 작은 성공을 경험하고 성장한다는 것을 전파하고 싶었다. 그렇기에 내가 먼저 바뀌어야 했고 어제보다 더 발전해야했다. 그러다 우연히 개발자 커뮤니티에서 객체지향의 사실과 오해, 오브젝트를 집필하신 조영호 개발자님이 디어코퍼레이션에서 세미나를 여신다는 것을 보게 되었고 참여하게 되었습니다. 도메인이란? 입사를 하고 인수인계를 하게 되면 가장 먼저하는 것이 도메인에 대한 이해이다. 개발지식 만큼 가장 중요하게 생각하는 것이 도메인에 대한 지식이다. 조영호님은 이것을 실무적인 관점으로 간단하게 요약했는데 오프라인에서..
레디스에서 제공하는 자료구조 Strings 단순한 insert 문을 대체하기 위해 사용 key : Value 형태로 저장하며 모든 종류의 문자열 데이터를 저장할 수 있다. 예시: 유저 token 저장, JPEG 이미지를 저장하거나, HTML fragment 를 캐싱 등 List 일반적인 Linked List와 같은 구조로 되어 있어 데이터를 앞에서 넣거나 뒤에서 넣어도 소모되는 시간은 동일하다. LPUSH, RPUSH, LPOP, RPOP을 통해 양쪽에 데이터를 넣거나 꺼낼 수 있다. 순차적으로 처리를 해야할 때 유용하다. 예시: Job Queue, Pub-Sub 패턴(발행-구독 패턴) 생산자가 아이템을 만들어서 list에 넣으면 소비자가 꺼내와서 액션을 수행하는 식으로 동작합니다. 트위터의 타임라인에 ..
내가 주로 주석을 쓰던 때를 생각해보면 나쁜 디자인의 코드를 숨기고 설명을 하려고 주로 썼던 것 같다. 하지만 계속 업데이트가 되고 코드가 바뀌면서 주석의 신뢰성은 점점 낮아졌고 주석을 보지 않게 되었다. 결국 주석도 레거시가 되어 나쁜 코드를 더 나쁘게 만드는 상황이 된 것이다. 주석은 나쁜 코드를 막아주지 못한다. 나쁜 코드를 설명하기 위해 주석으로 설명하다 보면 점점 지저분해지는 코드를 볼 수 있다. 많은 개발자들이 가장 깔끔한 코드는 주석없이 의도를 잘 설명한 코드가 깨끗한 코드라고 한다. 그러니 우리는 주석에 시간을 투자하는 것보다 아래처럼 투자해보는 것은 어떨까? 주석을 달아야 코드를 이해할 수 있다면 다시 작성해보자 코드로 의도를 표현할 수 있게 고민하고 설계한다. 주석보단 좋은 네이밍을 통..
작게 만들기 주니어 개발자로써 가장 큰 실수를 하는 것이 하나의 함수에 너무 많은 책임과 기능을 넣음으로써 해당 로직이 무슨 기능을 하는지 모르게 되는 실수를 많이 하게 된다. 저도 그런 실수를 종종하고 후회를 합니다. 왜 작게 만들면 좋을까? 책에서도 작게 만들면 무엇이 좋은지 증거나 자료를 제시해주지는 않는다. 하지만 좋은 코드들을 보게 되면 대부분 아주 작은 부분까지 분리되어 있다. 이렇게 많이 분리 시켜놓으면 더 관리하기 어렵다고 생각 할 수 있다. 하지만 직접 프로그래밍하면서 설계하는 개발자라면 개발하면서 나누는 이유와 그로 가져오는 이익들을 느낄 수 있다. public class ValidationUtils { public boolean idCheck(String id) { String ema..
What is Redis? Remote Dictionary Server의 줄인 말로 인 메모리형 key, value 으로 데이터를 저장하는 데이터 스토어입니다. 캐시 서버로 주로 사용되는 오픈소스이다. ※ 캐시: 데이터나 값을 미리 저장해놓고 메모리에 임시로 저장해서 호출 시 데이터를 찾는 리소스 없이 바로 가져올 수 있다. 캐시 서버를 사용하는 이유 다이나믹 프로그래밍에서 나오게 되는 중요한 핵심과 비슷한데 연산을 미리 저장해놓고 다시 호출될 때 처음부터 연산하지 않고 미리 연산된 데이터를 가져와서 이어서 연산을 시작하는 개념과 비슷하다고 볼 수 있다. 예를 들어 가게 평점을 들어보자. 배달의 민족을 보면 별점을 참여한 사람은 7000명 가까이 되는데 수천만개의 데이터에서 한 음식점에 7000개의 리뷰..
의도를 명확하게 클린 코드에서는 의도를 명확하게 하는 것을 매우 중요하게 생각한다. 코드에 대해 명확한 의도를 가지지 않고 코딩을 하게된다면 어떻게 될까 아래의 예제를 통해 알아보자 List dateTimes; 위의 변수를 보고 어떤 역활을 하는지 생각해보자. 코드에 아무런 의도가 없어서 추론이 불가능하다. 우리는 결국 이코드를 하나하나 추적해서 알아가는 수 밖에 없다. 하지만 이렇게 이름에 의도를 나타낸다면? List memberJoinedDateTimes; 아! 멤버(회원)가 가입한 시간을 모은 변수구나! 라고 바로 생각하게 된다. 코드에 의도를 명확하게 표현하는 것은 중요하고 이러한 네이밍 하나로 엄청난 시간을 절약하게 된다. 물론 조건문 반복문에도 의도를 나타내는 것은 매우 중요하다. List d..