전체 글 194

[클린코드] 4장. 주석

주석 주석이 나쁜 이유 나쁜 코드에 주석을 달지 마라. 새로 짜라. 브라이언 W. 커니헨, P.J. 플라우거 잘 달린 주석은 그 어떤 정보보다 유용하다. 경솔하고 근거 없는 주석은 코드를 이해하기 어렵게 만든다. 오래되고 조잡한 주석은 거짓과 잘못된 정보를 퍼트려 해약을 미친다. 우리가 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면 주석은 필요하지 않다. 우리는 코드로 의도를 표현하지 못해, 그러니까 실패를 만회하기 위해 주석을 사용한다. 때때로 주석 없이는 자신을 표현할 방법을 찾지 못해 할 수 없이 주석을 사용한다. 그러므로 주석이 필요하면 상황을 역전해 코드로 의도를 표현할 방법은 없는지 생각하자! 주석은 오래될수록 코드에서 멀어진다. 오래될수록 완전히 그릇될 가능성도 커진다. 프로..

개발/Clean Code 2021.05.11

[클린코드] 2장. 의미 있는 이름

2장. 의미 있는 이름 소프트웨어에서 이름은 어디나 쓰인다. 이름을 잘 지으면 여러모로 편하다. 이 장에서는 이름을 잘 짓는 간단한 규칙을 몇 가지 소개한다. 1. 의도를 분명히 밝혀라 의도가 분명한 이름은 정말로 중요하다. 변수나 함수 그리고 클래스 이름은 존재 이유와 수행 기능, 사용 방법을 답해야 한다. 1.1 변수 나쁜 예시 int p; // 사람 수 (단위: 명) 이름 d는 아무 의미도 드러나지 않는다. 경과 시간이나 날짜라는 느낌이 안든다. 측정하려는 값과 단위를 표현하는 이름이 필요하다. 좋은 예시 int patientsCount; int loginFailUserCount; 1.2 코드 나쁜 예시 public List getThem(){ List list1 = new ArrayList(); ..

개발/Clean Code 2021.05.10

[MongoDB] MongoDB 사용하기

MongoDB 사용하기 MongoDB 실습 환경 구축하기 (with Docker) 1. MongoDB 이미지 가져오기 $ docker pull mongo2. MongoDB 서버 띄우기 $ docker run –name mongodb_server -v /home/test/mongodb/db:/data/db -d -p 16010:27017 mongo –auth –name : 컨테이너 이름 -v : 볼륨을 외부와 연결 -> 아래에서는 db볼륨을 외부로 연결하였다. -d : 데몬으로 실행 -p : 외부 접속을 위해 포트 연결 mongo –auth : 보안접근을 위해 사용 [주의] mongoDB 컨테이너는 기본적으로 설정파일(/etc/mongod.conf)을 읽지 않는다. 만약 설정파일을 통해서 MongoDB를 ..

개발/MongoDB 2021.05.09

[MongoDB] NoSQL이란?

NoSQL NoSQL의 등장 배경 예전의 컴퓨팅 시스템은 기업의 업무를 자동화하고 효율화하는 데 그 목적이 있었다. 그래서 기업의 복잡한 데이터를 저장하고 그 데이터 간의 관계를 저장하고 분석하는 데 최적화되어 있었다. 기업의 업무 시스템은 해당 기업의 생산과 판매를 목적으로 하였고, 거기에서 생성되는 데이터의 양은 한계를 가지고 있었다. 그러나 최근에는 인터넷의 발전과 함께 SNS나 다양한 서비스 시스템이 전 세계 사람들을 대상으로 하는 대규모의 데이터를 생산해내며 데이터의 패러다임이 한정된 규모의 복잡성이 높은 데이터에서 단순한 대량의 데이터로 넘어가기 시작했다. 이는 기존의 데이터의 저장 시스템으로는 해결할 수 없는 여러 가지 한계를 일으켰고 결국에는 새로운 형태의 데이터 저장 기술을 요구하여 No..

개발/MongoDB 2021.05.08

Github 똑똑하게 검색하기

Github 똑똑하게 검색하기 항상 사용하는 깃헙. 우리는 깃헙을 똑똑하게 사용하고 있을까? 가끔 코드를 검색하거나 다른 레포를 염탐하면서 코드를 구경할 때나 다른 사람 코드를 참고할 때 사용하기 좋은 다양한 깃헙 검색 방법에 대해 알아보자 1. Go to file 바로 파일을 검색할 수 있는 편하지만 은근히 사람들이 모르는 기능 Go to file을 누른다. 파일 이름을 검색해서 바로 해당 파일로 이동할 수 있다. 2. Repository 검색하기 2.1 저장소 이름, 저장소 설명, README 파일의 내용 등으로 검색하기 지시자 예시 설명 in:name spring in:name 레포지토리에 'spring'이라는 이름이 있는 레포지토리를 검색한다. in:description spring..

