본문 바로가기
반응형

Java17

운영 로그와 디버그 로그 분리하기 최근에 Pete Hodgson가 martinfowler 블로그에 기재한 글을 보면서 로깅도 하나의 기능으로 봐야한다는 생각이 더 강해져서 이 글을 쓰게 되었다. 시스템을 구축하다보면 다음과 같이 크게 두 종류의 로그를 남긴다. logger.error(`API Timeout: ${timeout} seconds`, e); logger.info(`Ordered Food Product Id: ${product.id}`); logger.debug(`Total Order Price Amount: ${sum(products.amount)}`); 이 로그들은 모두 필요한 메세지를 노출시키지만, 실상은 목적이 다르다. Error와 Info 로그는 운영 환경에서 장애를 디버깅하거나 실행 중인 시스템의 여러 진행 상황, 지.. 2024. 3. 15.
람보르기니와 지프랭글러 슈퍼카의 대명사인 람보르기니는 오프로더의 대명사인 지프랭글러 보다 더 빠른 자동차일까? 이 질문에 대해 당연하게 답을 내리는 사람이 있고, 답을 할 수 없는 사람도 있다. 이 주제에 대해 한번 이야기해보고 싶다. 개발을 시작하고, 그간 사용하던 언어들이 항상 2가지 영역에서 같이 쓰다보니 오해를 일으킬때가 있다. 주로 사용하던 Java의 경우 서버 백엔드에서 사용되지만, 안드로이드 (클라이언트) 에서도 사용 된다. 지금 주력으로 사용중인 JS & TS는 Node 백엔드에서도 사용되지만 웹 프론트 (클라이언트) 에서도 사용 된다. 똑같은 언어 (Java, TS) 지만 구동되는 장소는 완전히 다르다. 구동되는 장소가 다르면 용도도 달라진다. 디바이스당 단일 사용자 (모바일기기, 브라우저)를 처리하기 위한 용.. 2022. 9. 5.
4. 악취나는 코드 개선하기 시리즈 - 값의 가변성 (Mutation) IntelliJ 블로그에 올라온 시리즈물을 번역 & 재정리 하였습니다. 심하게 중첩된 코드글에서 저는 getMappedField 메소드의 리턴 타입을 Optional로 변경하고 싶었습니다. 변경자체는 굉장히 사소한 일이지만, 그 메소드를 호출하는 코드들의 변경은… 음 또다른 문제였습니다. QueryValidator클래스의 validateQuery메소드는 여러 호출자 중에서 예상했던 것보다 훨씬 더 복잡한 메소드였습니다. getMappedField를 Optional로 변경하려고 할때, 놀라울 정도로 많은 Null 체크 코드를 isPresent로 변경했습니다. 이게 전부가 아닙니다. 이 메소드는 거의 100라인이라 1개의 캡쳐화면에 전부 담을수가 없었습니다. (이것 역시 다른 글의 주제가 될 예정입니다.) .. 2017. 9. 18.
3. 악취나는 코드 개선하기 시리즈 - 순회 (Iteration) IntelliJ 블로그에 올라온 시리즈물을 번역 & 재정리 하였습니다. 저번시간엔 의심스러운 중첩 코드를 살펴 보았습니다. 이 문제를 해결하는 가장 좋은 방법은 기존 클래스에서 데이터를 가진 클래스의 내부를 이해하고 다루는것인 아니라, 행위 자체를 이동시키는 것이라고 추천드렸습니다. 그러나 이것이 그 이야기의 끝이 아닙니다. 이번 글에서는 코드 반복이 야기시킬 수 있는 다른 문제를 탐구하려고 합니다. 마지막 예제에서 중첩된 루프는 로직이 잘못된 위치에 있었던 것이라고 제안드렸습니다. 새로 만든 hasName메소드에서 반복이 존재하는 것은 for 루프 또는 stream를 사용하여 구현한것과 관계없이 또다른 문제점을 제시합니다. 아마도 이것은 name 데이터들을 저장하는 올바른 방식이 아닐 확률이 높습니다... 2017. 9. 6.
Java + Gradle 프로젝트 생성하기 (+junit) 1. IntelliJ 프로젝트 생성Junit 라이브러리를 사용해야하므로 직접 jar를 받아 추가하기 보다는 빌드도구를 사용해서 의존성을 쉽게 사용하는것이 좋다. Maven, Gradle 중 원하는 빌드 도구로 생성한다. (팀내 빌드도구를 선택하면 되지만, 박재성님의 강의는 Maven으로 진행할 예정)GroupId와 artifactId는 원하는 값을 입력하면 된다. (정식 프로젝트라면 룰에 맞춰서 가야하지만 테스트이니 그냥 한다.)생성이 완료되면 위와 같은 프로젝트 구조가 생성된다. main 코드와 test 코드를 생성하기 위해 source root를 생성해야한다. (없으면 패키지 및 클래스가 생성되지 않는다.) main 코드의 source root를 생성하기 위해 프로젝트를 선택 -> command+n을.. 2017. 4. 9.
Enum 활용사례 3가지 안녕하세요? 이번 시간엔 enum 활용사례를 3가지정도 소개하려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github와 세미나+책 후기를 정리하는 Github, 이 모든 내용을 담고 있는 블로그가 있습니다. ) 최근에 레거시 프로젝트를 개편하면서 enum을 적극 사용하였습니다. 혹시나 비슷한 고민이 있으신분들에게 참고가 될까 싶어 포스팅하게 되었습니다. 이런식으로 해결할 수도 있네? 정도로 봐주시면 될것 같습니다. 그럼 시작하겠습니다!사례1 - code 관리용 테이블 대체하기프로젝트를 진행하다보면 code 들을 관리하기 위한 테이블을 별도로 만드는 경우가 빈번합니다.(출처 : 실천하는삶님의 블로그)이 경우가 무조건 나쁜것은 .. 2017. 4. 9.

728x90
반응형