All
28 posts
TIL 08. 서버 네트워크 기본

TIL 08. 서버 네트워크 기본 이번 장에서는 서버 내부의 설정 중 윈도와 리눅스 서버에서 네트워크를 각각 어떻게 설정하고 현재 네트워크 상태를 어떻게 확인할 수 있는지가 주관점이다. 1. 서버의 네트워크 설정 및 확인 (OS 별로 정리) 1) 리눅스 서버 네트워크 (1) CentOS의 네트워크 설정 CentOS의 네트워크 설정 파일은 다음 경로에 존재한다. 네트워크 인터페이스 별로 설정 가능한 사항이 파일에 기록되어 있으며, 주요 항목은 다음과 같다. 주요 항목 이외에도 설정할 수 있는 다양한 항목들이 존재한다. CentOS뿐만이 아닌 대부분의 Linux 계열 OS에서는 인터페이스 설정 파일을 수정하더라도 변경한 값이 즉시 적용되지 않는다. 변경된 설정값을 적용하려면 다음 두 가지 방법 중 하나를 수행해야 한다. 네트워크 서비스 재시작 특정 인터페이스 재시작(ifup)과 다운(ifdown) * ifconfig (Linux) & ipconfig (Window) Linux에선 if…

August 01, 2022
IT_엔지니어를_위한_네트워크_입문
TIL 05. 라우터의 역할과 동작

TIL 05. 라우터의 역할과 동작 * 라우터? 라우터? - L3계층에서 동작하는 장비로, 이름처럼 경로를 지정해 주는 장비다. 서로 다른 네트워크 간에 통신할 때 필수로 있어야 하는 장비다. 라우터? L3 스위치? 스위치는 대표적인 L2 계층 장비지만 라우터처럼 L3 계층에서 동작하는 L3 스위치라고 부르는 장비도 많이 사용되고 있다. 기존에는 1) 라우터는 소프트웨어로 구현 / 스위치는 하드웨어로 구현 2) 다양한 기능의 라우터 / 패킷을 빨리 보내는데 최적화된 스위치 2가지 형태로 많이 구분했었지만, 최근에는 기술의 발달로 L3 스위치는 실질적으로 라우터와 구분짓기 어려운 부분이 있다. 즉, 굳이 구분하지 않고 라우터의 유사한 지칭 형태로 보면 된다. 1. 라우터 역할 1) 경로 지정 (1) 경로 정보 얻기와 (2) 얻은 경로 정보로 패킷을 포워딩하기 이 2가지는 라우터의 가장 중요한 역할이다. 경로 지정과 관련된 동작 방식에 대해선 하단에 서술하겠다. 2) 브로드캐…

June 24, 2022
IT_엔지니어를_위한_네트워크_입문
TIL 04. 스위치 2계층 장비

TIL 04. 스위치: 2계층 장비 스위치? - 네트워크에서 통신을 중재하는 장비. 1) 스위치 장비 동작 - 스위치의 핵심 역할 누가 어느 위치에 있는지 파악하고, 실제 통신이 시작되면 자신이 알고 있는 위치로 패킷을 정확히 전송하는 역할. 단말의 주소인 MAC 주소와 단말이 위치하는 인터페이스 정보(포트 정보)를 매핑한 MAC 주소 테이블을 갖고 있어서 가능하다. (1) 플러딩 만약 테이블에 없는 도착지 주소를 가진 패킷이 스위치로 들어오면 스위치는 전체 포트로 패킷을 전송한다. (플러딩) 플러딩은 스위치의 정상적인 동작이지만 이런 동작이 많아지면 스위치가 제 역할을 못 하게 된다. 이런 동작을 응용해 네트워크를 공격하는 기법이 있다. 스위치에게 엉뚱한 MAC 주소를 습득시킨다. 스위치의 MAC 테이블을 꽉 차게 해 스위치의 플러딩 동작을 유도한다. ARP 포이즈닝(Poisoning) 기법을 이용해 모니터링해야 할 IP의 MAC 주소가 공격자 자신인 것처럼 속여 원하는 통신…

June 10, 2022
IT_엔지니어를_위한_네트워크_입문
TIL 03. 네트워크 통신하기 - (1) 통신방식

