분류 전체보기 245

Log에 대한 고찰

2023.08.15 - [IT/고찰] - Comment에 대한 고찰 Commit Message와 Comment에 이은 고찰 시리즈 3탄, Log Log 필요성 로그는 프로세스의 흐름, 장애 파악 등 정보 수집에서 중요한 역할을 담당합니다. 오류가 발생하면 가장 먼저 어디서 잘못되었는지 로그 검색을 통해 정보를 알아냅니다. 하지만 잘못된 로그들은 오히려 개발자들에게 혼란을 가중시킵니다. 또한, 의미없는 로그 데이터들로 인해 중요한 정보를 보기까지 많은 어려움을 겪게 됩니다. 실제로 프로젝트를 진행하면서 정말 중요한 흐름만 기록을 했다면, 에러가 난 부분을 명확하게 표현했다면 간단하게 고쳐질 문제들이 대부분이었습니다. 그러나 그 원인을 찾기까지 정말 수많은 시간을 소모하였습니다. Commit Message,..

IT/고찰 2023.08.25

Comment에 대한 고찰

2023.08.02 - [IT/고찰] - Commit Message에 대한 고찰 Commit Message에 대한 고찰에 이은 고찰 시리즈 2탄 사실 주석은 필요하지 않다 로버트 C 마틴의 Clean Code 책에서 주석은 필요 악인 존재입니다. 주석은 코드로 의도를 표현하지 못해서 남기는 것이라 말하기도 합니다. 2021.10.30 - [IT/책] - [Clean Code] 4장, 주석 [Clean Code] 4장, 주석 Clean Code - 로버트 C. 마틴 4장, 주석 주석은 코드로 의도를 표현하지 못해서, 실패를 만회하기 위해서 사용함 🔴 주석은 필요 악 🔴 - 주석을 유지/보수하기 어려움 - 주석이 코드를 항상 따라가 honeywater97.tistory.com 그리고 주석을 지양해야 하는 이..

IT/고찰 2023.08.15

Commit Message에 대한 고찰

회사 프로젝트를 진행하면서 메시지가 담고 있는 의미에 대해서 종종 생각하게 되었습니다. 코드로 모든 걸 나타낼 수 있다면 가장 좋겠지만, 코드에 온전히 나의 의도를 담는 것은 쉽지 않습니다. 따라서, 가장 자주 사용하는 메시지인 Coimmit, Comment, Log의 작성법에 대해서 정리해보고자 합니다. 메시지를 잘 적는 것은 협업에서 반드시 필요한 기본적인 습관입니다. 기록으로 소통이 가능하기 때문입니다. Commit Message 필요성 1. Git을 사용하면 반드시 커밋 메시지를 남기도록 되어있습니다. 그렇기 때문에 많은 개발자들은 의미없이 커밋 메시지를 적기도 합니다. ex) "제발", "이번엔 성공" 등 2. 커밋메시지는 단순히 소스코드를 올리거나 억울함을 호소하기 위한 것이 아닙니다. 코드의..

IT/고찰 2023.08.02

[데이터설계] 8장, 분산 시스템의 골칫거리

8장, 분산 시스템의 골칫거리 결함과 부분장애 하드웨어 문제 - 하드웨어는 올바르게 동작하면 항상 같은 연산 결과를 냄 - 완전히 실패하거나 아니면 완전하게 동작함 부분 장애 - 비결정적인 장애 - 성공 여부를 알 수 없기 때문에 더욱 어려움 신뢰성 없는 네트워크 분산 시스템은 비공유 시스템을 의미한다. 즉, 네트워크로 연결된 다수의 장비 - 각 장비는 자신만의 메모리와 디스크를 가지고 있어, 다른 장비의 메모리나 디스크에 접근 할 수 없다. - 네트워크가 유일한 통신 수단 비동기 패킷 네트워크 - 다른 노드로 메시지(패킷)을 보낼 수 있지만, 도착을 보장하지 않음 - 타임아웃으로 해결 네트워크 결함 네트워크 분단(분리): 네트워크 결함 때문에 다른 쪽과 차단이 되는 것 결함 감지 - 시스템은 결함이 있..

IT/책 2022.10.10

[데이터설계] 3장, 저장소와 검색 - 트랜잭션

