본문 바로가기

Happyer16

(314)
1장. JPA 소개 나는 개발 시작할 때부터 Spring + JPA를 사용하였기 때문에 JPA 없이 직접 SQL문을 작성하거나, JdbcTemplate을 사용해보지 않았다. JPA가 없던 시절의 고민 데이터베이스 테이블 설계는 그렇게 열심히 하면서 , 왜 객체 모델링은 대충하고 단지 테이블에 맞추는데 급급할까? 테이블을 만들고 객체는 객체스럽게 만들어도 두개 차이를 메우기 위한 SQL 작업이 너무 많아짐 -> 결국, 객체 모델이 데이터 중심의 모델로 퇴화하게 됨... JPA가 주는 행복 CRUD SQL 작성할 필요 없음 조회된 결과를 객체에 자동 매핑 객체답게 개발하다보니 유지보수도 훨씬 좋아짐 SQL을 직접 다루면? 엔티티에 필드 추가되면? -> 모든 쿼리 수정 반복,반복,반복.... SQL에 의존적인 개발 -> 뭔가 잘..
에어비앤비 보호되어 있는 글입니다.
Clean Code - 13장. 동시성 개요 객체는 처리의 추상화다. 스레드는 일정의 추상화다. -제임스 O.코플리엔 동시성과 깔끔한 코드는 양립하기 어렵다. 다중 스레드 테스트해보기도 어렵다. 이 2가지 어려움을 해당 단원을 읽으면서 헤쳐나갈 수 있었다! 동시성이 필요한 이유 동시성은 Coupling을 없애는 전략이다. 동시성은 무엇(what)과 언제(when)을 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 서로밀접하다. 무엇,언제를 분리하면 애플리케이션 구조와 효율이 극적으로 좋아진다. 응답 시간과 작업 처리량 개선에도 도움이 된다. 데이터를 대량으로 분석하는 시스템에서 병렬로 처리 구조 개선의 좋은 예는 Servlet 모델일 것이다. 이론적으로, Servlet 개발자는 요청을 개별적으로 처리하는 데에만 신경을 쓰며 요청 ..
Clean Code 3장 - 함수 클린 코드 책을 읽으면서 해당 단원이 가장 쉬운 부분 같지만 잘 지키지 않고, 그리고 지키면 가장 효과가 가장 크다 생각한다. 아래 함수를 보면 이해가 잘 되는가? 해당 함수를 깨끗하게 만들어보자. public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { boolean isTestPage = pageData.hasAttribute("Test"); if (isTestPage) { WikiPage testPage = pageData.getWikiPage(); StringBuffer newPageContent = new StringBuffer(); includeSetupP..
Spring Boot Test 및 심화 커머스 회사에서 개발을 하다보면 테스트 코드의 중요성은 스스로 깨닫게 된다. 그래서 Spring Boot 테스트 기능에 대해 간단히 정리해 보려한다. 테스트 코드는 멋으로 하는거 아니냐? 이렇게 생각하신 분은 아직 테스트 코드를 짤 줄 모르거나 짜지 않아서라 생각한다. 내가 생각하는 테스트 코드의 장점은 코드가 자동으로 깔끔해진다. 테스트 코드를 짜려면 결국 한가지 기능을 가진 클래스를 짤 수 밖에 없다. 리팩토링에 대한 자신감이 생긴다. 다른 개발자들에게는 설명서가 된다. (가장크다고 생각하는 부분) 테스트 코드가 없다면 주문/결제 테스트를 위해서 웹사이트에 들어가 상품검색부터 정보 입력까지 다 한 후에 코드를 테스트해야 한다. 한번만 테스트하면 끝이 나는가?? 수정->테스트->수정->테스트의 무한 반..
Clean Code 4장 - 주석 개발을 하다보면 보통 주석을 잘 달지 않아, 주석 좀 많이 달아라는 얘기를 많이 들었을 것이다. 그러면 주석이 많으면 많을수록 좋은걸까? 아니다! 중요한 주석이 있지만, 자신의 나쁜 코드를 숨기기 위해서 주석을 사용하는 경우도 있다. 오히려 주석을 많이 달았다면 자신이 코드로 모든 걸 표현하지 못했다고 반성해야 한다! 예시를 살펴보자 // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) ... if (employee.isEligibleForFullBenefits()) ... 위와 같이 대부분 함수로 표현할 수 있다. 좋은 주석 1. 정보를 제공하는 주석 // 테스트 중인 Responder 인스턴스..
Clean Code 5장 - 형식 맞추기 자바 코딩을 하면서 여러가지 패턴을 적용하고, 인터페이스를 이용하는 등 멋지게 하고 싶어한다. 하지만, 그 전에 가장 기초적인게 코드의 형식을 맞추는 것이라 생각한다. IDE에서 Formatter 를 적용해 놓으면 팀내 들여쓰기 등 형식은 맞출 수 있다. 하지만 클래스의 세로 길이, 메소드의 세로 길이는 어느 정도가 적합할까? 내가 만드는 기능이 복잡해서 클래스가 크다고? JUnit과 같은 큰 프로젝트도 대부분 200줄 정도의 파일로 구성되어 있다. 즉, 방금과 같은 변명은 핑계이다. 신문 기사처럼 작성하라 아주 좋은 신문 기사를 떠올려보라 . 독자는 위에서 아래로 기사를 읽음 첫 문단은 요약된 내용이다. 세세한 내용은 밑에서 나온다. -> 소스 파일 첫부분은 고차원 개념 기사는 짧다 개념은 빈행으로 분..
리팩토링 - 12장. 복합 리팩토링 ( 절차코드를 객체로 전환 ) 코드 리뷰를 요즘 적극적으로 진행하면서 리팩토링 공부에 대한 필요성을 느꼈다. 팀원들이 가끔 너무 바빠서 리팩토링 할 시간이 없다고 하는데, 마틴 말대로 리팩토링은 기능을 추가하거나 버그를 수정하면서 조금씩 해야 된다고 생각한다. 복합 리팩토링 파트는 함수명 재정의처럼 금방 되는건 아니지만, 아래와 같은 이유로 해당 리팩토링은 꼭 필요하다. 충분히 이해하지 못한 상태에서 설계를 결정하는 일이 누적되면 막 자란 물풀로 막힌 운하처럼 프로그램이 막혀버린다. - 마틴 파울러 절차 코드를 객체로 전환 ( Convert Procedural Design to Objects ) 코드가 절차식으로 작성되어 있을 땐, 데이터 레코드를 객체로 바꾸고, 기능을 쪼개서 각각의 객체로 옮기자. // Before - 절차지향적인..
Spring을 이용하여 개발할 때 고민, 클린코드 짜기, 코드리뷰 항목 개발자라면 자신과 팀원들을 위해서 깔끔한 코드를 짜야 한다. 나도 항상 잘 짜고 싶고 고민이 많아 해당 블로깅을 통해 정리를 해놓으려고 한다. 1. 최소한의 정성은 들였는가? ( 중복, 단일 책임원칙, 의미를 담은 상수 ) 먼저 기본적으로 살펴볼 목록은 이정도 인 것 같다. 코드에 중복된 부분은 없는가? 코드가 무엇을 하는 것인지 이해가 불편하지 않은가? 코드가 자신이 있어야 할 자리에 있는가? 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성 되었는가? // 읽기 편한 코드를 만들자! private boolean canUpgardeLevel(User user){ Level currentLevel = user.getLevel(); switch(currentLevel..
경매 공부 - 2일차 ( 12/28 ) 쉬운물건 찾아보기 아무것도 모르는 1일차에 쉬운물건 찾는 방법에 대해 간략하게 알아봤다. 제대로 공부하기 위해서 내가 직접 쉬운 물건을 찾아보려 한다. 쉬운 물건을 찾으려면 경매 흐름 정도는 알아야겠지? 물건선정 : 아파트, 오피스텔, 빌라, 상가, 땅, 기타 지역을 살펴본다. 나는 자본이 적기도 하고 쉬운 물건인 꼬마아파트에 도전해보려 한다. 물건분석 : 경매 정보 확인, 시세 사이트, 포털 지도, 지역 공인 중개소, 인터넷, 자금 계획 세우기, 현장 조사 계획 세우기 권리분석 : 현장조사 낙찰가 선정 및 자금 계획 세욱기 입찰 낙찰 후 관리 1. 물건 선정 - 돈 되는 지역은 어딜까? 나도 자취를 하고 있고, 1인 가구 유입지역은 가격이 일단 저렴하고 수요가 많다. 서울 및 경기도권에 1인 가구 유입지역은 어디가 있을..