TIL 03. 네트워크 통신하기 - (1) 통신 방식 * 유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트 유니캐스트 1 : 1 통신 출발지와 목적지가 1:1로 통신 브로드캐스트 1 : 모든 통신 동일 네트워크에 존재하는 모든 호스트가 목적지 멀티캐스트 1 : 그룹(멀티캐스트 구독 호스트) 통신 하나의 출발지에서 다수의 특정 목적지로 데이터 전송 애니캐스트 1 : 1 통신(목적지는 동일 그룹 내의 1개 호스트) 다수의 동일 그룹 중 가장 가까운 호스트에서 응답 IPv4에서는 일부 기능 구현, IPv6는 모두 구현 가능 * 데이터의 목적지 주소를 기준점으로 한 통신 방식 정리 BUM 트래픽과 언노운 유니캐스트 B (Broadcast), U (Unknown Unicast), M (MultiCast) 을 지칭. 서로 다른 종류의 트래픽이지만 네트워크에서의 동작은 비슷하다. 스위치가 목적지에 대한 주소를 학습하지 못한 상황(스위치 입장에서 Unknown)이어서 패킷을 모든 포트로 전송하…

June 02, 2022
IT_엔지니어를_위한_네트워크_입문
TIL 02. 네트워크 연결과 구성 요소

TIL 02. 네트워크 연결과 구성 요소 1. 네트워크 연결 구분 규모와 관리 범위에 따라 아래와 같이 3가지로 구분된다. 현재는 대부분의 기술이 이더넷으로 통합되었고, 사용자가 전송 기술을 구분하는 것은 무의미해 관리 범위 기준으로 LAN, MAN, WAN으로 구분한다. LAN (Local Area Network) 사용자 내부 네트워크 MAN (Metro Area Network) 한 도시 정도를 연결하고 관리하는 네트워크. 자체 인프라를 통해 네트워크를 구축한 경우를 WAN으로 구분 짓는 경우가 있다. WAN (Wide Area Network) 멀리 떨어진 LAN을 연결해 주는 네트워크. 도시 단위의 네트워크를 구분할 때, 통신사가 이미 갖고 있는 인프라 기반으로 구축한 경우를 지칭한다. 2. 네트워크 회선 원격지 네트워크의 연결을 위해서 WAN을 사용해야 하며, WAN에서 통신사업자와 사용자를 연결해주는 회선과 기술은 다양한 종류를 가지고 있었다. 현재는 LAN과 동일하게 이더…

May 24, 2022
IT_엔지니어를_위한_네트워크_입문
TIL 01. 네트워크 시작하기

TIL 01. 네트워크 시작하기 1. 네트워크 구성도 살펴보기 홈 네트워크와 데이터 센터 네트워크의 구성과 차이로 내용이 시작된다. 이 중 데이터 센터 네트워크와 관련된 내용엔 익숙지 않은 내용들이 있다. 스파인-리프 구조 리프 스위치 10G Base-T 등등의 내용들이 있는데 나중에 읽을 케이블과 커넥터(2-3장), 네트워크 디자인(13장)에서 각기 상세하게 다루게 된다. 2. 프로토콜 네트워크에서 통신할 때의 규약을 통상적으로 프로토콜이라 일컫는다. 기존의 프로토콜 계층 정의는 OSI 7 계층의 정의로 불려졌지만, 과거에 비해 좋아진 기술력으로 인해 4 계층으로 줄어든 TCP/IP 계층이라고 하기도 한다. 광의의 TCP/IP와 협의의 TCP/IP라는 용어로도 나눌 수 있다. 광의의 TCP/IP - 어떤 계층을 쓰든 간에 통신을 하는 행위 자체를 의미. (하단의 프로토콜 스택과 같은 맥락이라 보면 될 것 같다.) 협의의 TCP/IP - L4(전송) 계층에 따른 통신 규약을 통칭.…

May 20, 2022
IT_엔지니어를_위한_네트워크_입문
Clean Code - TIL 10. 클래스

