전체 글 23

[Clean Code] 2장, 의미 있는 이름

의도를 분명히 밝혀라 변수는 ‘측정하려는 값’과 ‘단위’를 표현하는 이름이어야 한다. int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays; 그릇된 정보를 피해라 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 않는다. ex : ap, aix, sco 등 여러 계정을 그룹으로 묶을 때, 실제 단위가 아니라면 사용하지 않는다. ex : List가 아니라면 accountList라 명명하지 않는다. → accountGroup, accouts 등으로 변환. 서로 흡사한 이름을 사용하지 않는다. ex : 한 모듈에서 XYZControllerForEfficientHandlingOfStrings를 사용하..

book/Clean Code 2022.08.27

자연키(Natural Key) vs 인조키(Artificial Key)

자연키 비즈니스 모델에서 자연스럽게 나오는 속성 ex : 회원 테이블에서, 회원 정보 중 '아이디' 속성을 자연키로 설정. 인조키 비즈니스 모델과 달리 오로지 키 역할을 하기 위해 인조적으로 만든 속성 ex : UUID, Auto Increment UUID 테이블의 PK로 사용되는 고유 식별자. 16 Bytes의 문자로 구성. 유일을 보장하지 않음. '실질적으로 유일함'이 목적 ( 10^38 개의 경우의 수) 장점 개발 환경에 독립적. 분산 시스템에서 활용 가능. 단점 성능 저하. PK가 16바이트의 문자열이라면 데이터를 검색하거나 정렬할 때 소모되는 비용이 큼. 사람이 보기 불편함 메모리 공간 많이 차지 Auto increment (Primary Key) 테이블의 PK로 사용되는 고유 식별자. 프로그램..

공부 2022.08.10

HTTP란?

Protocol 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계. 즉, 통신규약. OSI 7 Layer의 각 layer마다, 그리고 각 기능마다 사용하는 protocol이 다르다. Protocol의 예시 Physical Layer : 별도의 프로토콜이 존재하지 x. 디바이스만 존재. Network Layer : IP, ICMP, ARP, RARP Transport Layer : TCP, UDP Session Layer : SAP, SDP, NetBIOS Presentation Layer : ASCII, MPEG, JPEG, MIDI Application Layer : HTTP, SMTP, FTP HTTP (HyperText Transfer Protocol) 인터넷을 통해 웹 브..

공부 2022.08.09

WAS vs Web Server

Static Page (정적 웹페이지) 요청하는 사용자, 시간 등과 같은 변수와 상관 없이 항상 동일한 페이지를 반환한다. (ex : image, html, css, javascript와 같이 컴퓨터에 저장된 파일들) web server는 파일 경로 이름을 받고, 경로와 일치하는 file content를 반환. Dynamic Page (동적 웹페이지) 웹 서버에 의해 실행되는 프로그램을 통해 만들어진 결과물. 인자의 내용에 맞게 동적인 content를 반환. Web Server 역할1 : 정적인 컨텐츠 제공 WAS를 거치지 않고 바로 지정된 경로에 존재하는 정적인 컨텐츠를 client에게 반환. 역할2 : 동적인 컨텐츠 제공을 위한 요청을 전달 client의 요청을 WAS에게 보내고, WAS가 처리한 결..

공부 2022.08.09

API란?

API (Application Programming Interface) 컴퓨터나 컴퓨터 프로그램(소프트웨어)이 서로 통신할 수 있게 도와주는 매개체. 즉, 간단히 말하면 두 장치가 데이터를 원활히 주고받을 수 있도록 중간 매개체 역할을 함. 정의 및 프로토콜 집합을 사용해서 통신 규약을 정함. 직접 사람(사용자)에 의해 사용되도록 고안된 것이 아니다. 즉, 사용자 인터페이스와 API는 다르다. API의 역할 시스템이 동작하는 방식에 관한 내부의 세세한 부분들을 숨겨줌, 두 장치가 원할하게 통신할 수 있도록 함. API의 종류 (작동 방식으로 구분) SOAP API RPC API 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송. 원격 프로시저 호출 Websocket A..

공부 2022.08.09

[TIL] 220801-220807

