클린코드 - 13.동시성
2022. 8. 13. 20:25
개발 서적/클린코드
객체는 처리의 추상화다. 스레드는 일정의 추상화다. - 제임스 O. 코플리엔 동시성과 깔끔한 코드는 양립하기 아주 어렵다 1. 동시성이 필요한 이유 정보를 대량으로 분석하는 시스템의 경우 정보를 나눠 병렬로 처리할 수 있다면 효율이 증가한다 - 동시성이 항상 성능을 높여주는 것은 아니다 동시성은 때로 성능을 높여준다 대기 시간이 아주 길어 여러 스레드가 프로세서를 공유할 수 있거나, 여러 프로세서가 동시에 처리할 독립적인 계산이 충분히 많은 경우에만 성능이 높아진다. 어느 쪽도 일상적으로 발생하는 상황은 아니다 - 단일 스레드 시스템과 다중 스레드 시스템은 설계가 판이하게 다르다 일반적으로 무엇과 언제를 분리하면 시스템 구조가 크게 달라진다 - 컨테이너 동작방식을 알아야 동시성을 사용할 수 있다 컨테이너..
클린코드 - 12.창발성
2022. 8. 12. 16:36
개발 서적/클린코드
창발성(創發性) 이란? 남이 모르거나 하지 아니한 것을 처음으로 또는 새롭게 밝혀내거나 이루어 내는 성질. 1. 창발적 설계로 깔끔한 코드를 구현하자 모든 테스트를 실행하라 중복을 없애라 프로그래머 의도를 표현하라 클래스와 메서드 수를 최소로 줄여라 2. 모든 테스트를 실행하라 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질도 함께 높아진다 단일 책임 원칙을 준수하는 클래스는 테스트가 훨씬 더 쉽다 결합도가 높으면 테스트 케이스를 작성하기 어렵다 그러므로, 테스트 케이스를 많이 작성할수록 개발자는 DIP와 같은 원칙을 적용하고 의존성 주입, 인터페이스, 추상화 등과 같은 도구를 사용해 결합도를 낮춘다 테스트 케이스를 작성하면 코드를 정리하면서 시스템이 깨질까봐 걱정할 필요가 없어진다 응집도를 높이고,..
클린코드 - 11.시스템
2022. 8. 11. 18:51
개발 서적/클린코드
1. 시스템 제작과 시스템 사용을 분리하라 제작과 사용은 다르다 따라서 애플리케이션에서도 관심사를 분리해야 한다 관심사 분리는 가장 오래되고 가장 중요한 설계 기법 중 하나이다 Main 분리 시스템 생성과 시스템 사용을 분리하는 한 가지 방법이다 생성과 관련된 코드는 모두 main이나 main이 호출하는 모듈로 옮겨서 애플리케이션이 main이나 객체가 생성되는 과정을 전혀 모르게 한다 팩토리 객체가 생성되는 시점을 애플리케이션이 결정해야 할 경우 사용 main 분리와 마찬가지로 모든 의존성이 main에서 OrderProcessing 애플리케이션으로 향한다 OrderProcessing 애플리케이션은 LineItem 인스턴스가 생성되는 시점을 완벽하게 통제 가능하고, 필요하다면 OrderProcessing에..
H2 DB 최초 생성 시 not found 에러 처리
2022. 8. 9. 20:56
개발 지식/JPA
증상 H2 DB를 처음 생성하려고 하면 에러 메시지가 뜨면서 생성되지 않는다 만약 이 화면이 접근이 안된다면 주소창에 ip 주소를 localhost로 변경하면 된다 원인 JDBC URL은 원격 접근 주소이며, 아직 DB 파일이 생성 전이기 때문에 연결할 주소를 찾지 못하고 not found 에러가 발생한다 해결 방법 DB 원격 접근 주소: jdbc:h2:tcp://localhost/~/datajpa 파일 직접 접근 주소: jdbc:h2:~/datajpa 파일을 직접 접근하는 주소로 변경하면 파일이 생성되면서 접속된다 파일 주소를 직접 사용하게 되면 멀티로 연결이 안 되는 등 문제가 발생하기 때문에 접속 후 다시 원격 주소로 변경하고 접속하는 것을 권장한다
클린코드 - 10.클래스
2022. 8. 6. 19:14
개발 서적/클린코드
1. 클래스 체계 클래스를 정의하는 표준 자바 관례에 따르면, 가장 먼저 변수 목록이 나온다 static 상수 -> public 상수 -> private 변수 -> private 인스턴스 변수 -> public 변수 변수 목록 다음에는 public 함수가 나온다 private 함수는 자신을 호출하는 공개 함수 직후에 넣는다 즉, 추상화 단계가 순차적으로 내려간다 신문기사 처럼 읽혀야 한다 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 좋다 비공개 상태를 유지할 방법을 강구하고, 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다 2. 클래스는 작아야 한다! 단일 책임 원칙 클래스는 최대한 작게 만들어야 한다 '하나의 클래스는 하나의 책임만 가져야 한다 즉, 클래스나 모듈을 변경할 이유가 단 하나뿐이어야 ..
클린코드 - 9.단위 테스트
2022. 8. 6. 17:18
개발 서적/클린코드
1. TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다 위 세 가지 규칙을 따르면서 일하게 될 경우 매일 수십 개, 매달 수백 개, 매년 수천 개에 달하는 테스트 케이스가 나온다 이렇게 일하면 실제 코드를 사실상 전부 테스트하는 테스트 케이스가 나온다 하지만 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다 2. 깨끗한 테스트 코드 유지하기 '테스트는 유연성, 유지보수성, 재사용성을 제공' 테스트 코드를 깨끗하게 유지하지 않으면 결국은 잃어버린다그리고 테스트 케이스가 없으면 실제 코드를 유연하게 만드..
[Study] 2022/07/18
2022. 7. 30. 13:49
개발 서적/클린코드
참여인원 (2명) 본인 wony - https://youn12.tistory.com/ 스터디 진행 방식 - 1~9 챕터 각자 정리한 내용 발표 - 챕터 별로 기억에 남았던 내용 및 느낀 점 논의 - 해당 내용들과 관련된 경험 논의 기억에 남는 내용 - 주석 주석을 지양해야 하는 것은 맞지만 회사에서 팀 내 방침에 따라 조금씩 다를 수 있을 것 같다는 의견 레거시 코드 없는 회사는 찾기 힘듦.... 잘 정리되지 않은 코드들이 많다면 즉, 레거시 코드가 많은 경우 더 지키기 어려운 규칙이라는 생각 - 개행 처리 POSIX 표준에 따라 파일 끝에는 항상 개행을 추가한다 많은 시스템과 도구들이 이 표준을 따라 구현되어 있어서 지키지 않을 시 예기치 않은 동작이 일어날 수 있음 행의 끝(terminating)은 ..
9. 우아한 테크캠프 Pro를 마치며
2022. 7. 12. 19:10
개발 교육/우아한 테크캠프 Pro
마치며 이번 우아한 테크캠프 Pro 4기의 지원자는 400명 이상. 그중 60명을 선발하여 교육하기 때문에 경쟁률은 7:1 정도 되었다고 한다 지원했을 때는 '내가 뽑힐 수 있을까' 걱정을 했고, 처음 교육을 시작하기 전에는 '내가 수료할 수 있을까' 정말 많은 걱정을 했다 어렵게 시작한만큼 포기하지 않고 열심히 진행했고 결국 모든 교육 과정을 완료하여 수료자 명단에 들어갈 수 있었다 그것도 우수 수료생으로! 4기 기수의 수료율은 38/60 명으로 63% 였다 약 2달 동안 정말 많은걸 경험한 것 같다 이게 가능할까 싶을 정도로 많은 학습량을 요구했다 매일 새벽 늦게까지 공부해본 건 정말 오랜만이었던 것 같다 교육을 수료하고나서 코드 작성에 대한 자신감도 생겼고, 그러다 보니 재미도 붙은 것 같다 실제 ..
8. 안정적인 서비스 만들기
2022. 7. 12. 17:56
개발 교육/우아한 테크캠프 Pro
미션 후기미션을 통해 배운 점- Nginx 성능 개선 경험 - gzip 압축 - cache 사용 - TLS, HTTP/2 설정- was 성능 개선 경험 - redis 사용 - 비동기 처리- Nginx > 스케일 아웃 (with ASG) 교체 - Sprinboot: HTTP Cache, gzip 설정 - Launch Template 생성 - Auto Scaling Group 생성- 쿼리 인덱스 설계 경험 (execution plan 확인) 리팩터링 단계를 지나고 드디어 만난 마지막 미션!사실 처음엔 마지막 마무리는 좀 쉬어가는 미션이 될 것이라고 생각했다하지만 인프라는 항상 한번에 되는 꼴을 본적이...이번에도 역시 잘안풀려서 많이 고생했다리팩터링 미션으로 심신이 지칠 대로 지..
7. 레거시 코드 리팩터링
2022. 7. 12. 16:16
개발 교육/우아한 테크캠프 Pro
미션 후기 미션을 통해 배운 점 - mock을 통한 테스트 코드 활용 - 레거시 코드 리팩터링 경험 - DTO 활용 - 도메인 모델 Entity 작업 - 일급 컬렉션 작업 - DAO > Repository 교체 작업 - Service > domain 책임 리팩터링 - 의존성 리팩터링 경험 - 멀티 모듈 적용 방법 가장 힘들고 많은 고민을 하게 했던 미션이었다 대신 정말 정말 많은 걸 배웠던 미션이다 앞에서 진행했던 미션들을 응용해서 완성시키는 사실상 마지막 단계라고 봐도 무관할 것 같다 이번 미션을 통과하느냐 마느냐에 따라 수료가 결정된다고 할 정도로 어렵다고 미리 얘기를 들었었다 일단 이번 미션에서 테스트 코드의 진정한 쓰임새가 돋보이는 느낌이다 레거시 코드를 리팩터링하면서 코드를 보호하기 위해 moc..