TIL 10. 클래스 오늘 TIL 3줄 요약 클래스는 작아야 한다. (172p) 응집도를 유지하면 작은 클래스 여럿이 나온다. (178p) 결합도와 함께 모듈의 독립성을 판단하는 지표이며, *모듈 내부의 기능적인 응집 정도를 나타낸다. 결합도는 모듈과 모듈간의 상호 결합 정도를 나타낸다. **응집도는 높을수록 좋고 결합도는 낮을수록 이상적이다. 클래스가 응집도를 잃는다면 쪼개라. (179p) TIL (Today I Learned) 날짜 2022.05.11 오늘 읽은 범위 10장. 클래스 책에서 기억하고 싶은 내용을 써보세요. 단일 책임 원칙 (SRP - Single Responsibility Principle)은 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙이다. (175p) 클래스 설명은 만일(“if”), 그리고(“and”), -(하)며(“or”), 하지만(“but”)을 사용하지 않고서 25 단어 내외로 가능해야 한다. SRP 원칙과 OCP 원칙을 지원…

May 11, 2022
CleanCode
Clean Code - TIL 08. 경계 & TIL 09. 단위 테스트

TIL 08. 경계 경계 TIL 2줄 요약 외부 코드(외부 라이브러리 API)를 사용할 땐, 짐 뉴커크가 얘기한 학습 테스트의 방식으로 초점을 맞추자. (147p) 경계에 위치하는 코드는 깔끔히 분리한다. (외부 라이브러리에 의존하지 않게 우리 코드를 작성하라.) (152p) TIL (Today I Learned) 날짜 2022.05.07 오늘 읽은 범위 8장. 경계 책에서 기억하고 싶은 내용을 써보세요. 학습 테스트는 공짜 이상이다.(149p ~ 150p) 학습 테스트를 이용한 학습이 필요하든 그렇지 않든, 실제 코드와 동일한 방식으로 인터페이스를 사용하는 테스트 케이스가 필요하다. 이런 경계 테스트가 있다면 패키지의 새 버전으로 이전하기 쉬워진다. 그렇지 않다면 낡은 버전을 필요 이상으로 오랫동안 사용하려는 유혹에 빠지기 쉽다. 낡은 버전을 필요 이상으로 사용하려는 유혹에 빠지지 않기 위한 방법으로 학습 테스트를 가급적이면 Production 코드와 유사하게 짜는 것…

May 07, 2022
CleanCode
Clean Code - TIL 07. 오류 처리

TIL 07. 오류 처리 오늘 TIL 3줄 요약 Try - Catch - Finally 문부터 작성하라 (132p) -> 예외 던지기부터 시작하라. 호출자를 고려해 예외 클래스를 정의하라. (135p) null을 반환하는 곳이 있을 경우, 예외를 던지거나 특수 사례 객체를 반환하게 해라 (139p) TIL (Today I Learned) 날짜 2022.05.05 오늘 읽은 범위 7장. 오류 처리 책에서 기억하고 싶은 내용을 써보세요. 오류 처리의 시작은 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 것으로부터 시작해라. (133p) 확인된 오류가(Checked Exception) 치르는 비용은 OCP를 위반할 수 있다는 것을 기억해야 한다. (134p) 상위 단계에서 던지는 확인된 예외를 던지게 될 경우, 다음과 같이 예외 처리를 해야 한다.. (1) catch 블록에서 처리 (2) 선언부에 throw 절을 추가 결과적으로 하위 단…

May 05, 2022
CleanCode
Clean Code - TIL 06. 형식 맞추기

TIL 06. 객체와 자료 구조 오늘 TIL 3줄 요약 객체는 동작(구현)을 공개하고 자료를 숨긴다. 자료 구조는 별다른 동작 없이 자료를 노출한다. 객체 VS 자료구조와 절차적인 코드의 선택은 상황마다 다르므로, 직면한 문제에 최적을 선택한다.(128p) TIL (Today I Learned) 날짜 2022.05.03 오늘 읽은 범위 6장. 객체와 자료구조 책에서 기억하고 싶은 내용을 써보세요. 디미터 법칙 - 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.(123p) 즉, 객체는 조회 함수로 내부 구조를 공개하면 안 된다. 절반은 객체, 절반은 자료 구조인 잡종 구조가 나오는 경우가 있다. 하지만 이렇게 나온 구조는 객체 지향과 절차 지향 구조의 단점만 모아놓게 되는 셈이다.(124p ~ 125p) 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 여지껏 작성해 본 모든 프로젝트의 구현 방식이 잡종 방식일 것이고, 그에 대한 일침을 놓는 챕터였다. 객…

