Back-end/JAVA,Spring 70

[java] Lombok 사용 및 설치방법 (intelli J 기준)

Lombok 적용 및 설치하기. 롬복은 @Getter, @Setter등의 어노테이션을 사용하는데, 이러한 API를 사용하기 위해서 롬복 라이브러리 (.jar) 파일을 추가 해 주어야 한다. .jar파일을 직접 내려밭아 class path상에 추가해주어도 되지만 메이븐 프로젝트의 경우 pom.xml 에 아래와 같이 의존성을 추가한 후, 메이븐 업데이트를 해주면 된다. pom.xml ) org.projectlombok lombok 1.18.20 compile *직접 lombok.jar를 내려받아 프로젝트에 추가하려면 https://projectlombok.org/download에서 다운로드 할 수 있다. 프로젝트에 롬복 라이브러리 의존성을 추가했다면 이제 @Getter나 @Setter등의 API를 사용할수 ..

[java] Lombok 롬복이란? - 코드 다이어트

Lombok 롬복 이란? Lombok 이란 Java 라이브러리로 반복되는 getter, setter, toString .. 등의 반복 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리 이다. 근데 왜 Chilli 모양일까... Java에서 보통 model 클래스나 Entity 같은 도메인 클래스 등에는 수많은 멤버변수가 있고 이에 대응되는 getter, setter 와 toString() 메서드, 때에따라 멤버변수에 따른 여러개의 생성자를 만들어주게 되는데 거의 대부분 이클립스나 인텔리제이같은 IDE에서 자동생성 기능이 있지만 이 역시도 번거로운 작업이 아닐 수 없다. 뿐만 아니라 코드 자체가 반복 소스코드로 인해 복잡해지게 된다. Lombok은 여러가지 @어노테이션을 제공하고 이를 기반으로 반복 소..

[java] Try-with-resource 문이란? 자동 자원반납.

자바를 이용해 외부 자원에 접근하는 경우 주의점은 외부자원을 사용한 뒤 반드시 반납을 해주어야 한다는 점이다. 파일로 예를들면 파일 출력을 위해서 하드디스크에 저장되어 있는 파일의 내용을 메모리로 가져와야 하는데 파일의 내용을 모두 메모리에 올리는것이 부담인 경우가 많음. 때문에 많은 프로그래밍 언어들이 파일에 대해서 입출력 스트림을 연결한다. 즉, File 인스턴스를 생성하는 순간 파일의 모든 내용이 메모리에 올라오는 것이 아니라 스트림을 연결하여 언제든지 원하는 부분의 원하는 만큼 내용을 읽어 들일수 있도록 하는 것이다. 이 때 연결한 Stream을 자원이라 하고 이것은 시스템에서 제공 해주는 것.(운영체제가 제공) 자원반납과 finally 1. 자원반납 문제 param = new Object(); ..

[Spring] @RequestBody / @ResponseBody 어노테이션 이란?

스프링에서 비동기 처리를 하는 경우 @RequestBody , @ResponseBody를 사용한다. 비동기 처리를 위해 이 어노테이션들은 어떻게 작동할까? 클라이언트와 서버의 비동기 통신 클라이언트에서 서버로 통신하는 메시지를 요청(request) 메시지라고 하며, 서버에서 클라이언트로 통신하는 메시지를 응답(response) 메시지라고 한다. 웹에서 화면전환(새로고침) 없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다. 비동기통신을 하기위해서는 클라이언트에서 서버로 요청 메세지를 보낼 때, 본문에 데이터를 담아서 보내야 하고, 서버에서 클라이언트로 응답을 보낼때에도 본문에 데이터를 담아서 보내야 한다. 이 본문이 바로 body 이다. 즉, 요청본문 requestBody, 응답본문 respons..

[java] 자바 쓰레드 풀 ThreadPoolExecutor 란 ?

쓰레드를 무한으로 늘리게 되면 어떤 문제가 발생하나? - 성능 저하 - 쓰레드도 하나의 자원이므로 계속적으로 소모되면 자원고갈로 인해 메모리풀로 인해 서버가 다운될 수 있다. - 서버 입장에서 가장 중요한 것은 서버가 다운되지 않고 안정적으로 운영되는 것이다. 서버를 어떻게 안정적으로 운영할까? 쓰레드를 미리 만들어 놓고 재사용하는 방식으로 사용한다 == 쓰레드 풀. 왜 쓰레드 풀을 사용할까? 서버가 모든 요청에 대해 Thread를 매번 생성하게되면 성능상 문제가 발생할 수 있다. ThreadPool을 적용해 일정 수의 작업을 동시 처리하도록 한다. ThreadPoolExecutor 자바에서는 ThreadPoolExecutor라는 클래스를 지원해주는데 다음과 같은 생성자들이 존재한다. //ThreadPo..

