"통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다." 위키백과에서는 프로토콜을 이렇게 정의하고 있고 이어서 TCP/IP, HTTP와 같은 프로토콜 종류부터 프로토콜 구성요소 등에 관해 설명한다. 하지만 프로토콜이 뭔지 이해하지 못했다면 이런 설명은 약간 뜬구름 잡는 식이 될 수 밖에 없다. 그래서 여기서는 "프로토콜" 이라는 것 자체에 대해 이해해보도록 하자. 통신의 시작과 디지털변조옛날에는 빛과 소리로 신호를 전달하였지만 19세기 접어들면서 전기로 신호를 전달하기 시작했습니다.최초의 전기신호를 개발한 폰 죄머링부터, 모스( 모스부호할 때 모스), 벨과 그레이(전화) 등에 의해본격적으로 멀리 떨어진 곳에서 서로 신호를 보내는 통신의 시..
전체 글
자바 파일(Java file), 클래스 파일(Class file)자바 파일은 확장자가 .java 인 파일로서 자바 언어로 소스 코드를 작성할 때 그 내용을 적는 파일을 뜻합니다. 그리고 이 자바 파일을 자바 컴파일러로 컴파일한 파일이 바로 .class 확장자를 가진 클래스 파일입니다. 우리가 흔히 이클립스와 같은 IDE 혹은 커맨드 라인에서 javac 명령어를 통해 컴파일했을 때 나오는 파일이죠. 이 클래스 파일을 가지고 자바의 클래스 로더(Class Loader)가 JVM으로 클래스 파일을 로딩합니다.Java에서 클래스의 로딩 과정은 클래스 로더(Class Loader)가 확장자가 .class 클래스 파일의 위치를 찾아 그것을 JVM위에 올려놓는 과정을 뜻합니다. 동적 로딩Java는 동적 로딩을 지..
커넥션풀을 사용한다면 첫 요청시에만 직접적인 연결을 하고그 다음부터는 커넥션풀에 저장되어 있는 커넥션을 사용한다. 그렇다면 직접적인 연결을 할 때 어떤 코드가 실행되길래 시간이 오래걸리고커넥션풀을 사용하면 금방되는지 알아보자. Connection connection= DriverManager.getConnection("myurl");Connection connection= DriverManager.getConnection("myurl","myid","mypass"); @CallerSensitivepublic static Connection getConnection(String url, String user, String password) throws SQLException { java..
WebApplicationContext(DispatcherServlet)설정파일은 mvc-servlet.xml이다.Controller단 관련 빈들을 등록해준다.즉, mvc-servlet에서는 @Controller를 스캔하도록 하면된다.물론 @Controller뿐만아니라 Controller 단에서 사용하는 여러 빈들을 등록하면된다. 근데 이런 빈들은 각각의 역할이 있기 때문에 단순히 빈 등록 방법만 하기보다는이 DispatcherServlet이 어떤식으로 동작하는지를 알아야한다. 그 후 mvc-servlet.xml 내용을 살펴보자. 기본적으로 우리가 만드는 Controller는 다음과 같은 형태를 띈다.@Controllerpublic class FreeController {@RequestMapping(..
Spring의 DI 컨테이너 BeanFactory 만들어보기BeanFactory는 스프링이 빈을 생성하고 의존관계를 설정하는 기능을 담당하는 가장 기본적인IOC 컨테이너를 말한다. 이 BeanFacotry를 구현한 많은 컨테이너를 제공하고 있고개발자는 원하는 컨테이너를 선택해 빈을 관리하면 된다.그 중 많이 선택하는 방식이 @Annotation기반에 @Controller, @Service, @Inject 등을 붙인 방식이다. 여기서는 Reflections를 이용해 @Controller, @Service, @Inject 가 붙은 클래스들을 DI 방식을 통해 빈 등록하는 걸 구현해본다. DI는 생성자 DI만 생각한다.스프링에서처럼 다양한 기능을 제공하는 것이 아닌 단순히 빈을 생성하는 기능만 구현한..
이전 글https://brilliantdevelop.tistory.com/206 에서 Local에서 간단한 git 사용을 해봤다.명령어를 통해서 git을 관리할 수도 있지만,git을 좀 더 쉽게 화면으로 관리할 수 있게 해주는 GUI tool이 존재한다.대표적으로는 source tree, git gui 등이 있다.여기서는 Git Kraken을 통해 좀 더 쉽게 Git을 관리해보려고 한다.또 Local뿐만 아니라 원격에서도 관리하기 위해서 Github를 사용할 것이다. 깃허브와 깃 크라켄 연동하기git 초기화하기다음과 같이 폴더에 작업내용을 만들고 git init으로 초기화한다(git kraken은 git init이 되어있지않으면 연동할 수 없다.) git kraken과 Local Reposito..
서론https://inpa.tistory.com/category/GIT같은 블로그를 보면 Git에 대한 자세한 내용을 익힐 수 있다.git의 개념이해와 git 명령어에 대한 정확한 이해와 사용법도 잘 정리되어있다.그래서 이 글은 git에 대한 설명을 하기보다는처음 git을 사용하는 사람들한테 필요한 명령어소개와 merge 충돌상황에 대해 간단한 예제를 보여준다. Git 작동구조 처음쓰는 Git 기본 명령어 git init :- 현재 폴더에서 git을 사용하겠다는 명령어. Git이 현재 폴더를 working directory로 인식. 현재 폴더에 .git 폴더가 생성된다. git status : - 현재 working directory의 파일 상태를 보여줍니다 git log - 지금까지의 co..
@RequestParam @RequestParam은 1개의 HTTP 요청 파라미터를 받기 위해서 사용한다. @RequestParam의 required 속성은 기본값이 true이다. 요청 파라미터의 값이 없다면, 에러가 발생한다. 요청 파라미터가 필수가 아닌 경우에는 required 속성을 false로 한다. 이때는 파라미터의 값이 없다면 에러가 발생하지 않고 null값이 들어간다. int, long 등 null값이 들어갈 수 없는 변수일 경우도 에러가 난다. @RequestMapping("/studentView") @ResponseBody public String studentView(@RequestParam(required = true) Long id){ //요청에 파라미터가 없으면 에러가 난다. re..
1) dependencies 추가 build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-devtools' } 2) Run/Debug Configurations 에서 설정 편집 2-1) 상단에 Application 에서 Edit Configurations 를 클릭하여 “Run/Debug Configurations” 설정 창을 띄웁니다. 2-2) 좌측에서 Spring Boot - Application 선택 2-3) Build and run 항목에서 Modify options 클릭하여 아래 옵션들을 추가 2-4) On ‘Update’ action: Update classed and resources 추가 2-5) On ..
HTTP 통신 HTTP 통신은 다음과 같은 특징을 가진다. 대부분의 파일 형식 전송 가능 클라이언트 - 서버 구조 Stateless Connectionless 대부분의 파일 형식 전송 가능 HTTP란 HyperText Transfer Protocol의 약자로 HTML 파일을 전송하는 프로토콜이라는 의미를 가지지만, 오늘날에는 거의 모든 파일 형식을 HTTP 통신을 이용해 전송 가능하다. 특히 우리가 자주 사용하는 JSON, TEXT, IMAGE 파일은 물론 음성 파일 등도 HTTP를 통해 전송이 가능해졌다. 클라이언트 - 서버 구조 클라이언트 - 서버 구조 클라이언트의 요청이 있을 때 서버가 응답하는 단방향 통신이다. HTTP는 클라이언트에서 서버에 요청을 하는 단방향 통신이다. 서버는 클라이언트에 요청..