전체 글

전체 글

    TCP/IP 4계층과 OSI 7계층, 전송 계층의 handshake

    기본용어 네트워크 토폴로지: 네트워크의 물리적인 구성 요소들이 서로 어떻게 연결되어 있는지, 또는 논리적으로 어떻게 구성되어 있는지를 묘사하는 방식 트래픽 (Traffic): 네트워크 상에서 데이터가 이동하는 양. 트래픽은 인터넷 사용자의 수, 웹 사이트의 인기도, 서비스의 사용량 등에 따라 변동될 수 있음. 대역폭 (Bandwidth): 네트워크가 한 번에 전송할 수 있는 데이터의 양(초당 전송 속도) 일반적으로 초당 비트(bit) 또는 바이트(Byte) 단위로 측정 (배관의 파이프 크기) 처리량 (Throughput): 네트워크에서 초당 실제로 처리되는 패킷의 양을 나타내는 실용적인 지표 (실제 파이프 속 흐르는 물의 양) 전송계층의 3-way handshake (연결 수립) 4-way handsha..

    [디자인패턴] 싱글톤 패턴, 팩토리 패턴

    의존성 주입과 싱글톤 패턴 의존성 주입은 객체 간의 결합도를 낮추기 위한 설계 패턴 객체 생성 및 관리를 담당하는 제 3자인 컨테이너가 객체 간의 의존성을 연결해주는 방식 객체는 자신이 필요로 하는 의존 객체가 어떤 것인지 알지 못하더라도, 외부(컨테이너, 의존성 주입자)에서 주입받은 객체를 사용하여 동작할 수 있다. 싱글톤 패턴은 객체를 하나의 인스턴스만 생성하여 공유하는 방식의 패턴이다. 의존성 주입을 통해 싱글톤 객체를 사용하 객체 간의 결합도를 낮출 수 있다.() 그렇기에 모듈들을 쉽게 교체할 수 있다→테스팅과 마이그레이션이 수월하다. 의존성 주입을 하지 않은 경우 // 싱글톤 클래스 public class Singleton { private static Singleton instance; pri..

    Git 사용중 로컬-원격 저장소간 충돌상황일때(변경 사항이 충돌하지 않을때)

    깃허브 레포지토리에서 리드미를 수정하고, 이를 fetch 혹은 pull 하지 않은 상태로, 즉 로컬에서 원격 저장소의 변경 내역을 업데이트하지 않은 상태로 새로운 커밋을 남겼다. 이후 로컬저장소 변경 내역을 원격 저장소로 보내려하니 아래와 같은 에러가 발생했다. git push origin main To https://github.com/yongwoo-jeong/community-bulletin-board-MPA ! [rejected] main -> main (fetch first) error: 레퍼런스를 'https://github.com/yongwoo-jeong/community-bulletin-board-MPA'에 푸시하는데 실패했습니다 힌트: 리모트에 로컬에 없는 사항이 들어 있으므로 업데이트가 ..

    자바 서블릿에서의 session

    자바 서블릿 게시판 프로젝트를 만들며 로그인을 세션 방식으로 구현했다. 그렇다면 이 세션은 무엇인지 알 필요가 있다는 생각이 들어 정리해본다. 세션이란? Session은 영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다. - 위키 백과 - == 클라이언트-서버 간 연결 상태를 의미한다. == 클라이언트가 브라우저에 접속해 서버와 접속이 종료하기 전 상태 HTTP 통신 구조는 HTTP 통신의 이해 를 참고할 수 있다. 세션 동작 과정 HTTP 같은 클라이언트-서버 프로토콜에서 세션은 세 가지 과정으로 이루어진다. 클라이언트가 (TCP) 연결을 수립한다. 클라이언트는 요청을 전..

    서블릿이 static resouces 들을 처리하지 못하는 경우(css, js, 이미지 로딩 실패)

    웹 게시판을 스프링 프레임워크 없이 서블릿만으로만 구현하는 도중 jsp 파일이 외부 css, js 파일들을 로딩하지 못하는 문제에 마주했다. 이 문제를 해결하기 위한 과정에서 새로운 사실들을 알게되었다. 우선 브라우저는 html, jsp 페이지들을 받아와 렌더하는 과정에서

    myBatis 3) 쿼리에 파라미터에 객체 전달 시 프로퍼티 찾지 못할 때

    서블릿 / 스프링프레임워크 프로젝트를 오가며 바티스 쿼리 매퍼를 작성하다보니, 아래와 같은 사항들을 알게되어 정리해본다. 공식문서에서 해당 내용을 찾기 힘들었는데, 같은 문제로 애먹는분들에게 도움이 되면 좋겠다. myBatis 3 매퍼 SQL 프라그먼트에 parameter 를 전달할때, 서블릿 프로젝트로 진행시, DAO에서 파라미터에 VO를 담아준다면? fragment에서 받을 때 Map.property 혹은 VO.property 라고 명시/사용 해줘야한다. AND title like CONCAT('%',#{searchCriteria.keyword},'%') 스프링 프레임워크 레포지토리에서 VO(DTO)를 파라미터로 넘겨줄 시 반대로 명시할 필요 없이 필드명만 입력해줘도 된다. AND title like..

    myBatis 3 쿼리문에 parameter 문법 (${}, #{})

    마이바티스를 이용하면 SQL문에 파라미터를 쓸 수 있다. myBatis 공식문서에 Parameters 섹션에 기술된 #{} 과 String substitution의 ${} 이 그것들이다. 예를들어, SELECT * FROM article WHERE article_id = #{articleId} 위와 같이 사용하거나 WHERE article_id = '${articleId}' 와 같이 사용하면 파라미터를 전달해줄 수 있다. @Mapper public interface ArticleMapper { public List selectSearchArticles(@Param("articleId") String articleId); } 위 매퍼인터페이스의 selectSearchArticles 메서드를 통해 스트링 형..

    HTTP 통신의 이해

    HTTP 통신의 구조 HTTP(Hyper Text Transport Protocol, 하이퍼텍스트 전송 프로토콜)는 브라우저-서버가 통신할 수 있게 만들어주는 프로토콜(규약)이다. 주로 HTML 문서를 주고받는데 쓰인다. 일반적으로 전송 계층 프로토콜로 TCP, 네트워크 계층 프로토콜로 IP를 사용한다. TCP/IP 에서 IP 주소를 사용해 통신할 컴퓨터를 결정하고, 포트 번호를 사용해 해당 컴퓨터의 어떤 프로그램과 통신할지 결정한다. HTTP에서는 클라이언트가 서버에 요청 메세지를 보내고, 서버는 클라이언트 요청(Request)에 대한 응답(Response을 반환한다. 연결 상태를 유지하지 않는 비연결성(stateless) 프로토콜이다. Http Request는 클라이언트가 서버로 전달해 서버의 액션이..

    자바의 데이터 타입과 메모리 영역

    자바 원시타입, 참조타입(Primitive type, Reference type) 데이터 타입이란, 해당 데이터가 어떻게 메모리에 저장되고 프로그램에서 어떻게 처리되어야 하는지 명시적으로 알려주는 것이다. 자바에서는 크게 기본형타입과 참조형 타입이 있다. 원시 타입(Primitive Type) 논리형 boolean, 정수형 byte, int, short, long, 실수형 float, double, 문자형 char 이 있다. 8가지 기본형 타입을 미리 정의하여 제공한다. 기본값이 있기 때문에 Null이 존재하지 않는다. 기본형 타입에 Null을 넣고싶다면 래퍼 클래스를 활용한다. 실제 값을 저장하는 공간으로 스택 메모리에 저장된다. 담을수있는 크기를 벗어나면 컴파일 에러가 발생한다. 참조 타입(Refer..

    자바 - checked Exception, unchecked Exception

    Exception? Java object 의 Throwable 클래스에는 Error / Exception 클래스 존재한다. Exception은 java.lang.Exception 클래스와 그 서브클래스들이 쓰이는 상황이다. 이 예외들은 Checked Exception 과 Unchecked Exception 두 가지로 나눌 수 있다. 언체크 예외(unchecked exception)은 RuntimeException을 상속한 것 체크 예외는 그 이외의 예외들을 말한다. Checked Exception 체크 예외 체크 예외는 상술했듯 RuntimeException을 상속하지 않는 예외들이다. 컴파일 단계에서 확인된다. 복구가 가능한 예외들이기에 반드시 catch, throws를 통해 예외를 처리하는 코드를 함..