학습 3일 OAuth2 client를 이용해 facebook, google, kakao, naver 로그인 구현. Swagger로 API 문서 설계. JUnit5와 MockMvc 학습. Spring으로 구현했던 blog API에 대한 통합 테스트 코드 작성. JWT 로그인 구현한 API 빌드 후 AWS 상에 배포. Gradle 인코딩 오류 해결 4일 메타 코딩 Github 협업 강의 수강 MockMvc 이용한 통합 테스트 코드 작성 완료 CS 스터디 - 시간 복잡도, 알고리즘 복잡도 주제로 발표 테스트 코드 개념 정리 (Unit test, E2E test, Integration Test) Spring mail 라이브러리를 사용한 메일 전송 기능 구현 (회원가입 메일 인증 API 30% 완료) 5일 팀 프..

TIL 2022.08.07

[ Intellij / JUnit / Gradle ] Could not find or load main class worker.org.gradle.process.internal.worker.Gradle.WorkerMain

Error: Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMain Caused by: java.lang.ClassNotFoundException: worker.org.gradle.process.internal.worker.GradleWorkerMain Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMain 며칠을 고생해도 해결되지 않던 에러... 빌드를 해서 프로그램을 배포해야 하는데 배포도 안되고, 테스트 코드를 작성해도 테스트도 못했다. 노트북으로 git clone 받아서 빌드하고..

오류 기록 2022.08.03

[WIL] 220724-220731

일주일 회고 (개선할 점) 1. 오류 해결 후, 문제가 발생한 지점과 해결한 방법 기록. 2. 구현할 때 여러 가지 방법 중에서 해당 방법을 선택한 이유 기록. (각 방법들의 장단점, 선택한 방법이 더 적합한 이유) 3. 매일 간략히 공부했던 것들 키워드 기록 필수 키워드 DI (Dependency Injection, 의존성 주입) 객체를 직접 생성하지 않고, 객체를 외부에서 생성하여(spring 프레임워크) 사용하려는 주체 객체에게 주입시켜주는 방식. 장점 의존성으로부터 격리시켜 코드 테스트에 용이하다. DI를 통하여, 불가능한 상황을 Mock과 같은 기술을 통하여 안정적으로 테스트 가능하다. 코드를 확장하거나 변경할 때 영향을 최소화한다. 순환 참조를 막을 수 있다. @RestController pu..

TIL 2022.07.31

[WIL] 220711-220717

이번 주 공부한 것 1. JAVA 알고리즘 필수 메서드 정리 2. JAVA로 프로그래머스 알고리즘 문제 3. JAVA 이론 간단히 정리 -> 생성자, 메소드, 클래스, 인스턴스, 오버로딩, 오버라이딩, 상속, 접근 제어자 추상클래스, 추상 메서드, 인터페이스, JAVA 컬렉션 프레임워크 등. 4. Spring Architecture + Design Pattern 5. OS (컴파일러 언어 vs 인터프리터 언어, 프로세스, 스레드) 6. Flask를 이용한 웹페이지 제작 (도심 속 쉼터) 7. 기타 간단한 용어 정리 (ORM, AOP, OOP, JPA 등) 일주일 회고 모르는 게 너무 많았다. 학교에서 배웠던 것들도 다시 설명해보려니 기억이 안나고, 그나마 희미하게 기억나는 것들도 누군가를 이해시킬만큼 정..

TIL 2022.07.17

컴파일 vs 인터프리터

컴파일 언어 vs 인터프리터 언어 컴파일러 : 작성된 코드를 기계어로 ‘번역’하는 역할. 인터프리터 : 작성된 코드를 한 줄씩 읽어가며 ‘번역’하고 ‘실행’하는 언어 컴파일 언어 작성된 모든 소스코드를 기계어로 ‘번역’한 뒤에, 번역된 코드를 ‘실행’. (번역 → 실행) 컴파일과 프로그램 실행이 완전히 분리. (ex : JavaScript, HTML, ActionScript, SQL, Python, ruby 등) 장점 빌드가 완료된 실행 가능한 파일은 실행 속도가 빠르다. 매번 번역할 필요 없이 실행 파일만 실행하면 되기 때문에 시간 단축. 단점 프로그램을 수정할 경우 처음부터 빌드 과정을 다시 거쳐야 한다. 대규모 프로그램에서 생산성 감소. 플랫폼에 매우 의존적. 인터프리터 언어 컴파일을 진행하지 않고..

공부 2022.07.17