일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- JIT
- 객체
- 자바
- 객체지향의 사실과 오해
- JPA
- Refactor
- 캐시
- 리팩토링
- SRP
- 클린코드
- 협력
- 스프링
- 도메인 모델
- string
- 객체지향
- 쿼리 최적화
- spring boot
- REST API
- 캐싱
- 캡슐화
- 추상화
- 인터프리터
- 클린 코드
- 책임
- 재사용성
- Java
- Lombok
- clean code
- 스프링부트
- cache
- Today
- Total
목록Develop (54)
GO SIWOO!

들어가며 백엔드 개발자 4명이서 힘들게 개발한 맛집 소셜 웹 서비스를 팀원이 배포 하였지만 결제 문제로 인해 배포가 중단되었습니다. 하지만 배포를 담당한 팀원이 다른 일로 인해 배포를 할 수 없는 상황에 있었고, 그런 이유로 제가 해당 프로젝트를 다시 배포해야 하는 상황에 놓였습니다. 프로젝트의 Github 주소는 다음과 같고 배포 사이트 접속 주소와 시연 영상은 readme에 있습니다. LikeLion-team10/Mat-ZIP (github.com) GitHub - LikeLion-team10/Mat-ZIP Contribute to LikeLion-team10/Mat-ZIP development by creating an account on GitHub. github.com AWS EC2 배포 환경은..

메모리 부족 AWS 프리티어를 사용해 배포를 하던 중 문제가 발생했습니다. 처절한 ctrl + c의 흔적들... 위와 같이 Spring boot 기반의 프로젝트를 Clone한 뒤 jar 파일 생성 과정에서 실패를 한 것을 보실 수 있습니다. 프리티어의 사양이 좋지 않음에도 너무 오래 걸린다 싶어 ctrl + c를 통해 중지해보고자 하지만 명령어를 전혀 먹지 않습니다. 문제는 메모리 부족으로, 프리티어의 1GB의 부족한 메모리는 빌드 과정에서 문제가 발생하기에 충분한 이유였습니다. 금전적 문제 때문에 프리티어 내에서 문제를 해결을 하고자 하였고 AWS report에서 참고해 메모리 스왑을 통하여 문제해결을 하였습니다. 스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당 | AWS..

