Study 53

Item15. 클래스와 멤버의 접근 권한을 최소화하라

클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계도니 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. 잘 설계된 컴포넌트는 모두 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서 다른 컴포넌트와 소통하고 서로의 내부 방식은 전혀 개의치 않는다. 소위 캡슐화라고 부르는 이 개념은 소프트웨어 설계의 근간이 되는 원다. 캡슐화의 장점 중 대부분은 시스템 컴포넌트를 독립적으로 만들어서 개발, 테스트, 최적화, 적용, 분석, 수정을 개별적으로 할 수 있게 하는 것과 연관이 있다. 컴포넌트를 병렬로 개발하는 것이 가능하므로 개발 속도 향상 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌..

파일업로드 input[files] FileList 동적으로 변경하기

파일업로드 시 input태그 FileList 동적으로 변경하기 파일업로드 기능을 구현하면서 겪은 문제. 사용자가 파일을 업로드하면 미리보기 형식으로 자신이 어떤 파일을 올렸는지 확인할 수 있어야 한다. 혹여 잘못 올린 파일이 있다면 해당 파일만 따로 삭제할 수 있어야 한다. 예시 : 이때 X버튼을 눌러서 화면에서 파일을 지워줘도 File Input Tag에는 그대로 해당 파일이 남아있다. 예시: 업로드한 파일 8개 중 7개를 지웠는데 화면에서는 삭제됐지만, Input창에는 그대로 남아있다. File Input 내부적으로 files라는 FileList를 가지고 있다. 문제는 FileList의 값을 바꿀 수 없기 때문에 삭제된 파일을 input tag에 반영할 수 없다는 것이다. files의 값을 변경하려고..

Study 2021.06.12

[Database] Transaction, Lock

Transaction 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업 단위다. 트랜잭션은 전부 수행되거나, 전부 수행되지 말아야 한다.(All or Nothing) 트랜잭션의 동작 원리 A계좌의 값을 데이터베이스에서 메모리 버퍼로 읽어온다. B계좌의 값을 데이터베이스에서 메모리 버퍼로 읽어온다. A계좌에서 10000원을 인출한 값을 저장. B계좌에서 10000원을 입금한 값을 저장. A계좌의 값을 메모리 버퍼에서 데이터베이스에 기록 B계좌의 값을 메모리 버퍼에서 데이터베이스에 기록 이런 작업이 있다고 했을 때, 트랜잭션의 수행 과정은 두 가지 방법으로 나눌 수 있다. 이 두 가지 방법은 커밋이 어느 위치에 들어가느냐에 따라 달라진다. A. 4번 작업을 마치고 커밋한다. B. 6번 작업을 마치고 커밋..

Study 2021.05.25

Flyway

Flyway Flyway는 데이터베이스 마이그레이션 툴이다. 여기서 마이그레이션이란, 스키마의 버전을 관리한다고 이해할 수 있다. 왜 버전을 관리해야 할까? 수많은 이유가 있을 것이다. 개발 환경에서 스키마를 변경하고 운영환경에 적용하지 않는 실수를 막는다거나, 이전 버전으로 rollback이 필요할 수도 있다. Flyway의 작동방식 flyway는 지정된 schema history table을 찾는다. 이제 막 flyway를 적용해서 아직 스키마 히스토리 테이블이 존재하지 않는다면 새롭게 생성한다. 여기서 schema history table이란 말 그대로 flyway가 스키마의 버전을 관리하는 테이블을 말한다. 히스토리를 관리하는 테이블이 생성되면, Flyway는 마이그레이션을 위해 classpath..

Study 2021.05.16

인프런 Kotlin으로 개발하는 Spring Boot Web MVC - Web개론

Web이란? 웹은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간이다. 웹의 용도는 다양하게 나눌 수 있다. Web site(google, naver, ...) User Interface(Browser) API(ex.Open API) 이 세 가지 정도가 가장 흔하게 접할 수 있는 웹의 형태다. 웹의 기반 HTTP HTML을 주고 받기 위한 규약 URI 리소스 식별자다 HTML XML을 바탕으로 한 범용 문서 포맷. 브라우저는 HTML을 사용자가 알아볼 수 있는 형태로 표현하는 도구다. REST Client, Server 클라이언트와 서버가 서로 독립적으로 분리되어야 한다. Stateless 요청에 대해 클라이언트의 상태가 서버에 저장하지 않는다. Cache 클라이언트..

Study 2021.05.15

[코드 스피츠 Programming101] 1강