May 03, 2022
CleanCode
Clean Code - TIL 05. 형식 맞추기

TIL 05. 형식 맞추기 오늘 TIL 3줄 요약 좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다. (114p) 형식을 맞추는 목적이 중요하다. 그 목적엔 ‘돌아가는 코드’ 가 일차적인 의무가 아니다. 돌아가는 코드라는 생각을 내려두자. (96p) 좋은 신문 기사를 작성하듯 코드를 작성하자. 전달력 좋은 글을 쓰듯 코드를 작성한다. (98p) TIL (Today I Learned) 날짜 2022.05.02 오늘 읽은 범위 5장. 형식 맞추기 책에서 기억하고 싶은 내용을 써보세요. 좋은 신문 기사를 작성하듯(98p)이라는 소단원의 내용에 5장의 내용이 모두 내포되어 있다. 읽기 좋은 글의 특성을 추려보면 5장 내용들과 일맥상통할 것이다. 그 중 대표적이라 생각하는 요소들을 쓰자면 아래와 같다. 98p ~ 101p 의 내용 요약 개념은 상단 요약 (초반에 요약) 개념에서 쓰는 변수 선언은 쓰는 개념과 가깝게 선언. ( 연관된 종속 메소드의 선언도 동일 ) 저자와 완전히 동…

May 02, 2022
CleanCode
Clean Code - TIL 04. 주석

TIL 04. 주석 오늘 TIL 3줄 요약 많은 경우 주석으로 달려는 설명을 새로운 코드(즉, 리팩토링해라)로 대체하는 것으로 충분한 경우가 많다. (70p) 닫는 괄호에 주석을 달아야겠다는 생각이 들면 함수를 줄이려는 시도를 하자.(85p) 의도 표현은 주석이 아닌 코드로! (법적 표현 같이 알기 힘든 요소 제외하고는..?) TIL (Today I Learned) 날짜 2022.04.29 오늘 읽은 범위 4장. 주석 책에서 기억하고 싶은 내용을 써보세요. 좋은 주석 법적인 주석 정보를 제공하는 주석 의도를 설명하는 주석 의미를 명료하게 밝히는 주석 결과를 경고하는 주석 (ex - 실행 시간이 오래 걸린다는 주석) TODO 주석 -> But! 이 TODO를 나쁜 코드를 남겨둘 용도로 사용하는 것은 금물이다. 작성할 코드를 미루지 말 것! 중요성을 강조하는 주석 나쁜 주석 독자를 배려하지 않는 주석( = 작성자만 의미를 해석할 수 있는 주석) 같은 이야기를 중복하는 주석 의무…

April 29, 2022
CleanCode
Clean Code - TIL 03. 함수

TIL 03. 함수 오늘 TIL 3줄 요약 소프트웨어는 글짓기와 비슷하다. 글짓기를 하듯 좋은 코드를 위해선 중복 제거, 반복 제거, 순서 변경 등을 해야 한다.(62p) 오류 처리도 한 가지 작업이다.(59p) 명령과 조회를 분리하라.(56p) TIL (Today I Learned) 날짜 2022.04.25 오늘 읽은 범위 3장. 함수 책에서 기억하고 싶은 내용을 써보세요. 소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 초안은 대개 서투르고 어수선하다. 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리하는 글짓기는 소프트웨어를 짜는 행위와 다르지 않다. 중복을 줄여나가고, 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.(62p) 작게 더 작게! 그리고 한 가지만 해라! 앞서 얘기한 2가지는 함수당 추상화 수준은 하나로도 이어지는 내용이다. 자연스럽게 위에서 아래로 코드 읽기:내려가기…

April 26, 2022
CleanCode
Clean Code - TIL 02. 의미 있는 이름

