개발공부

    TCP/IP와 HTTP에 대하여

    TCP/IP와 HTTP에 대하여

    0. 들어가며 TCP프로토콜은 OSI 4계층, IP프로토콜은 3계층에 위치합니다. 그리고 HTTP 프토토콜은 7계층에 속하지만, TCP/IP에 의존적인 프토콜입니다. 그렇다면 HTTP 프로토콜과 TCP프로토콜은 어떤 차이가 있을지 알아보도록 하겠습니다. 1. TCP/IP 흔히 TCP/IP 라고 묶어서 부르지만, 각각 다른 프로토콜입니다. 하나씩 간단히 보도록 하겠습니다. IP 프로토콜 IP프로토콜은 지정한 IP주소에 데이터를 패킷 이라는 통신 단위로 전달하는 역할을 합니다. 단, 목적지까지 패킷의 순서와 도착을 보장하지 않습니다. 그리고 연결과 관련된 상태 정보도 유지하지 않습니다. 그리고 IP 패킷은 헤더와 데이터필드로 나뉘게 됩니다. 데이터 필드는 상위 계층에서 전달된 PDU가 삽입되며, 헤더필드는 ..

    PK로 Email, 전화번호와 같은 현실세계의 식별자를 사용해도 될까?

    PK로 Email, 전화번호와 같은 현실세계의 식별자를 사용해도 될까?

    https://jojoldu.tistory.com/672 현실 세계의 속성에 의존하지 않기 최근에 들었던 질문 중 현실 세계의 식별자를 데이터베이스 기본키로 써도 되냐는 것이 있었다. 이를테면 현실 세계에서 유일함을 보장하는 값들이다. 주민 등록 번호 전화 번호 여권 번호 이들 jojoldu.tistory.com 프로젝트 도중, 토론하게 된 내용이였습니다. 회원의 email 속성은 중복이 불가능한 유일 식별자이므로 PK로 써도 되겠다고 생각을 했었습니다. 하지만 현실세계의 식별자는 직접 제어가 불가능하며, 언제든 변경이 될 수 있는 값임을 생각을 못하고 있었네요. 전화번호 변경이 가능한 것 처럼, email 사업자(벤더)가 망하는 경우엔 회원의 email도 교체를 해줘야 하니까요!

    Entity와 VO, 그리고 DTO

    Entity와 VO, 그리고 DTO

    이전 포스팅에서 도메인에 대해 다루며 Entity와 VO에 대해 짤막하게 소개했습니다. 이번 포스팅에서는 Entity와 VO의 특징과 차이점에 대해 서술해보겠습니다. Entity 💡변별할 수 있는 사물 (Peter Chen, 1976) 💡정보를 저장할 수 있는 어떤것 (James Martin, 1989) 💡정보를 저장할 수 있는 사람, 장소, 물건, 사건 그리고 개념 등(Thomas Bruce, 1992) 쉽게 얘기하면 데이터를 저장하고 관리하기 위한 객체입니다. 다음과 같은 특징을 지니고 있습니다. 1. 실제 DB테이블과 매핑되는 핵심 객체 DB의 테이블과 1:1로 매핑되므로, 테이블에 없는 컬럼이 필드에 있어서는 안됩니다. 또한, Entity를 기준으로 테이블이 생성되고 스키마가 변경되기 때문에, 응..

    도메인이란?

    도메인이란?

    0. 서론 Entity - VO, DTO에 대해 포스팅하려고 공부를 하는데, 도메인에 대해서도 정의를 못내리고 있는 저를 발견했습니다. 비슷한 개념의 용어도 많고 비슷한 이름을 가진 용어도 많긴 하죠. 이걸 뭉뚱그려서 알고있다보니 소프트웨어 공학에서의 도메인은 뭐지? 하니 구체적인 대답이 나오지 않았습니다. 잘 알지도 못하면서 VO와 Entity에 대해 얘기할 수 없으니, 소프트웨어 공학의 관점에서 도메인에 대해 정리 및 공부겸 포스팅을 작성했습니다. 1. 도메인 💡소프트웨어로 해결하고자 하는 문제 영역 다른말로는 ‘개발할 대상’이라고도 할 수 있습니다. ‘온라인 쇼핑몰’을 개발해야 한다면 도메인은 ‘온라인 쇼핑몰’이 될 수 있습니다. 또한 ‘온라인 쇼핑몰’도메인은 ‘주문’, ‘결제’, ‘상품등록’, ‘..

    헤드퍼스트 디자인 패턴 06.커맨드(Command) 패턴

    헤드퍼스트 디자인 패턴 06.커맨드(Command) 패턴

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 1.커맨드 패턴이란 ✏️커맨드 패턴(Command Pattern) 객체의 행위method)를 캡슐화함으로써 주어진 여러 기능을 실행하지만 재사용성이 높은 클래스를 설계하는 패턴이다. 커맨드 객체는 통해 일련의 행동을 특정 리시버와 연결함으로써 요청을 캡슐화한 것입니다. 그렇게 되면, 호출시에 어떻게 처리되는지는 신경을 쓸 필요가 없고 처리가 된다라는 사실만 알 수 있습니다. 전등을 키는 경우를 예로 들어보겠습니다. 전등도 사실 그냥 켜지는게 아니라 전기를 끌어와서 형광등의 전력량에 알맞게 변환하고, ..

    헤드퍼스트 디자인 패턴 05.싱글턴(Singleton) 패턴

    헤드퍼스트 디자인 패턴 05.싱글턴(Singleton) 패턴

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 목차 0. 싱글턴이란? 1. 간단한 싱글턴 2. 스레드 안정성 2-1. 동기화(synchronized) 2-2. 인스턴스 미리 선언하기 2-3. Double-Checked Licking 2-4. lazyHolder(요청시 초기화 홀더) 패턴 3. 직렬화 4. 리플랙션 5. enum을 사용한 싱글턴 6. 싱글턴 남용의 위험성 0. 싱글턴(Singleton)이란? 스레드 풀, 또는 로그용 객체, 디바이스 드라이버등 하나만 있어도 충분하고, 여러개면 오히려 문제가 발생할 수 있는 공유객체 또는 유일하게 관..

    헤드퍼스트 디자인 패턴 04.팩토리(Factory) 패턴 - 팩토리 메서드

    헤드퍼스트 디자인 패턴 04.팩토리(Factory) 패턴 - 팩토리 메서드

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. * 내용이 너무 많아, 이번 팩토리 챕터는 나눠서 작성하게 되었습니다 1. 지난 포스팅 지난 포스팅에선 심플 팩토리 패턴에 대해서 다뤘습니다. 심플 팩토리 패턴은 엄밀히 말하면 관용구에 가깝다고 말씀 드렸습니다. 최첨단 피자의 최초 코드에서 생성부를 심플 팩토리 패턴을 사용해 캡슐화 하였습니다. 2. 팩토리 메서드 패턴 팩토리 메소드 패턴은 서브클래스에서 어떤 클래스를 만들지 결정함으로써 객체 생성을 캡슐화합니다. 예를 들자면, 최첨단 피자가게는 크게 생산자 클래스와 제품 클래스로 나눌 수 있습니다...

    헤드퍼스트 디자인 패턴 04.팩토리(Factory) 패턴 - 심플 팩토리

    헤드퍼스트 디자인 패턴 04.팩토리(Factory) 패턴 - 심플 팩토리

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. * 내용이 너무 많아, 이번 팩토리 챕터는 나눠서 작성하게 되었습니다. 1. 들어가기 전에 💡 객체의 인스턴스 생성은 때론 캡슐화하여 숨겨야 할 때가 있습니다. 이를 위해 팩토리 패턴을 사용해 불필요한 의존성을 줄여 결합 문제를 해결해 봅시다. 팩토리 패턴의 필요성 객체의 인스턴스 생성은 무분별하게 사용할시, 사이드 이펙트가 생길 수 있다. 하지만 인스턴스 생성 없이 프로그램 작성은 불가능하므로, 변화에 유연하게 만들어야 한다. 인터페이스를 기반으로 다형성을 활용한 팩토리 패턴을 사용하면, OCP원칙..

    헤드퍼스트 디자인 패턴 03.데코레이터(Decorator) 패턴

    헤드퍼스트 디자인 패턴 03.데코레이터(Decorator) 패턴

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 1. 목표 : 스타비즈 주문시스템 초대형 커피전문점 스타버즈의 주문시스템 리팩토링 단기간에 폭팔적으로 성장한 스타버즈 커피전문점은 시스템이 아직도 초창기 조그마한 까페에 머물러 있습니다. 우리는 이제, 스타버즈의 주문 시스템을 현재 수준에 맞게 리팩토링 해야 합니다. 현재 주문 시스템은 규모에 걸맞지 않게 허술합니다. 초대형 커피 전문점인 만큼 손님의 기호에 맞게 다양한 커스텀이 가능한데, 이대로라면 Becerage를 상속받는 클래스들이 옵션의 수만큼 생성되게 됩니다. 수백개 수천개가요! 관리가 매우..

    헤드퍼스트 디자인 패턴 2장. 옵저버(Observer)패턴

    헤드퍼스트 디자인 패턴 2장. 옵저버(Observer)패턴

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 핵심 - 느슨한 결합 subject는 observer에게 값 갱신만 알려줄 뿐, 구성엔 관여하지 않음 반대로 observer는 subject에게 값 갱신만 받을뿐, 구성엔 관심이 없음 - observer패턴의 push와 pull push는 observer에게 갱신을 알리며 데이터를 전달한다 pull은 갱신만 알리며, observer는 subject의 getter method를 통해 필요한 값만 가져온다. Weather-O-Rama의 차세대 인터넷 기반 기상 스테이션 구축하기! 구조 WeatherDat..

    헤드퍼스트 디자인 패턴 1장. 전략(Strategy)패턴

    헤드퍼스트 디자인 패턴 1장. 전략(Strategy)패턴

    * 본 포스팅은 한빛미디어의 헤드퍼스트 디자인 패턴을 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 1장 : 디자인 패턴의 세계로 떠나기 디자인 패턴 소개와 전략 패턴 디자인 패턴소개에 앞서, 객체지향에 대한 기본적인 이해가 필요합니다. 필요한 객체지향 기초 개념 추상화 : 공통 속성 및 기능을 묶어 이름을 붙임 캡슐화 : 데이터 구조 및 다루는 방법들을 결합시켜 묶는 것 상속 : 상위 개념의 특징을 하위 개념이 물려받는 것 다형성 : 물려받은 상위 개념의 특징을 재정하는 것 디자인 패턴의 의의 디자인패턴은 코드가 아닌 경험을 재사용하는 것이다. 다른 개발자가 우리와 똑같은 문제를 경험하고 해결하면..

    [자료구조] 2. 재귀함수

    [자료구조] 2. 재귀함수

    * 본 포스팅은 윤성우의 열혈 자료구조론을 읽으며 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 목차 1. 함수의 재귀적 호출의 이해 2. 재귀의 활용 3. 하노이 타워 1. 함수의 재귀적 호출의 이해 재귀함수란? 함수 내에서 자기자신을 다시 호출하는 함수입니다. 그럼, 완료되지 않은 함수룰 다시 호출하는걸까요? 입니다. 새로 메모리를 할당하여 복사본을 만들어서 실행시키는거라 아무 문제 없습니다. 단, 탈출구를 만들지 않으면 무한 재귀호출로 문제가 생기게 됩니다. 몸풀기로 팩토리얼을 수식으로 구현해 보겠습니다. 앗! n!를 전개하면 (n-1)! 부분에서 또 팩토리얼식이 나오네요! 이부분이 재귀함수로..

    [자료구조] 1. 자료구조와 알고리즘의 이해

    [자료구조] 1. 자료구조와 알고리즘의 이해

    * 본 포스팅은 윤성우의 열혈 자료구조론을 읽으며 공부한 내용을 정리한 글입니다. 저의 부족한 생각과 주관으로 틀린 내용이 있을 수 있으니, 자세한 내용이 궁금하시다면 해당 책을 읽어보시길 추천드립니다. 목차 1. 자료구조에 대한 기본적인 이해 1-1. 필요한 배경지식 1-2. 자료구조란? 2. 알고리즘의 성능분석 방법 2-1. 측정방법 2-2. 빅오 표기법 3. 프로그래밍 문제 풀이 1. 자료구조에 대한 기본적인 이해 1-1. 필요한 배경지식 해당 책은 C언어로 짜여져 있으며, 아래의 수준을 충족시켜야 정상적으로 이해할 수 있다고 합니다. 1. 구조체를 정의하며, typedef선언을 할 줄 안다. 2. 메모리 동적 할당을 이해하고 있으며, malloc과 free에 대해 이해해야 한다. 3. 포인터 변수..

    MVC 패턴

    MVC 패턴

    MVC란? Model, View, Controller의 앞글자를 따 MVC라 부른다. 위의 이름대로 어플리케이션을 세개지 역할로 구분해 개발하는 개발 방법론이다. Model 사용자가 요청한 결과를 도출하기 위해 일련의 작업을 수행 View 결과 화면을 표시 Controller 흐름 제어 및 사용자의 요청 처리 장점 모델과 뷰에 로직이 변경되더라도 서로 영향이 없어 유지보수 및 확장이 용이 MVC model 1 model에 비즈니스 로직을 처리하는 코드와 웹 브라우저에 결과를 출력하는 코드가 섞임 MVC model2 모든 요청은 서블릿이 받아서 알맞은 모델을 호출한다. 비즈니스 로직의 처리와 결과 출력 처리를 분리한다.