BackEnd

· BackEnd/Java
컴파일 타임 에러 (Compile-time Error) 컴파일 시점에 발생하는 에러 이클립스에서는 소스코드를 저장하는 즉시 주로 문법 에러(Syntax Error) 런타임 에러 (Runtime Error) 프로그램 수행 중 발생하는 에러 수행할 수 없는 작업을 시도할 때 발생 주로 Exception(예외) 처리 된다. NullPointerException : null 값을 참조해서 코드 수행 시 ArrayIndexOutOfBoundsException : 배열에 Index 지정을 잘못 했을 때 ArithmeticException : 불가능한 산술연산 수행 시 논리 에러 (Logical Error) 프로그램이 에러없이 잘 작동한다. 프로그램의 흐름, 동작이 개발자의 의도대로 수행되지 않을 때 ex) 무한루프..
· BackEnd/Java
try ~ catch 구문 MultiCatch try { // 예외가 발생할 수 있는 코드 } catch(Exception e) { // 예외 처리 코드 } finally { // finally 는 생략 가능하다. // 특수한 경우 사용하게 되는데, try단에서 예외가 발생하여 프로그램이 종료 된 경우 // 실행이 안된 남아있는 코드들 중 반드시 실행해야하는 코드를 finally에 넣는다. // 프로그램이 예외가 없어 종료되지 않아도 무조건 실행된다. // 주로 Checked Exception 에서 사용하는 경우가 많다. // 자원해제할 때 사용하는 코드. } 일반적인 try catch package kh20200312; public class Exception03_Try { public static v..
· BackEnd/Java
서블릿의 동작 원리 클라이언트 요청 -> Apache Tomcat 서버(WEB + WAS) -> 서블릿 컨테이너 -> 서블릿 객체 -> service() 호출 -> doGet() 또는 doPost() 호출 -> 서블릿 컨테이너 -> Apache Tomcat 서버 -> 클라이언트 응답 서블릿 컨테이너, Servlet Container 서블릿 처리(동작) 환경을 구축하는 역할 서블릿을 생성하고 실행시켜주는 역할을 수행한다. WAS서버와 서블릿 객체 사이의 중간다리 역할을 수행한다. HttpServletRequest(HTTP 요청객체), HttpServletResponse(HTTP 응답객체) 두 가지를 생성하여 서블릿에 전달한다. 요청 URL-Pattern과 서블릿 객체를 1:1로 따로 매핑해놓고 요청을 기다..
· BackEnd/Java
세션, Session 서버가 클라이언트의 요청을 식별하는 방법 javax.servlet.http.HttpSession 객체를 사용한다 request(요청객체)를 통해서 HttpSession 객체를 얻어와 사용하게 된다 ex) HttpSession session = request.getSession(); 서버가 사용자의 정보를 유지하기 위한 기술 ex) 로그인 상태 쿠키보다 상태 정보에 대한 유지력, 보안성이 좋다 쿠키 정보는 클라이언트에 저장되고, 언제든 지워질 위험이 있다 세션 정보는 서버가 관리한다 클라이언트(브라우저) 별로 따로 관리한다 세션 정보는 기본적으로 메모리로 관리한다 세션의 동작 원리 클라이언트의 요청(첫 접속)이 들어오면 서버는 Session ID 를 생성한다. 서버가 응답하면서 Set..
· BackEnd/Java
쿠키, Cookie 웹 서버가 클라이언트(브라우저)에 정보를 저장하는 기술 웹 서버에서 필요할 때 쿠키 정보를 꺼내서 사용할 수 있게 만들어 준다 자바에서는 javax.servlet.http.Cookie 객체를 이용하여 관리한다. 쿠키 정보는 name = value 쌍으로 이루어진 정보이다. 여러개의 쿠키를 저장할 수 있다. 브라우저는 도메인별로 쿠키를 저장하고 관리한다. 쿠키는 유지시간(MaxAge)을 가지고 있다. - 쿠키 보관 기간 기본값은 무한이며 초단위로 설정 가능하다. 쿠키의 기본 동작 흐름 클라이언트(브라우저)는 서버에 요청을 보낼 때 항상 쿠키 정보를 포함하여 전달한다. 요청 정보에 포함 시킨다 없으면 보내지 않는다 서버는 클라이언트의 요청데이터에서 쿠키 정보를 확인할 수 있다. 응답 헤더..
Spring jUnit 테스트 Spring 테스트 환경 구축 spring-test, hamcrest-library, hamcrest-all, mockito-all Dependency 추가 작업 중이던 프로젝트 우클릭 - Build Path - Libraries 이동 - 오른쪽 메뉴에 Add Library 클릭 - jUnit 선택 - jUnit library version : jUnit 5 확인하고 Finish - Apply and Close 마이바티스를 연동해서 사용 중이라면 config.xml 파일에서 mappers 태그 지워주기 스프링 폴더의 root-context.xml 로 이동해서 sqlSessionFactory 에 소스 추가해주기 mybatis 폴더를 src/test/resources 로 복사 ..
Spring MVC Legacy Project 생성하고 구성하기 Eclipse > new > other > Spring > Spring Legacy Project Project name 설정 > Templates 영역 가장 하단에 Spring MVC Project 선택 Specific Setting 할 때 com.xxx.xxx 형식으로 주소를 입력해야하는데 최소한 3Depth 로 구성하는것이 좋다, 세번째 Depth 가 Context Path 로 지정된다 ex) com.heonil.project -> project 가 Context Path -> localhost:9999/project Tomcat 에 올리고 사용 pom.xml 환경설정 java 1.6 > java 1.8 SpringFramework 3..
Spring 첫 프로젝트 만들기 File - new - other 선택 Spring 폴더 찾기 Spring Legacy Project 선택 제일 밑에 Spring MVC Project 선택 프로젝트 이름 입력 Top-level Package 입력 3단계로 이루어진 기본 패키지 (xcode 에서 com.username.www ~~ 쓰는것과 똑같은 원리) Finish 스프링 프로젝트에 적용되어 있는 JRE 버전 바꾸기 프로젝트 폴더 우클릭 Build Path 메뉴 - Configure build path 클릭 왼쪽 사이드 메뉴 중에서 Project Facets 선택 Java 항목에서 1.6 을 1.8 로 변경 선택 Apply 변경 확인은 왼쪽 사이드 메뉴나 프로젝트 우클릭 - Build Path - Libr..
Spring Transaction 속성 @Transactional(readOnly=true, isolation=Isolation.DEFALUT, rollbackFor=Exception.class) propagation 이미 진행 중인 트랜잭션이 존재할 때 새로운 쿼리가 호출 될 경우 어떻게 처리할 지 설정한다 @Transactional(propagation=Propagation.REQUIRED) REQUIRED(기본값) - 진행중인 트랜잭션이 있다면 새로운 쿼리가 트랜잭션에 포함되고 진행중인 트랜잭션이 없다면 새로운 트랜잭션을 생성한다 REQUIRED_NEW - 항상 새로운 트랜잭션을 시작한다 SUPPORT - 이미 시작된 트랜잭션이 있으면 트랜잭션에 포함하고 없으면 트랜잭션 없이 진행한다 NOT_SUP..
· BackEnd/Java
일반화 프로그래밍, 제네릭 자바에서는 일반화 프로그래밍 이라는 용어는 많이 사용하지 않고 제네릭이라고 한다. 일반화 프로그래밍은 C언어 쪽에 더 가깝다. 일반화 프로그래밍 자료형을 일반화시켜 프로그래밍 하는 것 int double float boolean String(참조형 포함) Point Person .. 등등 위의 자료형들의 특성을 무시하고 데이터타입의 이름을 정해 일반화하고 개발하는 것 자바에서는 제네릭을 이용하여 구현한다. // ex) public void out (String var) { } public void out (Integer var) { } public void out (Boolean var) { } // 세개를 오버라이딩하는데 내용이 매우 흡사하다. // 이럴 때 제네릭을 사용한다..
· BackEnd/Java
메소드 오버로딩 메소드 오버로딩(Method Overloading), 정해져있는 한계량보다 더더더더더더더 같은 이름의 메소드를 여러 개 정의하는 것. 비슷한 기능을 하는 추가 메소드를 개발하기 위해 별도의 이름을 사용하지않고 기존의 메소드 이름을 사용할 수 있게 해준다. 메소드 오버로딩 성립 조건 매개변수가 달라야한다. (정확히는 데이터 타입이 달라야 함) 매개변수에 들어간 데이터타입의 갯수가 달라야한다. 반환 데이터타입은 오버로딩과 상관 없다. ex) public class Overloading_01 { private int x; private int y; // 멤버필드 x, y 를 출력하는 메소드 구현 public void display() { // 매개변수가 없는 Display System.out...
· BackEnd/Java
멀티 스레드, Multi-Thread 프로그램, Program 실행 파일 (exe 파일) 하드디스크에 저장되어 있는 상태 프로세스, Process 실행 중인 프로그램 메모리(RAM)에 실행 상태로 로드된 프로그램 스레드, Thread 프로세스의 작업 단위(실행가능 단위) 멀티스레드, Multi-Thread 스레드가 여러개인 프로세스 상태 약간 다른 개념들이지만 멀티 프로세스, Multi Process 프로세스가 여러 개인 프로그램 프로세서, Processor 프로세스를 동작시키는 장치, CPU 멀티 프로세서, Multi-Processor 다중처리 컴퓨터 프로세서가 여러개인 시스템(컴퓨터) 멀티 코어 프로세서 코어가 여러개인 프로세서 듀얼 코어, 쿼드 코어, 헥사 코어 .. 등등
· BackEnd/Java
네트워크와 프로토콜 Node(노드)들의 연결망 노드 : 네트워크에 연결된 시스템 컴퓨터, 주변장치, 네트워크장비, 등 노드의 구분 노드(컴퓨터)들의 역할을 고려해서 구분 서버 Server : 다른 노드에게 서비스를 제공하는 노드 클라이언트 Client : 서비스를 이용하는(제공받는) 노드 전용 서버를 두는 방식을 CS방식이라고 한다( Client - Server ) 대부분 CS 방식을 사용한다. 서버기반 네트워크 모델 서버시스템 구축과 관리에 비용이 많이 든다. 비용 감당만 가능하다면 안정적인 서비스가 가능하다. 데이터의 관리와 보안이 수월하다. 서버, 클라이언트 역할 구분이 없으면 P2P(Peer to Peer)라고 한다. 서버구축, 운용, 관리비용 절감이 가능하다. 자원의 활용이 극대화 된다. 자원에..
· BackEnd/Java
멀티 스레딩 관련 클래스 interface Runnable run() 추상 메소드를 가지고 있다. run() 메소드는 스레드화 될 수 있는 코드를 정의할 수 있다. 스레드 코드를 작성(정의)하는 메소드 class Thread implements Runnable run() 메소드를 가지고 있다. 스레드를 제어하고 관리하는 메소드들을 정의하고 있다. 스레드의 정보를 확인할 수 있게 해준다. 스레드를 실행시킬 수 있다. start() 메소드 사용 스레드 제어 메소드 스레드의 동작을 제어하는 메소드 스레드 생명 주기(Life Cycle)에 영향을 준다. public static void sleep(long millis) throws InterruptedException 주어진 밀리초만큼 sleep을 호출한 스레..
· BackEnd/Java
클래스의 개념 클래스 기능 클래스 - 메인메소드 없이 기능만 가지고 있는 클래스 멤버 필드 - 데이터의 정보, 속성만 가지고 있다. 멤버 메소드 - 기능, 행위, 동작을 한다. 추상 클래스 - 일반 클래스가 완성된 설계도라면 추상 클래스는 미완성 설계도와 같다. 흐름상 서브클래스에서 값을 바꿔야 하는 상황이 발생한다면 추상 클래스, 메소드를 만든다. 변할 가능성이 있는 기능들은 추상클래스와 메소드로 구현하고 변할 가능성이 없는 기능들은 일반 클래스로 만든다. 추상 메소드 - 미완성 되어 있는 메소드를 서브클래스(자식클래스)에서 구현한다. 추상 클래스에서 미구현한 '접근제한자 abstract void 메소드명();' 을 상속받아 오버라이딩하고 알맞은 기능을 구현하여 사용할 수 있도록 한다!
헌일