TIL 02. 의미 있는 이름 오늘 TIL 3줄 요약 의도를 분명하게 밝히기 위해 이름을 신중하게 짓자. 의도를 분명하게 하기 위해선, 명확성이 있어야 한다. 의도를 분명하게 하기 위해선, 일관성이 있어야 한다. TIL (Today I Learned) 날짜 2022.04.24 오늘 읽은 범위 2장. 의미 있는 이름 책에서 기억하고 싶은 내용을 써보세요. 의미 있는 맥락을 추가하라! - 목적에 맞는 정보들은 성격에 맞게 적당한 접두어를 추가하는(해당 정보들을 묶어 클래스화 하는 것이 더욱 좋다!) 방식으로 명확하게 정보를 드러내는 것이 좋다. 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 평소 코딩 알고리즘 문제를 연습할 때 temp 같은 임시 변수를 간간히 썼었는데, 동료의 피드백을 받아본 결과 의미 있는 변수명과 메소드를 쓰는 것도 이럴 때 같이 연습해 두면 평소 코딩 습관이 좋아질 것이라는 의견이 있었다. 그 피드백의 중요성을 되짚어주는 내용이었다고 생각한다. 앞…

April 25, 2022
CleanCode
Clean Code - TIL 01. 깨끗한 코드

TIL 01. 깨끗한 코드 오늘 TIL 3줄 요약 좋은 코드는 좋은 소설처럼 읽기 좋다. 깨끗한 코드는 한 가지에 집중, 충실한 코드다. 연습이 중요하다. TIL (Today I Learned) 날짜 2022.04.23 오늘 읽은 범위 1장. 깨끗한 코드 책에서 기억하고 싶은 내용을 써보세요. 깨끗한 코드는 한 가지에 ‘집중’한다. 깨끗한 코드란 다른 사람이 고치기 쉽다. 코드를 읽는 시간 대 코드를 짜는 시간 비율이 10 대 1을 넘는다. 이 책은 좋은 코드를 짜기 위한 다양한 경험적 교훈과 체계와 절차와 기법, 그리고 예제를 무수히 많이 보여주지만, 결론적으로 읽는 독자의 연습에 달렸다. 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 급하고, 서둘러 끝내려면, 쉽게 짜려면, 읽기 쉽게 만들면 된다. 좋은 코드를 위해선 연습이 필요하다. TIL 01. 깨끗한 코드 오늘 TIL 3줄 요약 TIL (Today I Learned) 날짜 오늘 읽은 범위 책에서 기억하고 싶…

April 24, 2022
CleanCode
JPA 기본 강의 정리 - 10. JPQL 정리_02

JPQL 프로젝션 페이징 조인 서브 쿼리 JPQL 타입 표현 조건식 기본 함수와 사용자 정의 함수 1. 프로젝션 SELECT 절에 조회할 대상을 지정하는 것. 1) 대상 타입 예시 엔티티 프로젝션 SELECT m FROM Member m SELECT m.team FROM Member m 임베디드 타입 프로젝션 SELECT m.address FROM Member m 스칼라 타입 프로젝션 (기본 데이터 타입) SELECT m.username, m.age FROM Member m 2) 여러 타입 값 조회 Query 타입 Query는 Object를 반환하기에 타입 캐스팅이 필요하다. Object[] 타입 위의 Query 타입을 앞서 타입캐스팅하는 것과 동일한 이치로 보면 된다. new 명령어 조회 위와 같이 DTO로 조회 결과를 SQL문에서 매핑하는 것이 가능하다. new 생성자로 매핑 시, 패키지 명을 모두 써야하는 것이 눈여겨 봐야하는 점이다. 이 과정은 꽤 불편하기에 단축하는 과정…

January 17, 2022
JPA_Basic
JPA 기본 강의 정리 - 09. JPQL 정리_01

