Spring: 202개의 글
[Java] Spring Controller 파라미터 값 가져오기 (HttpServletRequest, @RequestParam, @RequestBody, @ModelAttribute) 일반적인 웹 프로젝트 구성에서 Controller 레벨에서 응답을 받고 비지니스 로직을 처리한 후에 다시 View 레벨로 넘어간다. 이 부분에서 파라미터를 어떻게 받고 어떻게 넘기는지에 대한 방법을 정리하고자 한다. HttpServletRequest.getParameter() 아래소스처럼 HttpServletRequest의 getParameter() 메서드를 이용하여 파라미터 값을 가져올 수 있다. 이때 parameter로 보낸 변수명과 getParameter("변수명") 에 들어갈 변수명이 일치해야한다. @Request..
[Java] POI 라이브러리 사용 : 엑셀 다운로드 로직 구현하기 - 의존성 추가 Spring Boot 경우 build.gradle에 Gradle dependency 추가 compile group: 'org.apache.poi', name: 'poi', version: '3.13' Spring 경우 pom.xml Maven dependency 추가 org.apache.poi poi 3.13-beta1 - Haenny 엑셀 다운로드 다음과 같은 두 개의 클래스로 엑셀 다운로드 로직을 구현하였다. 참고로 엑셀에 입력될 데이터는 EgovMap이 아닌 VO List 형태를 전제로 구현하였다. DownloadExcel.java import java.io.IOException; import java.net.URL..
Spring + Webflux Webflux (Reactive) 를 이해하기 위해 sync, async, blocking, non-blocking 차이를 이해해야 했고, async 한 코딩을 위해 CoroutineScope 를 사용하면 편리하다는 점을 알게 되었습니다. Webflux 를 이해하기 위해 일반 sync + blocking 코드를 async + non-blocking 코드로 변환해가며 이해하고자 노력하였습니다. #1 Sync 코드 아래 코드를 보면, 1~3 까지 출력을 두번 합니다. 첫번째 loop문이 끝나야 두번째 loop문을 실행합니다. 순서대로 코드가 실행되며 (sync), 앞의 loop문은 뒤의 loop문을 blocking 한다고 볼 수 있습니다. (1..3).forEach {..
Scouter 신버전 (2.10.0) 에서 WebFlux 를 지원한다고 한다. 다음에 써봐야지! --- 많은 팀, 회사에서 Webflux 를 도입, 테스트, 실패(?) 등을 겪는 이야기를 많이 듣고 있다. 왜 도입을 시도하고, 어떤 이유로 실패를 하는지 등에 대해 정리해보고자 한다. 이론과 실전은 다르기에, 직접 스트레스 테스트를 진행해 보았고, Thread 구조, CPU 사용량, Memory 사용량, 응답시간 등을 보며 이해하고자 노력했다. 알아보고자 하는 내용 1. Webflux (nio) 는 MVC (bio) 보다 빠를까? 2. webflux 에 blocking 로직이 들어가더라도 MVC 보다 빠를까? (blocking: JDBC query 실행 같은 Async 를 지원하지 않는 로직을 의미..
트랜잭션의 전파 설정이란 Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭션을 또 호출한다면 스프링에서는 어떻게 처리하고 있을까요? 새로운 트랜잭션이 생성될 수도 있고, 이미 트랜잭션이 있다면 부모 트랜잭션에 합류할 수도 있을 것입니다. 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다. 전파 설정 옵션 트랜잭션의 전파 설정은 '@Transactional'의 옵션 'propagation'을 통해 설정할 수 있습니다. 각 옵션은 아래와 같습니다. REQUIRED (기본값) 부모 트랜잭션이 존재한다면 부모 트..
Controller에 요청이 들어오기전에 무엇인가를 수행한다는 기능만 보면 interceptor와 filter는 무척 비슷해 보인다. (전, 후처리기 역할을 수행한다.) 위의 사진을 보면 차이점을 쉽게 알 수 있는데, 둘다 컨트롤러 전에 작업을 처리하는 용도로 사용되지만 호출되는 시점이 다르다. 필터(Filter)는 dispatcherServlet으로 요청이 가기전에 실행되고 인터셉터(Interceptor)는 Controller로 요청이 가기전에 실행이된다. Filter DispatcherServlet 앞단에서 정보 처리 J2EE 표준스펙에 정의되어 있는 기능 Interceptor DispatcherServlet에서 Handler(Controller)로 가기전에 정보 처리 SpringFramework에서..
Spring framework Annotation 개념 XML : 분리 - 결합도를 낮추고 유지보수성을 높이기 위해 xml로 설정하였으나 xml이 너무 많아지면 오히려 유지보수성이 낮아지는 아이러니한 상황 발생 - 유지보수성에 방점 - 시스템 전체에 영향을 주고 이후에 변경 가능성이 있는 것은 xml로 설정. https://medium.com/@2xel/spring-framework-annotation-%EA%B0%9C%EB%85%90-c26c15716538 @Component 태그를 추가하면 어노테이션이 적용된 클래스를 빈으로 등록하게된다. 태그는 어노테이션과 관련해서 BeanPostProcessor를 함께 등록한다. @Required(RequiredAnnotationPostProcessor) @Aut..
스프링 시큐리티는 "인증"과 "권한"이 있다. Authentication(인증) : '이것' 이라고 주장하는 주체(user)가 '이것'이 맞는지 확인하는 것 코드에서 Authentication : 인증 과정에 사용되는 핵심 객체 ID/PASSWORD 등 여러 방식으로 인증에 필요한 값이 전달되는 하나의 인터페이스 #인증방식의 종류 1) credential 기반 인증 : 사용자명과 비밀번호를 이용한 방식 2) 이중 인증 (twofactor 인증) : 사용자가 입력한 개인 정보를 인증 후 추가인증(OTP) 하는 방법 3) 하드웨어 인증 : 자동차 키 Spring Security는 credential 기반의 인증을 취한다. 로그인 과정 AuthenticationFilter 필터 리스트 WebAsyncManag..
REST API -웹브라우저에서 실행되는 javascript로 개발한 앱을 위한 서버를 개발할 때, REST API 서비스를 제공하는 서버를 구현한다. REST API 서비스라는 것은 클라이언트의 URL요청에 대해서 JSON형태의 데이터를 출력하는 서버의 메소드를 말한다. Single-Valued Association - 두 개의 테이블 ex) employee와 department에서 외래키(employee 테이블의 departmentId)가 포함된 employee 객체에 department 멤버 변수를 구하는 것이 기본이다.(필수) @Entity public class Employees { .... 생략 ... @ManyToOne @JoinColumn(name ="departmentId") Depart..
import java.security.MessageDigest; public class EncryptionUtils { public static String encryptSHA256(String s) { return encrypt(s, "SHA-256"); } public static String encryptMD5(String s) { return encrypt(s, "MD5"); } public static String encrypt(String s, String messageDigest) { try { MessageDigest md = MessageDigest.getInstance(messageDigest); byte[] passBytes = s.getBytes(); md.reset(); byte[..