이 글은 코드스피츠 채널에 올라온 영상을 보고 정리한 내용입니다. 프로그램 정확히 말하면 프로그램은 코드가 아니다. 실행 파일(.exe등)은 디스크에 저장되어 있는 파일일 뿐이다. 파일을 실행해서 OS가 명령과 값의 형태로 메모리에 적재한 상태가 프로그램이다. 메모리에 적재된 명령을 순차적으로 실행하고 나면 프로그램은 종료된다. 명령은 실행되기 위해 CPU로 올라온다. 보통 명령은 메모리를 이용해서 실행된다. CPU의 연산유닛은 제어 정보를 참고해서 메모리에 있는 값을 데이터유닛으로 불러온다. 연산유닛에서 어떤 연산할 때는 메모리에서 불러온 값과 명령을 사용해서 프로그램을 실행하고, 그 결과가 다시 메모리로 전파된다. 메모리에 명령과 값을 적재하는 과정을 로딩이라고 부른다. 명령(instruction)을..

[오브젝트03] 역할, 책임, 협력

역할, 책임, 협력 객체지향 패러다임의 핵심은 역할, 책임, 협력이다. 이것이 구현보다 중요하다. 다시 영화 예매 시스템을 보자. 위 표를 보면 알 수 있듯이 객체지향 원칙을 따르는 애플리케이션은 어떤 하나의 객체가 통제하지 않는다. 다양한 객체들이 자신의 일을 수행하면서 애플리케이션의 전체 기능을 완성한다. 여기서 중요한 점은 객체들이 '메세지'를 통해 상호작용한다는 것인데, 이것을'협력'이라고 한다. '책임'은 협력에 참여하기 위해 수행하는 로직이다. 객체가 가진 책임들이 모여 그 객체가 수행하는 '역할'을 구성한다. 협력 협력은 객체가 다른 객체에게 도움을 요청할 때 시작된다. 이것을 메세지 전송이라고 하는데, 객체가 협력할 때 사용하는 유일한 방법이다. 객체는 다른 객체의 내부 구현에 접근할 수 ..

Study/오브젝트 2021.04.07

[오브젝트02] 객체지향 프로그래밍

02 객치지향 프로그래밍_영화 예매 시스템 만들기 요구사항 2장에서는 영화 예매 시스템을 만든다. 주의할 점은 '영화'와 '상영'을 구분해야 한다. 관객은 영화를 예매하는 것이 아니라 상영을 예매한다. 특정한 조건을 만족하는 예매자는 할인을 받을 수 있다. 하나는 할인 조건이라고 부르고 하나는 할인 정책이라고 부른다. 할인 조건 순서조건 (예를 들어) 매일 10번째로 상영되는 영화를 예매하는 사용자들에게 할인 혜택을 제공한다. 기간 조건 특정 상영 시간대의 영화(상영)를 예매하는 사용자들에게 할인혜택 제공 할인 정책 금액 할인 비율 할인 영화별로 하나의 할인 정책만 할당할 수 있다. 할인 조건은 다수의 할인 조건을 함께 지정할 수 있다. 객체지향 프로그래밍 객체지향 프로그래밍을 하려면 이 두 가지에 집중..

Study/오브젝트 2021.04.01

클린코더스 6강 - Form

💡백명석 님의 클린 코더스 강의를 듣고 요약한 자료입니다. 목차 1, 2강 OOP 3, 4강 Function 5강 Function Structure 6강 Form Coding Standards 조직이 일정 수준의 크기가 되면 관료적인 문서화를 요구한다. 코드를 어떻게 작성할 것인지에 대한 표준을 마련하는 것은 필요하지만, 별도로 문서화하는 것은 회의적. Comments should be rare CodingStandards가 코멘트 작성을 강제하면 어떨까? 프로그래머는 필요해서가 아니라 의무적으로 코멘트를 작성하게 될 것이다. 무의미한 코멘트가 많이 생산될수록 코멘트를 읽는 사람이 줄어들 것이다. 따라서 코멘트는 특별하게, 그것이 반드시 필요한 경우에만 작성해야 한다. Comments are failur..

[오브젝트01] 객체, 설계

프로그래밍 패러다임 패러다임이란, 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제 의식 등의 체계를 말한다. 프로그래밍에 패러다임이 필요한 이유는, 개발자 공동체가 동일한 프로그래밍 스타일과 모델을 공유할 수 있게 하므로 불필요한 의견 충돌을 방지하기 때문이다. 티켓 판매 애플리케이션 추첨을 통해 관객들에게 무료 초대장을 발송했다. 당첨되지 않은 관객과 당첨된 관객을 구분해서 당첨되지 않은 관객은 티켓을 구매해야만 입장할 수 있는 프로그램을 만들 것이다. 첫 번째는 초대장을 구현하는 것이다. public class Invatation{ private LocalDateTime when; //초대 일자 } 그리고 티켓 클래스 public class Ticket { private Long fee; pub..

Study/오브젝트 2021.03.30