JPQL 1. JPA에서 SQL을 사용할 수 있는 방법 방법 설명 1. JPQL * 가장 단순한 조회 방법* 엔티티 객체를 중심으로 개발* 문제는 검색할 때이며, 테이블이 아닌 엔티티 객체를 대상으로 검색. 2. Criteria * 자바 코드로 JPQL을 작성할 수 있다.* JPA 공식 기능* 단, 너무 복잡하고 실용성이 없다. 3. QueryDSL * 컴파일 시점에 문법 오류를 찾을 수 있다.* 동적 쿼리 작성 편리하며, 단순하고 쉽다.* 실무 사용 권장 4. Native SQL * JPA가 제공하는 SQL을 직접 사용하는 기능.* JPQL로 해결할 수 없는 특정 DB의 의존적인 기능 사용 가능 ex) 오라클 Connect By, 특정 DB만 사용하는 SQL 힌트 번외 - JDBC API, MyBatis, SpringJDBCTemplate * JPA를 사용하면서 기존의 JDBC, MyBatis, SpringJDBCTemplate 등을 함께 사용 가능하다.* 단, 영속성 컨텍스트…

January 16, 2022
JPA_Basic
JPA 기본 강의 정리 - 08. 값 타입

값 타입 JPA 최상위 값 타입 분류 기본 값 타입 임베디드 타입 (복합 값 타입) ** 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 ** 1. JPA 최상위 값 타입 분류 1) 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 2) 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 2. 기본 값 타입 생명 주기를 엔티티에 의존 값 타입은 절대 공유하지 말 것! 3. 임베디드 타입 ** 복합 값 타입이며, 객체를 코드로 명확하게 표현하기 위한 수단이라는 느낌으로 받아들이는 것이 편하다. * 임베디드 타입 사용법 Annotation 설명 @Embeddable 값 타입을 정의하는 곳에 표시 @Embedded 값 타입을 사용하는 곳에 표시 @AttributeOverrides 컬럼명 중복 시 사용. @AttributeOverride 컬럼명 중복 시…

January 15, 2022
JPA_Basic
JPA 기본 강의 정리 - 07. 영속성 전이(Cascade)

영속성 전이 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용. ex: 부모 엔티티를 저장할 때, 자식 엔티티도 함께 저장. * 영속성 전이 예시 위 이미지 Parent와 Child 샘플 엔티티 코드다. Parent.java에서 childList라는 연관 관계에서 cascade 속성을 준 것을 확인할 수 있다. 1) 객체 코드 예시 2) Main.java 예시 위의 Main 코드에서 생성한 Parent, Child1, Child2를 모두 DB에 저장하기 위해서는 Cascade 속성이 없다면 총 3개의 Entity Manager 객체에 영속시켜야 한다. ex: em.persist(parent); em.persist(child1); em.persist(child2); 하지만 1) 객체 코드 예시에서 Parent에서 지정한 것과 같이 Cascade 속성을 준 것으로 Parent 객체만 엔티티 매니저에 등록 후 실행시키면 모두 DB에 저장되…

January 14, 2022
JPA_Basic
JPA 기본 강의 정리 - 06. 프록시와 지연로딩

프록시 프록시 단독으로 쓰이는 경우는 실무적으론 많이 없다고 한다. 그러면 “왜 배워야 할까?” 라는 의문이 들텐데, 바로 뒤에서 배울 지연 로딩 개념을 이해하기 위해서 라고 정리할 수 있다. 1. 프록시 기초 em.find( ) VS em.getReference( ) em.find() : DB를 통해 실제 엔티티 객체 조회. em.getReference() : DB 조회를 미루는 가짜(프록시) 엔티티 객체 조회 2. 프록시 특징 프록시 객체는 실제 객체의 참조(target)를 보관. 처음 사용할 때 한 번만 초기화. 프록시 객체가 초기화 되면 프록시 객체를 통해 실제 엔티티에 접근 가능. 영속성 컨텍스트에 찾는 엔티티가 이미 존재하는 경우, em.getReference() 를 호출해도 실제 엔티티를 반환한다. 반대로, 영속성 컨텍스트에 찾는 엔티티가 없는 경우엔 HibernateProxy 클래스 객체를 갖게 된다. 이 때 em.getReference()로 먼저 호출 후, em.f…

January 14, 2022
JPA_Basic
JPA 기본 강의 정리 - 05. 상속 관계 매핑