트랜잭션 OLTP(온라인 트랜잭션 처리) 애플리케이션이 일부 키에 대한 적은 수의 레코드를 찾는 대화 형식의 접근 패턴 - 사용자 대면이므로 대량의 요청을 받을 수 있음 - 부하 처리를 위해 애플리케이션이 작은 수의 레코드만 사용 - 애플리케이션은 키의 일부만 사용하는 레코드 요청, 저장소 엔진은 요청한 키의 데이터를 찾기 위해 색인 사용 (디스크 탐색 병목) OLAP(온라인 분석 처리) 비즈니스 인텔리전스에 필요한 데이터베이스 패턴 - 비즈니스 인텔리전스: 비즈니스 분석가가 회사 경영진의 더 나은 의사결정을 돕도록 하는 질의 - OLTP보다 적은 수의 질의를 다룸 - 짧은 시간에 많은 수의 레코드 탐색 (디스크 대역폭 병목) 데이터 웨어하우스 - OLTP 시스템의 읽기 전용 복사본 - 데이터 분석가가 ..

IT/책 2022.08.21

[데이터설계] 3장, 저장소와 검색

목표: 단순한 정리가 아니라 남에게 설명할 수 있는 글이 되자 3장, 저장소와 검색 로그 - 로그는 append-only 파일로, 연속된 추가 전용 레코드를 의미한다. - read시, 검색비용에 O(n)이 소모된다. 검색비용을 줄이기 위한 효과적인 방법 색인 어떤 부가적인 메타데이터를 유지하는 것 색인은 데이터베이스의 내용에 영향을 미치지 않는, 파생된 추가적인 구조이다. 특징 - 쓰기 과정에서 오버헤드 발생: 데이터를 추가할 시, 매 번 색인도 갱신해야 한다. - 필요이상으로 오버헤드를 발생시키지 않으면서 읽기 질의 속도를 향샹시키는 색인을 선택해야 한다. 1. 해시색인 Bitcask(Riak의 기본 저장소 엔진) - 인메모리 해시 맵: 사용 가능한 램에 모든 키가 저장 > 한 번의 디스크 탐색으로 디..

IT/책 2022.08.18

[데이터설계] 2장, 데이터 모델과 질의 언어

1. 데이터 중심 애플리케이션 설계가 책의 전체 이름이지만 너무 길어서 데이터 설계로 줄인다. 2. 1장은 기능적 요구사항, 비기능적 요구사항, 신뢰성, 확장성, 유지보수성에 대해서 다룬다. 다른 곳에서 많이 다뤘던 이야기이므로 PASS 데이터 중심 애플리케이션 설계 - 2장, 데이터 모델과 질의 언어 관계형 모델 - 데이터(테이블): 관계와 튜플로 구성 - 비즈니스 데이터 처리 시 유용 ex) 트랜잭션 처리, 일괄 처리 NoSQL: Not Only SQL - 다중 저장 지속성: 폭넓은 다양성 객체 관계형 불일치 임피던스 불일치(impedance mismatch): 관계형 테이블 저장 시, 애플리케이션 코드와 데이터 베이스 모델 객체 사이 전환 계층 - 객체 관계형 매핑(ORM) 프레임워크를 사용 일대다..

IT/책 2022.08.13

[Error] Mapper.class를 찾지 못하는 현상

Error Message class path resource [com/mbti/user/user/entity/UserEmailMapper.class] cannot be opened because it does not exist 상황 데이터 모델링 변경으로 인해 UserEmail을 UserOauth2로 변경했다. 따라서, 기존에 있던 UserEmailMapper가 UserOauth2Mapper로 변경되었지만 시스템에 UserEmailMapper가 남아있어서 찾지 못한다는 에러가 나타났다. 해결 비단 mapper.class 뿐만 아니라, gradle에 추가한 의존성 있는 외부 라이브러리들은 이렇게 이름이 바뀌면 종종 찾지 못하는 경우가 있다. 1. clean build gradle의 경우 clean을 한 번..

[BOJ] 나이순 정렬 10814.java

준비 겸, JAVA Stream에 익숙해지기 위해. 문제 https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 나이 - 이름으로 입력 받았을 때, 나이 순으로 정렬하고, 같은 경우 입력 순서대로 정렬한다. 해설 및 코드 public class 나이순정렬 { public static class User{ int age; String name; User(int a, String n){ this.age = a; this.name = n; } public int..

IT/알고리즘 2022.05.25