이펙티브자바_2장 객체 생성과 파괴
·
Tech/이펙티브자바
생성자 대신 정적 팩터리 메서드를 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 UsageVO 쪽 리펙토링 private 생성자나 열거타입으로 싱글턴임을 보증하라 enum은 상수집합. 생성자의 접근제어자는 반드시 private → 외부에서 접근 가능한 생성자가 없으므로 실제적으로 final과 다름없음 = enum 자체가 인스턴스 생성을 제어하며 싱글턴을 구현하는 방식 중 하나 enum 장점 문자열과 비교해, IDE의 적극적인 지원을 받을 수 있음 (자동완성, 오타검증, 텍스트 리팩토링 등등) 허용 가능한 값 제한 리팩토링시 변경 범위 최소화(내용의 추가가 필요할 때 Enum 코드만 수정) 금액 세팅하는 로직 → enum 하나를 구현해서 몰마다 금액을 계산하는 코드를 다르게 적용하게끔 짠 다음에 계산..
[JPA] insert 시 DB Default 값 적용 (@ DynamicInsert, @ ColumnDefault)
·
Tech/Worklog
1. @DynamicInsert, @DynamicUpdate 역할 @DynamicInsert는 insert시 null인 필드를 제외 @DynamicUpdate는 update시 null인 필드를 제외 null인 필드를 제외하면 DB에서 DDL 실행 시에 지정했던 default값이 들어간다. @DynamicInsert @Entity @Getter @ToString(exclude = "ecoEventList") public class Category extends BaseTimeInfo { ... 2. @ColumnDefault 역할 이 때 @ColumnDefault는 create문이 자동 실행 될 때 default 값을 지정해주는 역할을 한다. @DynamicInsert @Entity @Getter @ToS..
공부한 것들,
·
Tech/TIL
Jan - Course > 따라하면서 배우는 도커와 CI환경 - Book > 객체 지향의 사실과 오해 Feb - Course > 모든 개발자를 위한 HTTP 웹 기본 지식 - Course > 스프링 핵심원리 - 기본편
객체지향, Collection, Stream API
·
Tech/TIL
사내 스터디 정리 [2022.01.04 화] DTO에서 public으로 선언 후 원소에 직접 접근하지 않고 private 으로 선언 후 getter/setter로 접근하는 이유 좋은 객체지향 설계와 관련이 있는데, 객체지향이라는 개념을 객체 간의 협력이라는 관점으로 볼 때, 객체들은 각자 역할이 있고, 그 역할을 요청하는 송신자와 수신자가 있다. 이 때 송신자는 수신자의 역할이 무엇인지 몰라도 이를 호출하고 이용할 수 있고, 그 역할만 수행한다면 다른 객체로의 변경이 용이하고, 수정 시에도 그 객체만 수정하면 되기 때문에 유지보수에 간편하다. 또한 객체의 상태 즉, 멤버변수는 그 객체만 알고 수정하게 함으로써 객체 내부 구조를 숨기고, 객체 상태의 무분별한 변경을 막을 수 있다. (캡슐화) Collect..
Section 7. 간단한 어플을 실제로 배포해보기 (개발 환경 부분)
·
Tech/Docker
Docker build -f Dockerfile.dev ./ Docker run -p 3000:3000 -it -p 옵션 : 앞이 로컬 포트, 뒤가 컨테이너 포트 -it 옵션 : -i 상호입출력 -t 옵션 : tty를 활성화하여 bash 셸 사용 볼륨을 이용한 소스코드 변경 이미지를 다시 빌드하지 않고 소스코드가 반영될 수 있게 COPY 대신 Volume을 이용할 수 있다. COPY와 Volume의 차이 COPY는 로컬에 있는 파일을 도커 컨테이너에 복사를 해주는 것 Volume은 도커 컨테이너에서 로컬 머신에 있는 파일을 매핑을 시켜 참조를 해서 도커 컨테이너에서 실행하는 것 docker run -p 3000:3000 -it -v /usr/src/app/node_modules -v $(pwd):/usr..
Section 6. Docker Compose
·
Tech/Docker
docker compose 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구 docker compose up 컨테이너들 한꺼번에 구동 docker compose down 컨테이너들 한꺼번에 정지 docker compose -d up detach 명령어들을 써서 백그라운드에서 앱을 실행 docker compose up —build build 옵션 O : 이미지가 있든 없든 이미지를 빌드하고 컨테이너 시작 build 옵션 X : 이미지가 없을 때만 이미지를 빌드하고 컨테이너 시작 본 내용은 인프런 강의 ‘따라하면서 배우는 도커와 CI환경’ 을 듣고 정리한 내용입니다.
Section 5. 도커를 이용한 간단한 Node.js 어플 만들기
·
Tech/Docker
도커 컨테이너 안에서 Node.js 앱 실행하기 Node.js App 만들기 -> 도커 관한 부분 만들기 (이미지 생성 후 컨테이너에서 실행) Node.js App 만들기 package.json : 프로젝트 정보와 사용 중인 패키지 의존성 관리 파일 server.js : Node.js에서 진입점이 되는 파일 도커 관한 부분 만들기 Dockerfile 작성하기 -> 도커파일을 바탕으로 도커 이미지 생성 후 도커 컨테이너 안에서 Node app 실행 도커 파일 관련 FROM : 베이스 이미지 명시 RUN : 추가적으로 필요한 파일 다운로드 CMD : 컨테이너 시작 시 실행될 명령어를 명시 package.json 파일이 없다고 나오는 이유 npm install -> package.json을 바탕으로 어플리케이..
Section 4. 직접 도커 이미지를 만들어 보기
·
Tech/Docker
도커 파일로 이미지 생성 Dockerfile -> 도커 클라이언트 -> 도커 서버 -> 이미지 Alpine 이미지 (시작시 실행 명령어 ?? 파일스냅샷 ..) 임시 컨테이너 생성 - 시작시 실행 명령어 아직 없고 하드 디스크에 파일 시스템 스냅샷 추가 임시 컨테이너 - 시작 시 실행할 명령어 추가 Alpine 이미지 생성 - 이미지 ID 도커 이미지에 이름 부여 ( -t 옵션) docker build ./ docker build -t sm/hello ./ 도커아이디/저장소 or 프로젝트이름 : 버전 docker build -f Dockerfile.dev ./ (-f 옵션 사용해 도커파일 이름 지정도 가능) 본 내용은 인프런 강의 ‘따라하면서 배우는 도커와 CI환경’ 을 듣고 정리한 내용입니다.