상속 관계 매핑 1. 관계형 DB에서의 상속 관계? 결론부터 얘기하면, 관계형 DB에서 상속 관계는 존재하지 않는다. 다만, 슈퍼 타입 / 서브 타입 관계라는 모델링 기법이 객체 상속과 유사하다. 그래서 JPA에서의 상속 관계 매핑은 DB에서의 슈퍼 타입, 서브 타입 관계를 매핑하는 것으로 약칭하며 구체적인 방법은 조인 전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략 3가지가 있다. 2. 주요 Annotation Annotation 설명 @Inheritance(strategy = InheritanceType.XXX) 사용할 전략 방법을 명시하며, 3가지가 존재한다.1) JOINED: 조인 전략2) SINGLE_TABLE: 단일 테이블 전략3) TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = “DTYPE”) DTYPE, 즉, 상속 받은 객체의 타입이 무엇인지 부모 테이블에서 설명하는 컬럼 (Default - DTY…

January 10, 2022
JPA_Basic
JPA 기본 강의 정리 - 04. 다양한 연관 관계 매핑 핵심 요약

다양한 연관 관계 매핑 * 연관 관계 매핑 시 고려사항 3가지 다중성 단방향, 양방향 연관 관계의 주인 1. 다중성 유형 Annotation 다대일 @ManyToOne 일대일 @OneToOne (1) 다대일 (@ManyToOne) 외래 키가 있는 쪽이 연관 관계의 주인. 양쪽을 서로 참조하도록 개발 대상 테이블(@OneToMany) 쪽은 mappedBy 속성 필수. (2) 일대일 (@OneToOne) 일대일 관계의 반대는 일대일 주 테이블이나 대상 테이블 중에 외래 키 선택 가능 다대일 양방향 매핑과 동일하게 외래 키가 있는 곳이 연관 관계의 주인. 반대편은 mappedBy 속성 적용. 외래 키에 데이터베이스 유니크 (UNI) 제약 조건 추가 주 테이블에 외래 키 대상 테이블에 외래 키 주 객체가 대상 객체의 참조를 가지는 것처럼 주 테이블에 외래 키를 두고 대상 테이블을 찾음 대상 테이블에 외래키 존재 객체 지향 개발자 선호 전통적인 데이터베이스 개발자 선호 JPA 매핑 편리 …

January 09, 2022
JPA_Basic
JPA 기본 강의 정리 - 03. 다양한 연관 관계 매핑 기초

다양한 연관 관계 매핑 기초 들어가기 전에 프로그래머스에서 JPA가 아닌 JDBC Template를 이용한 과제관이 있다. 과제관을 다 풀진 못 했었지만, JPA를 사용하는 근본 목적과 동일한 생각을 경험했다. → JDBC Template을 사용하면 객체 중심적인 프로그래밍이 아닌 SQL 매퍼로서의 프로그래밍을 하겠끔 된다? 위의 경험으로 이 상황을 연관 관계로 풀어낼 수 있는 지가 JPA를 사용하는 숙련도 판단 근거일 것이라 생각한다. (물론 그 배경으로 관계형 DB 모델에 관한 숙련도가 있겟지만..) 그래서 이번 강의 시간과 차후 강의인 고급 매핑, 상속관계를 나만의 방식으로 체득해야겠다고 다짐했다. 1. 객체와 테이블 연관 관계의 차이 다음과 같은 Member, Team 객체가 있고, DB(테이블)에 맞춘 모델링을 한 것이라 가정하자. * 의문점 Member를 통해 Team 객체의 정보를 얻어오려면 어떤 방식을 거치게 될까? 연관 관계를 생성하지 않고, 객체 모델링이 테이…

January 08, 2022
JPA_Basic
JPA 기본 강의 정리 - 02. 엔티티 기본 매핑

엔티티 매핑 - 기본 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 1. @Entity JPA를 사용해서 테이블과 매핑할 클래스에 사용 필수. !주의 2. @Table Entity와 매핑할 테이블 지정 시 사용. 3. Entity의 속성 (테이블 컬럼) 어노테이션 정리 어노테이션 설명 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑 @Enumerated enum 타입 매핑 @Lob BLOB, CLOB 매핑 @Transient 특정 필드를 컬럼에 매핑하지 않음(매핑 무시) 1) @Column 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable,updatable 등록, 변경 가능 여부 TRUE nullable(DDL) null 값의 허용 여부를 설정. false로 설정하면 DDL 생성 시에 not nu…