[리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (9) - 조회 쿼리 성능 개선 [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (8) - JDBC Batch INSERT [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (7) - Ehcache 3 사용 [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (6) - Redis를 통 gosiwoo.tistory.com 📌들어가며 이전 포스팅에서 Members 테이블에 유니크 인덱스, 읽기전용 트랜잭션을 사용하며 조회 쿼리 성능을 향상한 과정에 대해서 설명했습니다. 이번 포스팅에서 OSIV와 DTO를 프로젝트에 적용해본 과정을 간단하게 포스팅 하겠습니다. 📌OSIV 란? OSIV는 Open Session In View의 약자로 영속성 컨텍스트를 뷰 랜더링이 끝날..

[리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (8) - JDBC Batch INSERT [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (7) - Ehcache 3 사용 [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (6) - Redis를 통한 Open API 결과 캐싱(Caching) [리팩토링 일지] 팀 프로젝트, 나홀로 리 gosiwoo.tistory.com 📌들어가며 이전 포스팅에서 대량의 데이터를 JDBC Batch Insert를 통해 프로젝트 실행과 동시에 삽입했습니다. 이번 포스팅에서 300만건의 데이터에서 조회 성능을 개선하는 과정에 대해서 포스팅 하겠습니다. Index 설정, 프로젝션, Native Query, 검색 조건 최적화, 읽기 전용 트랜잭션, 캐싱, 지연 로딩 등등 많은 쿼..

[리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (7) - Ehcache 3 사용 [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (6) - Redis를 통한 Open API 결과 캐싱(Caching) [리팩토링 일지] 팀 프로젝트, 나홀로 리팩토링 (5) - 응답 form & Global Exception [리팩토링 일지] 팀 프로젝트, gosiwoo.tistory.com 📌대량의 데이터를 필요로 한 이유 요즈음 Real MySQL 8.0을 공부하며 Index 설정을 통한 쿼리 최적화를 이루고자 대량의 데이터가 필요했습니다. 우선 Index를 설정할 테이블은 Member, 회원 테이블로 다량의 데이터를 CommanLineRunner를 사용해 프로젝트 시작과 동시에 데이터를 집어넣기로 하였습니다. 📌JD..

0. SerialDate jcommon/src/main/java/org/jfree/date/SerialDate.java at master · jfree/jcommon (github.com) JCommon 라이브러리 중 org.jfree.date라는 패키지 안에 위치한 SerialDate라는 클래스의 래팩터링에 관해서 얘기한다. 데이비드 길버트가 만든 날짜를 표현하는 자바 오픈소스 클래스이다. java.util.Date, java.util.Calendar과 같은 날짜를 제공하는 자바 클래스와 다르게 시간 기반의 날짜 클래스가 아닌 순수 날짜 클래스를 만들고자 SerialDate를 만들었다. 1. 첫째, 돌려보자 SerialDateTests라는 클래스는 단위 테스트 케이스 몇 개블 제공한다. 하지만 해당 클..

[클린 코드] 11장 - 시스템 [클린 코드] 10장 - 클래스 [클린 코드] 9장 - 단위 테스트 1. TDD의 법칙 세 가지 1. 첫째 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 둘째 : 컴파일은 실패하지 않으면 gosiwoo.tistory.com 1. 창발적 설계로 깔끔한 코드를 구현하자 켄트 벡은 다음 규칙을 따르면 설계는 단순하다고 한다. 모든 테스트를 실행한다 중복을 없앤다 프로그래머 의도를 표현한다 클래스와 메서드 수를 최소로 줄인다 단순한 설계 규칙 1: 모든 테스트를 실행하라 테스트가 불가능한 시스템은 검증도 불가능하다. 테스트가 가능한 시스템을 만드려고 애쓰면 설계 품질이 더불어 높아진다. SRP, 단일 책임을 준수하는 클래스는 테스트가 더욱 쉬우며 더..

[클린 코드] 10장 - 클래스 [클린 코드] 9장 - 단위 테스트 1. TDD의 법칙 세 가지 1. 첫째 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 둘째 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도 gosiwoo.tistory.com 1. 시스템 제작과 시스템 사용을 분리하라 소프트웨어 시스템은 준비 과정과 런타임 로직을 분리해야 한다. public Service getService(){ if (service == null) service = new MyServiceImpl(...); // 모든 상황에 적합한 기본값일까? return service; } 위의 코드는 Lazy Initialization/Evaluation의 일반적인 형태로 런타임에서 객체를 초기화..

[클린 코드] 9장 - 단위 테스트 1. TDD의 법칙 세 가지 1. 첫째 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 둘째 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3 gosiwoo.tistory.com 1. 클래스 체계 클래스를 정의하는 표준 자바 관례에 따르면 다음과 같다. public static 상수 (클래스 상수) private static 변수 (클래스 변수) private instance 변수 public instance 변수 public 함수 private 함수 public class Person { public static final String DEFAULT_NAME = "Unknown"; // 1. 클래스 상수 ..

[클린 코드] 8장 - 경계 1. 외부 코드 사용하기 패키지 또는 프레임워크 사용자는 자신의 요구에 집중하는 인터페이스를 바란다 -> 시스템 경계에서 문제가 생길 수 있다. // case1 Map sensors = new HashMap(); Sensor s = (Sensor)sensor gosiwoo.tistory.com 1. TDD의 법칙 세 가지 1. 첫째 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 둘째 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 셋째 : 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 이렇게 하면 수 많은 테스트 코드를 만들어 낸다. 하지만 이는 심각한 관리 문제를 유발하기도 한다. 2. 깨끗..