[java] Thread Pool 쓰레드 풀이란 ?

프로세스 중 병렬 작업처리가 많아지면 스레드 개수가 증가되고 그에따른 스레드생성과 스케줄링으로 인해 CPU가 바빠져 메모리 사용량이 늘어난다. 따라서 시스템성능이 저하되고, 갑작스러운 병렬작업의 폭증에 따른 스레드 폭증을 막으려면 스레드 풀 Thread Pool을 사용해야 한다. Thread Pool 스레드 풀 스레드 풀은 작업처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 작업큐 (Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다. 그렇게 하면 작업처리 요청이 폭증되어도 스레드의 전체개수가 늘어나지 않으므로(제한해서 하나씩 처리하기 때문) 시스템 성능이 급격히 저하되지 않는다. 자바는 스레드풀을 생성하고 사용할 수 있도록 java.util.concurrent.Executors 클래스와 j..

[JAVA] Try-Catch문이란? 예외처리하기/예외던지기

* 선행되면 좋을 참고 포스팅 cheershennah.tistory.com/144 에러/예외처리란? Error/Exception Handling 에러란? Error 프로그램 실행중 어떤원인에 의해 오작동하거나 비정상 종료된 경우. 이를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 발생시점에 따라 컴파일에러 Compile Error, 와 런타임 cheershennah.tistory.com Try-Catch문이란? 1)예외처리하기 Try-catch문은 예외를 처리하기 위한 구문이다. try-catch문의 구조 try { //예외발생할 가능성이 있는 문장 }catch(Exception1 e1) { //Exception1이 발생했을 경우, 이를 처리하지 위한 문장적는다. //보통 이곳에 예외메세지를 출력..

[JAVA]에러/예외처리란? Error/Exception Handling

에러란? Error 프로그램 실행중 어떤원인에 의해 오작동하거나 비정상 종료된 경우. 이를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 발생시점에 따라 컴파일에러 Compile Error, 와 런타임 에러 Runtime Error 로 나눌수 있다. 외에도 논리적 에러 Logical Error가 있다. 컴파일에러 Compile Error 말그대로 컴파일 시 (실행 전) 발생하는 에러. 런타임 에러 Runtime Error 프로그램 실행도중 발생하는 에러. 논리적 에러 Logical Error 컴파일도 잘 되고, 실행도 잘 되지만 의도한 것과 다르게 동작하는 에러. ex) 창고의 재고가 음수가 된다던가, 게임에서 캐릭터가 총알을 맞아도 죽지 않는 경우가 이에 해당됨. 소스를 컴파일하면 컴파일러가 소스..

스프링 시큐리티란? Spring Security

스프링 시큐리티 Spring Security ▶ web.xml에 Spring-security 설정. contextConfigLocation /WEB-INF/config/spring/applicationContext.xml filter-name: 반드시 springSecurityFilterChain 으로 준다. 스프링시큐리티 내부에서 해당이름으로 클래스를 찾기때문. 해당필터가 적용될 URL패턴은 모든패턴을 의미하는 /* 로 준다. * 주의 패턴을 예를들어 사용하는 웹페이지 확장자 .do등 이라고 해서 *.do를 주면안됨. Spring security에서는 내부적으로 작업위해 사용되는 url들이 있는데 이 url들이 뒤에 확장자가 붙지 않는다. ex) 로그인 인증관련 작업 url은 j_spring_sercu..

[spring] 어노테이션이란? @modelAttribute

@ModelAttribute = command object 이미지와 같이 @ModelAttribute는 클라이언트의 파라미터를 완벽하게 이해하고 있는 자바빈 객체 요구. 이 객체에 @ModelAttribute라는 어노테이션을 붙이면 자동으로 바인딩 해주고 중간과정은 모두 자동으로 생략해준다. @Controller public class HomeController { @RequestMapping (value"/", method = RequestMethod.GET){ . . . . } } 위 예시보면 바인딩 과정이 코드에 전혀 나타나있지 않고 전달인자에 @ModelAttribute를 넣는 것만으로 모두 생각이 가능해졌다. 만약 이 코드를 서블릿으로 대체해 보자면 아래와 같다 public class HomeC..