January 07, 2022
JPA_Basic
JPA 기본 강의 정리 - 01. JPA 사용 이유 & 영속성

JPA ? JPA의 등장 배경 → Java와 DB(RDBMS) 의 정보 저장 방식의 차이 (1) Java - Java에서 객체는 참조를 사용해 연관 데이터 조회 (2) RDBMS - 테이블에 외래 키를 사용. 즉, 기존의 JDBC Template, Mybatis 등의 기술이 있었음에도 객체 지향적인 프로그래밍이 아닌 SQL 중심적인 개발이 많은 시간과 노력을 들이게 됐다. 앞서 나온 기술들의 SQL 중심적인 개발 요소를 줄이고자 Java Persistence API(이하 JPA) 가 등장하게 됐다. JPA의 특징 1. 영속성 컨텍스트 엔티티를 영구 저장하는 환경 (컨테이너) 1차 캐시 동일성 보장 트랜잭션을 지원하는 쓰기 지연 변경 감지 지연 로딩 1) 1차 캐시 em.persist() 로 객체가 1차 캐시에 저장되지만, DB에 저장된 것은 아니다. → 이후 트랜잭션을 커밋해야 실제로 DB에 객체 관련 쿼리가 입력되고, 그 때 저장된다. 즉, 저장되기 전까진 객체의 상태와 관…

January 06, 2022
JPA_Basic
Bastion용 EC2 구성

Bastion Host 역할용 인스턴스 생성 후, 설정 가이드 1. apt 패키지 업데이트 및 시간대 설정 2. kubernetes 설치에 필요한 패키지 및 기타 패키지 설치 진행 zsh를 사용하지 않을 사람이라면 3. 과정은 스킵 3. oh my zsh 설치 (1) Powerlevel10k 테마 (2) autoupdate 플러그인 (3) zsh-syntax-highlighting 플러그인 (4) 접속 유저의 기본 쉘 변경 4. AWS CLI 설치 5. Kubectl 설치 6. eksctl 설치 ~/.zshrc 파일 안에 다음 내용 저장 아래명령 실행 7. AWS IAM 인증 설치 8. AWS 인증정보 등록 (1) 인증정보 생성 및 확인 메뉴 (2) (1)에서 생성한 인증정보 등록 (3) aws sts get-caller-identity 로 입력 정보 확인 (4) ssh-keygen 으로 연결용 key 생성 (5) vimrc 설정 (yaml 파일 문법용) Bastion Host…

December 24, 2021
EKS
EKS용 네트워크 구성 가이드

들어가기 앞서 진행 중에 필요에 따라 수정이 있었기에, 각 이미지의 태그이름 및 구성 정보가 글내용과 정확히 일치 않는다는 점 유의. * 네트워크 아키텍쳐 1. VPC 생성 ​ 1) 이름 지정 및 IPv4 CIDR 지정 CIDR : 192.168.0.0/16 2. Subnet 구성 ​ 1)서브넷 생성 2a용 public, private 각 1개 2b용 public, private 각 1개 (1) subnet-public-2a : 192.168.0.0/24 | subnet-private-2a : 192.168.10.0/24 (2) subnet-public-2b : 192.168.1.0/24 | subnet-private-2b : 192.168.20.0/24 3. 인터넷 게이트웨이 생성 이름 지정하여 생성 후, 우측 상단 작업 → VPC에 연결 → 1) 에서 생성한 VPC로 연결 4. 라우팅 테이블 생성 1.에서 생성한 vpc를 지정 5. 라우팅 테이블에 게이트웨이, …

December 23, 2021
EKS
Elastic Kubernetes Service 설치 가이드

EKS 설치 가이드 및 참고 사이트 링크 1. aws CLI Version 2 설치 https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html 참고 설치 파일 다운 및 진행 후 실행 권한 부여 2. (기존에 Kubernetes 설치 시 3.으로) kubectl 설치 https://aws-eks-web-application.workshop.aws/ko/30-setting/500-eksctl.html 참고 3. eksctl 설치 https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eksctl.html 참고 eksctl zsh 명령어 자동 완성 기능 추가 4. AWS IAM 인증 설치 https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-aws-iam-authenticator.html 참고 (1) 설…

December 21, 2021
EKS