개발/꿀팁 2021.04.27

[Effective Java] item 71. 필요 없는 검사 예외 사용은 피하라

[Effective Java] item 71. 필요 없는 검사 예외 사용은 피하라 검사 예외의 장점 검사 예외를 싫어하는 자바 프로그래머가 많지만 제대로 활용하면 API와 프로그램의 질을 높일 수 있다. 결과를 코드로 반환하거나 비검사 예외를 던지는 것과 달리, 검사 예외는 발생한 문제를 프로그래머가 처리하여 안전성을 높이게끔 해준다. 검사 예외의 사용 물론, 검사 예외를 과하게 사용하면 오히려 쓰기 불편한 API가 된다. 어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면, 이를 호출하는 코드에서는 catch 블록을 두어 그 예외를 붙잡아 처리하거나 더 바깥으로 던져 문제를 전파해야만 한다. 검사 예외를 던지는 메서드는 스트림 안에서 직접 사용할 수 없기 때문에 자바 8부터는 부담이 더욱 커졌다. 비..

[클린코드] 1장. 깨끗한 코드

1장. 깨끗한 코드 클린코드 책의 목표 좋은 코드와 나쁜 코드를 구분하는 능력을 갖춘다. 좋은 코드를 작성하는 방법을 익힌다. 나쁜 코드를 좋은 코드로 바꾸는 실력도 쌓는다. 코드가 존재하리라 코드는 요구사항을 상세히 표현하는 수단이다. 어느 수준에 이르면 코드의 도움 없이 요구사항을 상세히 표현하기란 불가능하다. 추상화도 불가능하다. 고도로 추상화된 언어나 특정 응용 분야 언어로 기술하는 명세 역시 코드이므로 결코 코드는 사라지지 않는다. 나쁜 코드 회사가 망한 원인은 바로 나쁜 코드 탓이었다. 80년대 후반 킬러 앱 하나를 구현한 회사는 나쁜 코드로 인한 버그로 인해 망했다. 버그는 다음 버전에도 그대로 남아있고, 프로그램 시동 시간이 길어지고 죽는 횟수도 늘었다. 원인은 출시에 바빠 코드를 마구 짜..

개발/Clean Code 2021.04.20

[클린코드] TPM의 5S 철학

TPM(Total Productive Management)의 5s 철학 1. 정리 또는 정렬 적절한 명명법 등과 같은 방법을 사용해 무엇이 어디에 있는지 알아야 한다. 2. 정돈 또는 단정함 "물건마다 모두 제자리가 있다"라는 속담이 있다. 코드는 누구나 예상하는 위치에 있어야 한다. 그렇지 않으면 다시 정돈해 누구나 예상한느 위치로 옮기기 바란다. 3. 청소 또는 정리 작업 공간에서 배선이나 기름이나 부스러기나 쓰레기는 치운다. 과거 이력이나 미래 바람을 기억한 주석 또는 주석으로 처리한 코드는 제거하기 바란다. 4. 청결 또는 표준화 작업 공간을 청소하는 방식에 그룹이 동의한다. 그룹 내에서 일반적인 구현 스타일과 기법의 필요성을 책에서는 뭐라고 말할까? 표준은 어떻게 정할까? 5. 생활화 또는 규육..

개발/Clean Code 2021.04.19

Spring 트랜잭션 처리

Spring 트랜잭션 처리 보통 스프링에서 트랜잭션 처리를 할 때 @Transactional 어노테이션을 이용하여 스프링에서 제공하는 선언적 트랜잭션을 이용했다. 그런데 메서드 단위가 아니라 메서드 내의 특정 구간만 트랜잭션 처리를 해야하는 경우 어떻게 할 수 있을까? 그리고 우리가 사용하던 @Transactional 어노테이션을 이용해서 스프링에서는 어떤식으로 트랜잭션 기능을 처리할 수 있었을까? 기존에 JDBC로 개발을 할 때는 직접 JDBC 연결을 맺고, commit과 rollback을 호출하여 처리했는데 Spring에서는 직접 개발자들이 트랜잭션 처리를 하지 않아도 되도록 추상화해서 제공하고 있다. 스프링 프레임워크 트랜잭션 추상화 1. 선언적 트랜잭션 방식 @Transactional 클래스, 메..

개발/Spring 2021.04.18

[Effective Java] item 85. 자바 직렬화의 대안을 찾으라

[Effective Java] item 85. 자바 직렬화의 대안을 찾으라 직렬화란? java.io.Serializable 인터페이스를 상속받은 객체를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술 역직렬화는 반대로 byte로 변환된 data를 Object로 변환하는 기술 public class Member implements Serializable { private String name; private String email; private int age; public Member(String name, String email, int age) { this.name = name; this.email = email; this.age = age; } @Override p..