DB에는 컬럼명이 보통 스네이크형식 이며 board_no 이렇게 들어간다. 하지만 서버에서 객체의 멤버 변수의 이름은 카멜케이스로 boardNo이렇게 들어간다. 그렇기 때문에 returnType을 VO로 지정했을 경우 명칭이 달라서 데이터를 못받아오는 경우가 생기기 마련이다. 하나의 방법으로 별칭을 지정해서 select board_no as boardNo로 할 수도 있겠지만 너무 번거로운 작업이기 때문에 자동으로 변환해주는 방법을 설정할 것이다. 1. application.yml 설정하기 mybatis: config-location: classpath:mybatis-config.xml //혹시 오류가 난다면 여기 부분 제거 configuration: map-underscore-to-camel-case: ..

1. gradle에 의존성 추가 본 작업은 gradle로 했습니다. 그렇기에 제일 먼저 디펜던시를 추가해 줍니다. dependencies { compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2' compile 'org.springframework.boot:spring-boot-starter-jdbc' compile 'mysql:mysql-connector-java' } 2. MySQL관련 config 설정 src > main > resources에 application.yml의 파일을 생성해줍니다. spring: datasource: url: jdbc:mysql://ip주소:port번호/DB이름?characterEncoding=utf8 ..

스프링 환경에서는 특별한 설정을 하지않으면 싱글톤 레지스트리로 생성된다. 왜냐하면 매번 인스턴스를 생성할 경우에 초당 100건의 요청이 있을 때 시간 단위로만 놓고봐도 엄청난 양의 인스턴스가 생겨 과부하가 걸리기 마련이기 때문이다. 하지만 자바의 기본적인 싱글톤 패턴의 구현 방식은 여러 가지 단점이 있기 때문에, 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공하는데 그것이 싱글톤 레지스트리다. 싱글톤 레지스트리의 장점 스태틱 메소드와 private 생성자를 사용해야 하는 비정상적인 클래스가 아니라 평범한 자바 클래스를 싱글톤으로 활용하게 해준다는 점이다. 덕분에 싱글톤 방식으로 사용될 애플리케이션 클래스라도 public 생성자를 가질 수 있다. 싱글톤으로 만들어지기 때문에 주의할 점 ..

DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트다. 사용자 정보를 저장할 때는 자바빈 규약을 따르는 오브젝트를 이용하면 편리하다. 먼저 사용자 정보를 저장할 User 클래스를 만든다. 자바빈은 디폴트 생성자가 있어야한다. 파라미터가 없는 디폴트 생성자는 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다. 그리고 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 set으로 시작하는 수정자 메소드와 get으로 시작하는 접근자 메소드를 이용해 수정 또는 조회할 수 있다. 사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스를 만들어보자. 사용자 정보를 관리하는 DAO이므로 UserDao라는 이름으로 ..

의존성 주입(DI) 또는 인젝션(injection) 어떤 클래스가 필요로 하는 컴포넌트를 외부에서 생성한 후, 내부에서 사용 가능하게 만들어 주는 과정 DI의 개요 의존성 주입이라고도 하며, IoC라고 하는 소프트웨어 디자인 패턴 중 하나다. 이때 IoC는 인스턴스를 제어하는 주도권이 역전된다는 의미로 사용되는데, 컴포넌트를 구성하는 인스턴스의 생성과 의존 관계의 연결 처리를 해당 소스코드가 아닌 DI컨테이너에서 대신 해주기 때문에 제어가 역전됐다고 보는 것이다. 따라서 지금까지 인스턴스를 애플리케이션에서 직접 생성해서 쓰는 방법 대신 DI 컨테이너가 만들어주는 인슽너스를 가져오는 방법을 사용할 수 있다. 이때 취득한 인스턴스가 의존하는 또 다른 인스턴스 역시 DI 컨테이너에서 관리되기 때문에 연쇄적으로..
Connectionless Protocol 서버의 부하를 줄일 수 있는 장점이 있으나, 클라이언트 요청 시마다 서버와 매번 새로운 연결이 생성되기 때문에 일반적인 로그인 상태 유지, 장바구니 등의 기능을 구현하기 어렵다. 이러한 불편함을 해결하기 위해서 세션과 쿠키를 이용한다. 세션과 쿠키는 클라이언트와 서버의 연결 상태를 유지해주는 방법으로, 세션은 서버에서 연결 정보를 관리하는 반면 쿠키는 클라이언트에서 연결 정보를 관리하는데 차이가 있다. 세션이란? 일정 시간동안 같은 사용자(정확하게는 브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아..

서블릿의 실행 과정 1. init() 호출 -컨테이너에서 서블릿 객체를 생성한 다음에 호출한다. service() 이전에 실행 -서블릿 객체를 초기화 -초기화할 내용(DB 접속 등)이 있는 경우 재정의 2. service() 호출 -클라이언트의 요청 후 컨테이너에서 쓰레드를 이용하여 호출 -요청의 HTTP 메소드(GET, POST)를 참조하여 해당 메소드(doGet(), doPost()) 호출 판단 -거의 재정의 하지않음 3. doGet() / doPost() 호출 -service() 메소드에서 HTTP 메소드(GET, POST)를 참조하여 호출 -비즈니스 로직을 구현 또는 호출 -두 메소드 중 하나는 반드시 재정의하여 구현해야한다. 4. destroy() 호출 -컨테이너에서 서블릿 객체를 제거할 때 호..

서블릿에 대하여 웹 브라우저의 요청을 받아 해당하는 웹 페이지를 찾아서 보내주는 일을 하는 컴퓨터를 웹 서버라고 한다. 웹 서버는 웹 브라우저로부터 URL을 받아서 그에 해당하는 HTML 문서를 찾아서 웹 브라우저로 보내주는 일을 한다. 웹 서버는 HTML문서 파일을 찾아서 보내주는 일 뿐만 아니라 HTML문서를 생성하는 프로그램을 호출해서 그 프로그램의 실행 결과를 보내주는 일도 한다. 이때 호출 되는 프로그램을 "웹 애플리케이션이라" 한다. 최초의 앱 애플리케이션 기술인 CGI에서는 웹 애플리케이션을 웹 서버와 동등한 독립적인 프로그램 형태로 작성함 하지만 CGI에는 커다란 두 가지 문제점이 있었다. 첫째 : 독립적인 프로그램을 실행하기 위해서는 시스템 자원이 많이 필요했다. 둘때 : 운영체제에 의해..